@xmtp/browser-sdk 0.0.22 → 1.0.0-rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/index.d.ts +70 -61
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/workers/client.js +1 -1
- package/dist/workers/client.js.map +1 -1
- package/dist/workers/utils.js +1 -1
- package/dist/workers/utils.js.map +1 -1
- package/package.json +4 -4
- package/src/Client.ts +44 -40
- package/src/Conversation.ts +6 -0
- package/src/Conversations.ts +28 -18
- package/src/Group.ts +7 -6
- package/src/Utils.ts +6 -5
- package/src/WorkerClient.ts +15 -17
- package/src/WorkerConversation.ts +11 -6
- package/src/WorkerConversations.ts +13 -9
- package/src/index.ts +5 -1
- package/src/types/clientEvents.ts +24 -15
- package/src/types/utilsEvents.ts +4 -3
- package/src/utils/conversions.ts +8 -7
- package/src/utils/createClient.ts +9 -13
- package/src/utils/signer.ts +10 -5
- package/src/workers/client.ts +37 -32
- package/src/workers/utils.ts +14 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sources":["../../src/utils/conversions.ts","../../src/constants.ts","../../src/WorkerConversation.ts","../../src/WorkerConversations.ts","../../src/WorkerClient.ts","../../src/utils/createClient.ts","../../src/workers/client.ts"],"sourcesContent":["import {\n ContentTypeId,\n type EncodedContent,\n} from \"@xmtp/content-type-primitives\";\nimport {\n Consent,\n CreateDMOptions,\n CreateGroupOptions,\n GroupMember,\n GroupPermissionsOptions,\n ListConversationsOptions,\n ListMessagesOptions,\n MessageDisappearingSettings,\n PermissionPolicySet,\n ContentTypeId as WasmContentTypeId,\n EncodedContent as WasmEncodedContent,\n type ConsentEntityType,\n type ConsentState,\n type ContentType,\n type DeliveryStatus,\n type GroupMessageKind,\n type HmacKey,\n type InboxState,\n type Installation,\n type Message,\n type PermissionLevel,\n type PermissionPolicy,\n type SortDirection,\n} from \"@xmtp/wasm-bindings\";\nimport type { WorkerConversation } from \"@/WorkerConversation\";\n\nexport const toContentTypeId = (\n contentTypeId: WasmContentTypeId,\n): ContentTypeId =>\n new ContentTypeId({\n authorityId: contentTypeId.authorityId,\n typeId: contentTypeId.typeId,\n versionMajor: contentTypeId.versionMajor,\n versionMinor: contentTypeId.versionMinor,\n });\n\nexport const fromContentTypeId = (\n contentTypeId: ContentTypeId,\n): WasmContentTypeId =>\n new WasmContentTypeId(\n contentTypeId.authorityId,\n contentTypeId.typeId,\n contentTypeId.versionMajor,\n contentTypeId.versionMinor,\n );\n\nexport type SafeContentTypeId = {\n authorityId: string;\n typeId: string;\n versionMajor: number;\n versionMinor: number;\n};\n\nexport const toSafeContentTypeId = (\n contentTypeId: ContentTypeId,\n): SafeContentTypeId => ({\n authorityId: contentTypeId.authorityId,\n typeId: contentTypeId.typeId,\n versionMajor: contentTypeId.versionMajor,\n versionMinor: contentTypeId.versionMinor,\n});\n\nexport const fromSafeContentTypeId = (\n contentTypeId: SafeContentTypeId,\n): ContentTypeId =>\n new ContentTypeId({\n authorityId: contentTypeId.authorityId,\n typeId: contentTypeId.typeId,\n versionMajor: contentTypeId.versionMajor,\n versionMinor: contentTypeId.versionMinor,\n });\n\nexport const toEncodedContent = (\n content: WasmEncodedContent,\n): EncodedContent => ({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n type: toContentTypeId(content.type!),\n parameters: Object.fromEntries(content.parameters as Map<string, string>),\n fallback: content.fallback,\n compression: content.compression,\n content: content.content,\n});\n\nexport const fromEncodedContent = (\n content: EncodedContent,\n): WasmEncodedContent =>\n new WasmEncodedContent(\n fromContentTypeId(content.type),\n new Map(Object.entries(content.parameters)),\n content.fallback,\n content.compression,\n content.content,\n );\n\nexport type SafeEncodedContent = {\n type: SafeContentTypeId;\n parameters: Record<string, string>;\n fallback?: string;\n compression?: number;\n content: Uint8Array;\n};\n\nexport const toSafeEncodedContent = (\n content: EncodedContent,\n): SafeEncodedContent => ({\n type: toSafeContentTypeId(content.type),\n parameters: content.parameters,\n fallback: content.fallback,\n compression: content.compression,\n content: content.content,\n});\n\nexport const fromSafeEncodedContent = (\n content: SafeEncodedContent,\n): EncodedContent => ({\n type: fromSafeContentTypeId(content.type),\n parameters: content.parameters,\n fallback: content.fallback,\n compression: content.compression,\n content: content.content,\n});\n\nexport type SafeMessage = {\n content: SafeEncodedContent;\n convoId: string;\n deliveryStatus: DeliveryStatus;\n id: string;\n kind: GroupMessageKind;\n senderInboxId: string;\n sentAtNs: bigint;\n};\n\nexport const toSafeMessage = (message: Message): SafeMessage => ({\n content: toSafeEncodedContent(toEncodedContent(message.content)),\n convoId: message.convoId,\n deliveryStatus: message.deliveryStatus,\n id: message.id,\n kind: message.kind,\n senderInboxId: message.senderInboxId,\n sentAtNs: message.sentAtNs,\n});\n\nexport type SafeListMessagesOptions = {\n contentTypes?: ContentType[];\n deliveryStatus?: DeliveryStatus;\n direction?: SortDirection;\n limit?: bigint;\n sentAfterNs?: bigint;\n sentBeforeNs?: bigint;\n};\n\nexport const toSafeListMessagesOptions = (\n options: ListMessagesOptions,\n): SafeListMessagesOptions => ({\n contentTypes: options.contentTypes,\n deliveryStatus: options.deliveryStatus,\n direction: options.direction,\n limit: options.limit,\n sentAfterNs: options.sentAfterNs,\n sentBeforeNs: options.sentBeforeNs,\n});\n\nexport const fromSafeListMessagesOptions = (\n options: SafeListMessagesOptions,\n): ListMessagesOptions =>\n new ListMessagesOptions(\n options.sentBeforeNs,\n options.sentAfterNs,\n options.limit,\n options.deliveryStatus,\n options.direction,\n options.contentTypes,\n );\n\nexport type SafeListConversationsOptions = {\n consentStates?: ConsentState[];\n createdAfterNs?: bigint;\n createdBeforeNs?: bigint;\n includeDuplicateDms?: boolean;\n limit?: bigint;\n};\n\nexport const toSafeListConversationsOptions = (\n options: ListConversationsOptions,\n): SafeListConversationsOptions => ({\n consentStates: options.consentStates,\n createdAfterNs: options.createdAfterNs,\n createdBeforeNs: options.createdBeforeNs,\n includeDuplicateDms: options.includeDuplicateDms,\n limit: options.limit,\n});\n\nexport const fromSafeListConversationsOptions = (\n options: SafeListConversationsOptions,\n): ListConversationsOptions =>\n new ListConversationsOptions(\n options.consentStates,\n options.createdAfterNs,\n options.createdBeforeNs,\n options.includeDuplicateDms ?? false,\n options.limit,\n );\n\nexport type SafePermissionPolicySet = {\n addAdminPolicy: PermissionPolicy;\n addMemberPolicy: PermissionPolicy;\n removeAdminPolicy: PermissionPolicy;\n removeMemberPolicy: PermissionPolicy;\n updateGroupDescriptionPolicy: PermissionPolicy;\n updateGroupImageUrlSquarePolicy: PermissionPolicy;\n updateGroupNamePolicy: PermissionPolicy;\n updateMessageDisappearingPolicy: PermissionPolicy;\n};\n\nexport const toSafePermissionPolicySet = (\n policySet: PermissionPolicySet,\n): SafePermissionPolicySet => ({\n addAdminPolicy: policySet.addAdminPolicy,\n addMemberPolicy: policySet.addMemberPolicy,\n removeAdminPolicy: policySet.removeAdminPolicy,\n removeMemberPolicy: policySet.removeMemberPolicy,\n updateGroupDescriptionPolicy: policySet.updateGroupDescriptionPolicy,\n updateGroupImageUrlSquarePolicy: policySet.updateGroupImageUrlSquarePolicy,\n updateGroupNamePolicy: policySet.updateGroupNamePolicy,\n updateMessageDisappearingPolicy: policySet.updateMessageDisappearingPolicy,\n});\n\nexport const fromSafePermissionPolicySet = (\n policySet: SafePermissionPolicySet,\n): PermissionPolicySet =>\n new PermissionPolicySet(\n policySet.addMemberPolicy,\n policySet.removeMemberPolicy,\n policySet.addAdminPolicy,\n policySet.removeAdminPolicy,\n policySet.updateGroupNamePolicy,\n policySet.updateGroupDescriptionPolicy,\n policySet.updateGroupImageUrlSquarePolicy,\n policySet.updateMessageDisappearingPolicy,\n );\n\nexport type SafeCreateGroupOptions = {\n customPermissionPolicySet?: SafePermissionPolicySet;\n description?: string;\n imageUrlSquare?: string;\n messageDisappearingSettings?: SafeMessageDisappearingSettings;\n name?: string;\n permissions?: GroupPermissionsOptions;\n};\n\nexport const toSafeCreateGroupOptions = (\n options: CreateGroupOptions,\n): SafeCreateGroupOptions => ({\n customPermissionPolicySet: options.customPermissionPolicySet,\n description: options.groupDescription,\n imageUrlSquare: options.groupImageUrlSquare,\n messageDisappearingSettings: options.messageDisappearingSettings\n ? toSafeMessageDisappearingSettings(options.messageDisappearingSettings)\n : undefined,\n name: options.groupName,\n permissions: options.permissions,\n});\n\nexport const fromSafeCreateGroupOptions = (\n options: SafeCreateGroupOptions,\n): CreateGroupOptions =>\n new CreateGroupOptions(\n options.permissions,\n options.name,\n options.imageUrlSquare,\n options.description,\n // only include custom policy set if permissions are set to CustomPolicy\n options.customPermissionPolicySet &&\n options.permissions === GroupPermissionsOptions.CustomPolicy\n ? fromSafePermissionPolicySet(options.customPermissionPolicySet)\n : undefined,\n options.messageDisappearingSettings\n ? fromSafeMessageDisappearingSettings(options.messageDisappearingSettings)\n : undefined,\n );\n\nexport type SafeCreateDmOptions = {\n messageDisappearingSettings?: SafeMessageDisappearingSettings;\n};\n\nexport const toSafeCreateDmOptions = (\n options: CreateDMOptions,\n): SafeCreateDmOptions => ({\n messageDisappearingSettings: options.messageDisappearingSettings\n ? toSafeMessageDisappearingSettings(options.messageDisappearingSettings)\n : undefined,\n});\n\nexport const fromSafeCreateDmOptions = (\n options: SafeCreateDmOptions,\n): CreateDMOptions =>\n new CreateDMOptions(\n options.messageDisappearingSettings\n ? fromSafeMessageDisappearingSettings(options.messageDisappearingSettings)\n : undefined,\n );\n\nexport type SafeConversation = {\n id: string;\n name: string;\n imageUrl: string;\n description: string;\n permissions: {\n policyType: GroupPermissionsOptions;\n policySet: {\n addAdminPolicy: PermissionPolicy;\n addMemberPolicy: PermissionPolicy;\n removeAdminPolicy: PermissionPolicy;\n removeMemberPolicy: PermissionPolicy;\n updateGroupDescriptionPolicy: PermissionPolicy;\n updateGroupImageUrlSquarePolicy: PermissionPolicy;\n updateGroupNamePolicy: PermissionPolicy;\n updateMessageDisappearingPolicy: PermissionPolicy;\n };\n };\n isActive: boolean;\n addedByInboxId: string;\n metadata: {\n creatorInboxId: string;\n conversationType: string;\n };\n admins: string[];\n superAdmins: string[];\n createdAtNs: bigint;\n};\n\nexport const toSafeConversation = async (\n conversation: WorkerConversation,\n): Promise<SafeConversation> => {\n const id = conversation.id;\n const name = conversation.name;\n const imageUrl = conversation.imageUrl;\n const description = conversation.description;\n const permissions = conversation.permissions;\n const isActive = conversation.isActive;\n const addedByInboxId = conversation.addedByInboxId;\n const metadata = await conversation.metadata();\n const admins = conversation.admins;\n const superAdmins = conversation.superAdmins;\n const createdAtNs = conversation.createdAtNs;\n const policyType = permissions.policyType;\n const policySet = permissions.policySet;\n return {\n id,\n name,\n imageUrl,\n description,\n permissions: {\n policyType,\n policySet: {\n addAdminPolicy: policySet.addAdminPolicy,\n addMemberPolicy: policySet.addMemberPolicy,\n removeAdminPolicy: policySet.removeAdminPolicy,\n removeMemberPolicy: policySet.removeMemberPolicy,\n updateGroupDescriptionPolicy: policySet.updateGroupDescriptionPolicy,\n updateGroupImageUrlSquarePolicy:\n policySet.updateGroupImageUrlSquarePolicy,\n updateGroupNamePolicy: policySet.updateGroupNamePolicy,\n updateMessageDisappearingPolicy:\n policySet.updateMessageDisappearingPolicy,\n },\n },\n isActive,\n addedByInboxId,\n metadata,\n admins,\n superAdmins,\n createdAtNs,\n };\n};\n\nexport type SafeInstallation = {\n bytes: Uint8Array;\n clientTimestampNs?: bigint;\n id: string;\n};\n\nexport const toSafeInstallation = (\n installation: Installation,\n): SafeInstallation => ({\n bytes: installation.bytes,\n clientTimestampNs: installation.clientTimestampNs,\n id: installation.id,\n});\n\nexport type SafeInboxState = {\n accountAddresses: string[];\n inboxId: string;\n installations: SafeInstallation[];\n recoveryAddress: string;\n};\n\nexport const toSafeInboxState = (inboxState: InboxState): SafeInboxState => ({\n accountAddresses: inboxState.accountAddresses,\n inboxId: inboxState.inboxId,\n installations: inboxState.installations.map(toSafeInstallation),\n recoveryAddress: inboxState.recoveryAddress,\n});\n\nexport type SafeConsent = {\n entity: string;\n entityType: ConsentEntityType;\n state: ConsentState;\n};\n\nexport const toSafeConsent = (consent: Consent): SafeConsent => ({\n entity: consent.entity,\n entityType: consent.entityType,\n state: consent.state,\n});\n\nexport const fromSafeConsent = (consent: SafeConsent): Consent =>\n new Consent(consent.entityType, consent.state, consent.entity);\n\nexport type SafeGroupMember = {\n accountAddresses: string[];\n consentState: ConsentState;\n inboxId: string;\n installationIds: string[];\n permissionLevel: PermissionLevel;\n};\n\nexport const toSafeGroupMember = (member: GroupMember): SafeGroupMember => ({\n accountAddresses: member.accountAddresses,\n consentState: member.consentState,\n inboxId: member.inboxId,\n installationIds: member.installationIds,\n permissionLevel: member.permissionLevel,\n});\n\nexport const fromSafeGroupMember = (member: SafeGroupMember): GroupMember =>\n new GroupMember(\n member.inboxId,\n member.accountAddresses,\n member.installationIds,\n member.permissionLevel,\n member.consentState,\n );\n\nexport type SafeHmacKey = {\n key: Uint8Array;\n epoch: bigint;\n};\n\nexport const toSafeHmacKey = (hmacKey: HmacKey): SafeHmacKey => ({\n key: hmacKey.key,\n epoch: hmacKey.epoch,\n});\n\nexport type HmacKeys = Map<string, HmacKey[]>;\nexport type SafeHmacKeys = Record<string, SafeHmacKey[]>;\n\nexport type SafeMessageDisappearingSettings = {\n fromNs: bigint;\n inNs: bigint;\n};\n\nexport const toSafeMessageDisappearingSettings = (\n settings: MessageDisappearingSettings,\n): SafeMessageDisappearingSettings => ({\n fromNs: settings.fromNs,\n inNs: settings.inNs,\n});\n\nexport const fromSafeMessageDisappearingSettings = (\n settings: SafeMessageDisappearingSettings,\n): MessageDisappearingSettings =>\n new MessageDisappearingSettings(settings.fromNs, settings.inNs);\n","export const ApiUrls = {\n local: \"http://localhost:5555\",\n dev: \"https://dev.xmtp.network\",\n production: \"https://production.xmtp.network\",\n} as const;\n\nexport const HistorySyncUrls = {\n local: \"http://localhost:5558\",\n dev: \"https://message-history.dev.ephemera.network\",\n production: \"https://message-history.production.ephemera.network\",\n} as const;\n","import {\n MessageDisappearingSettings,\n type ConsentState,\n type Conversation,\n type EncodedContent,\n type GroupMember,\n type Message,\n type MetadataField,\n type PermissionPolicy,\n type PermissionUpdateType,\n} from \"@xmtp/wasm-bindings\";\nimport { type StreamCallback } from \"@/AsyncStream\";\nimport {\n fromSafeListMessagesOptions,\n toSafeGroupMember,\n type SafeListMessagesOptions,\n} from \"@/utils/conversions\";\nimport type { WorkerClient } from \"@/WorkerClient\";\n\nexport class WorkerConversation {\n // eslint-disable-next-line no-unused-private-class-members\n #client: WorkerClient;\n\n #group: Conversation;\n\n constructor(client: WorkerClient, group: Conversation) {\n this.#client = client;\n this.#group = group;\n }\n\n get id() {\n return this.#group.id();\n }\n\n get name() {\n return this.#group.groupName();\n }\n\n async updateName(name: string) {\n return this.#group.updateGroupName(name);\n }\n\n get imageUrl() {\n return this.#group.groupImageUrlSquare();\n }\n\n async updateImageUrl(imageUrl: string) {\n return this.#group.updateGroupImageUrlSquare(imageUrl);\n }\n\n get description() {\n return this.#group.groupDescription();\n }\n\n async updateDescription(description: string) {\n return this.#group.updateGroupDescription(description);\n }\n\n get isActive() {\n return this.#group.isActive();\n }\n\n get addedByInboxId() {\n return this.#group.addedByInboxId();\n }\n\n get createdAtNs() {\n return this.#group.createdAtNs();\n }\n\n async metadata() {\n const metadata = await this.#group.groupMetadata();\n return {\n creatorInboxId: metadata.creatorInboxId(),\n conversationType: metadata.conversationType(),\n };\n }\n\n async members() {\n const members = (await this.#group.listMembers()) as GroupMember[];\n return members.map((member) => toSafeGroupMember(member));\n }\n\n get admins() {\n return this.#group.adminList();\n }\n\n get superAdmins() {\n return this.#group.superAdminList();\n }\n\n get permissions() {\n const permissions = this.#group.groupPermissions();\n return {\n policyType: permissions.policyType(),\n policySet: permissions.policySet(),\n };\n }\n\n async updatePermission(\n permissionType: PermissionUpdateType,\n policy: PermissionPolicy,\n metadataField?: MetadataField,\n ) {\n return this.#group.updatePermissionPolicy(\n permissionType,\n policy,\n metadataField,\n );\n }\n\n isAdmin(inboxId: string) {\n return this.#group.isAdmin(inboxId);\n }\n\n isSuperAdmin(inboxId: string) {\n return this.#group.isSuperAdmin(inboxId);\n }\n\n async sync() {\n return this.#group.sync();\n }\n\n async addMembers(accountAddresses: string[]) {\n return this.#group.addMembers(accountAddresses);\n }\n\n async addMembersByInboxId(inboxIds: string[]) {\n return this.#group.addMembersByInboxId(inboxIds);\n }\n\n async removeMembers(accountAddresses: string[]) {\n return this.#group.removeMembers(accountAddresses);\n }\n\n async removeMembersByInboxId(inboxIds: string[]) {\n return this.#group.removeMembersByInboxId(inboxIds);\n }\n\n async addAdmin(inboxId: string) {\n return this.#group.addAdmin(inboxId);\n }\n\n async removeAdmin(inboxId: string) {\n return this.#group.removeAdmin(inboxId);\n }\n\n async addSuperAdmin(inboxId: string) {\n return this.#group.addSuperAdmin(inboxId);\n }\n\n async removeSuperAdmin(inboxId: string) {\n return this.#group.removeSuperAdmin(inboxId);\n }\n\n async publishMessages() {\n return this.#group.publishMessages();\n }\n\n sendOptimistic(encodedContent: EncodedContent) {\n return this.#group.sendOptimistic(encodedContent);\n }\n\n async send(encodedContent: EncodedContent) {\n return this.#group.send(encodedContent);\n }\n\n async messages(options?: SafeListMessagesOptions) {\n return this.#group.findMessages(\n options ? fromSafeListMessagesOptions(options) : undefined,\n );\n }\n\n get consentState() {\n return this.#group.consentState();\n }\n\n updateConsentState(state: ConsentState) {\n this.#group.updateConsentState(state);\n }\n\n dmPeerInboxId() {\n return this.#group.dmPeerInboxId();\n }\n\n messageDisappearingSettings() {\n return this.#group.messageDisappearingSettings();\n }\n\n async updateMessageDisappearingSettings(fromNs: bigint, inNs: bigint) {\n const settings = new MessageDisappearingSettings(fromNs, inNs);\n return this.#group.updateMessageDisappearingSettings(settings);\n }\n\n async removeMessageDisappearingSettings() {\n return this.#group.removeMessageDisappearingSettings();\n }\n\n isMessageDisappearingEnabled() {\n return this.#group.isMessageDisappearingEnabled();\n }\n\n stream(callback?: StreamCallback<Message>) {\n const on_message = (message: Message) => {\n void callback?.(null, message);\n };\n const on_error = (error: Error | null) => {\n void callback?.(error, undefined);\n };\n return this.#group.stream({ on_message, on_error });\n }\n}\n","import {\n ConversationType,\n type Consent,\n type ConsentState,\n type Conversation,\n type ConversationListItem,\n type Conversations,\n type Message,\n type UserPreference,\n} from \"@xmtp/wasm-bindings\";\nimport type { StreamCallback } from \"@/AsyncStream\";\nimport {\n fromSafeCreateDmOptions,\n fromSafeCreateGroupOptions,\n fromSafeListConversationsOptions,\n type HmacKeys,\n type SafeCreateDmOptions,\n type SafeCreateGroupOptions,\n type SafeListConversationsOptions,\n} from \"@/utils/conversions\";\nimport type { WorkerClient } from \"@/WorkerClient\";\nimport { WorkerConversation } from \"@/WorkerConversation\";\n\nexport class WorkerConversations {\n #client: WorkerClient;\n\n #conversations: Conversations;\n\n constructor(client: WorkerClient, conversations: Conversations) {\n this.#client = client;\n this.#conversations = conversations;\n }\n\n async sync() {\n return this.#conversations.sync();\n }\n\n async syncAll(consentStates?: ConsentState[]) {\n return this.#conversations.syncAllConversations(consentStates);\n }\n\n getConversationById(id: string) {\n try {\n const group = this.#conversations.findGroupById(id);\n // findGroupById will throw if group is not found\n return new WorkerConversation(this.#client, group);\n } catch {\n return undefined;\n }\n }\n\n getMessageById(id: string) {\n try {\n // findMessageById will throw if message is not found\n return this.#conversations.findMessageById(id);\n } catch {\n return undefined;\n }\n }\n\n getDmByInboxId(inboxId: string) {\n try {\n const group = this.#conversations.findDmByTargetInboxId(inboxId);\n return new WorkerConversation(this.#client, group);\n } catch {\n return undefined;\n }\n }\n\n list(options?: SafeListConversationsOptions) {\n const groups = this.#conversations.list(\n options ? fromSafeListConversationsOptions(options) : undefined,\n ) as ConversationListItem[];\n return groups.map(\n (item) => new WorkerConversation(this.#client, item.conversation),\n );\n }\n\n listGroups(\n options?: Omit<SafeListConversationsOptions, \"conversation_type\">,\n ) {\n const groups = this.#conversations.listGroups(\n options ? fromSafeListConversationsOptions(options) : undefined,\n ) as ConversationListItem[];\n return groups.map(\n (item) => new WorkerConversation(this.#client, item.conversation),\n );\n }\n\n listDms(options?: Omit<SafeListConversationsOptions, \"conversation_type\">) {\n const groups = this.#conversations.listDms(\n options ? fromSafeListConversationsOptions(options) : undefined,\n ) as ConversationListItem[];\n return groups.map(\n (item) => new WorkerConversation(this.#client, item.conversation),\n );\n }\n\n async newGroup(accountAddresses: string[], options?: SafeCreateGroupOptions) {\n const group = await this.#conversations.createGroup(\n accountAddresses,\n options ? fromSafeCreateGroupOptions(options) : undefined,\n );\n return new WorkerConversation(this.#client, group);\n }\n\n async newGroupByInboxIds(\n inboxIds: string[],\n options?: SafeCreateGroupOptions,\n ) {\n const group = await this.#conversations.createGroupByInboxIds(\n inboxIds,\n options ? fromSafeCreateGroupOptions(options) : undefined,\n );\n return new WorkerConversation(this.#client, group);\n }\n\n async newDm(accountAddress: string, options?: SafeCreateDmOptions) {\n const group = await this.#conversations.createDm(\n accountAddress,\n options ? fromSafeCreateDmOptions(options) : undefined,\n );\n return new WorkerConversation(this.#client, group);\n }\n\n async newDmByInboxId(inboxId: string, options?: SafeCreateDmOptions) {\n const group = await this.#conversations.createDmByInboxId(\n inboxId,\n options ? fromSafeCreateDmOptions(options) : undefined,\n );\n return new WorkerConversation(this.#client, group);\n }\n\n getHmacKeys() {\n return this.#conversations.getHmacKeys() as HmacKeys;\n }\n\n stream(\n callback?: StreamCallback<Conversation>,\n conversationType?: ConversationType,\n ) {\n const on_conversation = (conversation: Conversation) => {\n void callback?.(null, conversation);\n };\n const on_error = (error: Error | null) => {\n void callback?.(error, undefined);\n };\n return this.#conversations.stream(\n { on_conversation, on_error },\n conversationType,\n );\n }\n\n streamGroups(callback?: StreamCallback<Conversation>) {\n return this.#conversations.stream(callback, ConversationType.Group);\n }\n\n streamDms(callback?: StreamCallback<Conversation>) {\n return this.#conversations.stream(callback, ConversationType.Dm);\n }\n\n streamAllMessages(\n callback?: StreamCallback<Message>,\n conversationType?: ConversationType,\n ) {\n const on_message = (message: Message) => {\n void callback?.(null, message);\n };\n const on_error = (error: Error | null) => {\n void callback?.(error, undefined);\n };\n return this.#conversations.streamAllMessages(\n { on_message, on_error },\n conversationType,\n );\n }\n\n streamConsent(callback?: StreamCallback<Consent[]>) {\n const on_consent_update = (consent: Consent[]) => {\n void callback?.(null, consent);\n };\n const on_error = (error: Error | null) => {\n void callback?.(error, undefined);\n };\n return this.#conversations.streamConsent({ on_consent_update, on_error });\n }\n\n streamPreferences(callback?: StreamCallback<UserPreference[]>) {\n const on_user_preference_update = (preferences: UserPreference[]) => {\n void callback?.(null, preferences);\n };\n const on_error = (error: Error | null) => {\n void callback?.(error, undefined);\n };\n return this.#conversations.streamPreferences({\n on_user_preference_update,\n on_error,\n });\n }\n}\n","import {\n verifySignedWithPublicKey,\n type Client,\n type ConsentEntityType,\n type SignatureRequestType,\n} from \"@xmtp/wasm-bindings\";\nimport type { ClientOptions } from \"@/types\";\nimport { fromSafeConsent, type SafeConsent } from \"@/utils/conversions\";\nimport { createClient } from \"@/utils/createClient\";\nimport { WorkerConversations } from \"@/WorkerConversations\";\n\nexport class WorkerClient {\n #client: Client;\n\n #conversations: WorkerConversations;\n\n #accountAddress: string;\n\n constructor(client: Client) {\n this.#client = client;\n this.#accountAddress = client.accountAddress;\n this.#conversations = new WorkerConversations(this, client.conversations());\n }\n\n static async create(\n accountAddress: string,\n encryptionKey: Uint8Array,\n options?: Omit<ClientOptions, \"codecs\">,\n ) {\n const client = await createClient(accountAddress, encryptionKey, options);\n return new WorkerClient(client);\n }\n\n get accountAddress() {\n return this.#accountAddress;\n }\n\n get inboxId() {\n return this.#client.inboxId;\n }\n\n get installationId() {\n return this.#client.installationId;\n }\n\n get installationIdBytes() {\n return this.#client.installationIdBytes;\n }\n\n get isRegistered() {\n return this.#client.isRegistered;\n }\n\n createInboxSignatureText() {\n try {\n return this.#client.createInboxSignatureText();\n } catch {\n return undefined;\n }\n }\n\n async addAccountSignatureText(accountAddress: string) {\n try {\n return await this.#client.addWalletSignatureText(accountAddress);\n } catch {\n return undefined;\n }\n }\n\n async removeAccountSignatureText(accountAddress: string) {\n try {\n return await this.#client.revokeWalletSignatureText(accountAddress);\n } catch {\n return undefined;\n }\n }\n\n async revokeAllAOtherInstallationsSignatureText() {\n try {\n return await this.#client.revokeAllOtherInstallationsSignatureText();\n } catch {\n return undefined;\n }\n }\n\n async revokeInstallationsSignatureText(installationIds: Uint8Array[]) {\n try {\n return await this.#client.revokeInstallationsSignatureText(\n installationIds,\n );\n } catch {\n return undefined;\n }\n }\n\n async addSignature(type: SignatureRequestType, bytes: Uint8Array) {\n return this.#client.addSignature(type, bytes);\n }\n\n async addScwSignature(\n type: SignatureRequestType,\n bytes: Uint8Array,\n chainId: bigint,\n blockNumber?: bigint,\n ) {\n return this.#client.addScwSignature(type, bytes, chainId, blockNumber);\n }\n\n async applySignatures() {\n return this.#client.applySignatureRequests();\n }\n\n async canMessage(accountAddresses: string[]) {\n return this.#client.canMessage(accountAddresses) as Promise<\n Map<string, boolean>\n >;\n }\n\n async registerIdentity() {\n return this.#client.registerIdentity();\n }\n\n async findInboxIdByAddress(address: string) {\n return this.#client.findInboxIdByAddress(address);\n }\n\n async inboxState(refreshFromNetwork: boolean) {\n return this.#client.inboxState(refreshFromNetwork);\n }\n\n async getLatestInboxState(inboxId: string) {\n return this.#client.getLatestInboxState(inboxId);\n }\n\n async setConsentStates(records: SafeConsent[]) {\n return this.#client.setConsentStates(records.map(fromSafeConsent));\n }\n\n async getConsentState(entityType: ConsentEntityType, entity: string) {\n return this.#client.getConsentState(entityType, entity);\n }\n\n get conversations() {\n return this.#conversations;\n }\n\n signWithInstallationKey(signatureText: string) {\n return this.#client.signWithInstallationKey(signatureText);\n }\n\n verifySignedWithInstallationKey(\n signatureText: string,\n signatureBytes: Uint8Array,\n ) {\n try {\n this.#client.verifySignedWithInstallationKey(\n signatureText,\n signatureBytes,\n );\n return true;\n } catch {\n return false;\n }\n }\n\n verifySignedWithPublicKey(\n signatureText: string,\n signatureBytes: Uint8Array,\n publicKey: Uint8Array,\n ) {\n try {\n verifySignedWithPublicKey(signatureText, signatureBytes, publicKey);\n return true;\n } catch {\n return false;\n }\n }\n}\n","import init, {\n createClient as createWasmClient,\n generateInboxId,\n getInboxIdForAddress,\n LogOptions,\n} from \"@xmtp/wasm-bindings\";\nimport { ApiUrls, HistorySyncUrls } from \"@/constants\";\nimport type { ClientOptions } from \"@/types\";\n\nexport const createClient = async (\n accountAddress: string,\n encryptionKey: Uint8Array,\n options?: Omit<ClientOptions, \"codecs\">,\n) => {\n // initialize WASM module\n await init();\n\n const host = options?.apiUrl || ApiUrls[options?.env || \"dev\"];\n const dbPath =\n options?.dbPath || `xmtp-${options?.env || \"dev\"}-${accountAddress}.db3`;\n\n const inboxId =\n (await getInboxIdForAddress(host, accountAddress)) ||\n generateInboxId(accountAddress);\n\n const isLogging =\n options &&\n (options.loggingLevel !== undefined ||\n options.structuredLogging ||\n options.performanceLogging);\n\n const historySyncUrl =\n options?.historySyncUrl || HistorySyncUrls[options?.env || \"dev\"];\n\n return createWasmClient(\n host,\n inboxId,\n accountAddress,\n dbPath,\n encryptionKey,\n historySyncUrl,\n isLogging\n ? new LogOptions(\n options.structuredLogging ?? false,\n options.performanceLogging ?? false,\n options.loggingLevel,\n )\n : undefined,\n );\n};\n","import type {\n Consent,\n Conversation,\n Message,\n StreamCloser,\n UserPreference,\n} from \"@xmtp/wasm-bindings\";\nimport type {\n ClientEventsActions,\n ClientEventsClientMessageData,\n ClientEventsErrorData,\n ClientEventsWorkerPostMessageData,\n} from \"@/types\";\nimport type {\n ClientStreamEventsErrorData,\n ClientStreamEventsTypes,\n ClientStreamEventsWorkerPostMessageData,\n} from \"@/types/clientStreamEvents\";\nimport {\n fromEncodedContent,\n fromSafeEncodedContent,\n toSafeConsent,\n toSafeConversation,\n toSafeHmacKey,\n toSafeInboxState,\n toSafeMessage,\n toSafeMessageDisappearingSettings,\n} from \"@/utils/conversions\";\nimport { WorkerClient } from \"@/WorkerClient\";\nimport { WorkerConversation } from \"@/WorkerConversation\";\n\nlet maybeClient: WorkerClient | undefined;\nlet enableLogging = false;\n\nconst streamClosers = new Map<string, StreamCloser>();\n\n/**\n * Type-safe postMessage\n */\nconst postMessage = <A extends ClientEventsActions>(\n data: ClientEventsWorkerPostMessageData<A>,\n) => {\n self.postMessage(data);\n};\n\n/**\n * Type-safe postMessage for errors\n */\nconst postMessageError = (data: ClientEventsErrorData) => {\n self.postMessage(data);\n};\n\n/**\n * Type-safe postMessage for streams\n */\nconst postStreamMessage = <A extends ClientStreamEventsTypes>(\n data: ClientStreamEventsWorkerPostMessageData<A>,\n) => {\n self.postMessage(data);\n};\n\n/**\n * Type-safe postMessage for stream errors\n */\nconst postStreamMessageError = (data: ClientStreamEventsErrorData) => {\n self.postMessage(data);\n};\n\nself.onmessage = async (event: MessageEvent<ClientEventsClientMessageData>) => {\n const { action, id, data } = event.data;\n\n if (enableLogging) {\n console.log(\"client worker received event data\", event.data);\n }\n\n try {\n // init is a special action that initializes the client\n if (action === \"init\" && !maybeClient) {\n maybeClient = await WorkerClient.create(\n data.address,\n data.encryptionKey,\n data.options,\n );\n enableLogging =\n data.options?.loggingLevel !== undefined &&\n data.options.loggingLevel !== \"off\";\n postMessage({\n id,\n action,\n result: {\n inboxId: maybeClient.inboxId,\n installationId: maybeClient.installationId,\n installationIdBytes: maybeClient.installationIdBytes,\n },\n });\n return;\n }\n\n // a client is required for all other actions\n if (!maybeClient) {\n throw new Error(\"Client not initialized\");\n }\n\n // let typescript know that a client will be available for the rest\n // of this code block\n const client = maybeClient;\n\n // helper function that throws an error if the group is not found\n const getGroup = (groupId: string) => {\n const group = client.conversations.getConversationById(groupId);\n if (!group) {\n throw new Error(`Group \"${groupId}\" not found`);\n }\n return group;\n };\n\n switch (action) {\n /**\n * Stream actions\n */\n case \"endStream\": {\n const streamCloser = streamClosers.get(data.streamId);\n if (streamCloser) {\n streamCloser.end();\n streamClosers.delete(data.streamId);\n postMessage({ id, action, result: undefined });\n } else {\n throw new Error(`Stream \"${data.streamId}\" not found`);\n }\n break;\n }\n /**\n * Client actions\n */\n case \"createInboxSignatureText\": {\n const result = client.createInboxSignatureText();\n postMessage({ id, action, result });\n break;\n }\n case \"addAccountSignatureText\": {\n const result = await client.addAccountSignatureText(\n data.newAccountAddress,\n );\n postMessage({ id, action, result });\n break;\n }\n case \"removeAccountSignatureText\": {\n const result = await client.removeAccountSignatureText(\n data.accountAddress,\n );\n postMessage({ id, action, result });\n break;\n }\n case \"revokeAllOtherInstallationsSignatureText\": {\n const result = await client.revokeAllAOtherInstallationsSignatureText();\n postMessage({ id, action, result });\n break;\n }\n case \"revokeInstallationsSignatureText\": {\n const result = await client.revokeInstallationsSignatureText(\n data.installationIds,\n );\n postMessage({ id, action, result });\n break;\n }\n case \"addSignature\":\n await client.addSignature(data.type, data.bytes);\n postMessage({ id, action, result: undefined });\n break;\n case \"addScwSignature\":\n await client.addScwSignature(\n data.type,\n data.bytes,\n data.chainId,\n data.blockNumber,\n );\n postMessage({ id, action, result: undefined });\n break;\n case \"applySignatures\":\n await client.applySignatures();\n postMessage({ id, action, result: undefined });\n break;\n case \"registerIdentity\":\n await client.registerIdentity();\n postMessage({ id, action, result: undefined });\n break;\n case \"isRegistered\": {\n const result = client.isRegistered;\n postMessage({ id, action, result });\n break;\n }\n case \"canMessage\": {\n const result = await client.canMessage(data.accountAddresses);\n postMessage({ id, action, result });\n break;\n }\n case \"inboxState\": {\n const inboxState = await client.inboxState(data.refreshFromNetwork);\n const result = toSafeInboxState(inboxState);\n postMessage({ id, action, result });\n break;\n }\n case \"getLatestInboxState\": {\n const inboxState = await client.getLatestInboxState(data.inboxId);\n const result = toSafeInboxState(inboxState);\n postMessage({ id, action, result });\n break;\n }\n case \"setConsentStates\": {\n await client.setConsentStates(data.records);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"getConsentState\": {\n const result = await client.getConsentState(\n data.entityType,\n data.entity,\n );\n postMessage({ id, action, result });\n break;\n }\n case \"findInboxIdByAddress\": {\n const result = await client.findInboxIdByAddress(data.address);\n postMessage({ id, action, result });\n break;\n }\n case \"signWithInstallationKey\": {\n const result = client.signWithInstallationKey(data.signatureText);\n postMessage({ id, action, result });\n break;\n }\n case \"verifySignedWithInstallationKey\": {\n const result = client.verifySignedWithInstallationKey(\n data.signatureText,\n data.signatureBytes,\n );\n postMessage({ id, action, result });\n break;\n }\n case \"verifySignedWithPublicKey\": {\n const result = client.verifySignedWithPublicKey(\n data.signatureText,\n data.signatureBytes,\n data.publicKey,\n );\n postMessage({ id, action, result });\n break;\n }\n /**\n * Conversations actions\n */\n case \"streamAllGroups\": {\n const streamCallback = async (\n error: Error | null,\n value: Conversation | undefined,\n ) => {\n if (error) {\n postStreamMessageError({\n type: \"group\",\n streamId: data.streamId,\n error: error.message,\n });\n } else {\n postStreamMessage({\n type: \"group\",\n streamId: data.streamId,\n result: value\n ? await toSafeConversation(\n new WorkerConversation(client, value),\n )\n : undefined,\n });\n }\n };\n const streamCloser = client.conversations.stream(\n streamCallback,\n data.conversationType,\n );\n streamClosers.set(data.streamId, streamCloser);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"streamAllMessages\": {\n const streamCallback = (\n error: Error | null,\n value: Message | undefined,\n ) => {\n if (error) {\n postStreamMessageError({\n type: \"message\",\n streamId: data.streamId,\n error: error.message,\n });\n } else {\n postStreamMessage({\n type: \"message\",\n streamId: data.streamId,\n result: value ? toSafeMessage(value) : undefined,\n });\n }\n };\n const streamCloser = client.conversations.streamAllMessages(\n streamCallback,\n data.conversationType,\n );\n streamClosers.set(data.streamId, streamCloser);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"streamConsent\": {\n const streamCallback = (\n error: Error | null,\n value: Consent[] | undefined,\n ) => {\n if (error) {\n postStreamMessageError({\n type: \"consent\",\n streamId: data.streamId,\n error: error.message,\n });\n } else {\n postStreamMessage({\n type: \"consent\",\n streamId: data.streamId,\n result: value?.map(toSafeConsent) ?? [],\n });\n }\n };\n const streamCloser = client.conversations.streamConsent(streamCallback);\n streamClosers.set(data.streamId, streamCloser);\n postMessage({\n id,\n action,\n result: undefined,\n });\n break;\n }\n case \"streamPreferences\": {\n const streamCallback = (\n error: Error | null,\n value: UserPreference[] | undefined,\n ) => {\n if (error) {\n postStreamMessageError({\n type: \"preferences\",\n streamId: data.streamId,\n error: error.message,\n });\n } else {\n postStreamMessage({\n type: \"preferences\",\n streamId: data.streamId,\n result: value ?? undefined,\n });\n }\n };\n const streamCloser =\n client.conversations.streamPreferences(streamCallback);\n streamClosers.set(data.streamId, streamCloser);\n postMessage({\n id,\n action,\n result: undefined,\n });\n break;\n }\n case \"getConversations\": {\n const conversations = client.conversations.list(data.options);\n const result = await Promise.all(\n conversations.map((conversation) => toSafeConversation(conversation)),\n );\n postMessage({ id, action, result });\n break;\n }\n case \"getGroups\": {\n const conversations = client.conversations.listGroups(data.options);\n const result = await Promise.all(\n conversations.map((conversation) => toSafeConversation(conversation)),\n );\n postMessage({ id, action, result });\n break;\n }\n case \"getDms\": {\n const conversations = client.conversations.listDms(data.options);\n const result = await Promise.all(\n conversations.map((conversation) => toSafeConversation(conversation)),\n );\n postMessage({ id, action, result });\n break;\n }\n case \"newGroup\": {\n const conversation = await client.conversations.newGroup(\n data.accountAddresses,\n data.options,\n );\n const result = await toSafeConversation(conversation);\n postMessage({ id, action, result });\n break;\n }\n case \"newGroupByInboxIds\": {\n const conversation = await client.conversations.newGroupByInboxIds(\n data.inboxIds,\n data.options,\n );\n const result = await toSafeConversation(conversation);\n postMessage({ id, action, result });\n break;\n }\n case \"newDm\": {\n const conversation = await client.conversations.newDm(\n data.accountAddress,\n data.options,\n );\n const result = await toSafeConversation(conversation);\n postMessage({ id, action, result });\n break;\n }\n case \"newDmByInboxId\": {\n const conversation = await client.conversations.newDmByInboxId(\n data.inboxId,\n data.options,\n );\n const result = await toSafeConversation(conversation);\n postMessage({ id, action, result });\n break;\n }\n case \"syncConversations\": {\n await client.conversations.sync();\n postMessage({\n id,\n action,\n result: undefined,\n });\n break;\n }\n case \"syncAllConversations\": {\n await client.conversations.syncAll(data.consentStates);\n postMessage({\n id,\n action,\n result: undefined,\n });\n break;\n }\n case \"getConversationById\": {\n const conversation = client.conversations.getConversationById(data.id);\n const result = conversation\n ? await toSafeConversation(conversation)\n : undefined;\n postMessage({ id, action, result });\n break;\n }\n case \"getMessageById\": {\n const message = client.conversations.getMessageById(data.id);\n const result = message ? toSafeMessage(message) : undefined;\n postMessage({ id, action, result });\n break;\n }\n case \"getDmByInboxId\": {\n const conversation = client.conversations.getDmByInboxId(data.inboxId);\n const result = conversation\n ? await toSafeConversation(conversation)\n : undefined;\n postMessage({ id, action, result });\n break;\n }\n case \"getHmacKeys\": {\n const hmacKeys = client.conversations.getHmacKeys();\n const result = Object.fromEntries(\n Array.from(hmacKeys.entries()).map(([groupId, hmacKeys]) => [\n groupId,\n hmacKeys.map(toSafeHmacKey),\n ]),\n );\n postMessage({ id, action, result });\n break;\n }\n /**\n * Group actions\n */\n case \"syncGroup\": {\n const group = getGroup(data.id);\n await group.sync();\n const result = await toSafeConversation(group);\n postMessage({ id, action, result });\n break;\n }\n case \"updateGroupName\": {\n const group = getGroup(data.id);\n await group.updateName(data.name);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"updateGroupDescription\": {\n const group = getGroup(data.id);\n await group.updateDescription(data.description);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"updateGroupImageUrlSquare\": {\n const group = getGroup(data.id);\n await group.updateImageUrl(data.imageUrl);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"sendGroupMessage\": {\n const group = getGroup(data.id);\n const result = await group.send(\n fromEncodedContent(fromSafeEncodedContent(data.content)),\n );\n postMessage({ id, action, result });\n break;\n }\n case \"sendOptimisticGroupMessage\": {\n const group = getGroup(data.id);\n const result = group.sendOptimistic(\n fromEncodedContent(fromSafeEncodedContent(data.content)),\n );\n postMessage({ id, action, result });\n break;\n }\n case \"publishGroupMessages\": {\n const group = getGroup(data.id);\n await group.publishMessages();\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"getGroupMessages\": {\n const group = getGroup(data.id);\n const messages = await group.messages(data.options);\n const result = messages.map((message) => toSafeMessage(message));\n postMessage({ id, action, result });\n break;\n }\n case \"getGroupMembers\": {\n const group = getGroup(data.id);\n const result = await group.members();\n postMessage({ id, action, result });\n break;\n }\n case \"getGroupAdmins\": {\n const group = getGroup(data.id);\n const result = group.admins;\n postMessage({ id, action, result });\n break;\n }\n case \"getGroupSuperAdmins\": {\n const group = getGroup(data.id);\n const result = group.superAdmins;\n postMessage({ id, action, result });\n break;\n }\n case \"getGroupConsentState\": {\n const group = getGroup(data.id);\n const result = group.consentState;\n postMessage({ id, action, result });\n break;\n }\n case \"updateGroupConsentState\": {\n const group = getGroup(data.id);\n group.updateConsentState(data.state);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"addGroupAdmin\": {\n const group = getGroup(data.id);\n await group.addAdmin(data.inboxId);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"removeGroupAdmin\": {\n const group = getGroup(data.id);\n await group.removeAdmin(data.inboxId);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"addGroupSuperAdmin\": {\n const group = getGroup(data.id);\n await group.addSuperAdmin(data.inboxId);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"removeGroupSuperAdmin\": {\n const group = getGroup(data.id);\n await group.removeSuperAdmin(data.inboxId);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"addGroupMembers\": {\n const group = getGroup(data.id);\n await group.addMembers(data.accountAddresses);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"removeGroupMembers\": {\n const group = getGroup(data.id);\n await group.removeMembers(data.accountAddresses);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"addGroupMembersByInboxId\": {\n const group = getGroup(data.id);\n await group.addMembersByInboxId(data.inboxIds);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"removeGroupMembersByInboxId\": {\n const group = getGroup(data.id);\n await group.removeMembersByInboxId(data.inboxIds);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"isGroupAdmin\": {\n const group = getGroup(data.id);\n const result = group.isAdmin(data.inboxId);\n postMessage({ id, action, result });\n break;\n }\n case \"isGroupSuperAdmin\": {\n const group = getGroup(data.id);\n const result = group.isSuperAdmin(data.inboxId);\n postMessage({ id, action, result });\n break;\n }\n case \"getDmPeerInboxId\": {\n const group = getGroup(data.id);\n const result = group.dmPeerInboxId();\n postMessage({ id, action, result });\n break;\n }\n case \"updateGroupPermissionPolicy\": {\n const group = getGroup(data.id);\n await group.updatePermission(\n data.permissionType,\n data.policy,\n data.metadataField,\n );\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"getGroupPermissions\": {\n const group = getGroup(data.id);\n const safeConversation = await toSafeConversation(group);\n const result = safeConversation.permissions;\n postMessage({ id, action, result });\n break;\n }\n case \"getGroupMessageDisappearingSettings\": {\n const group = getGroup(data.id);\n const settings = group.messageDisappearingSettings();\n const result = settings\n ? toSafeMessageDisappearingSettings(settings)\n : undefined;\n postMessage({ id, action, result });\n break;\n }\n case \"updateGroupMessageDisappearingSettings\": {\n const group = getGroup(data.id);\n await group.updateMessageDisappearingSettings(data.fromNs, data.inNs);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"removeGroupMessageDisappearingSettings\": {\n const group = getGroup(data.id);\n await group.removeMessageDisappearingSettings();\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"isGroupMessageDisappearingEnabled\": {\n const group = getGroup(data.id);\n const result = group.isMessageDisappearingEnabled();\n postMessage({ id, action, result });\n break;\n }\n case \"streamGroupMessages\": {\n const group = getGroup(data.groupId);\n const streamCallback = (\n error: Error | null,\n value: Message | undefined,\n ) => {\n if (error) {\n postStreamMessageError({\n type: \"message\",\n streamId: data.streamId,\n error: error.message,\n });\n } else {\n postStreamMessage({\n type: \"message\",\n streamId: data.streamId,\n result: value ? toSafeMessage(value) : undefined,\n });\n }\n };\n const streamCloser = group.stream(streamCallback);\n streamClosers.set(data.streamId, streamCloser);\n postMessage({ id, action, result: undefined });\n break;\n }\n }\n } catch (e) {\n postMessageError({\n id,\n action,\n error: (e as Error).message,\n });\n }\n};\n"],"names":["fromEncodedContent","content","WasmEncodedContent","contentTypeId","type","WasmContentTypeId","authorityId","typeId","versionMajor","versionMinor","Map","Object","entries","parameters","fallback","compression","toSafeEncodedContent","fromSafeEncodedContent","ContentTypeId","toSafeMessage","message","fromEntries","convoId","deliveryStatus","id","kind","senderInboxId","sentAtNs","fromSafeListConversationsOptions","options","ListConversationsOptions","consentStates","createdAfterNs","createdBeforeNs","includeDuplicateDms","limit","fromSafeCreateGroupOptions","CreateGroupOptions","permissions","name","imageUrlSquare","description","customPermissionPolicySet","GroupPermissionsOptions","CustomPolicy","policySet","PermissionPolicySet","addMemberPolicy","removeMemberPolicy","addAdminPolicy","removeAdminPolicy","updateGroupNamePolicy","updateGroupDescriptionPolicy","updateGroupImageUrlSquarePolicy","updateMessageDisappearingPolicy","undefined","messageDisappearingSettings","fromSafeMessageDisappearingSettings","fromSafeCreateDmOptions","CreateDMOptions","toSafeConversation","async","conversation","imageUrl","isActive","addedByInboxId","metadata","admins","superAdmins","createdAtNs","policyType","toSafeInstallation","installation","bytes","clientTimestampNs","toSafeInboxState","inboxState","accountAddresses","inboxId","installations","map","recoveryAddress","toSafeConsent","consent","entity","entityType","state","fromSafeConsent","Consent","toSafeHmacKey","hmacKey","key","epoch","settings","MessageDisappearingSettings","fromNs","inNs","ApiUrls","local","dev","production","HistorySyncUrls","WorkerConversation","client","group","constructor","this","groupName","updateName","updateGroupName","groupImageUrlSquare","updateImageUrl","updateGroupImageUrlSquare","groupDescription","updateDescription","updateGroupDescription","groupMetadata","creatorInboxId","conversationType","members","listMembers","member","consentState","installationIds","permissionLevel","toSafeGroupMember","adminList","superAdminList","groupPermissions","updatePermission","permissionType","policy","metadataField","updatePermissionPolicy","isAdmin","isSuperAdmin","sync","addMembers","addMembersByInboxId","inboxIds","removeMembers","removeMembersByInboxId","addAdmin","removeAdmin","addSuperAdmin","removeSuperAdmin","publishMessages","sendOptimistic","encodedContent","send","messages","findMessages","ListMessagesOptions","sentBeforeNs","sentAfterNs","direction","contentTypes","fromSafeListMessagesOptions","updateConsentState","dmPeerInboxId","updateMessageDisappearingSettings","removeMessageDisappearingSettings","isMessageDisappearingEnabled","stream","callback","on_message","on_error","error","WorkerConversations","conversations","syncAll","syncAllConversations","getConversationById","findGroupById","getMessageById","findMessageById","getDmByInboxId","findDmByTargetInboxId","list","item","listGroups","listDms","newGroup","createGroup","newGroupByInboxIds","createGroupByInboxIds","newDm","accountAddress","createDm","newDmByInboxId","createDmByInboxId","getHmacKeys","on_conversation","streamGroups","ConversationType","Group","streamDms","Dm","streamAllMessages","streamConsent","on_consent_update","streamPreferences","on_user_preference_update","preferences","WorkerClient","create","encryptionKey","init","host","apiUrl","env","dbPath","getInboxIdForAddress","generateInboxId","isLogging","loggingLevel","structuredLogging","performanceLogging","createWasmClient","historySyncUrl","LogOptions","createClient","installationId","installationIdBytes","isRegistered","createInboxSignatureText","addAccountSignatureText","addWalletSignatureText","removeAccountSignatureText","revokeWalletSignatureText","revokeAllAOtherInstallationsSignatureText","revokeAllOtherInstallationsSignatureText","revokeInstallationsSignatureText","addSignature","addScwSignature","chainId","blockNumber","applySignatures","applySignatureRequests","canMessage","registerIdentity","findInboxIdByAddress","address","refreshFromNetwork","getLatestInboxState","setConsentStates","records","getConsentState","signWithInstallationKey","signatureText","verifySignedWithInstallationKey","signatureBytes","verifySignedWithPublicKey","publicKey","maybeClient","enableLogging","streamClosers","postMessage","data","self","postStreamMessage","postStreamMessageError","onmessage","event","action","console","log","result","Error","getGroup","groupId","streamCloser","get","streamId","end","delete","newAccountAddress","streamCallback","value","set","Promise","all","hmacKeys","Array","from","toSafeMessageDisappearingSettings","e","postMessageError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sources":["../../src/utils/conversions.ts","../../src/constants.ts","../../src/WorkerConversation.ts","../../src/WorkerConversations.ts","../../src/WorkerClient.ts","../../src/utils/createClient.ts","../../src/workers/client.ts"],"sourcesContent":["import {\n ContentTypeId,\n type EncodedContent,\n} from \"@xmtp/content-type-primitives\";\nimport {\n Consent,\n CreateDMOptions,\n CreateGroupOptions,\n GroupMember,\n GroupPermissionsOptions,\n ListConversationsOptions,\n ListMessagesOptions,\n MessageDisappearingSettings,\n PermissionPolicySet,\n ContentTypeId as WasmContentTypeId,\n EncodedContent as WasmEncodedContent,\n type ConsentEntityType,\n type ConsentState,\n type ContentType,\n type DeliveryStatus,\n type GroupMessageKind,\n type HmacKey,\n type Identifier,\n type InboxState,\n type Installation,\n type Message,\n type PermissionLevel,\n type PermissionPolicy,\n type SortDirection,\n} from \"@xmtp/wasm-bindings\";\nimport type { WorkerConversation } from \"@/WorkerConversation\";\n\nexport const toContentTypeId = (\n contentTypeId: WasmContentTypeId,\n): ContentTypeId =>\n new ContentTypeId({\n authorityId: contentTypeId.authorityId,\n typeId: contentTypeId.typeId,\n versionMajor: contentTypeId.versionMajor,\n versionMinor: contentTypeId.versionMinor,\n });\n\nexport const fromContentTypeId = (\n contentTypeId: ContentTypeId,\n): WasmContentTypeId =>\n new WasmContentTypeId(\n contentTypeId.authorityId,\n contentTypeId.typeId,\n contentTypeId.versionMajor,\n contentTypeId.versionMinor,\n );\n\nexport type SafeContentTypeId = {\n authorityId: string;\n typeId: string;\n versionMajor: number;\n versionMinor: number;\n};\n\nexport const toSafeContentTypeId = (\n contentTypeId: ContentTypeId,\n): SafeContentTypeId => ({\n authorityId: contentTypeId.authorityId,\n typeId: contentTypeId.typeId,\n versionMajor: contentTypeId.versionMajor,\n versionMinor: contentTypeId.versionMinor,\n});\n\nexport const fromSafeContentTypeId = (\n contentTypeId: SafeContentTypeId,\n): ContentTypeId =>\n new ContentTypeId({\n authorityId: contentTypeId.authorityId,\n typeId: contentTypeId.typeId,\n versionMajor: contentTypeId.versionMajor,\n versionMinor: contentTypeId.versionMinor,\n });\n\nexport const toEncodedContent = (\n content: WasmEncodedContent,\n): EncodedContent => ({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n type: toContentTypeId(content.type!),\n parameters: Object.fromEntries(content.parameters as Map<string, string>),\n fallback: content.fallback,\n compression: content.compression,\n content: content.content,\n});\n\nexport const fromEncodedContent = (\n content: EncodedContent,\n): WasmEncodedContent =>\n new WasmEncodedContent(\n fromContentTypeId(content.type),\n new Map(Object.entries(content.parameters)),\n content.fallback,\n content.compression,\n content.content,\n );\n\nexport type SafeEncodedContent = {\n type: SafeContentTypeId;\n parameters: Record<string, string>;\n fallback?: string;\n compression?: number;\n content: Uint8Array;\n};\n\nexport const toSafeEncodedContent = (\n content: EncodedContent,\n): SafeEncodedContent => ({\n type: toSafeContentTypeId(content.type),\n parameters: content.parameters,\n fallback: content.fallback,\n compression: content.compression,\n content: content.content,\n});\n\nexport const fromSafeEncodedContent = (\n content: SafeEncodedContent,\n): EncodedContent => ({\n type: fromSafeContentTypeId(content.type),\n parameters: content.parameters,\n fallback: content.fallback,\n compression: content.compression,\n content: content.content,\n});\n\nexport type SafeMessage = {\n content: SafeEncodedContent;\n convoId: string;\n deliveryStatus: DeliveryStatus;\n id: string;\n kind: GroupMessageKind;\n senderInboxId: string;\n sentAtNs: bigint;\n};\n\nexport const toSafeMessage = (message: Message): SafeMessage => ({\n content: toSafeEncodedContent(toEncodedContent(message.content)),\n convoId: message.convoId,\n deliveryStatus: message.deliveryStatus,\n id: message.id,\n kind: message.kind,\n senderInboxId: message.senderInboxId,\n sentAtNs: message.sentAtNs,\n});\n\nexport type SafeListMessagesOptions = {\n contentTypes?: ContentType[];\n deliveryStatus?: DeliveryStatus;\n direction?: SortDirection;\n limit?: bigint;\n sentAfterNs?: bigint;\n sentBeforeNs?: bigint;\n};\n\nexport const toSafeListMessagesOptions = (\n options: ListMessagesOptions,\n): SafeListMessagesOptions => ({\n contentTypes: options.contentTypes,\n deliveryStatus: options.deliveryStatus,\n direction: options.direction,\n limit: options.limit,\n sentAfterNs: options.sentAfterNs,\n sentBeforeNs: options.sentBeforeNs,\n});\n\nexport const fromSafeListMessagesOptions = (\n options: SafeListMessagesOptions,\n): ListMessagesOptions =>\n new ListMessagesOptions(\n options.sentBeforeNs,\n options.sentAfterNs,\n options.limit,\n options.deliveryStatus,\n options.direction,\n options.contentTypes,\n );\n\nexport type SafeListConversationsOptions = {\n consentStates?: ConsentState[];\n createdAfterNs?: bigint;\n createdBeforeNs?: bigint;\n includeDuplicateDms?: boolean;\n limit?: bigint;\n};\n\nexport const toSafeListConversationsOptions = (\n options: ListConversationsOptions,\n): SafeListConversationsOptions => ({\n consentStates: options.consentStates,\n createdAfterNs: options.createdAfterNs,\n createdBeforeNs: options.createdBeforeNs,\n includeDuplicateDms: options.includeDuplicateDms,\n limit: options.limit,\n});\n\nexport const fromSafeListConversationsOptions = (\n options: SafeListConversationsOptions,\n): ListConversationsOptions =>\n new ListConversationsOptions(\n options.consentStates,\n options.createdAfterNs,\n options.createdBeforeNs,\n options.includeDuplicateDms ?? false,\n options.limit,\n );\n\nexport type SafePermissionPolicySet = {\n addAdminPolicy: PermissionPolicy;\n addMemberPolicy: PermissionPolicy;\n removeAdminPolicy: PermissionPolicy;\n removeMemberPolicy: PermissionPolicy;\n updateGroupDescriptionPolicy: PermissionPolicy;\n updateGroupImageUrlSquarePolicy: PermissionPolicy;\n updateGroupNamePolicy: PermissionPolicy;\n updateMessageDisappearingPolicy: PermissionPolicy;\n};\n\nexport const toSafePermissionPolicySet = (\n policySet: PermissionPolicySet,\n): SafePermissionPolicySet => ({\n addAdminPolicy: policySet.addAdminPolicy,\n addMemberPolicy: policySet.addMemberPolicy,\n removeAdminPolicy: policySet.removeAdminPolicy,\n removeMemberPolicy: policySet.removeMemberPolicy,\n updateGroupDescriptionPolicy: policySet.updateGroupDescriptionPolicy,\n updateGroupImageUrlSquarePolicy: policySet.updateGroupImageUrlSquarePolicy,\n updateGroupNamePolicy: policySet.updateGroupNamePolicy,\n updateMessageDisappearingPolicy: policySet.updateMessageDisappearingPolicy,\n});\n\nexport const fromSafePermissionPolicySet = (\n policySet: SafePermissionPolicySet,\n): PermissionPolicySet =>\n new PermissionPolicySet(\n policySet.addMemberPolicy,\n policySet.removeMemberPolicy,\n policySet.addAdminPolicy,\n policySet.removeAdminPolicy,\n policySet.updateGroupNamePolicy,\n policySet.updateGroupDescriptionPolicy,\n policySet.updateGroupImageUrlSquarePolicy,\n policySet.updateMessageDisappearingPolicy,\n );\n\nexport type SafeCreateGroupOptions = {\n customPermissionPolicySet?: SafePermissionPolicySet;\n description?: string;\n imageUrlSquare?: string;\n messageDisappearingSettings?: SafeMessageDisappearingSettings;\n name?: string;\n permissions?: GroupPermissionsOptions;\n};\n\nexport const toSafeCreateGroupOptions = (\n options: CreateGroupOptions,\n): SafeCreateGroupOptions => ({\n customPermissionPolicySet: options.customPermissionPolicySet,\n description: options.groupDescription,\n imageUrlSquare: options.groupImageUrlSquare,\n messageDisappearingSettings: options.messageDisappearingSettings\n ? toSafeMessageDisappearingSettings(options.messageDisappearingSettings)\n : undefined,\n name: options.groupName,\n permissions: options.permissions,\n});\n\nexport const fromSafeCreateGroupOptions = (\n options: SafeCreateGroupOptions,\n): CreateGroupOptions =>\n new CreateGroupOptions(\n options.permissions,\n options.name,\n options.imageUrlSquare,\n options.description,\n // only include custom policy set if permissions are set to CustomPolicy\n options.customPermissionPolicySet &&\n options.permissions === GroupPermissionsOptions.CustomPolicy\n ? fromSafePermissionPolicySet(options.customPermissionPolicySet)\n : undefined,\n options.messageDisappearingSettings\n ? fromSafeMessageDisappearingSettings(options.messageDisappearingSettings)\n : undefined,\n );\n\nexport type SafeCreateDmOptions = {\n messageDisappearingSettings?: SafeMessageDisappearingSettings;\n};\n\nexport const toSafeCreateDmOptions = (\n options: CreateDMOptions,\n): SafeCreateDmOptions => ({\n messageDisappearingSettings: options.messageDisappearingSettings\n ? toSafeMessageDisappearingSettings(options.messageDisappearingSettings)\n : undefined,\n});\n\nexport const fromSafeCreateDmOptions = (\n options: SafeCreateDmOptions,\n): CreateDMOptions =>\n new CreateDMOptions(\n options.messageDisappearingSettings\n ? fromSafeMessageDisappearingSettings(options.messageDisappearingSettings)\n : undefined,\n );\n\nexport type SafeConversation = {\n id: string;\n name: string;\n imageUrl: string;\n description: string;\n permissions: {\n policyType: GroupPermissionsOptions;\n policySet: {\n addAdminPolicy: PermissionPolicy;\n addMemberPolicy: PermissionPolicy;\n removeAdminPolicy: PermissionPolicy;\n removeMemberPolicy: PermissionPolicy;\n updateGroupDescriptionPolicy: PermissionPolicy;\n updateGroupImageUrlSquarePolicy: PermissionPolicy;\n updateGroupNamePolicy: PermissionPolicy;\n updateMessageDisappearingPolicy: PermissionPolicy;\n };\n };\n isActive: boolean;\n addedByInboxId: string;\n metadata: {\n creatorInboxId: string;\n conversationType: string;\n };\n admins: string[];\n superAdmins: string[];\n createdAtNs: bigint;\n};\n\nexport const toSafeConversation = async (\n conversation: WorkerConversation,\n): Promise<SafeConversation> => {\n const id = conversation.id;\n const name = conversation.name;\n const imageUrl = conversation.imageUrl;\n const description = conversation.description;\n const permissions = conversation.permissions;\n const isActive = conversation.isActive;\n const addedByInboxId = conversation.addedByInboxId;\n const metadata = await conversation.metadata();\n const admins = conversation.admins;\n const superAdmins = conversation.superAdmins;\n const createdAtNs = conversation.createdAtNs;\n const policyType = permissions.policyType;\n const policySet = permissions.policySet;\n return {\n id,\n name,\n imageUrl,\n description,\n permissions: {\n policyType,\n policySet: {\n addAdminPolicy: policySet.addAdminPolicy,\n addMemberPolicy: policySet.addMemberPolicy,\n removeAdminPolicy: policySet.removeAdminPolicy,\n removeMemberPolicy: policySet.removeMemberPolicy,\n updateGroupDescriptionPolicy: policySet.updateGroupDescriptionPolicy,\n updateGroupImageUrlSquarePolicy:\n policySet.updateGroupImageUrlSquarePolicy,\n updateGroupNamePolicy: policySet.updateGroupNamePolicy,\n updateMessageDisappearingPolicy:\n policySet.updateMessageDisappearingPolicy,\n },\n },\n isActive,\n addedByInboxId,\n metadata,\n admins,\n superAdmins,\n createdAtNs,\n };\n};\n\nexport type SafeInstallation = {\n bytes: Uint8Array;\n clientTimestampNs?: bigint;\n id: string;\n};\n\nexport const toSafeInstallation = (\n installation: Installation,\n): SafeInstallation => ({\n bytes: installation.bytes,\n clientTimestampNs: installation.clientTimestampNs,\n id: installation.id,\n});\n\nexport type SafeInboxState = {\n accountIdentifiers: Identifier[];\n inboxId: string;\n installations: SafeInstallation[];\n recoveryIdentifier: Identifier;\n};\n\nexport const toSafeInboxState = (inboxState: InboxState): SafeInboxState => ({\n accountIdentifiers: inboxState.accountIdentifiers,\n inboxId: inboxState.inboxId,\n installations: inboxState.installations.map(toSafeInstallation),\n recoveryIdentifier: inboxState.recoveryIdentifier,\n});\n\nexport type SafeConsent = {\n entity: string;\n entityType: ConsentEntityType;\n state: ConsentState;\n};\n\nexport const toSafeConsent = (consent: Consent): SafeConsent => ({\n entity: consent.entity,\n entityType: consent.entityType,\n state: consent.state,\n});\n\nexport const fromSafeConsent = (consent: SafeConsent): Consent =>\n new Consent(consent.entityType, consent.state, consent.entity);\n\nexport type SafeGroupMember = {\n accountIdentifiers: Identifier[];\n consentState: ConsentState;\n inboxId: string;\n installationIds: string[];\n permissionLevel: PermissionLevel;\n};\n\nexport const toSafeGroupMember = (member: GroupMember): SafeGroupMember => ({\n accountIdentifiers: member.accountIdentifiers,\n consentState: member.consentState,\n inboxId: member.inboxId,\n installationIds: member.installationIds,\n permissionLevel: member.permissionLevel,\n});\n\nexport const fromSafeGroupMember = (member: SafeGroupMember): GroupMember =>\n new GroupMember(\n member.inboxId,\n member.accountIdentifiers,\n member.installationIds,\n member.permissionLevel,\n member.consentState,\n );\n\nexport type SafeHmacKey = {\n key: Uint8Array;\n epoch: bigint;\n};\n\nexport const toSafeHmacKey = (hmacKey: HmacKey): SafeHmacKey => ({\n key: hmacKey.key,\n epoch: hmacKey.epoch,\n});\n\nexport type HmacKeys = Map<string, HmacKey[]>;\nexport type SafeHmacKeys = Record<string, SafeHmacKey[]>;\n\nexport type SafeMessageDisappearingSettings = {\n fromNs: bigint;\n inNs: bigint;\n};\n\nexport const toSafeMessageDisappearingSettings = (\n settings: MessageDisappearingSettings,\n): SafeMessageDisappearingSettings => ({\n fromNs: settings.fromNs,\n inNs: settings.inNs,\n});\n\nexport const fromSafeMessageDisappearingSettings = (\n settings: SafeMessageDisappearingSettings,\n): MessageDisappearingSettings =>\n new MessageDisappearingSettings(settings.fromNs, settings.inNs);\n","export const ApiUrls = {\n local: \"http://localhost:5555\",\n dev: \"https://dev.xmtp.network\",\n production: \"https://production.xmtp.network\",\n} as const;\n\nexport const HistorySyncUrls = {\n local: \"http://localhost:5558\",\n dev: \"https://message-history.dev.ephemera.network\",\n production: \"https://message-history.production.ephemera.network\",\n} as const;\n","import {\n MessageDisappearingSettings,\n type ConsentState,\n type Conversation,\n type EncodedContent,\n type GroupMember,\n type Identifier,\n type Message,\n type MetadataField,\n type PermissionPolicy,\n type PermissionUpdateType,\n} from \"@xmtp/wasm-bindings\";\nimport { type StreamCallback } from \"@/AsyncStream\";\nimport {\n fromSafeListMessagesOptions,\n toSafeGroupMember,\n type SafeListMessagesOptions,\n} from \"@/utils/conversions\";\nimport type { WorkerClient } from \"@/WorkerClient\";\n\nexport class WorkerConversation {\n // eslint-disable-next-line no-unused-private-class-members\n #client: WorkerClient;\n\n #group: Conversation;\n\n constructor(client: WorkerClient, group: Conversation) {\n this.#client = client;\n this.#group = group;\n }\n\n get id() {\n return this.#group.id();\n }\n\n get name() {\n return this.#group.groupName();\n }\n\n async updateName(name: string) {\n return this.#group.updateGroupName(name);\n }\n\n get imageUrl() {\n return this.#group.groupImageUrlSquare();\n }\n\n async updateImageUrl(imageUrl: string) {\n return this.#group.updateGroupImageUrlSquare(imageUrl);\n }\n\n get description() {\n return this.#group.groupDescription();\n }\n\n async updateDescription(description: string) {\n return this.#group.updateGroupDescription(description);\n }\n\n get isActive() {\n return this.#group.isActive();\n }\n\n get addedByInboxId() {\n return this.#group.addedByInboxId();\n }\n\n get createdAtNs() {\n return this.#group.createdAtNs();\n }\n\n async metadata() {\n const metadata = await this.#group.groupMetadata();\n return {\n creatorInboxId: metadata.creatorInboxId(),\n conversationType: metadata.conversationType(),\n };\n }\n\n async members() {\n const members = (await this.#group.listMembers()) as GroupMember[];\n return members.map((member) => toSafeGroupMember(member));\n }\n\n get admins() {\n return this.#group.adminList();\n }\n\n get superAdmins() {\n return this.#group.superAdminList();\n }\n\n get permissions() {\n const permissions = this.#group.groupPermissions();\n return {\n policyType: permissions.policyType(),\n policySet: permissions.policySet(),\n };\n }\n\n async updatePermission(\n permissionType: PermissionUpdateType,\n policy: PermissionPolicy,\n metadataField?: MetadataField,\n ) {\n return this.#group.updatePermissionPolicy(\n permissionType,\n policy,\n metadataField,\n );\n }\n\n isAdmin(inboxId: string) {\n return this.#group.isAdmin(inboxId);\n }\n\n isSuperAdmin(inboxId: string) {\n return this.#group.isSuperAdmin(inboxId);\n }\n\n async sync() {\n return this.#group.sync();\n }\n\n async addMembersByIdentifiers(identifiers: Identifier[]) {\n return this.#group.addMembers(identifiers);\n }\n\n async addMembers(inboxIds: string[]) {\n return this.#group.addMembersByInboxId(inboxIds);\n }\n\n async removeMembersByIdentifiers(identifiers: Identifier[]) {\n return this.#group.removeMembers(identifiers);\n }\n\n async removeMembers(inboxIds: string[]) {\n return this.#group.removeMembersByInboxId(inboxIds);\n }\n\n async addAdmin(inboxId: string) {\n return this.#group.addAdmin(inboxId);\n }\n\n async removeAdmin(inboxId: string) {\n return this.#group.removeAdmin(inboxId);\n }\n\n async addSuperAdmin(inboxId: string) {\n return this.#group.addSuperAdmin(inboxId);\n }\n\n async removeSuperAdmin(inboxId: string) {\n return this.#group.removeSuperAdmin(inboxId);\n }\n\n async publishMessages() {\n return this.#group.publishMessages();\n }\n\n sendOptimistic(encodedContent: EncodedContent) {\n return this.#group.sendOptimistic(encodedContent);\n }\n\n async send(encodedContent: EncodedContent) {\n return this.#group.send(encodedContent);\n }\n\n async messages(options?: SafeListMessagesOptions) {\n return this.#group.findMessages(\n options ? fromSafeListMessagesOptions(options) : undefined,\n );\n }\n\n get consentState() {\n return this.#group.consentState();\n }\n\n updateConsentState(state: ConsentState) {\n this.#group.updateConsentState(state);\n }\n\n dmPeerInboxId() {\n return this.#group.dmPeerInboxId();\n }\n\n messageDisappearingSettings() {\n return this.#group.messageDisappearingSettings();\n }\n\n async updateMessageDisappearingSettings(fromNs: bigint, inNs: bigint) {\n const settings = new MessageDisappearingSettings(fromNs, inNs);\n return this.#group.updateMessageDisappearingSettings(settings);\n }\n\n async removeMessageDisappearingSettings() {\n return this.#group.removeMessageDisappearingSettings();\n }\n\n isMessageDisappearingEnabled() {\n return this.#group.isMessageDisappearingEnabled();\n }\n\n stream(callback?: StreamCallback<Message>) {\n const on_message = (message: Message) => {\n void callback?.(null, message);\n };\n const on_error = (error: Error | null) => {\n void callback?.(error, undefined);\n };\n return this.#group.stream({ on_message, on_error });\n }\n\n pausedForVersion() {\n return this.#group.pausedForVersion();\n }\n}\n","import {\n ConversationType,\n type Consent,\n type ConsentState,\n type Conversation,\n type ConversationListItem,\n type Conversations,\n type Identifier,\n type Message,\n type UserPreference,\n} from \"@xmtp/wasm-bindings\";\nimport type { StreamCallback } from \"@/AsyncStream\";\nimport {\n fromSafeCreateDmOptions,\n fromSafeCreateGroupOptions,\n fromSafeListConversationsOptions,\n type HmacKeys,\n type SafeCreateDmOptions,\n type SafeCreateGroupOptions,\n type SafeListConversationsOptions,\n} from \"@/utils/conversions\";\nimport type { WorkerClient } from \"@/WorkerClient\";\nimport { WorkerConversation } from \"@/WorkerConversation\";\n\nexport class WorkerConversations {\n #client: WorkerClient;\n\n #conversations: Conversations;\n\n constructor(client: WorkerClient, conversations: Conversations) {\n this.#client = client;\n this.#conversations = conversations;\n }\n\n async sync() {\n return this.#conversations.sync();\n }\n\n async syncAll(consentStates?: ConsentState[]) {\n return this.#conversations.syncAllConversations(consentStates);\n }\n\n getConversationById(id: string) {\n try {\n const group = this.#conversations.findGroupById(id);\n // findGroupById will throw if group is not found\n return new WorkerConversation(this.#client, group);\n } catch {\n return undefined;\n }\n }\n\n getMessageById(id: string) {\n try {\n // findMessageById will throw if message is not found\n return this.#conversations.findMessageById(id);\n } catch {\n return undefined;\n }\n }\n\n getDmByInboxId(inboxId: string) {\n try {\n const group = this.#conversations.findDmByTargetInboxId(inboxId);\n return new WorkerConversation(this.#client, group);\n } catch {\n return undefined;\n }\n }\n\n list(options?: SafeListConversationsOptions) {\n const groups = this.#conversations.list(\n options ? fromSafeListConversationsOptions(options) : undefined,\n ) as ConversationListItem[];\n return groups.map(\n (item) => new WorkerConversation(this.#client, item.conversation),\n );\n }\n\n listGroups(\n options?: Omit<SafeListConversationsOptions, \"conversation_type\">,\n ) {\n const groups = this.#conversations.listGroups(\n options ? fromSafeListConversationsOptions(options) : undefined,\n ) as ConversationListItem[];\n return groups.map(\n (item) => new WorkerConversation(this.#client, item.conversation),\n );\n }\n\n listDms(options?: Omit<SafeListConversationsOptions, \"conversation_type\">) {\n const groups = this.#conversations.listDms(\n options ? fromSafeListConversationsOptions(options) : undefined,\n ) as ConversationListItem[];\n return groups.map(\n (item) => new WorkerConversation(this.#client, item.conversation),\n );\n }\n\n async newGroupWithIdentifiers(\n identifiers: Identifier[],\n options?: SafeCreateGroupOptions,\n ) {\n const group = await this.#conversations.createGroup(\n identifiers,\n options ? fromSafeCreateGroupOptions(options) : undefined,\n );\n return new WorkerConversation(this.#client, group);\n }\n\n async newGroup(inboxIds: string[], options?: SafeCreateGroupOptions) {\n const group = await this.#conversations.createGroupByInboxIds(\n inboxIds,\n options ? fromSafeCreateGroupOptions(options) : undefined,\n );\n return new WorkerConversation(this.#client, group);\n }\n\n async newDmWithIdentifier(\n identifier: Identifier,\n options?: SafeCreateDmOptions,\n ) {\n const group = await this.#conversations.createDm(\n identifier,\n options ? fromSafeCreateDmOptions(options) : undefined,\n );\n return new WorkerConversation(this.#client, group);\n }\n\n async newDm(inboxId: string, options?: SafeCreateDmOptions) {\n const group = await this.#conversations.createDmByInboxId(\n inboxId,\n options ? fromSafeCreateDmOptions(options) : undefined,\n );\n return new WorkerConversation(this.#client, group);\n }\n\n getHmacKeys() {\n return this.#conversations.getHmacKeys() as HmacKeys;\n }\n\n stream(\n callback?: StreamCallback<Conversation>,\n conversationType?: ConversationType,\n ) {\n const on_conversation = (conversation: Conversation) => {\n void callback?.(null, conversation);\n };\n const on_error = (error: Error | null) => {\n void callback?.(error, undefined);\n };\n return this.#conversations.stream(\n { on_conversation, on_error },\n conversationType,\n );\n }\n\n streamGroups(callback?: StreamCallback<Conversation>) {\n return this.#conversations.stream(callback, ConversationType.Group);\n }\n\n streamDms(callback?: StreamCallback<Conversation>) {\n return this.#conversations.stream(callback, ConversationType.Dm);\n }\n\n streamAllMessages(\n callback?: StreamCallback<Message>,\n conversationType?: ConversationType,\n ) {\n const on_message = (message: Message) => {\n void callback?.(null, message);\n };\n const on_error = (error: Error | null) => {\n void callback?.(error, undefined);\n };\n return this.#conversations.streamAllMessages(\n { on_message, on_error },\n conversationType,\n );\n }\n\n streamConsent(callback?: StreamCallback<Consent[]>) {\n const on_consent_update = (consent: Consent[]) => {\n void callback?.(null, consent);\n };\n const on_error = (error: Error | null) => {\n void callback?.(error, undefined);\n };\n return this.#conversations.streamConsent({ on_consent_update, on_error });\n }\n\n streamPreferences(callback?: StreamCallback<UserPreference[]>) {\n const on_user_preference_update = (preferences: UserPreference[]) => {\n void callback?.(null, preferences);\n };\n const on_error = (error: Error | null) => {\n void callback?.(error, undefined);\n };\n return this.#conversations.streamPreferences({\n on_user_preference_update,\n on_error,\n });\n }\n}\n","import {\n verifySignedWithPublicKey,\n type Client,\n type ConsentEntityType,\n type Identifier,\n type SignatureRequestType,\n} from \"@xmtp/wasm-bindings\";\nimport type { ClientOptions } from \"@/types\";\nimport { fromSafeConsent, type SafeConsent } from \"@/utils/conversions\";\nimport { createClient } from \"@/utils/createClient\";\nimport { WorkerConversations } from \"@/WorkerConversations\";\n\nexport class WorkerClient {\n #client: Client;\n\n #conversations: WorkerConversations;\n\n constructor(client: Client) {\n this.#client = client;\n this.#conversations = new WorkerConversations(this, client.conversations());\n }\n\n static async create(\n identifier: Identifier,\n encryptionKey: Uint8Array,\n options?: Omit<ClientOptions, \"codecs\">,\n ) {\n const client = await createClient(identifier, encryptionKey, options);\n return new WorkerClient(client);\n }\n\n get accountIdentifier() {\n return this.#client.accountIdentifier;\n }\n\n get inboxId() {\n return this.#client.inboxId;\n }\n\n get installationId() {\n return this.#client.installationId;\n }\n\n get installationIdBytes() {\n return this.#client.installationIdBytes;\n }\n\n get isRegistered() {\n return this.#client.isRegistered;\n }\n\n createInboxSignatureText() {\n try {\n return this.#client.createInboxSignatureText();\n } catch {\n return undefined;\n }\n }\n\n async addAccountSignatureText(identifier: Identifier) {\n try {\n return await this.#client.addWalletSignatureText(identifier);\n } catch {\n return undefined;\n }\n }\n\n async removeAccountSignatureText(identifier: Identifier) {\n try {\n return await this.#client.revokeWalletSignatureText(identifier);\n } catch {\n return undefined;\n }\n }\n\n async revokeAllAOtherInstallationsSignatureText() {\n try {\n return await this.#client.revokeAllOtherInstallationsSignatureText();\n } catch {\n return undefined;\n }\n }\n\n async revokeInstallationsSignatureText(installationIds: Uint8Array[]) {\n try {\n return await this.#client.revokeInstallationsSignatureText(\n installationIds,\n );\n } catch {\n return undefined;\n }\n }\n\n async addEcdsaSignature(type: SignatureRequestType, bytes: Uint8Array) {\n return this.#client.addEcdsaSignature(type, bytes);\n }\n\n async addScwSignature(\n type: SignatureRequestType,\n bytes: Uint8Array,\n chainId: bigint,\n blockNumber?: bigint,\n ) {\n return this.#client.addScwSignature(type, bytes, chainId, blockNumber);\n }\n\n async applySignatures() {\n return this.#client.applySignatureRequests();\n }\n\n async canMessage(identifiers: Identifier[]) {\n return this.#client.canMessage(identifiers) as Promise<\n Map<string, boolean>\n >;\n }\n\n async registerIdentity() {\n return this.#client.registerIdentity();\n }\n\n async findInboxIdByIdentifier(identifier: Identifier) {\n return this.#client.findInboxIdByIdentifier(identifier);\n }\n\n async inboxState(refreshFromNetwork: boolean) {\n return this.#client.inboxState(refreshFromNetwork);\n }\n\n async getLatestInboxState(inboxId: string) {\n return this.#client.getLatestInboxState(inboxId);\n }\n\n async setConsentStates(records: SafeConsent[]) {\n return this.#client.setConsentStates(records.map(fromSafeConsent));\n }\n\n async getConsentState(entityType: ConsentEntityType, entity: string) {\n return this.#client.getConsentState(entityType, entity);\n }\n\n get conversations() {\n return this.#conversations;\n }\n\n signWithInstallationKey(signatureText: string) {\n return this.#client.signWithInstallationKey(signatureText);\n }\n\n verifySignedWithInstallationKey(\n signatureText: string,\n signatureBytes: Uint8Array,\n ) {\n try {\n this.#client.verifySignedWithInstallationKey(\n signatureText,\n signatureBytes,\n );\n return true;\n } catch {\n return false;\n }\n }\n\n verifySignedWithPublicKey(\n signatureText: string,\n signatureBytes: Uint8Array,\n publicKey: Uint8Array,\n ) {\n try {\n verifySignedWithPublicKey(signatureText, signatureBytes, publicKey);\n return true;\n } catch {\n return false;\n }\n }\n}\n","import {\n createClient as createWasmClient,\n generateInboxId,\n getInboxIdForIdentifier,\n LogOptions,\n type Identifier,\n} from \"@xmtp/wasm-bindings\";\nimport { ApiUrls, HistorySyncUrls } from \"@/constants\";\nimport type { ClientOptions } from \"@/types\";\n\nexport const createClient = async (\n identifier: Identifier,\n encryptionKey: Uint8Array,\n options?: Omit<ClientOptions, \"codecs\">,\n) => {\n const host = options?.apiUrl || ApiUrls[options?.env || \"dev\"];\n const inboxId =\n (await getInboxIdForIdentifier(host, identifier)) ||\n generateInboxId(identifier);\n const dbPath =\n options?.dbPath || `xmtp-${options?.env || \"dev\"}-${inboxId}.db3`;\n const isLogging =\n options &&\n (options.loggingLevel !== undefined ||\n options.structuredLogging ||\n options.performanceLogging);\n\n const historySyncUrl =\n options?.historySyncUrl || HistorySyncUrls[options?.env || \"dev\"];\n\n return createWasmClient(\n host,\n inboxId,\n identifier,\n dbPath,\n encryptionKey,\n historySyncUrl,\n isLogging\n ? new LogOptions(\n options.structuredLogging ?? false,\n options.performanceLogging ?? false,\n options.loggingLevel,\n )\n : undefined,\n );\n};\n","import init, {\n type Consent,\n type Conversation,\n type Message,\n type StreamCloser,\n type UserPreference,\n} from \"@xmtp/wasm-bindings\";\nimport type {\n ClientEventsActions,\n ClientEventsClientMessageData,\n ClientEventsErrorData,\n ClientEventsWorkerPostMessageData,\n} from \"@/types\";\nimport type {\n ClientStreamEventsErrorData,\n ClientStreamEventsTypes,\n ClientStreamEventsWorkerPostMessageData,\n} from \"@/types/clientStreamEvents\";\nimport {\n fromEncodedContent,\n fromSafeEncodedContent,\n toSafeConsent,\n toSafeConversation,\n toSafeHmacKey,\n toSafeInboxState,\n toSafeMessage,\n toSafeMessageDisappearingSettings,\n} from \"@/utils/conversions\";\nimport { WorkerClient } from \"@/WorkerClient\";\nimport { WorkerConversation } from \"@/WorkerConversation\";\n\nlet maybeClient: WorkerClient | undefined;\nlet enableLogging = false;\n\nconst streamClosers = new Map<string, StreamCloser>();\n\n/**\n * Type-safe postMessage\n */\nconst postMessage = <A extends ClientEventsActions>(\n data: ClientEventsWorkerPostMessageData<A>,\n) => {\n self.postMessage(data);\n};\n\n/**\n * Type-safe postMessage for errors\n */\nconst postMessageError = (data: ClientEventsErrorData) => {\n self.postMessage(data);\n};\n\n/**\n * Type-safe postMessage for streams\n */\nconst postStreamMessage = <A extends ClientStreamEventsTypes>(\n data: ClientStreamEventsWorkerPostMessageData<A>,\n) => {\n self.postMessage(data);\n};\n\n/**\n * Type-safe postMessage for stream errors\n */\nconst postStreamMessageError = (data: ClientStreamEventsErrorData) => {\n self.postMessage(data);\n};\n\nself.onmessage = async (event: MessageEvent<ClientEventsClientMessageData>) => {\n const { action, id, data } = event.data;\n\n if (enableLogging) {\n console.log(\"client worker received event data\", event.data);\n }\n\n // initialize WASM module\n await init();\n\n try {\n // init is a special action that initializes the client\n if (action === \"init\" && !maybeClient) {\n maybeClient = await WorkerClient.create(\n data.identifier,\n data.encryptionKey,\n data.options,\n );\n enableLogging =\n data.options?.loggingLevel !== undefined &&\n data.options.loggingLevel !== \"off\";\n postMessage({\n id,\n action,\n result: {\n inboxId: maybeClient.inboxId,\n installationId: maybeClient.installationId,\n installationIdBytes: maybeClient.installationIdBytes,\n },\n });\n return;\n }\n\n // a client is required for all other actions\n if (!maybeClient) {\n throw new Error(\"Client not initialized\");\n }\n\n // let typescript know that a client will be available for the rest\n // of this code block\n const client = maybeClient;\n\n // helper function that throws an error if the group is not found\n const getGroup = (groupId: string) => {\n const group = client.conversations.getConversationById(groupId);\n if (!group) {\n throw new Error(`Group \"${groupId}\" not found`);\n }\n return group;\n };\n\n switch (action) {\n /**\n * Stream actions\n */\n case \"endStream\": {\n const streamCloser = streamClosers.get(data.streamId);\n if (streamCloser) {\n streamCloser.end();\n streamClosers.delete(data.streamId);\n postMessage({ id, action, result: undefined });\n } else {\n throw new Error(`Stream \"${data.streamId}\" not found`);\n }\n break;\n }\n /**\n * Client actions\n */\n case \"createInboxSignatureText\": {\n const result = client.createInboxSignatureText();\n postMessage({ id, action, result });\n break;\n }\n case \"addAccountSignatureText\": {\n const result = await client.addAccountSignatureText(data.newIdentifier);\n postMessage({ id, action, result });\n break;\n }\n case \"removeAccountSignatureText\": {\n const result = await client.removeAccountSignatureText(data.identifier);\n postMessage({ id, action, result });\n break;\n }\n case \"revokeAllOtherInstallationsSignatureText\": {\n const result = await client.revokeAllAOtherInstallationsSignatureText();\n postMessage({ id, action, result });\n break;\n }\n case \"revokeInstallationsSignatureText\": {\n const result = await client.revokeInstallationsSignatureText(\n data.installationIds,\n );\n postMessage({ id, action, result });\n break;\n }\n case \"addEcdsaSignature\":\n await client.addEcdsaSignature(data.type, data.bytes);\n postMessage({ id, action, result: undefined });\n break;\n case \"addScwSignature\":\n await client.addScwSignature(\n data.type,\n data.bytes,\n data.chainId,\n data.blockNumber,\n );\n postMessage({ id, action, result: undefined });\n break;\n case \"applySignatures\":\n await client.applySignatures();\n postMessage({ id, action, result: undefined });\n break;\n case \"registerIdentity\":\n await client.registerIdentity();\n postMessage({ id, action, result: undefined });\n break;\n case \"isRegistered\": {\n const result = client.isRegistered;\n postMessage({ id, action, result });\n break;\n }\n case \"canMessage\": {\n const result = await client.canMessage(data.identifiers);\n postMessage({ id, action, result });\n break;\n }\n case \"inboxState\": {\n const inboxState = await client.inboxState(data.refreshFromNetwork);\n const result = toSafeInboxState(inboxState);\n postMessage({ id, action, result });\n break;\n }\n case \"getLatestInboxState\": {\n const inboxState = await client.getLatestInboxState(data.inboxId);\n const result = toSafeInboxState(inboxState);\n postMessage({ id, action, result });\n break;\n }\n case \"setConsentStates\": {\n await client.setConsentStates(data.records);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"getConsentState\": {\n const result = await client.getConsentState(\n data.entityType,\n data.entity,\n );\n postMessage({ id, action, result });\n break;\n }\n case \"findInboxIdByIdentifier\": {\n const result = await client.findInboxIdByIdentifier(data.identifier);\n postMessage({ id, action, result });\n break;\n }\n case \"signWithInstallationKey\": {\n const result = client.signWithInstallationKey(data.signatureText);\n postMessage({ id, action, result });\n break;\n }\n case \"verifySignedWithInstallationKey\": {\n const result = client.verifySignedWithInstallationKey(\n data.signatureText,\n data.signatureBytes,\n );\n postMessage({ id, action, result });\n break;\n }\n case \"verifySignedWithPublicKey\": {\n const result = client.verifySignedWithPublicKey(\n data.signatureText,\n data.signatureBytes,\n data.publicKey,\n );\n postMessage({ id, action, result });\n break;\n }\n /**\n * Conversations actions\n */\n case \"streamAllGroups\": {\n const streamCallback = async (\n error: Error | null,\n value: Conversation | undefined,\n ) => {\n if (error) {\n postStreamMessageError({\n type: \"group\",\n streamId: data.streamId,\n error: error.message,\n });\n } else {\n postStreamMessage({\n type: \"group\",\n streamId: data.streamId,\n result: value\n ? await toSafeConversation(\n new WorkerConversation(client, value),\n )\n : undefined,\n });\n }\n };\n const streamCloser = client.conversations.stream(\n streamCallback,\n data.conversationType,\n );\n streamClosers.set(data.streamId, streamCloser);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"streamAllMessages\": {\n const streamCallback = (\n error: Error | null,\n value: Message | undefined,\n ) => {\n if (error) {\n postStreamMessageError({\n type: \"message\",\n streamId: data.streamId,\n error: error.message,\n });\n } else {\n postStreamMessage({\n type: \"message\",\n streamId: data.streamId,\n result: value ? toSafeMessage(value) : undefined,\n });\n }\n };\n const streamCloser = client.conversations.streamAllMessages(\n streamCallback,\n data.conversationType,\n );\n streamClosers.set(data.streamId, streamCloser);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"streamConsent\": {\n const streamCallback = (\n error: Error | null,\n value: Consent[] | undefined,\n ) => {\n if (error) {\n postStreamMessageError({\n type: \"consent\",\n streamId: data.streamId,\n error: error.message,\n });\n } else {\n postStreamMessage({\n type: \"consent\",\n streamId: data.streamId,\n result: value?.map(toSafeConsent) ?? [],\n });\n }\n };\n const streamCloser = client.conversations.streamConsent(streamCallback);\n streamClosers.set(data.streamId, streamCloser);\n postMessage({\n id,\n action,\n result: undefined,\n });\n break;\n }\n case \"streamPreferences\": {\n const streamCallback = (\n error: Error | null,\n value: UserPreference[] | undefined,\n ) => {\n if (error) {\n postStreamMessageError({\n type: \"preferences\",\n streamId: data.streamId,\n error: error.message,\n });\n } else {\n postStreamMessage({\n type: \"preferences\",\n streamId: data.streamId,\n result: value ?? undefined,\n });\n }\n };\n const streamCloser =\n client.conversations.streamPreferences(streamCallback);\n streamClosers.set(data.streamId, streamCloser);\n postMessage({\n id,\n action,\n result: undefined,\n });\n break;\n }\n case \"getConversations\": {\n const conversations = client.conversations.list(data.options);\n const result = await Promise.all(\n conversations.map((conversation) => toSafeConversation(conversation)),\n );\n postMessage({ id, action, result });\n break;\n }\n case \"getGroups\": {\n const conversations = client.conversations.listGroups(data.options);\n const result = await Promise.all(\n conversations.map((conversation) => toSafeConversation(conversation)),\n );\n postMessage({ id, action, result });\n break;\n }\n case \"getDms\": {\n const conversations = client.conversations.listDms(data.options);\n const result = await Promise.all(\n conversations.map((conversation) => toSafeConversation(conversation)),\n );\n postMessage({ id, action, result });\n break;\n }\n case \"newGroupWithIdentifiers\": {\n const conversation = await client.conversations.newGroupWithIdentifiers(\n data.identifiers,\n data.options,\n );\n const result = await toSafeConversation(conversation);\n postMessage({ id, action, result });\n break;\n }\n case \"newGroupWithInboxIds\": {\n const conversation = await client.conversations.newGroup(\n data.inboxIds,\n data.options,\n );\n const result = await toSafeConversation(conversation);\n postMessage({ id, action, result });\n break;\n }\n case \"newDmWithIdentifier\": {\n const conversation = await client.conversations.newDmWithIdentifier(\n data.identifier,\n data.options,\n );\n const result = await toSafeConversation(conversation);\n postMessage({ id, action, result });\n break;\n }\n case \"newDmWithInboxId\": {\n const conversation = await client.conversations.newDm(\n data.inboxId,\n data.options,\n );\n const result = await toSafeConversation(conversation);\n postMessage({ id, action, result });\n break;\n }\n case \"syncConversations\": {\n await client.conversations.sync();\n postMessage({\n id,\n action,\n result: undefined,\n });\n break;\n }\n case \"syncAllConversations\": {\n await client.conversations.syncAll(data.consentStates);\n postMessage({\n id,\n action,\n result: undefined,\n });\n break;\n }\n case \"getConversationById\": {\n const conversation = client.conversations.getConversationById(data.id);\n const result = conversation\n ? await toSafeConversation(conversation)\n : undefined;\n postMessage({ id, action, result });\n break;\n }\n case \"getMessageById\": {\n const message = client.conversations.getMessageById(data.id);\n const result = message ? toSafeMessage(message) : undefined;\n postMessage({ id, action, result });\n break;\n }\n case \"getDmByInboxId\": {\n const conversation = client.conversations.getDmByInboxId(data.inboxId);\n const result = conversation\n ? await toSafeConversation(conversation)\n : undefined;\n postMessage({ id, action, result });\n break;\n }\n case \"getHmacKeys\": {\n const hmacKeys = client.conversations.getHmacKeys();\n const result = Object.fromEntries(\n Array.from(hmacKeys.entries()).map(([groupId, hmacKeys]) => [\n groupId,\n hmacKeys.map(toSafeHmacKey),\n ]),\n );\n postMessage({ id, action, result });\n break;\n }\n /**\n * Group actions\n */\n case \"syncGroup\": {\n const group = getGroup(data.id);\n await group.sync();\n const result = await toSafeConversation(group);\n postMessage({ id, action, result });\n break;\n }\n case \"updateGroupName\": {\n const group = getGroup(data.id);\n await group.updateName(data.name);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"updateGroupDescription\": {\n const group = getGroup(data.id);\n await group.updateDescription(data.description);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"updateGroupImageUrlSquare\": {\n const group = getGroup(data.id);\n await group.updateImageUrl(data.imageUrl);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"sendGroupMessage\": {\n const group = getGroup(data.id);\n const result = await group.send(\n fromEncodedContent(fromSafeEncodedContent(data.content)),\n );\n postMessage({ id, action, result });\n break;\n }\n case \"sendOptimisticGroupMessage\": {\n const group = getGroup(data.id);\n const result = group.sendOptimistic(\n fromEncodedContent(fromSafeEncodedContent(data.content)),\n );\n postMessage({ id, action, result });\n break;\n }\n case \"publishGroupMessages\": {\n const group = getGroup(data.id);\n await group.publishMessages();\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"getGroupMessages\": {\n const group = getGroup(data.id);\n const messages = await group.messages(data.options);\n const result = messages.map((message) => toSafeMessage(message));\n postMessage({ id, action, result });\n break;\n }\n case \"getGroupMembers\": {\n const group = getGroup(data.id);\n const result = await group.members();\n postMessage({ id, action, result });\n break;\n }\n case \"getGroupAdmins\": {\n const group = getGroup(data.id);\n const result = group.admins;\n postMessage({ id, action, result });\n break;\n }\n case \"getGroupSuperAdmins\": {\n const group = getGroup(data.id);\n const result = group.superAdmins;\n postMessage({ id, action, result });\n break;\n }\n case \"getGroupConsentState\": {\n const group = getGroup(data.id);\n const result = group.consentState;\n postMessage({ id, action, result });\n break;\n }\n case \"updateGroupConsentState\": {\n const group = getGroup(data.id);\n group.updateConsentState(data.state);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"addGroupAdmin\": {\n const group = getGroup(data.id);\n await group.addAdmin(data.inboxId);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"removeGroupAdmin\": {\n const group = getGroup(data.id);\n await group.removeAdmin(data.inboxId);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"addGroupSuperAdmin\": {\n const group = getGroup(data.id);\n await group.addSuperAdmin(data.inboxId);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"removeGroupSuperAdmin\": {\n const group = getGroup(data.id);\n await group.removeSuperAdmin(data.inboxId);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"addGroupMembers\": {\n const group = getGroup(data.id);\n await group.addMembersByIdentifiers(data.identifiers);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"removeGroupMembers\": {\n const group = getGroup(data.id);\n await group.removeMembersByIdentifiers(data.identifiers);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"addGroupMembersByInboxId\": {\n const group = getGroup(data.id);\n await group.addMembers(data.inboxIds);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"removeGroupMembersByInboxId\": {\n const group = getGroup(data.id);\n await group.removeMembers(data.inboxIds);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"isGroupAdmin\": {\n const group = getGroup(data.id);\n const result = group.isAdmin(data.inboxId);\n postMessage({ id, action, result });\n break;\n }\n case \"isGroupSuperAdmin\": {\n const group = getGroup(data.id);\n const result = group.isSuperAdmin(data.inboxId);\n postMessage({ id, action, result });\n break;\n }\n case \"getDmPeerInboxId\": {\n const group = getGroup(data.id);\n const result = group.dmPeerInboxId();\n postMessage({ id, action, result });\n break;\n }\n case \"updateGroupPermissionPolicy\": {\n const group = getGroup(data.id);\n await group.updatePermission(\n data.permissionType,\n data.policy,\n data.metadataField,\n );\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"getGroupPermissions\": {\n const group = getGroup(data.id);\n const safeConversation = await toSafeConversation(group);\n const result = safeConversation.permissions;\n postMessage({ id, action, result });\n break;\n }\n case \"getGroupMessageDisappearingSettings\": {\n const group = getGroup(data.id);\n const settings = group.messageDisappearingSettings();\n const result = settings\n ? toSafeMessageDisappearingSettings(settings)\n : undefined;\n postMessage({ id, action, result });\n break;\n }\n case \"updateGroupMessageDisappearingSettings\": {\n const group = getGroup(data.id);\n await group.updateMessageDisappearingSettings(data.fromNs, data.inNs);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"removeGroupMessageDisappearingSettings\": {\n const group = getGroup(data.id);\n await group.removeMessageDisappearingSettings();\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"isGroupMessageDisappearingEnabled\": {\n const group = getGroup(data.id);\n const result = group.isMessageDisappearingEnabled();\n postMessage({ id, action, result });\n break;\n }\n case \"streamGroupMessages\": {\n const group = getGroup(data.groupId);\n const streamCallback = (\n error: Error | null,\n value: Message | undefined,\n ) => {\n if (error) {\n postStreamMessageError({\n type: \"message\",\n streamId: data.streamId,\n error: error.message,\n });\n } else {\n postStreamMessage({\n type: \"message\",\n streamId: data.streamId,\n result: value ? toSafeMessage(value) : undefined,\n });\n }\n };\n const streamCloser = group.stream(streamCallback);\n streamClosers.set(data.streamId, streamCloser);\n postMessage({ id, action, result: undefined });\n break;\n }\n case \"getGroupPausedForVersion\": {\n const group = getGroup(data.id);\n const result = group.pausedForVersion();\n postMessage({ id, action, result });\n break;\n }\n }\n } catch (e) {\n postMessageError({\n id,\n action,\n error: (e as Error).message,\n });\n }\n};\n"],"names":["fromEncodedContent","content","WasmEncodedContent","contentTypeId","type","WasmContentTypeId","authorityId","typeId","versionMajor","versionMinor","Map","Object","entries","parameters","fallback","compression","toSafeEncodedContent","fromSafeEncodedContent","ContentTypeId","toSafeMessage","message","fromEntries","convoId","deliveryStatus","id","kind","senderInboxId","sentAtNs","fromSafeListConversationsOptions","options","ListConversationsOptions","consentStates","createdAfterNs","createdBeforeNs","includeDuplicateDms","limit","fromSafeCreateGroupOptions","CreateGroupOptions","permissions","name","imageUrlSquare","description","customPermissionPolicySet","GroupPermissionsOptions","CustomPolicy","policySet","PermissionPolicySet","addMemberPolicy","removeMemberPolicy","addAdminPolicy","removeAdminPolicy","updateGroupNamePolicy","updateGroupDescriptionPolicy","updateGroupImageUrlSquarePolicy","updateMessageDisappearingPolicy","undefined","messageDisappearingSettings","fromSafeMessageDisappearingSettings","fromSafeCreateDmOptions","CreateDMOptions","toSafeConversation","async","conversation","imageUrl","isActive","addedByInboxId","metadata","admins","superAdmins","createdAtNs","policyType","toSafeInstallation","installation","bytes","clientTimestampNs","toSafeInboxState","inboxState","accountIdentifiers","inboxId","installations","map","recoveryIdentifier","toSafeConsent","consent","entity","entityType","state","fromSafeConsent","Consent","toSafeHmacKey","hmacKey","key","epoch","settings","MessageDisappearingSettings","fromNs","inNs","ApiUrls","local","dev","production","HistorySyncUrls","WorkerConversation","client","group","constructor","this","groupName","updateName","updateGroupName","groupImageUrlSquare","updateImageUrl","updateGroupImageUrlSquare","groupDescription","updateDescription","updateGroupDescription","groupMetadata","creatorInboxId","conversationType","members","listMembers","member","consentState","installationIds","permissionLevel","toSafeGroupMember","adminList","superAdminList","groupPermissions","updatePermission","permissionType","policy","metadataField","updatePermissionPolicy","isAdmin","isSuperAdmin","sync","addMembersByIdentifiers","identifiers","addMembers","inboxIds","addMembersByInboxId","removeMembersByIdentifiers","removeMembers","removeMembersByInboxId","addAdmin","removeAdmin","addSuperAdmin","removeSuperAdmin","publishMessages","sendOptimistic","encodedContent","send","messages","findMessages","ListMessagesOptions","sentBeforeNs","sentAfterNs","direction","contentTypes","fromSafeListMessagesOptions","updateConsentState","dmPeerInboxId","updateMessageDisappearingSettings","removeMessageDisappearingSettings","isMessageDisappearingEnabled","stream","callback","on_message","on_error","error","pausedForVersion","WorkerConversations","conversations","syncAll","syncAllConversations","getConversationById","findGroupById","getMessageById","findMessageById","getDmByInboxId","findDmByTargetInboxId","list","item","listGroups","listDms","newGroupWithIdentifiers","createGroup","newGroup","createGroupByInboxIds","newDmWithIdentifier","identifier","createDm","newDm","createDmByInboxId","getHmacKeys","on_conversation","streamGroups","ConversationType","Group","streamDms","Dm","streamAllMessages","streamConsent","on_consent_update","streamPreferences","on_user_preference_update","preferences","WorkerClient","create","encryptionKey","host","apiUrl","env","getInboxIdForIdentifier","generateInboxId","dbPath","isLogging","loggingLevel","structuredLogging","performanceLogging","createWasmClient","historySyncUrl","LogOptions","createClient","accountIdentifier","installationId","installationIdBytes","isRegistered","createInboxSignatureText","addAccountSignatureText","addWalletSignatureText","removeAccountSignatureText","revokeWalletSignatureText","revokeAllAOtherInstallationsSignatureText","revokeAllOtherInstallationsSignatureText","revokeInstallationsSignatureText","addEcdsaSignature","addScwSignature","chainId","blockNumber","applySignatures","applySignatureRequests","canMessage","registerIdentity","findInboxIdByIdentifier","refreshFromNetwork","getLatestInboxState","setConsentStates","records","getConsentState","signWithInstallationKey","signatureText","verifySignedWithInstallationKey","signatureBytes","verifySignedWithPublicKey","publicKey","maybeClient","enableLogging","streamClosers","postMessage","data","self","postStreamMessage","postStreamMessageError","onmessage","event","action","console","log","init","result","Error","getGroup","groupId","streamCloser","get","streamId","end","delete","newIdentifier","streamCallback","value","set","Promise","all","hmacKeys","Array","from","toSafeMessageDisappearingSettings","e","postMessageError"],"mappings":"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"}
|
package/dist/workers/utils.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e,{generateInboxId as t,
|
|
1
|
+
import e,{generateInboxId as t,getInboxIdForIdentifier as a}from"@xmtp/wasm-bindings";const o={local:"http://localhost:5555",dev:"https://dev.xmtp.network",production:"https://production.xmtp.network"},s=e=>{self.postMessage(e)},i=async(e,t)=>a(t?o[t]:o.dev,e);self.onmessage=async a=>{const{action:o,id:n,data:r}=a.data;r.enableLogging&&console.log("utils worker received event data",a.data),await e();try{switch(o){case"generateInboxId":s({id:n,action:o,result:t(r.identifier)});break;case"getInboxIdForIdentifier":s({id:n,action:o,result:await i(r.identifier,r.env)})}}catch(e){(e=>{self.postMessage(e)})({id:n,action:o,error:e.message})}};
|
|
2
2
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../src/constants.ts","../../src/workers/utils.ts"],"sourcesContent":["export const ApiUrls = {\n local: \"http://localhost:5555\",\n dev: \"https://dev.xmtp.network\",\n production: \"https://production.xmtp.network\",\n} as const;\n\nexport const HistorySyncUrls = {\n local: \"http://localhost:5558\",\n dev: \"https://message-history.dev.ephemera.network\",\n production: \"https://message-history.production.ephemera.network\",\n} as const;\n","import init, {\n generateInboxId as
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../src/constants.ts","../../src/workers/utils.ts"],"sourcesContent":["export const ApiUrls = {\n local: \"http://localhost:5555\",\n dev: \"https://dev.xmtp.network\",\n production: \"https://production.xmtp.network\",\n} as const;\n\nexport const HistorySyncUrls = {\n local: \"http://localhost:5558\",\n dev: \"https://message-history.dev.ephemera.network\",\n production: \"https://message-history.production.ephemera.network\",\n} as const;\n","import init, {\n generateInboxId,\n getInboxIdForIdentifier as get_inbox_id_for_identifier,\n type Identifier,\n} from \"@xmtp/wasm-bindings\";\nimport { ApiUrls } from \"@/constants\";\nimport type {\n UtilsEventsActions,\n UtilsEventsClientMessageData,\n UtilsEventsErrorData,\n UtilsEventsWorkerPostMessageData,\n XmtpEnv,\n} from \"@/types\";\n\n/**\n * Type-safe postMessage\n */\nconst postMessage = <A extends UtilsEventsActions>(\n data: UtilsEventsWorkerPostMessageData<A>,\n) => {\n self.postMessage(data);\n};\n\n/**\n * Type-safe postMessage for errors\n */\nconst postMessageError = (data: UtilsEventsErrorData) => {\n self.postMessage(data);\n};\n\nconst getInboxIdForIdentifier = async (\n identifier: Identifier,\n env?: XmtpEnv,\n) => {\n const host = env ? ApiUrls[env] : ApiUrls.dev;\n return get_inbox_id_for_identifier(host, identifier);\n};\n\nself.onmessage = async (event: MessageEvent<UtilsEventsClientMessageData>) => {\n const { action, id, data } = event.data;\n if (data.enableLogging) {\n console.log(\"utils worker received event data\", event.data);\n }\n\n // initialize WASM module\n await init();\n\n try {\n switch (action) {\n case \"generateInboxId\":\n postMessage({\n id,\n action,\n result: generateInboxId(data.identifier),\n });\n break;\n case \"getInboxIdForIdentifier\":\n postMessage({\n id,\n action,\n result: await getInboxIdForIdentifier(data.identifier, data.env),\n });\n break;\n // no default\n }\n } catch (e) {\n postMessageError({\n id,\n action,\n error: (e as Error).message,\n });\n }\n};\n"],"names":["ApiUrls","local","dev","production","postMessage","data","self","getInboxIdForIdentifier","async","identifier","env","get_inbox_id_for_identifier","onmessage","event","action","id","enableLogging","console","log","init","result","generateInboxId","e","postMessageError","error","message"],"mappings":"sFAAO,MAAMA,EAAU,CACrBC,MAAO,wBACPC,IAAK,2BACLC,WAAY,mCCcRC,EACJC,IAEAC,KAAKF,YAAYC,EAAK,EAUlBE,EAA0BC,MAC9BC,EACAC,IAGOC,EADMD,EAAMV,EAAQU,GAAOV,EAAQE,IACDO,GAG3CH,KAAKM,UAAYJ,MAAOK,IACtB,MAAMC,OAAEA,EAAMC,GAAEA,EAAEV,KAAEA,GAASQ,EAAMR,KAC/BA,EAAKW,eACPC,QAAQC,IAAI,mCAAoCL,EAAMR,YAIlDc,IAEN,IACE,OAAQL,GACN,IAAK,kBACHV,EAAY,CACVW,KACAD,SACAM,OAAQC,EAAgBhB,EAAKI,cAE/B,MACF,IAAK,0BACHL,EAAY,CACVW,KACAD,SACAM,aAAcb,EAAwBF,EAAKI,WAAYJ,EAAKK,QAKlE,MAAOY,GAvCc,CAACjB,IACxBC,KAAKF,YAAYC,EAAK,EAuCpBkB,CAAiB,CACfR,KACAD,SACAU,MAAQF,EAAYG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xmtp/browser-sdk",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "1.0.0-rc1",
|
|
4
4
|
"description": "XMTP client SDK for browsers written in TypeScript",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"xmtp",
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
"clean:dist": "rm -rf dist",
|
|
45
45
|
"dev": "yarn clean:dist && yarn rollup -c --watch",
|
|
46
46
|
"test": "vitest run",
|
|
47
|
+
"test:debug": "vitest run --inspect-brk --no-file-parallelism",
|
|
47
48
|
"typecheck": "tsc",
|
|
48
49
|
"typedoc": "typedoc"
|
|
49
50
|
},
|
|
@@ -64,7 +65,7 @@
|
|
|
64
65
|
"@xmtp/content-type-primitives": "^2.0.0",
|
|
65
66
|
"@xmtp/content-type-text": "^2.0.0",
|
|
66
67
|
"@xmtp/proto": "^3.72.3",
|
|
67
|
-
"@xmtp/wasm-bindings": "^0.0
|
|
68
|
+
"@xmtp/wasm-bindings": "^1.0.0-rc4",
|
|
68
69
|
"uuid": "^11.0.3"
|
|
69
70
|
},
|
|
70
71
|
"devDependencies": {
|
|
@@ -77,7 +78,7 @@
|
|
|
77
78
|
"@vitest/coverage-v8": "^2.0.3",
|
|
78
79
|
"@web/rollup-plugin-copy": "^0.5.1",
|
|
79
80
|
"playwright": "^1.49.1",
|
|
80
|
-
"rollup": "^4.
|
|
81
|
+
"rollup": "^4.34.9",
|
|
81
82
|
"rollup-plugin-dts": "^6.1.1",
|
|
82
83
|
"rollup-plugin-filesize": "^10.0.0",
|
|
83
84
|
"rollup-plugin-tsconfig-paths": "^1.5.2",
|
|
@@ -94,7 +95,6 @@
|
|
|
94
95
|
},
|
|
95
96
|
"publishConfig": {
|
|
96
97
|
"access": "public",
|
|
97
|
-
"provenance": true,
|
|
98
98
|
"registry": "https://registry.npmjs.org/"
|
|
99
99
|
}
|
|
100
100
|
}
|