From 48c49cbabbeffb3044a0ffc80ad48352d4f6054c Mon Sep 17 00:00:00 2001 From: Trevor Miller Date: Tue, 16 Jun 2026 19:44:30 -0500 Subject: [PATCH 1/4] feat(sdk): in-app notification inbox types + API methods Adds the SDK surface for a per-user in-app notification inbox: - iNotificationDoc / NotificationDoc + NotificationType - extend iNotificationPreferences with in-app channel + per-event flags - notification websocket message types (websockets.ts) - BitBadgesAPI methods: getNotifications, getUnreadNotificationCount, markNotificationsRead, updateNotificationPreferences (+ routes + request types) Co-Authored-By: Claude Opus 4.8 (1M context) --- .../src/api-indexer/BitBadgesApi.ts | 112 ++++++++++++++ .../src/api-indexer/docs-types/docs.ts | 60 ++++++++ .../src/api-indexer/docs-types/index.ts | 1 + .../src/api-indexer/docs-types/interfaces.ts | 53 +++++++ .../src/api-indexer/docs-types/websockets.ts | 31 ++++ .../src/api-indexer/requests/requests.ts | 145 ++++++++++++++++++ .../src/api-indexer/requests/routes.ts | 5 + 7 files changed, 407 insertions(+) create mode 100644 packages/bitbadgesjs-sdk/src/api-indexer/docs-types/websockets.ts diff --git a/packages/bitbadgesjs-sdk/src/api-indexer/BitBadgesApi.ts b/packages/bitbadgesjs-sdk/src/api-indexer/BitBadgesApi.ts index a388331076..b56783a2e6 100644 --- a/packages/bitbadgesjs-sdk/src/api-indexer/BitBadgesApi.ts +++ b/packages/bitbadgesjs-sdk/src/api-indexer/BitBadgesApi.ts @@ -112,6 +112,10 @@ import { SignOutSuccessResponse, SimulateClaimSuccessResponse, SimulateTxSuccessResponse, + GetNotificationsSuccessResponse, + GetUnreadNotificationCountSuccessResponse, + MarkNotificationsReadSuccessResponse, + UpdateNotificationPreferencesSuccessResponse, UpdateAccountInfoSuccessResponse, UpdateClaimSuccessResponse, UpdateDeveloperAppSuccessResponse, @@ -310,6 +314,14 @@ import { iSimulateClaimSuccessResponse, iSimulateTxPayload, iSimulateTxSuccessResponse, + iGetNotificationsPayload, + iGetNotificationsSuccessResponse, + iGetUnreadNotificationCountPayload, + iGetUnreadNotificationCountSuccessResponse, + iMarkNotificationsReadPayload, + iMarkNotificationsReadSuccessResponse, + iUpdateNotificationPreferencesPayload, + iUpdateNotificationPreferencesSuccessResponse, iUpdateAccountInfoPayload, iUpdateAccountInfoSuccessResponse, iUpdateClaimPayload, @@ -3428,6 +3440,106 @@ export class BitBadgesAdminAPI extends BitBadgesAPI { } } + /** + * Gets the signed-in user's in-app notifications (inbox), newest first. + * + * **API Route**: `GET /api/v0/notifications` + * + * **Authentication**: Must be signed in. + */ + public async getNotifications(payload?: iGetNotificationsPayload): Promise> { + try { + const validateRes: typia.IValidation = typia.validate(payload ?? {}); + if (!validateRes.success) { + throw new Error('Invalid payload: ' + JSON.stringify(validateRes.errors)); + } + + const response = await this.axios.get>( + `${this.BACKEND_URL}${BitBadgesApiRoutes.GetNotificationsRoute()}`, + { params: payload } + ); + return new GetNotificationsSuccessResponse(response.data).convert(this.ConvertFunction); + } catch (error) { + await this.handleApiError(error); + return Promise.reject(error); + } + } + + /** + * Gets the signed-in user's unread notification count. + * + * **API Route**: `GET /api/v0/notifications/unreadCount` + * + * **Authentication**: Must be signed in. + */ + public async getUnreadNotificationCount( + payload?: iGetUnreadNotificationCountPayload + ): Promise { + try { + const response = await this.axios.get( + `${this.BACKEND_URL}${BitBadgesApiRoutes.GetUnreadNotificationCountRoute()}`, + { params: payload ?? {} } + ); + return new GetUnreadNotificationCountSuccessResponse(response.data); + } catch (error) { + await this.handleApiError(error); + return Promise.reject(error); + } + } + + /** + * Marks notifications as read/unread for the signed-in user. + * + * **API Route**: `POST /api/v0/notifications/read` + * + * **Authentication**: Must be signed in. + */ + public async markNotificationsRead(payload: iMarkNotificationsReadPayload): Promise { + try { + const validateRes: typia.IValidation = typia.validate(payload ?? {}); + if (!validateRes.success) { + throw new Error('Invalid payload: ' + JSON.stringify(validateRes.errors)); + } + + const response = await this.axios.post( + `${this.BACKEND_URL}${BitBadgesApiRoutes.MarkNotificationsReadRoute()}`, + payload + ); + return new MarkNotificationsReadSuccessResponse(response.data); + } catch (error) { + await this.handleApiError(error); + return Promise.reject(error); + } + } + + /** + * Updates the signed-in user's in-app notification preferences. + * + * **API Route**: `POST /api/v0/notifications/preferences` + * + * **Authentication**: Must be signed in. + */ + public async updateNotificationPreferences( + payload: iUpdateNotificationPreferencesPayload + ): Promise { + try { + const validateRes: typia.IValidation = + typia.validate(payload ?? ({} as iUpdateNotificationPreferencesPayload)); + if (!validateRes.success) { + throw new Error('Invalid payload: ' + JSON.stringify(validateRes.errors)); + } + + const response = await this.axios.post( + `${this.BACKEND_URL}${BitBadgesApiRoutes.UpdateNotificationPreferencesRoute()}`, + payload + ); + return new UpdateNotificationPreferencesSuccessResponse(response.data); + } catch (error) { + await this.handleApiError(error); + return Promise.reject(error); + } + } + /** * A generic route for verifying SIWBB requests. Used as a helper if implementing on your own. * diff --git a/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/docs.ts b/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/docs.ts index 270b9a5801..3777a6dfcf 100644 --- a/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/docs.ts +++ b/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/docs.ts @@ -79,6 +79,8 @@ import { type iEmailVerificationStatus, type iFetchDoc, type iIPFSTotalsDoc, + type iNotificationDoc, + type NotificationType, type iLatestBlockStatus, type iMerkleChallengeTrackerDoc, type iNotificationPreferences, @@ -472,6 +474,9 @@ export class NotificationPreferences claimActivity?: boolean; ignoreIfInitiator?: boolean; signInAlertsEnabled?: boolean; + inAppEnabled?: boolean; + inAppTransferActivity?: boolean; + inAppClaimActivity?: boolean; }; constructor(data: iNotificationPreferences) { @@ -487,6 +492,61 @@ export class NotificationPreferences } } +/** + * @inheritDoc iNotificationDoc + * @category Indexer + */ +export class NotificationDoc extends BaseNumberTypeClass> implements iNotificationDoc { + _docId: string; + _id?: string; + bitbadgesAddress: BitBadgesAddress; + type: NotificationType; + read: boolean; + createdAt: T; + collectionId?: CollectionId; + txHash?: string; + from?: BitBadgesAddress; + initiatedBy?: BitBadgesAddress; + title?: string; + message?: string; + link?: string; + data?: { + amount?: string; + denom?: string; + tokenIds?: string; + collectionName?: string; + counterparty?: BitBadgesAddress; + claimId?: string; + points?: string; + }; + + constructor(data: iNotificationDoc) { + super(); + this._docId = data._docId; + this._id = data._id; + this.bitbadgesAddress = data.bitbadgesAddress; + this.type = data.type; + this.read = data.read; + this.createdAt = data.createdAt; + this.collectionId = data.collectionId; + this.txHash = data.txHash; + this.from = data.from; + this.initiatedBy = data.initiatedBy; + this.title = data.title; + this.message = data.message; + this.link = data.link; + this.data = data.data; + } + + getNumberFieldNames(): string[] { + return ['createdAt']; + } + + convert(convertFunction: (item: NumberType) => U, options?: ConvertOptions): NotificationDoc { + return convertClassPropertiesAndMaintainNumberTypes(this, convertFunction, options) as NotificationDoc; + } +} + /** * @inheritDoc iEmailVerificationStatus * @category Accounts diff --git a/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/index.ts b/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/index.ts index abf58b5d7c..c042a165fe 100644 --- a/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/index.ts +++ b/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/index.ts @@ -1,3 +1,4 @@ export * from './activity.js'; export * from './docs.js'; export * from './interfaces.js'; +export * from './websockets.js'; diff --git a/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/interfaces.ts b/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/interfaces.ts index e430f8d7e4..13b6011024 100644 --- a/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/interfaces.ts +++ b/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/interfaces.ts @@ -99,6 +99,59 @@ export interface iNotificationPreferences { claimActivity?: boolean; ignoreIfInitiator?: boolean; signInAlertsEnabled?: boolean; + /** Master toggle for the in-app notification inbox. Defaults to enabled when undefined. */ + inAppEnabled?: boolean; + /** In-app inbox: receive transfer notifications. Defaults to enabled when undefined. */ + inAppTransferActivity?: boolean; + /** In-app inbox: receive claim notifications. Defaults to enabled when undefined. */ + inAppClaimActivity?: boolean; + }; +} + +/** + * The in-app notification categories (inbox event types). + * + * @category Interfaces + */ +export type NotificationType = 'transfer' | 'claim' | 'points' | 'list' | 'system'; + +/** + * An in-app notification (inbox entry). One document per recipient per event. + * + * @category Interfaces + */ +export interface iNotificationDoc extends Doc { + /** The recipient of this notification. */ + bitbadgesAddress: BitBadgesAddress; + /** The category of the notification (drives icon + rendering). */ + type: NotificationType; + /** Whether the recipient has read this notification. */ + read: boolean; + /** When the notification was created (UNIX ms). */ + createdAt: UNIXMilliTimestamp; + /** The collection this notification relates to, if any. */ + collectionId?: CollectionId; + /** The on-chain transaction hash that produced this notification, if any. */ + txHash?: string; + /** The counterparty / sender, if any. */ + from?: BitBadgesAddress; + /** The address that initiated the underlying transaction, if any. */ + initiatedBy?: BitBadgesAddress; + /** Short headline for the notification. */ + title?: string; + /** Body text for the notification. */ + message?: string; + /** Optional in-app link to navigate to when clicked. */ + link?: string; + /** Denormalized, display-ready payload for rich rendering (no number-type fields). */ + data?: { + amount?: string; + denom?: string; + tokenIds?: string; + collectionName?: string; + counterparty?: BitBadgesAddress; + claimId?: string; + points?: string; }; } diff --git a/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/websockets.ts b/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/websockets.ts new file mode 100644 index 0000000000..d621a4c997 --- /dev/null +++ b/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/websockets.ts @@ -0,0 +1,31 @@ +import type { NumberType } from '@/common/string-numbers.js'; +import type { iNotificationDoc } from './interfaces.js'; + +/** + * Messages pushed from the indexer websocket to a signed-in client on their + * per-user notification channel. The channel is bound to the authenticated + * session on the websocket upgrade — clients never specify which address's + * notifications to receive, so these messages are always for the connected user. + * + * @category Websockets + */ +export type NotificationWsServerMessage = + | { + type: 'notification'; + /** A newly created in-app notification for the connected user. */ + notification: iNotificationDoc; + } + | { + type: 'unread_count'; + /** The connected user's current unread count. */ + count: number; + }; + +/** + * Control messages a client may send on the notification websocket. + * Subscription is implicit (derived from the authenticated session), so the + * only client message is a heartbeat keepalive. + * + * @category Websockets + */ +export type NotificationWsClientMessage = { type: 'heartbeat' }; diff --git a/packages/bitbadgesjs-sdk/src/api-indexer/requests/requests.ts b/packages/bitbadgesjs-sdk/src/api-indexer/requests/requests.ts index a99f9dea1b..80ff19655a 100644 --- a/packages/bitbadgesjs-sdk/src/api-indexer/requests/requests.ts +++ b/packages/bitbadgesjs-sdk/src/api-indexer/requests/requests.ts @@ -16,6 +16,7 @@ import { DynamicDataDoc, DynamicStoreDocWithDetails, DynamicStoreValueDoc, + NotificationDoc, PluginDoc, SIWBBRequestDoc, StatusDoc, @@ -38,6 +39,7 @@ import { iEstimatedCost, iInheritMetadataFrom, iLinkedTo, + iNotificationDoc, iPointsActivityDoc, iSIWBBRequestDoc, iUtilityPageContent, @@ -49,6 +51,7 @@ import { type JsonBodyInputSchema, type JsonBodyInputWithValue, type NativeAddress, + type NotificationType, type OAuthScopeDetails, type PluginPresetType, type SiwbbMessage, @@ -916,6 +919,148 @@ export class UpdateAccountInfoSuccessResponse extends CustomTypeClass { + /** The notifications for the signed-in user, newest first. */ + notifications: iNotificationDoc[]; + /** Pagination info for fetching the next page. */ + pagination: PaginationInfo; +} + +/** + * @inheritDoc iGetNotificationsSuccessResponse + * @category API Requests / Responses + */ +export class GetNotificationsSuccessResponse + extends BaseNumberTypeClass> + implements iGetNotificationsSuccessResponse +{ + notifications: NotificationDoc[]; + pagination: PaginationInfo; + + constructor(data: iGetNotificationsSuccessResponse) { + super(); + this.notifications = data.notifications.map((doc) => new NotificationDoc(doc)); + this.pagination = data.pagination; + } + + convert(convertFunction: (item: NumberType) => U, options?: ConvertOptions): GetNotificationsSuccessResponse { + return convertClassPropertiesAndMaintainNumberTypes(this, convertFunction, options) as GetNotificationsSuccessResponse; + } +} + +/** + * @category API Requests / Responses + */ +export interface iGetUnreadNotificationCountPayload {} + +/** + * @category API Requests / Responses + */ +export interface iGetUnreadNotificationCountSuccessResponse { + /** The number of unread notifications for the signed-in user. */ + count: number; +} + +/** + * @category API Requests / Responses + */ +export class GetUnreadNotificationCountSuccessResponse + extends CustomTypeClass + implements iGetUnreadNotificationCountSuccessResponse +{ + count: number; + + constructor(data: iGetUnreadNotificationCountSuccessResponse) { + super(); + this.count = data.count; + } +} + +/** + * @category API Requests / Responses + */ +export interface iMarkNotificationsReadPayload { + /** Specific notification ids to mark read. Ignored if `all` is true. */ + notificationIds?: string[]; + /** Mark every notification read. */ + all?: boolean; + /** Mark as read (default true) or unread (false). */ + read?: boolean; +} + +/** + * @category API Requests / Responses + */ +export interface iMarkNotificationsReadSuccessResponse { + /** The number of notifications updated. */ + updated: number; +} + +/** + * @category API Requests / Responses + */ +export class MarkNotificationsReadSuccessResponse + extends CustomTypeClass + implements iMarkNotificationsReadSuccessResponse +{ + updated: number; + + constructor(data: iMarkNotificationsReadSuccessResponse) { + super(); + this.updated = data.updated; + } +} + +/** + * @category API Requests / Responses + */ +export interface iUpdateNotificationPreferencesPayload { + /** The in-app notification preferences to set. Only provided keys are updated. */ + preferences: { + inAppEnabled?: boolean; + inAppTransferActivity?: boolean; + inAppClaimActivity?: boolean; + ignoreIfInitiator?: boolean; + }; +} + +/** + * @category API Requests / Responses + */ +export interface iUpdateNotificationPreferencesSuccessResponse { + success: boolean; +} + +/** + * @category API Requests / Responses + */ +export class UpdateNotificationPreferencesSuccessResponse + extends CustomTypeClass + implements iUpdateNotificationPreferencesSuccessResponse +{ + success: boolean; + + constructor(data: iUpdateNotificationPreferencesSuccessResponse) { + super(); + this.success = data.success; + } +} + /** * @category API Requests / Responses */ diff --git a/packages/bitbadgesjs-sdk/src/api-indexer/requests/routes.ts b/packages/bitbadgesjs-sdk/src/api-indexer/requests/routes.ts index fd13cbafec..7e3957c3a6 100644 --- a/packages/bitbadgesjs-sdk/src/api-indexer/requests/routes.ts +++ b/packages/bitbadgesjs-sdk/src/api-indexer/requests/routes.ts @@ -50,6 +50,11 @@ export class BitBadgesApiRoutes { static GetAccountRoute = () => '/api/v0/user'; static UpdateAccountInfoRoute = () => '/api/v0/user/updateAccount'; + static GetNotificationsRoute = () => '/api/v0/notifications'; + static GetUnreadNotificationCountRoute = () => '/api/v0/notifications/unreadCount'; + static MarkNotificationsReadRoute = () => '/api/v0/notifications/read'; + static UpdateNotificationPreferencesRoute = () => '/api/v0/notifications/preferences'; + static GetApiKeysRoute = () => '/api/v0/apiKeys/fetch'; static CRUDApiKeysRoute = () => '/api/v0/apiKeys'; static RotateApiKeyRoute = () => '/api/v0/apiKeys/rotate'; From cab80e50add678fe50a6f929c22c4867b75bd2fa Mon Sep 17 00:00:00 2001 From: Trevor Miller Date: Wed, 17 Jun 2026 08:39:19 -0500 Subject: [PATCH 2/4] feat(sdk): embed source TransferActivityDoc on transfer notifications Add optional `activity?: iTransferActivityDoc` to iNotificationDoc / NotificationDoc. The constructor wraps it in a real TransferActivityDoc and the generic convert() recurses into it, so the frontend can render transfer notifications with the standard transfer-activity components without a refetch (and it stays self-contained for realtime-pushed rows). Co-Authored-By: Claude Opus 4.8 --- packages/bitbadgesjs-sdk/bun.lockb | Bin 452429 -> 456208 bytes .../src/api-indexer/docs-types/docs.ts | 4 ++++ .../src/api-indexer/docs-types/interfaces.ts | 6 ++++++ 3 files changed, 10 insertions(+) diff --git a/packages/bitbadgesjs-sdk/bun.lockb b/packages/bitbadgesjs-sdk/bun.lockb index c7168fb7dd2cb854178d4ac95978a4048ea97098..a4f839ff4c1a7c3aa48bb1ceba9838bbc171f6df 100755 GIT binary patch delta 90432 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

EwMe5=8C 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 extends BaseNumberTypeClass; data?: { amount?: string; denom?: string; @@ -535,6 +538,7 @@ export class NotificationDoc extends BaseNumberTypeClass extends Doc { message?: string; /** Optional in-app link to navigate to when clicked. */ link?: string; + /** + * The source transfer activity this notification was generated from, embedded so the + * frontend can render it with the standard transfer-activity components without a refetch. + * Only set for `type: 'transfer'` notifications. + */ + activity?: iTransferActivityDoc; /** Denormalized, display-ready payload for rich rendering (no number-type fields). */ data?: { amount?: string; From d0cf5338d5f4f8d6098db7b5ba4999eefd1b75f4 Mon Sep 17 00:00:00 2001 From: Trevor Miller Date: Wed, 17 Jun 2026 09:21:34 -0500 Subject: [PATCH 3/4] feat(sdk)!: standardize NotificationDoc (envelope + typed payload) + bank_send Restructure NotificationDoc into a standardized presentation envelope (title [now required], message, link, collectionId, address) plus a type-specific `payload` (iNotificationPayload) surfaced only in the drilldown. `type` is the discriminator; add `bank_send`. Replaces the flat activity/data/txHash/from fields. This is the extension point for new inbox event types. Co-Authored-By: Claude Opus 4.8 --- .../src/api-indexer/docs-types/docs.ts | 33 +++---- .../src/api-indexer/docs-types/interfaces.ts | 86 ++++++++++++------- 2 files changed, 67 insertions(+), 52 deletions(-) diff --git a/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/docs.ts b/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/docs.ts index 7266aeb0c1..a0f5343090 100644 --- a/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/docs.ts +++ b/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/docs.ts @@ -81,6 +81,7 @@ import { type iFetchDoc, type iIPFSTotalsDoc, type iNotificationDoc, + type iNotificationPayload, type iTransferActivityDoc, type NotificationType, type iLatestBlockStatus, @@ -505,23 +506,12 @@ export class NotificationDoc extends BaseNumberTypeClass; - data?: { - amount?: string; - denom?: string; - tokenIds?: string; - collectionName?: string; - counterparty?: BitBadgesAddress; - claimId?: string; - points?: string; - }; + collectionId?: CollectionId; + address?: BitBadgesAddress; + payload?: iNotificationPayload; constructor(data: iNotificationDoc) { super(); @@ -531,15 +521,16 @@ export class NotificationDoc extends BaseNumberTypeClass { } /** - * The in-app notification categories (inbox event types). + * The in-app notification categories (inbox event types). This is the discriminator + * for {@link iNotificationDoc} — every type shares the same presentation envelope and + * carries its own structured detail in {@link iNotificationPayload}. New event types + * (e.g. swaps, votes) are added here + given a `payload` shape + a frontend renderer. * * @category Interfaces */ -export type NotificationType = 'transfer' | 'claim' | 'points' | 'list' | 'system'; +export type NotificationType = 'transfer' | 'bank_send' | 'claim' | 'points' | 'list' | 'system'; + +/** + * A coin (denom) amount, as display-ready strings (no number-type conversion needed). + * + * @category Interfaces + */ +export interface iNotificationCoin { + amount: string; + denom: string; +} + +/** + * Type-specific detail for a notification's drilldown view. The populated key is + * determined by {@link iNotificationDoc.type}; renderers narrow on `type`. This is the + * extension point: a new notification type adds its structured detail here. + * + * @category Interfaces + */ +export interface iNotificationPayload { + /** `transfer`: the source on-chain token transfer activity (embedded for rich rendering). */ + activity?: iTransferActivityDoc; + /** `bank_send`: a native coin (denom) transfer. */ + bankSend?: { + fromAddress: BitBadgesAddress; + toAddress: BitBadgesAddress; + amount: iNotificationCoin[]; + txHash?: string; + }; + /** Misc display-ready scalars for any type (tokenIds, claimId, points, …). */ + extra?: Record; +} /** * An in-app notification (inbox entry). One document per recipient per event. * + * Shape = a **standardized envelope** (rendered identically for every type in the inbox + * list) + a **type-specific `payload`** surfaced only in the drilldown. `type` is the + * discriminator (see {@link NotificationType}). + * * @category Interfaces */ export interface iNotificationDoc extends Doc { /** The recipient of this notification. */ bitbadgesAddress: BitBadgesAddress; - /** The category of the notification (drives icon + rendering). */ + /** The category of the notification — the discriminator for `payload` + rendering. */ type: NotificationType; /** Whether the recipient has read this notification. */ read: boolean; /** When the notification was created (UNIX ms). */ createdAt: UNIXMilliTimestamp; - /** The collection this notification relates to, if any. */ - collectionId?: CollectionId; - /** The on-chain transaction hash that produced this notification, if any. */ - txHash?: string; - /** The counterparty / sender, if any. */ - from?: BitBadgesAddress; - /** The address that initiated the underlying transaction, if any. */ - initiatedBy?: BitBadgesAddress; - /** Short headline for the notification. */ - title?: string; - /** Body text for the notification. */ + + // --- Standardized presentation envelope (consistent across all types) --- + /** Headline for the inbox row. */ + title: string; + /** Optional one-line body for the inbox row. */ message?: string; - /** Optional in-app link to navigate to when clicked. */ + /** Optional in-app link to navigate to (e.g. "view source"). */ link?: string; - /** - * The source transfer activity this notification was generated from, embedded so the - * frontend can render it with the standard transfer-activity components without a refetch. - * Only set for `type: 'transfer'` notifications. - */ - activity?: iTransferActivityDoc; - /** Denormalized, display-ready payload for rich rendering (no number-type fields). */ - data?: { - amount?: string; - denom?: string; - tokenIds?: string; - collectionName?: string; - counterparty?: BitBadgesAddress; - claimId?: string; - points?: string; - }; + /** Subject for the row's leading avatar: a collection (token avatar). */ + collectionId?: CollectionId; + /** Subject for the row's leading avatar: an address (user avatar / counterparty). */ + address?: BitBadgesAddress; + + // --- Type-specific drilldown detail (shape determined by `type`) --- + /** Structured detail surfaced when the row is expanded/drilled into. */ + payload?: iNotificationPayload; } /** From 2ce7a3024e4bca609b241beb7684632017b62c71 Mon Sep 17 00:00:00 2001 From: Trevor Miller Date: Fri, 19 Jun 2026 10:13:33 -0500 Subject: [PATCH 4/4] feat(sdk): add intent_satisfied notification type + payload New NotificationType 'intent_satisfied' with an intentSatisfied payload (approvalId, approverAddress/maker, filler, collectionId, coins, tokenIds, legCount) for collapsing a multi-leg intent fill into one inbox event. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../src/api-indexer/docs-types/interfaces.ts | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/interfaces.ts b/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/interfaces.ts index 28a3f6d8ab..b0021129d7 100644 --- a/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/interfaces.ts +++ b/packages/bitbadgesjs-sdk/src/api-indexer/docs-types/interfaces.ts @@ -116,7 +116,7 @@ export interface iNotificationPreferences { * * @category Interfaces */ -export type NotificationType = 'transfer' | 'bank_send' | 'claim' | 'points' | 'list' | 'system'; +export type NotificationType = 'transfer' | 'bank_send' | 'claim' | 'points' | 'list' | 'system' | 'intent_satisfied'; /** * A coin (denom) amount, as display-ready strings (no number-type conversion needed). @@ -145,6 +145,23 @@ export interface iNotificationPayload { amount: iNotificationCoin[]; txHash?: string; }; + /** `intent_satisfied`: a standing intent (approval) was filled — multiple on-chain legs collapsed into one event. */ + intentSatisfied?: { + /** The intent approval that was consumed. */ + approvalId: string; + /** Who set up the intent (the maker / "my intent was satisfied" recipient). */ + approverAddress: BitBadgesAddress; + /** Who filled the intent (the taker / initiator). */ + filler: BitBadgesAddress; + collectionId: CollectionId; + txHash?: string; + /** Coins that moved as part of the fill (payment/payout), display-ready. */ + coins: iNotificationCoin[]; + /** Compact summary of token IDs involved, e.g. "1-3, 7". */ + tokenIds?: string; + /** How many on-chain transfer legs were collapsed into this single notification. */ + legCount: number; + }; /** Misc display-ready scalars for any type (tokenIds, claimId, points, …). */ extra?: Record; } @@ -701,7 +718,6 @@ export interface iProfileDoc extends Doc { /** The notifications of the account */ notifications?: iNotificationPreferences; - } /** @@ -876,14 +892,7 @@ export interface iBalanceDocWithDetails extends iBalanceDo /** * @category Claims */ -export type ClaimIntegrationPluginType = - | 'codes' - | 'password' - | 'numUses' - | 'transferTimes' - | 'initiatedBy' - | 'whitelist' - | string; +export type ClaimIntegrationPluginType = 'codes' | 'password' | 'numUses' | 'transferTimes' | 'initiatedBy' | 'whitelist' | string; /** * @category Claims @@ -1761,16 +1770,12 @@ export type DynamicDataHandlerType = 'addresses'; /** * @category Interfaces */ -export type DynamicDataHandlerData = Q extends 'addresses' - ? { addresses: string[] } - : never; +export type DynamicDataHandlerData = Q extends 'addresses' ? { addresses: string[] } : never; /** * @category Interfaces */ -export type DynamicDataHandlerActionPayload = Q extends 'addresses' - ? { address: string } - : never; +export type DynamicDataHandlerActionPayload = Q extends 'addresses' ? { address: string } : never; /** * @category Interfaces