@xmtp/browser-sdk 0.0.1

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/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ import{GroupUpdatedCodec as e,ContentTypeGroupUpdated as t}from"@xmtp/content-type-group-updated";import{ContentTypeText as s,TextCodec as n}from"@xmtp/content-type-text";import{WasmContentTypeId as i,WasmEncodedContent as r,WasmListMessagesOptions as o,WasmListConversationsOptions as a,WasmCreateGroupOptions as d,WasmConsent as c,WasmGroupMember as p,WasmGroupMessageKind as l,WasmDeliveryStatus as m}from"@xmtp/wasm-bindings";import{v4 as h}from"uuid";import{ContentTypeId as u}from"@xmtp/content-type-primitives";const g=e=>{console.error(`Worker error on line ${e.lineno} in "${e.filename}"`),console.error(e.message)};class y{#e;#t;#s=new Map;constructor(e,t){this.#e=e,this.#e.addEventListener("message",this.handleMessage),this.#e.addEventListener("error",g),this.#t=t}sendMessage(e,t){const s=h();this.#e.postMessage({action:e,id:s,data:t});return new Promise(((e,t)=>{this.#s.set(s,{resolve:e,reject:t})}))}handleMessage=e=>{const t=e.data;this.#t&&console.log("client received event data",t);const s=this.#s.get(t.id);s&&(this.#s.delete(t.id),"error"in t?s.reject(new Error(t.error)):s.resolve(t.result))};close(){this.#e.removeEventListener("message",this.handleMessage),this.#e.removeEventListener("error",g),this.#e.terminate()}}const b=e=>new u({authorityId:e.authority_id,typeId:e.type_id,versionMajor:e.version_major,versionMinor:e.version_minor}),v=e=>new i(e.authorityId,e.typeId,e.versionMajor,e.versionMinor),I=e=>({authorityId:e.authorityId,typeId:e.typeId,versionMajor:e.versionMajor,versionMinor:e.versionMinor}),M=e=>new u({authorityId:e.authorityId,typeId:e.typeId,versionMajor:e.versionMajor,versionMinor:e.versionMinor}),_=e=>({type:b(e.type),parameters:Object.fromEntries(e.parameters),fallback:e.fallback,compression:e.compression,content:e.content}),w=e=>new r(v(e.type),new Map(Object.entries(e.parameters)),e.fallback,e.compression,e.content),x=e=>({type:I(e.type),parameters:e.parameters,fallback:e.fallback,compression:e.compression,content:e.content}),A=e=>({type:M(e.type),parameters:e.parameters,fallback:e.fallback,compression:e.compression,content:e.content}),S=e=>({content:x(_(e.content)),convoId:e.convo_id,deliveryStatus:e.delivery_status,id:e.id,kind:e.kind,senderInboxId:e.sender_inbox_id,sentAtNs:e.sent_at_ns}),f=e=>({delivery_status:e.delivery_status,limit:e.limit,sent_after_ns:e.sent_after_ns,sent_before_ns:e.sent_before_ns}),k=e=>new o(e.sent_before_ns,e.sent_after_ns,e.limit,e.delivery_status),U=e=>({created_after_ns:e.created_after_ns,created_before_ns:e.created_before_ns,limit:e.limit}),G=e=>new a(e.created_after_ns,e.created_before_ns,e.limit),L=e=>({permissions:e.permissions,name:e.group_name,imageUrlSquare:e.group_image_url_square,description:e.group_description,pinnedFrameUrl:e.group_pinned_frame_url}),C=e=>new d(e.permissions,e.name,e.imageUrlSquare,e.description,e.pinnedFrameUrl),F=e=>({id:e.id,name:e.name,imageUrl:e.imageUrl,description:e.description,pinnedFrameUrl:e.pinnedFrameUrl,permissions:{policyType:e.permissions.policyType,policySet:{addAdminPolicy:e.permissions.policySet.add_admin_policy,addMemberPolicy:e.permissions.policySet.add_member_policy,removeAdminPolicy:e.permissions.policySet.remove_admin_policy,removeMemberPolicy:e.permissions.policySet.remove_member_policy,updateGroupDescriptionPolicy:e.permissions.policySet.update_group_description_policy,updateGroupImageUrlSquarePolicy:e.permissions.policySet.update_group_image_url_square_policy,updateGroupNamePolicy:e.permissions.policySet.update_group_name_policy,updateGroupPinnedFrameUrlPolicy:e.permissions.policySet.update_group_pinned_frame_url_policy}},isActive:e.isActive,addedByInboxId:e.addedByInboxId,metadata:e.metadata,admins:e.admins,superAdmins:e.superAdmins,createdAtNs:e.createdAtNs}),N=e=>({id:e.id,clientTimestampNs:e.client_timestamp_ns}),B=e=>({accountAddresses:e.account_addresses,inboxId:e.inbox_id,installations:e.installations.map(N),recoveryAddress:e.recovery_address}),E=e=>({entity:e.entity,entityType:e.entity_type,state:e.state}),T=e=>new c(e.entityType,e.state,e.entity),j=e=>({accountAddresses:e.account_addresses,consentState:e.consent_state,inboxId:e.inbox_id,installationIds:e.installation_ids,permissionLevel:e.permission_level}),P=e=>new p(e.inboxId,e.accountAddresses,e.installationIds,e.permissionLevel,e.consentState);class R{#n;content;contentType;conversationId;deliveryStatus;fallback;compression;id;kind;parameters;senderInboxId;sentAtNs;constructor(e,t){switch(this.#n=e,this.id=t.id,this.sentAtNs=t.sentAtNs,this.conversationId=t.convoId,this.senderInboxId=t.senderInboxId,t.kind){case l.Application:this.kind="application";break;case l.MembershipChange:this.kind="membership_change"}switch(t.deliveryStatus){case m.Unpublished:this.deliveryStatus="unpublished";break;case m.Published:this.deliveryStatus="published";break;case m.Failed:this.deliveryStatus="failed"}this.contentType=M(t.content.type),this.parameters=new Map(Object.entries(t.content.parameters)),this.fallback=t.content.fallback,this.compression=t.content.compression,this.content=this.#n.decodeContent(t,this.contentType)}}class q{#n;#i;#r;#o;#a;#d;#c;#p;#l;#m;#h;constructor(e,t,s){this.#n=e,this.#i=t,this.#u(s)}#u(e){this.#r=e?.name??"",this.#o=e?.imageUrl??"",this.#a=e?.description??"",this.#d=e?.pinnedFrameUrl??"",this.#c=e?.isActive??void 0,this.#p=e?.addedByInboxId??"",this.#l=e?.metadata??void 0,this.#m=e?.permissions??void 0,this.#h=e?.createdAtNs??void 0}get id(){return this.#i}get name(){return this.#r}async updateName(e){await this.#n.sendMessage("updateGroupName",{id:this.#i,name:e}),this.#r=e}get imageUrl(){return this.#o}async updateImageUrl(e){await this.#n.sendMessage("updateGroupImageUrlSquare",{id:this.#i,imageUrl:e}),this.#o=e}get description(){return this.#a}async updateDescription(e){await this.#n.sendMessage("updateGroupDescription",{id:this.#i,description:e}),this.#a=e}get pinnedFrameUrl(){return this.#d}async updatePinnedFrameUrl(e){await this.#n.sendMessage("updateGroupPinnedFrameUrl",{id:this.#i,pinnedFrameUrl:e}),this.#d=e}get isActive(){return this.#c}get addedByInboxId(){return this.#p}get createdAtNs(){return this.#h}get createdAt(){return this.#h?(e=this.#h,new Date(Number(e/1000000n))):void 0;var e}get metadata(){return this.#l}async members(){return this.#n.sendMessage("getGroupMembers",{id:this.#i})}async admins(){return this.#n.sendMessage("getGroupAdmins",{id:this.#i})}async superAdmins(){return this.#n.sendMessage("getGroupSuperAdmins",{id:this.#i})}get permissions(){return this.#m}async isAdmin(e){return(await this.admins()).includes(e)}async isSuperAdmin(e){return(await this.superAdmins()).includes(e)}async sync(){const e=await this.#n.sendMessage("syncGroup",{id:this.#i});this.#u(e)}async addMembers(e){return this.#n.sendMessage("addGroupMembers",{id:this.#i,accountAddresses:e})}async addMembersByInboxId(e){return this.#n.sendMessage("addGroupMembersByInboxId",{id:this.#i,inboxIds:e})}async removeMembers(e){return this.#n.sendMessage("removeGroupMembers",{id:this.#i,accountAddresses:e})}async removeMembersByInboxId(e){return this.#n.sendMessage("removeGroupMembersByInboxId",{id:this.#i,inboxIds:e})}async addAdmin(e){return this.#n.sendMessage("addGroupAdmin",{id:this.#i,inboxId:e})}async removeAdmin(e){return this.#n.sendMessage("removeGroupAdmin",{id:this.#i,inboxId:e})}async addSuperAdmin(e){return this.#n.sendMessage("addGroupSuperAdmin",{id:this.#i,inboxId:e})}async removeSuperAdmin(e){return this.#n.sendMessage("removeGroupSuperAdmin",{id:this.#i,inboxId:e})}async publishMessages(){return this.#n.sendMessage("publishGroupMessages",{id:this.#i})}async sendOptimistic(e,t){if("string"!=typeof e&&!t)throw new Error("Content type is required when sending content other than text");const n="string"==typeof e?this.#n.encodeContent(e,t??s):this.#n.encodeContent(e,t);return this.#n.sendMessage("sendOptimisticGroupMessage",{id:this.#i,content:n})}async send(e,t){if("string"!=typeof e&&!t)throw new Error("Content type is required when sending content other than text");const n="string"==typeof e?this.#n.encodeContent(e,t??s):this.#n.encodeContent(e,t);return this.#n.sendMessage("sendGroupMessage",{id:this.#i,content:n})}async messages(e){return(await this.#n.sendMessage("getGroupMessages",{id:this.#i,options:e})).map((e=>new R(this.#n,e)))}async consentState(){return this.#n.sendMessage("getGroupConsentState",{id:this.#i})}async updateConsentState(e){return this.#n.sendMessage("updateGroupConsentState",{id:this.#i,state:e})}}class W{#n;constructor(e){this.#n=e}async sync(){return this.#n.sendMessage("syncConversations",void 0)}async getConversationById(e){return this.#n.sendMessage("getConversationById",{id:e})}async getMessageById(e){return this.#n.sendMessage("getMessageById",{id:e})}async list(e){return(await this.#n.sendMessage("getConversations",{options:e})).map((e=>new q(this.#n,e.id,e)))}async newGroup(e,t){const s=await this.#n.sendMessage("newGroup",{accountAddresses:e,options:t});return new q(this.#n,s.id,s)}}class D extends y{address;options;#g=!1;#y;#b;#v;#I;constructor(t,s){super(new Worker(new URL("./workers/client",import.meta.url),{type:"module"}),s?.enableLogging??!1),this.address=t,this.options=s,this.#v=new W(this);const i=[new e,new n,...s?.codecs??[]];this.#I=new Map(i.map((e=>[e.contentType.toString(),e])))}async init(){const e=await this.sendMessage("init",{address:this.address,options:this.options});this.#y=e.inboxId,this.#b=e.installationId,this.#g=!0}static async create(e,t){const s=new D(e,t);return await s.init(),s}get isReady(){return this.#g}get inboxId(){return this.#y}get installationId(){return this.#b}async getCreateInboxSignatureText(){return this.sendMessage("getCreateInboxSignatureText",void 0)}async getAddWalletSignatureText(e){return this.sendMessage("getAddWalletSignatureText",{accountAddress:e})}async getRevokeWalletSignatureText(e){return this.sendMessage("getRevokeWalletSignatureText",{accountAddress:e})}async addSignature(e,t){return this.sendMessage("addSignature",{type:e,bytes:t})}async applySignaturesRequests(){return this.sendMessage("applySignaturesRequests",void 0)}async registerIdentity(){return this.sendMessage("registerIdentity",void 0)}async isRegistered(){return this.sendMessage("isRegistered",void 0)}async canMessage(e){return this.sendMessage("canMessage",{accountAddresses:e})}async findInboxIdByAddress(e){return this.sendMessage("findInboxIdByAddress",{address:e})}async inboxState(e){return this.sendMessage("inboxState",{refreshFromNetwork:e})}async getLatestInboxState(e){return this.sendMessage("getLatestInboxState",{inboxId:e})}async setConsentStates(e){return this.sendMessage("setConsentStates",{records:e})}async getConsentState(e,t){return this.sendMessage("getConsentState",{entityType:e,entity:t})}get conversations(){return this.#v}codecFor(e){return this.#I.get(e.toString())}encodeContent(e,t){const s=this.codecFor(t);if(!s)throw new Error(`Codec not found for "${t.toString()}" content type`);const n=s.encode(e,this),i=s.fallback(e);return i&&(n.fallback=i),x(n)}decodeContent(e,s){const n=this.codecFor(s);if(!n)throw new Error(`Codec not found for "${s.toString()}" content type`);if(s.sameAs(t)&&e.kind!==l.MembershipChange)throw new Error("Error decoding group membership change");const i=A(e.content);return n.decode(i,this)}}const $=e=>{console.error(`Worker error on line ${e.lineno} in "${e.filename}"`),console.error(e.message)};class O{#e;#t;#s=new Map;constructor(e,t){this.#e=e,this.#e.addEventListener("message",this.handleMessage),this.#e.addEventListener("error",$),this.#t=t}sendMessage(e,t){const s=h();this.#e.postMessage({action:e,id:s,data:t});return new Promise(((e,t)=>{this.#s.set(s,{resolve:e,reject:t})}))}handleMessage=e=>{const t=e.data;this.#t&&console.log("utils received event data",t);const s=this.#s.get(t.id);s&&(this.#s.delete(t.id),"error"in t?s.reject(new Error(t.error)):s.resolve(t.result))};close(){this.#e.removeEventListener("message",this.handleMessage),this.#e.removeEventListener("error",$),this.#e.terminate()}}class z extends O{#t;constructor(e){super(new Worker(new URL("./workers/utils",import.meta.url),{type:"module"}),e??!1),this.#t=e??!1}async generateInboxId(e){return this.sendMessage("generateInboxId",{address:e,enableLogging:this.#t})}async getInboxIdForAddress(e,t){return this.sendMessage("getInboxIdForAddress",{address:e,env:t,enableLogging:this.#t})}}const H={local:"http://localhost:5555",dev:"https://dev.xmtp.network",production:"https://production.xmtp.network"};export{H as ApiUrls,D as Client,q as Conversation,W as Conversations,R as DecodedMessage,z as Utils,v as fromContentTypeId,w as fromEncodedContent,T as fromSafeConsent,M as fromSafeContentTypeId,C as fromSafeCreateGroupOptions,A as fromSafeEncodedContent,P as fromSafeGroupMember,G as fromSafeListConversationsOptions,k as fromSafeListMessagesOptions,b as toContentTypeId,_ as toEncodedContent,E as toSafeConsent,I as toSafeContentTypeId,F as toSafeConversation,L as toSafeCreateGroupOptions,x as toSafeEncodedContent,j as toSafeGroupMember,B as toSafeInboxState,N as toSafeInstallation,U as toSafeListConversationsOptions,f as toSafeListMessagesOptions,S as toSafeMessage};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/ClientWorkerClass.ts","../src/utils/conversions.ts","../src/DecodedMessage.ts","../src/Conversation.ts","../src/utils/date.ts","../src/Conversations.ts","../src/Client.ts","../src/UtilsWorkerClass.ts","../src/Utils.ts","../src/constants.ts"],"sourcesContent":["import { v4 } from \"uuid\";\nimport type {\n ClientEventsActions,\n ClientEventsErrorData,\n ClientEventsResult,\n ClientEventsWorkerMessageData,\n ClientSendMessageData,\n} from \"@/types\";\n\nconst handleError = (event: ErrorEvent) => {\n console.error(`Worker error on line ${event.lineno} in \"${event.filename}\"`);\n console.error(event.message);\n};\n\nexport class ClientWorkerClass {\n #worker: Worker;\n\n #enableLogging: boolean;\n\n #promises = new Map<\n string,\n { resolve: (value: any) => void; reject: (reason?: any) => void }\n >();\n\n constructor(worker: Worker, enableLogging: boolean) {\n this.#worker = worker;\n this.#worker.addEventListener(\"message\", this.handleMessage);\n this.#worker.addEventListener(\"error\", handleError);\n this.#enableLogging = enableLogging;\n }\n\n sendMessage<A extends ClientEventsActions>(\n action: A,\n data: ClientSendMessageData<A>,\n ) {\n const promiseId = v4();\n this.#worker.postMessage({\n action,\n id: promiseId,\n data,\n });\n const promise = new Promise<ClientEventsResult<A>>((resolve, reject) => {\n this.#promises.set(promiseId, { resolve, reject });\n });\n return promise;\n }\n\n handleMessage = (\n event: MessageEvent<ClientEventsWorkerMessageData | ClientEventsErrorData>,\n ) => {\n const eventData = event.data;\n if (this.#enableLogging) {\n console.log(\"client received event data\", eventData);\n }\n const promise = this.#promises.get(eventData.id);\n if (promise) {\n this.#promises.delete(eventData.id);\n if (\"error\" in eventData) {\n promise.reject(new Error(eventData.error));\n } else {\n promise.resolve(eventData.result);\n }\n }\n };\n\n close() {\n this.#worker.removeEventListener(\"message\", this.handleMessage);\n this.#worker.removeEventListener(\"error\", handleError);\n this.#worker.terminate();\n }\n}\n","import {\n ContentTypeId,\n type EncodedContent,\n} from \"@xmtp/content-type-primitives\";\nimport {\n WasmConsent,\n WasmContentTypeId,\n WasmCreateGroupOptions,\n WasmEncodedContent,\n WasmGroupMember,\n WasmListConversationsOptions,\n WasmListMessagesOptions,\n type WasmConsentEntityType,\n type WasmConsentState,\n type WasmDeliveryStatus,\n type WasmGroupMessageKind,\n type WasmGroupPermissionsOptions,\n type WasmInboxState,\n type WasmInstallation,\n type WasmMessage,\n type WasmPermissionLevel,\n type WasmPermissionPolicy,\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.authority_id,\n typeId: contentTypeId.type_id,\n versionMajor: contentTypeId.version_major,\n versionMinor: contentTypeId.version_minor,\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: WasmDeliveryStatus;\n id: string;\n kind: WasmGroupMessageKind;\n senderInboxId: string;\n sentAtNs: bigint;\n};\n\nexport const toSafeMessage = (message: WasmMessage): SafeMessage => ({\n content: toSafeEncodedContent(toEncodedContent(message.content)),\n convoId: message.convo_id,\n deliveryStatus: message.delivery_status,\n id: message.id,\n kind: message.kind,\n senderInboxId: message.sender_inbox_id,\n sentAtNs: message.sent_at_ns,\n});\n\nexport type SafeListMessagesOptions = {\n delivery_status?: WasmDeliveryStatus;\n limit?: bigint;\n sent_after_ns?: bigint;\n sent_before_ns?: bigint;\n};\n\nexport const toSafeListMessagesOptions = (\n options: WasmListMessagesOptions,\n): SafeListMessagesOptions => ({\n delivery_status: options.delivery_status,\n limit: options.limit,\n sent_after_ns: options.sent_after_ns,\n sent_before_ns: options.sent_before_ns,\n});\n\nexport const fromSafeListMessagesOptions = (\n options: SafeListMessagesOptions,\n): WasmListMessagesOptions =>\n new WasmListMessagesOptions(\n options.sent_before_ns,\n options.sent_after_ns,\n options.limit,\n options.delivery_status,\n );\n\nexport type SafeListConversationsOptions = {\n created_after_ns?: bigint;\n created_before_ns?: bigint;\n limit?: bigint;\n};\n\nexport const toSafeListConversationsOptions = (\n options: WasmListConversationsOptions,\n): SafeListConversationsOptions => ({\n created_after_ns: options.created_after_ns,\n created_before_ns: options.created_before_ns,\n limit: options.limit,\n});\n\nexport const fromSafeListConversationsOptions = (\n options: SafeListConversationsOptions,\n): WasmListConversationsOptions =>\n new WasmListConversationsOptions(\n options.created_after_ns,\n options.created_before_ns,\n options.limit,\n );\n\nexport type SafeCreateGroupOptions = {\n permissions?: WasmGroupPermissionsOptions;\n name?: string;\n imageUrlSquare?: string;\n description?: string;\n pinnedFrameUrl?: string;\n};\n\nexport const toSafeCreateGroupOptions = (\n options: WasmCreateGroupOptions,\n): SafeCreateGroupOptions => ({\n permissions: options.permissions,\n name: options.group_name,\n imageUrlSquare: options.group_image_url_square,\n description: options.group_description,\n pinnedFrameUrl: options.group_pinned_frame_url,\n});\n\nexport const fromSafeCreateGroupOptions = (\n options: SafeCreateGroupOptions,\n): WasmCreateGroupOptions =>\n new WasmCreateGroupOptions(\n options.permissions,\n options.name,\n options.imageUrlSquare,\n options.description,\n options.pinnedFrameUrl,\n );\n\nexport type SafeConversation = {\n id: string;\n name: string;\n imageUrl: string;\n description: string;\n pinnedFrameUrl: string;\n permissions: {\n policyType: WasmGroupPermissionsOptions;\n policySet: {\n addAdminPolicy: WasmPermissionPolicy;\n addMemberPolicy: WasmPermissionPolicy;\n removeAdminPolicy: WasmPermissionPolicy;\n removeMemberPolicy: WasmPermissionPolicy;\n updateGroupDescriptionPolicy: WasmPermissionPolicy;\n updateGroupImageUrlSquarePolicy: WasmPermissionPolicy;\n updateGroupNamePolicy: WasmPermissionPolicy;\n updateGroupPinnedFrameUrlPolicy: WasmPermissionPolicy;\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 = (\n conversation: WorkerConversation,\n): SafeConversation => ({\n id: conversation.id,\n name: conversation.name,\n imageUrl: conversation.imageUrl,\n description: conversation.description,\n pinnedFrameUrl: conversation.pinnedFrameUrl,\n permissions: {\n policyType: conversation.permissions.policyType,\n policySet: {\n addAdminPolicy: conversation.permissions.policySet.add_admin_policy,\n addMemberPolicy: conversation.permissions.policySet.add_member_policy,\n removeAdminPolicy: conversation.permissions.policySet.remove_admin_policy,\n removeMemberPolicy:\n conversation.permissions.policySet.remove_member_policy,\n updateGroupDescriptionPolicy:\n conversation.permissions.policySet.update_group_description_policy,\n updateGroupImageUrlSquarePolicy:\n conversation.permissions.policySet.update_group_image_url_square_policy,\n updateGroupNamePolicy:\n conversation.permissions.policySet.update_group_name_policy,\n updateGroupPinnedFrameUrlPolicy:\n conversation.permissions.policySet.update_group_pinned_frame_url_policy,\n },\n },\n isActive: conversation.isActive,\n addedByInboxId: conversation.addedByInboxId,\n metadata: conversation.metadata,\n admins: conversation.admins,\n superAdmins: conversation.superAdmins,\n createdAtNs: conversation.createdAtNs,\n});\n\nexport type SafeInstallation = {\n id: string;\n clientTimestampNs?: bigint;\n};\n\nexport const toSafeInstallation = (\n installation: WasmInstallation,\n): SafeInstallation => ({\n id: installation.id,\n clientTimestampNs: installation.client_timestamp_ns,\n});\n\nexport type SafeInboxState = {\n accountAddresses: string[];\n inboxId: string;\n installations: SafeInstallation[];\n recoveryAddress: string;\n};\n\nexport const toSafeInboxState = (\n inboxState: WasmInboxState,\n): SafeInboxState => ({\n accountAddresses: inboxState.account_addresses,\n inboxId: inboxState.inbox_id,\n installations: inboxState.installations.map(toSafeInstallation),\n recoveryAddress: inboxState.recovery_address,\n});\n\nexport type SafeConsent = {\n entity: string;\n entityType: WasmConsentEntityType;\n state: WasmConsentState;\n};\n\nexport const toSafeConsent = (consent: WasmConsent): SafeConsent => ({\n entity: consent.entity,\n entityType: consent.entity_type,\n state: consent.state,\n});\n\nexport const fromSafeConsent = (consent: SafeConsent): WasmConsent =>\n new WasmConsent(consent.entityType, consent.state, consent.entity);\n\nexport type SafeGroupMember = {\n accountAddresses: string[];\n consentState: WasmConsentState;\n inboxId: string;\n installationIds: string[];\n permissionLevel: WasmPermissionLevel;\n};\n\nexport const toSafeGroupMember = (\n member: WasmGroupMember,\n): SafeGroupMember => ({\n accountAddresses: member.account_addresses,\n consentState: member.consent_state,\n inboxId: member.inbox_id,\n installationIds: member.installation_ids,\n permissionLevel: member.permission_level,\n});\n\nexport const fromSafeGroupMember = (member: SafeGroupMember): WasmGroupMember =>\n new WasmGroupMember(\n member.inboxId,\n member.accountAddresses,\n member.installationIds,\n member.permissionLevel,\n member.consentState,\n );\n","import type { ContentTypeId } from \"@xmtp/content-type-primitives\";\nimport { WasmDeliveryStatus, WasmGroupMessageKind } from \"@xmtp/wasm-bindings\";\nimport type { Client } from \"@/Client\";\nimport { fromSafeContentTypeId, type SafeMessage } from \"@/utils/conversions\";\n\nexport type MessageKind = \"application\" | \"membership_change\";\nexport type MessageDeliveryStatus = \"unpublished\" | \"published\" | \"failed\";\n\nexport class DecodedMessage {\n #client: Client;\n\n content: any;\n\n contentType: ContentTypeId;\n\n conversationId: string;\n\n deliveryStatus: MessageDeliveryStatus;\n\n fallback?: string;\n\n compression?: number;\n\n id: string;\n\n kind: MessageKind;\n\n parameters: Map<string, string>;\n\n senderInboxId: string;\n\n sentAtNs: bigint;\n\n constructor(client: Client, message: SafeMessage) {\n this.#client = client;\n this.id = message.id;\n this.sentAtNs = message.sentAtNs;\n this.conversationId = message.convoId;\n this.senderInboxId = message.senderInboxId;\n\n switch (message.kind) {\n case WasmGroupMessageKind.Application:\n this.kind = \"application\";\n break;\n case WasmGroupMessageKind.MembershipChange:\n this.kind = \"membership_change\";\n break;\n // no default\n }\n\n switch (message.deliveryStatus) {\n case WasmDeliveryStatus.Unpublished:\n this.deliveryStatus = \"unpublished\";\n break;\n case WasmDeliveryStatus.Published:\n this.deliveryStatus = \"published\";\n break;\n case WasmDeliveryStatus.Failed:\n this.deliveryStatus = \"failed\";\n break;\n // no default\n }\n\n this.contentType = fromSafeContentTypeId(message.content.type);\n this.parameters = new Map(Object.entries(message.content.parameters));\n this.fallback = message.content.fallback;\n this.compression = message.content.compression;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this.content = this.#client.decodeContent(message, this.contentType);\n }\n}\n","import type { ContentTypeId } from \"@xmtp/content-type-primitives\";\nimport { ContentTypeText } from \"@xmtp/content-type-text\";\nimport type { WasmConsentState } from \"@xmtp/wasm-bindings\";\nimport type { Client } from \"@/Client\";\nimport { DecodedMessage } from \"@/DecodedMessage\";\nimport type {\n SafeConversation,\n SafeListMessagesOptions,\n} from \"@/utils/conversions\";\nimport { nsToDate } from \"@/utils/date\";\n\nexport class Conversation {\n #client: Client;\n\n #id: string;\n\n #name?: SafeConversation[\"name\"];\n\n #imageUrl?: SafeConversation[\"imageUrl\"];\n\n #description?: SafeConversation[\"description\"];\n\n #pinnedFrameUrl?: SafeConversation[\"pinnedFrameUrl\"];\n\n #isActive?: SafeConversation[\"isActive\"];\n\n #addedByInboxId?: SafeConversation[\"addedByInboxId\"];\n\n #metadata?: SafeConversation[\"metadata\"];\n\n #permissions?: SafeConversation[\"permissions\"];\n\n #createdAtNs?: SafeConversation[\"createdAtNs\"];\n\n constructor(client: Client, id: string, data?: SafeConversation) {\n this.#client = client;\n this.#id = id;\n this.#syncData(data);\n }\n\n #syncData(data?: SafeConversation) {\n this.#name = data?.name ?? \"\";\n this.#imageUrl = data?.imageUrl ?? \"\";\n this.#description = data?.description ?? \"\";\n this.#pinnedFrameUrl = data?.pinnedFrameUrl ?? \"\";\n this.#isActive = data?.isActive ?? undefined;\n this.#addedByInboxId = data?.addedByInboxId ?? \"\";\n this.#metadata = data?.metadata ?? undefined;\n this.#permissions = data?.permissions ?? undefined;\n this.#createdAtNs = data?.createdAtNs ?? undefined;\n }\n\n get id() {\n return this.#id;\n }\n\n get name() {\n return this.#name;\n }\n\n async updateName(name: string) {\n await this.#client.sendMessage(\"updateGroupName\", {\n id: this.#id,\n name,\n });\n this.#name = name;\n }\n\n get imageUrl() {\n return this.#imageUrl;\n }\n\n async updateImageUrl(imageUrl: string) {\n await this.#client.sendMessage(\"updateGroupImageUrlSquare\", {\n id: this.#id,\n imageUrl,\n });\n this.#imageUrl = imageUrl;\n }\n\n get description() {\n return this.#description;\n }\n\n async updateDescription(description: string) {\n await this.#client.sendMessage(\"updateGroupDescription\", {\n id: this.#id,\n description,\n });\n this.#description = description;\n }\n\n get pinnedFrameUrl() {\n return this.#pinnedFrameUrl;\n }\n\n async updatePinnedFrameUrl(pinnedFrameUrl: string) {\n await this.#client.sendMessage(\"updateGroupPinnedFrameUrl\", {\n id: this.#id,\n pinnedFrameUrl,\n });\n this.#pinnedFrameUrl = pinnedFrameUrl;\n }\n\n get isActive() {\n return this.#isActive;\n }\n\n get addedByInboxId() {\n return this.#addedByInboxId;\n }\n\n get createdAtNs() {\n return this.#createdAtNs;\n }\n\n get createdAt() {\n return this.#createdAtNs ? nsToDate(this.#createdAtNs) : undefined;\n }\n\n get metadata() {\n return this.#metadata;\n }\n\n async members() {\n return this.#client.sendMessage(\"getGroupMembers\", {\n id: this.#id,\n });\n }\n\n async admins() {\n return this.#client.sendMessage(\"getGroupAdmins\", {\n id: this.#id,\n });\n }\n\n async superAdmins() {\n return this.#client.sendMessage(\"getGroupSuperAdmins\", {\n id: this.#id,\n });\n }\n\n get permissions() {\n return this.#permissions;\n }\n\n async isAdmin(inboxId: string) {\n const admins = await this.admins();\n return admins.includes(inboxId);\n }\n\n async isSuperAdmin(inboxId: string) {\n const superAdmins = await this.superAdmins();\n return superAdmins.includes(inboxId);\n }\n\n async sync() {\n const data = await this.#client.sendMessage(\"syncGroup\", {\n id: this.#id,\n });\n this.#syncData(data);\n }\n\n async addMembers(accountAddresses: string[]) {\n return this.#client.sendMessage(\"addGroupMembers\", {\n id: this.#id,\n accountAddresses,\n });\n }\n\n async addMembersByInboxId(inboxIds: string[]) {\n return this.#client.sendMessage(\"addGroupMembersByInboxId\", {\n id: this.#id,\n inboxIds,\n });\n }\n\n async removeMembers(accountAddresses: string[]) {\n return this.#client.sendMessage(\"removeGroupMembers\", {\n id: this.#id,\n accountAddresses,\n });\n }\n\n async removeMembersByInboxId(inboxIds: string[]) {\n return this.#client.sendMessage(\"removeGroupMembersByInboxId\", {\n id: this.#id,\n inboxIds,\n });\n }\n\n async addAdmin(inboxId: string) {\n return this.#client.sendMessage(\"addGroupAdmin\", {\n id: this.#id,\n inboxId,\n });\n }\n\n async removeAdmin(inboxId: string) {\n return this.#client.sendMessage(\"removeGroupAdmin\", {\n id: this.#id,\n inboxId,\n });\n }\n\n async addSuperAdmin(inboxId: string) {\n return this.#client.sendMessage(\"addGroupSuperAdmin\", {\n id: this.#id,\n inboxId,\n });\n }\n\n async removeSuperAdmin(inboxId: string) {\n return this.#client.sendMessage(\"removeGroupSuperAdmin\", {\n id: this.#id,\n inboxId,\n });\n }\n\n async publishMessages() {\n return this.#client.sendMessage(\"publishGroupMessages\", {\n id: this.#id,\n });\n }\n\n async sendOptimistic(content: any, contentType?: ContentTypeId) {\n if (typeof content !== \"string\" && !contentType) {\n throw new Error(\n \"Content type is required when sending content other than text\",\n );\n }\n\n const safeEncodedContent =\n typeof content === \"string\"\n ? this.#client.encodeContent(content, contentType ?? ContentTypeText)\n : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.#client.encodeContent(content, contentType!);\n\n return this.#client.sendMessage(\"sendOptimisticGroupMessage\", {\n id: this.#id,\n content: safeEncodedContent,\n });\n }\n\n async send(content: any, contentType?: ContentTypeId) {\n if (typeof content !== \"string\" && !contentType) {\n throw new Error(\n \"Content type is required when sending content other than text\",\n );\n }\n\n const safeEncodedContent =\n typeof content === \"string\"\n ? this.#client.encodeContent(content, contentType ?? ContentTypeText)\n : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.#client.encodeContent(content, contentType!);\n\n return this.#client.sendMessage(\"sendGroupMessage\", {\n id: this.#id,\n content: safeEncodedContent,\n });\n }\n\n async messages(options?: SafeListMessagesOptions) {\n const messages = await this.#client.sendMessage(\"getGroupMessages\", {\n id: this.#id,\n options,\n });\n\n return messages.map((message) => new DecodedMessage(this.#client, message));\n }\n\n async consentState() {\n return this.#client.sendMessage(\"getGroupConsentState\", {\n id: this.#id,\n });\n }\n\n async updateConsentState(state: WasmConsentState) {\n return this.#client.sendMessage(\"updateGroupConsentState\", {\n id: this.#id,\n state,\n });\n }\n}\n","export function nsToDate(ns: bigint): Date {\n return new Date(Number(ns / 1_000_000n));\n}\n","import type { Client } from \"@/Client\";\nimport { Conversation } from \"@/Conversation\";\nimport type {\n SafeCreateGroupOptions,\n SafeListConversationsOptions,\n} from \"@/utils/conversions\";\n\nexport class Conversations {\n #client: Client;\n\n constructor(client: Client) {\n this.#client = client;\n }\n\n async sync() {\n return this.#client.sendMessage(\"syncConversations\", undefined);\n }\n\n async getConversationById(id: string) {\n return this.#client.sendMessage(\"getConversationById\", {\n id,\n });\n }\n\n async getMessageById(id: string) {\n return this.#client.sendMessage(\"getMessageById\", {\n id,\n });\n }\n\n async list(options?: SafeListConversationsOptions) {\n const conversations = await this.#client.sendMessage(\"getConversations\", {\n options,\n });\n\n return conversations.map(\n (conversation) =>\n new Conversation(this.#client, conversation.id, conversation),\n );\n }\n\n async newGroup(accountAddresses: string[], options?: SafeCreateGroupOptions) {\n const conversation = await this.#client.sendMessage(\"newGroup\", {\n accountAddresses,\n options,\n });\n\n return new Conversation(this.#client, conversation.id, conversation);\n }\n}\n","import {\n ContentTypeGroupUpdated,\n GroupUpdatedCodec,\n} from \"@xmtp/content-type-group-updated\";\nimport type {\n ContentCodec,\n ContentTypeId,\n} from \"@xmtp/content-type-primitives\";\nimport { TextCodec } from \"@xmtp/content-type-text\";\nimport {\n WasmGroupMessageKind,\n type WasmConsentEntityType,\n type WasmSignatureRequestType,\n} from \"@xmtp/wasm-bindings\";\nimport { ClientWorkerClass } from \"@/ClientWorkerClass\";\nimport { Conversations } from \"@/Conversations\";\nimport type { ClientOptions } from \"@/types\";\nimport {\n fromSafeEncodedContent,\n toSafeEncodedContent,\n type SafeConsent,\n type SafeMessage,\n} from \"@/utils/conversions\";\n\nexport class Client extends ClientWorkerClass {\n address: string;\n\n options?: ClientOptions;\n\n #isReady = false;\n\n #inboxId: string | undefined;\n\n #installationId: string | undefined;\n\n #conversations: Conversations;\n\n #codecs: Map<string, ContentCodec>;\n\n constructor(address: string, options?: ClientOptions) {\n const worker = new Worker(new URL(\"./workers/client\", import.meta.url), {\n type: \"module\",\n });\n super(worker, options?.enableLogging ?? false);\n this.address = address;\n this.options = options;\n this.#conversations = new Conversations(this);\n const codecs = [\n new GroupUpdatedCodec(),\n new TextCodec(),\n ...(options?.codecs ?? []),\n ];\n this.#codecs = new Map(\n codecs.map((codec) => [codec.contentType.toString(), codec]),\n );\n }\n\n async init() {\n const result = await this.sendMessage(\"init\", {\n address: this.address,\n options: this.options,\n });\n this.#inboxId = result.inboxId;\n this.#installationId = result.installationId;\n this.#isReady = true;\n }\n\n static async create(address: string, options?: ClientOptions) {\n const client = new Client(address, options);\n await client.init();\n return client;\n }\n\n get isReady() {\n return this.#isReady;\n }\n\n get inboxId() {\n return this.#inboxId;\n }\n\n get installationId() {\n return this.#installationId;\n }\n\n async getCreateInboxSignatureText() {\n return this.sendMessage(\"getCreateInboxSignatureText\", undefined);\n }\n\n async getAddWalletSignatureText(accountAddress: string) {\n return this.sendMessage(\"getAddWalletSignatureText\", { accountAddress });\n }\n\n async getRevokeWalletSignatureText(accountAddress: string) {\n return this.sendMessage(\"getRevokeWalletSignatureText\", { accountAddress });\n }\n\n async addSignature(type: WasmSignatureRequestType, bytes: Uint8Array) {\n return this.sendMessage(\"addSignature\", { type, bytes });\n }\n\n async applySignaturesRequests() {\n return this.sendMessage(\"applySignaturesRequests\", undefined);\n }\n\n async registerIdentity() {\n return this.sendMessage(\"registerIdentity\", undefined);\n }\n\n async isRegistered() {\n return this.sendMessage(\"isRegistered\", undefined);\n }\n\n async canMessage(accountAddresses: string[]) {\n return this.sendMessage(\"canMessage\", { accountAddresses });\n }\n\n async findInboxIdByAddress(address: string) {\n return this.sendMessage(\"findInboxIdByAddress\", { address });\n }\n\n async inboxState(refreshFromNetwork: boolean) {\n return this.sendMessage(\"inboxState\", { refreshFromNetwork });\n }\n\n async getLatestInboxState(inboxId: string) {\n return this.sendMessage(\"getLatestInboxState\", { inboxId });\n }\n\n async setConsentStates(records: SafeConsent[]) {\n return this.sendMessage(\"setConsentStates\", { records });\n }\n\n async getConsentState(entityType: WasmConsentEntityType, entity: string) {\n return this.sendMessage(\"getConsentState\", { entityType, entity });\n }\n\n get conversations() {\n return this.#conversations;\n }\n\n codecFor(contentType: ContentTypeId) {\n return this.#codecs.get(contentType.toString());\n }\n\n encodeContent(content: any, contentType: ContentTypeId) {\n const codec = this.codecFor(contentType);\n if (!codec) {\n throw new Error(\n `Codec not found for \"${contentType.toString()}\" content type`,\n );\n }\n const encoded = codec.encode(content, this);\n const fallback = codec.fallback(content);\n if (fallback) {\n encoded.fallback = fallback;\n }\n return toSafeEncodedContent(encoded);\n }\n\n decodeContent(message: SafeMessage, contentType: ContentTypeId) {\n const codec = this.codecFor(contentType);\n if (!codec) {\n throw new Error(\n `Codec not found for \"${contentType.toString()}\" content type`,\n );\n }\n\n // throw an error if there's an invalid group membership change message\n if (\n contentType.sameAs(ContentTypeGroupUpdated) &&\n message.kind !== WasmGroupMessageKind.MembershipChange\n ) {\n throw new Error(\"Error decoding group membership change\");\n }\n\n const encodedContent = fromSafeEncodedContent(message.content);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return codec.decode(encodedContent, this);\n }\n}\n","import { v4 } from \"uuid\";\nimport type {\n UtilsEventsActions,\n UtilsEventsErrorData,\n UtilsEventsResult,\n UtilsEventsWorkerMessageData,\n UtilsSendMessageData,\n} from \"@/types\";\n\nconst handleError = (event: ErrorEvent) => {\n console.error(`Worker error on line ${event.lineno} in \"${event.filename}\"`);\n console.error(event.message);\n};\n\nexport class UtilsWorkerClass {\n #worker: Worker;\n\n #enableLogging: boolean;\n\n #promises = new Map<\n string,\n { resolve: (value: any) => void; reject: (reason?: any) => void }\n >();\n\n constructor(worker: Worker, enableLogging: boolean) {\n this.#worker = worker;\n this.#worker.addEventListener(\"message\", this.handleMessage);\n this.#worker.addEventListener(\"error\", handleError);\n this.#enableLogging = enableLogging;\n }\n\n sendMessage<A extends UtilsEventsActions>(\n action: A,\n data: UtilsSendMessageData<A>,\n ) {\n const promiseId = v4();\n this.#worker.postMessage({\n action,\n id: promiseId,\n data,\n });\n const promise = new Promise<UtilsEventsResult<A>>((resolve, reject) => {\n this.#promises.set(promiseId, { resolve, reject });\n });\n return promise;\n }\n\n handleMessage = (\n event: MessageEvent<UtilsEventsWorkerMessageData | UtilsEventsErrorData>,\n ) => {\n const eventData = event.data;\n if (this.#enableLogging) {\n console.log(\"utils received event data\", eventData);\n }\n const promise = this.#promises.get(eventData.id);\n if (promise) {\n this.#promises.delete(eventData.id);\n if (\"error\" in eventData) {\n promise.reject(new Error(eventData.error));\n } else {\n promise.resolve(eventData.result);\n }\n }\n };\n\n close() {\n this.#worker.removeEventListener(\"message\", this.handleMessage);\n this.#worker.removeEventListener(\"error\", handleError);\n this.#worker.terminate();\n }\n}\n","import type { XmtpEnv } from \"@/types/options\";\nimport { UtilsWorkerClass } from \"@/UtilsWorkerClass\";\n\nexport class Utils extends UtilsWorkerClass {\n #enableLogging: boolean;\n constructor(enableLogging?: boolean) {\n const worker = new Worker(new URL(\"./workers/utils\", import.meta.url), {\n type: \"module\",\n });\n super(worker, enableLogging ?? false);\n this.#enableLogging = enableLogging ?? false;\n }\n\n async generateInboxId(address: string) {\n return this.sendMessage(\"generateInboxId\", {\n address,\n enableLogging: this.#enableLogging,\n });\n }\n\n async getInboxIdForAddress(address: string, env?: XmtpEnv) {\n return this.sendMessage(\"getInboxIdForAddress\", {\n address,\n env,\n enableLogging: this.#enableLogging,\n });\n }\n}\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"],"names":["handleError","event","console","error","lineno","filename","message","ClientWorkerClass","worker","enableLogging","promises","Map","constructor","this","addEventListener","handleMessage","sendMessage","action","data","promiseId","v4","postMessage","id","Promise","resolve","reject","set","eventData","log","promise","get","delete","Error","result","close","removeEventListener","terminate","toContentTypeId","contentTypeId","ContentTypeId","authorityId","authority_id","typeId","type_id","versionMajor","version_major","versionMinor","version_minor","fromContentTypeId","WasmContentTypeId","toSafeContentTypeId","fromSafeContentTypeId","toEncodedContent","content","type","parameters","Object","fromEntries","fallback","compression","fromEncodedContent","WasmEncodedContent","entries","toSafeEncodedContent","fromSafeEncodedContent","toSafeMessage","convoId","convo_id","deliveryStatus","delivery_status","kind","senderInboxId","sender_inbox_id","sentAtNs","sent_at_ns","toSafeListMessagesOptions","options","limit","sent_after_ns","sent_before_ns","fromSafeListMessagesOptions","WasmListMessagesOptions","toSafeListConversationsOptions","created_after_ns","created_before_ns","fromSafeListConversationsOptions","WasmListConversationsOptions","toSafeCreateGroupOptions","permissions","name","group_name","imageUrlSquare","group_image_url_square","description","group_description","pinnedFrameUrl","group_pinned_frame_url","fromSafeCreateGroupOptions","WasmCreateGroupOptions","toSafeConversation","conversation","imageUrl","policyType","policySet","addAdminPolicy","add_admin_policy","addMemberPolicy","add_member_policy","removeAdminPolicy","remove_admin_policy","removeMemberPolicy","remove_member_policy","updateGroupDescriptionPolicy","update_group_description_policy","updateGroupImageUrlSquarePolicy","update_group_image_url_square_policy","updateGroupNamePolicy","update_group_name_policy","updateGroupPinnedFrameUrlPolicy","update_group_pinned_frame_url_policy","isActive","addedByInboxId","metadata","admins","superAdmins","createdAtNs","toSafeInstallation","installation","clientTimestampNs","client_timestamp_ns","toSafeInboxState","inboxState","accountAddresses","account_addresses","inboxId","inbox_id","installations","map","recoveryAddress","recovery_address","toSafeConsent","consent","entity","entityType","entity_type","state","fromSafeConsent","WasmConsent","toSafeGroupMember","member","consentState","consent_state","installationIds","installation_ids","permissionLevel","permission_level","fromSafeGroupMember","WasmGroupMember","DecodedMessage","client","contentType","conversationId","WasmGroupMessageKind","Application","MembershipChange","WasmDeliveryStatus","Unpublished","Published","Failed","decodeContent","Conversation","syncData","undefined","updateName","updateImageUrl","updateDescription","updatePinnedFrameUrl","createdAt","ns","Date","Number","members","isAdmin","includes","isSuperAdmin","sync","addMembers","addMembersByInboxId","inboxIds","removeMembers","removeMembersByInboxId","addAdmin","removeAdmin","addSuperAdmin","removeSuperAdmin","publishMessages","sendOptimistic","safeEncodedContent","encodeContent","ContentTypeText","send","messages","updateConsentState","Conversations","getConversationById","getMessageById","list","newGroup","Client","address","isReady","installationId","conversations","codecs","super","Worker","URL","url","GroupUpdatedCodec","TextCodec","codec","toString","init","create","getCreateInboxSignatureText","getAddWalletSignatureText","accountAddress","getRevokeWalletSignatureText","addSignature","bytes","applySignaturesRequests","registerIdentity","isRegistered","canMessage","findInboxIdByAddress","refreshFromNetwork","getLatestInboxState","setConsentStates","records","getConsentState","codecFor","encoded","encode","sameAs","ContentTypeGroupUpdated","encodedContent","decode","UtilsWorkerClass","Utils","generateInboxId","getInboxIdForAddress","env","ApiUrls","local","dev","production"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{ContentTypeId as e}from"@xmtp/content-type-primitives";import t,{WasmEncodedContent as n,WasmContentTypeId as r,WasmConsent as s,WasmListConversationsOptions as i,WasmCreateGroupOptions as o,WasmListMessagesOptions as a,getInboxIdForAddress as d,generateInboxId as c,createClient as u}from"@xmtp/wasm-bindings";const p=e=>{return new n((t=e.type,new r(t.authorityId,t.typeId,t.versionMajor,t.versionMinor)),new Map(Object.entries(e.parameters)),e.fallback,e.compression,e.content);var t},l=e=>{return{type:(t=e.type,{authorityId:t.authorityId,typeId:t.typeId,versionMajor:t.versionMajor,versionMinor:t.versionMinor}),parameters:e.parameters,fallback:e.fallback,compression:e.compression,content:e.content};var t},m=t=>{return{type:(n=t.type,new e({authorityId:n.authorityId,typeId:n.typeId,versionMajor:n.versionMajor,versionMinor:n.versionMinor})),parameters:t.parameters,fallback:t.fallback,compression:t.compression,content:t.content};var n},g=t=>{return{content:l((n=t.content,{type:(r=n.type,new e({authorityId:r.authority_id,typeId:r.type_id,versionMajor:r.version_major,versionMinor:r.version_minor})),parameters:Object.fromEntries(n.parameters),fallback:n.fallback,compression:n.compression,content:n.content})),convoId:t.convo_id,deliveryStatus:t.delivery_status,id:t.id,kind:t.kind,senderInboxId:t.sender_inbox_id,sentAtNs:t.sent_at_ns};var n,r},y=e=>({id:e.id,name:e.name,imageUrl:e.imageUrl,description:e.description,pinnedFrameUrl:e.pinnedFrameUrl,permissions:{policyType:e.permissions.policyType,policySet:{addAdminPolicy:e.permissions.policySet.add_admin_policy,addMemberPolicy:e.permissions.policySet.add_member_policy,removeAdminPolicy:e.permissions.policySet.remove_admin_policy,removeMemberPolicy:e.permissions.policySet.remove_member_policy,updateGroupDescriptionPolicy:e.permissions.policySet.update_group_description_policy,updateGroupImageUrlSquarePolicy:e.permissions.policySet.update_group_image_url_square_policy,updateGroupNamePolicy:e.permissions.policySet.update_group_name_policy,updateGroupPinnedFrameUrlPolicy:e.permissions.policySet.update_group_pinned_frame_url_policy}},isActive:e.isActive,addedByInboxId:e.addedByInboxId,metadata:e.metadata,admins:e.admins,superAdmins:e.superAdmins,createdAtNs:e.createdAtNs}),v=e=>({id:e.id,clientTimestampNs:e.client_timestamp_ns}),b=e=>({accountAddresses:e.account_addresses,inboxId:e.inbox_id,installations:e.installations.map(v),recoveryAddress:e.recovery_address}),_=e=>new s(e.entityType,e.state,e.entity),I={local:"http://localhost:5555",dev:"https://dev.xmtp.network",production:"https://production.xmtp.network"};class h{#e;#t;constructor(e,t){this.#e=e,this.#t=t}get id(){return this.#t.id()}get name(){return this.#t.group_name()}async updateName(e){return this.#t.update_group_name(e)}get imageUrl(){return this.#t.group_image_url_square()}async updateImageUrl(e){return this.#t.update_group_image_url_square(e)}get description(){return this.#t.group_description()}async updateDescription(e){return this.#t.update_group_description(e)}get pinnedFrameUrl(){return this.#t.group_pinned_frame_url()}async updatePinnedFrameUrl(e){return this.#t.update_group_pinned_frame_url(e)}get isActive(){return this.#t.is_active()}get addedByInboxId(){return this.#t.added_by_inbox_id()}get createdAtNs(){return this.#t.created_at_ns()}get metadata(){const e=this.#t.group_metadata();return{creatorInboxId:e.creator_inbox_id(),conversationType:e.conversation_type()}}async members(){return this.#t.list_members()}get admins(){return this.#t.admin_list()}get superAdmins(){return this.#t.super_admin_list()}get permissions(){const e=this.#t.group_permissions();return{policyType:e.policy_type(),policySet:e.policy_set()}}isAdmin(e){return this.#t.is_admin(e)}isSuperAdmin(e){return this.#t.is_super_admin(e)}async sync(){return this.#t.sync()}async addMembers(e){return this.#t.add_members(e)}async addMembersByInboxId(e){return this.#t.add_members_by_inbox_id(e)}async removeMembers(e){return this.#t.remove_members(e)}async removeMembersByInboxId(e){return this.#t.remove_members_by_inbox_id(e)}async addAdmin(e){return this.#t.add_admin(e)}async removeAdmin(e){return this.#t.remove_admin(e)}async addSuperAdmin(e){return this.#t.add_super_admin(e)}async removeSuperAdmin(e){return this.#t.remove_super_admin(e)}async publishMessages(){return this.#t.publish_messages()}sendOptimistic(e){return this.#t.send_optimistic(e)}async send(e){return this.#t.send(e)}messages(e){return this.#t.find_messages(e?(e=>new a(e.sent_before_ns,e.sent_after_ns,e.limit,e.delivery_status))(e):void 0)}get consentState(){return this.#t.consent_state()}updateConsentState(e){this.#t.update_consent_state(e)}}class S{#e;#n;constructor(e,t){this.#e=e,this.#n=t}async sync(){return this.#n.sync()}getConversationById(e){try{const t=this.#n.find_group_by_id(e);return new h(this.#e,t)}catch{return}}getMessageById(e){try{const t=this.#n.find_message_by_id(e);return g(t)}catch{return}}async list(e){const t=await this.#n.list(e?(e=>new i(e.created_after_ns,e.created_before_ns,e.limit))(e):void 0);return t.map((e=>new h(this.#e,e)))}async newGroup(e,t){const n=await this.#n.create_group(e,t?(e=>new o(e.permissions,e.name,e.imageUrlSquare,e.description,e.pinnedFrameUrl))(t):void 0);return new h(this.#e,n)}}class x{#e;#n;#r;constructor(e){this.#e=e,this.#r=e.accountAddress,this.#n=new S(this,e.conversations())}static async create(e,n){const r=await(async(e,n)=>{await t();const r=n?.apiUrl??I[n?.env??"dev"],s=`xmtp-${n?.env??"dev"}-${e}.db3`,i=await d(r,e)||c(e);return u(r,i,e,s,n?.encryptionKey)})(e,n);return new x(r)}get accountAddress(){return this.#r}get inboxId(){return this.#e.inboxId}get installationId(){return this.#e.installationId}get isRegistered(){return this.#e.isRegistered}async getCreateInboxSignatureText(){try{return await this.#e.createInboxSignatureText()}catch{return}}async getAddWalletSignatureText(e){try{return await this.#e.addWalletSignatureText(this.#r,e)}catch{return}}async getRevokeWalletSignatureText(e){try{return await this.#e.revokeWalletSignatureText(e)}catch{return}}async getRevokeInstallationsSignatureText(){try{return await this.#e.revokeInstallationsSignatureText()}catch{return}}async addSignature(e,t){return this.#e.addSignature(e,t)}async applySignaturesRequests(){return this.#e.applySignatureRequests()}async canMessage(e){return this.#e.canMessage(e)}async registerIdentity(){return this.#e.registerIdentity()}async findInboxIdByAddress(e){return this.#e.findInboxIdByAddress(e)}async inboxState(e){return this.#e.inboxState(e)}async getLatestInboxState(e){return this.#e.getLatestInboxState(e)}async setConsentStates(e){return this.#e.setConsentStates(e.map(_))}async getConsentState(e,t){return this.#e.getConsentState(e,t)}get conversations(){return this.#n}}let w,k=!1;const f=e=>{self.postMessage(e)},A=e=>{self.postMessage(e)};self.onmessage=async e=>{const{action:t,id:n,data:r}=e.data;if(k&&console.log("client worker received event data",e.data),"init"===t||w)try{switch(t){case"init":w=await x.create(r.address,r.options),k=r.options?.enableLogging??!1,f({id:n,action:t,result:{inboxId:w.inboxId,installationId:w.installationId}});break;case"getCreateInboxSignatureText":{const e=await w.getCreateInboxSignatureText();f({id:n,action:t,result:e});break}case"getAddWalletSignatureText":{const e=await w.getAddWalletSignatureText(r.accountAddress);f({id:n,action:t,result:e});break}case"getRevokeWalletSignatureText":{const e=await w.getRevokeWalletSignatureText(r.accountAddress);f({id:n,action:t,result:e});break}case"addSignature":await w.addSignature(r.type,r.bytes),f({id:n,action:t,result:void 0});break;case"applySignaturesRequests":await w.applySignaturesRequests(),f({id:n,action:t,result:void 0});break;case"registerIdentity":await w.registerIdentity(),f({id:n,action:t,result:void 0});break;case"isRegistered":{const e=w.isRegistered;f({id:n,action:t,result:e});break}case"canMessage":{const e=await w.canMessage(r.accountAddresses);f({id:n,action:t,result:e});break}case"inboxState":{const e=await w.inboxState(r.refreshFromNetwork);f({id:n,action:t,result:b(e)});break}case"getLatestInboxState":{const e=await w.getLatestInboxState(r.inboxId);f({id:n,action:t,result:b(e)});break}case"setConsentStates":await w.setConsentStates(r.records),f({id:n,action:t,result:void 0});break;case"getConsentState":{const e=await w.getConsentState(r.entityType,r.entity);f({id:n,action:t,result:e});break}case"findInboxIdByAddress":{const e=await w.findInboxIdByAddress(r.address);f({id:n,action:t,result:e});break}case"getConversations":{const e=await w.conversations.list(r.options);f({id:n,action:t,result:e.map((e=>y(e)))});break}case"newGroup":{const e=await w.conversations.newGroup(r.accountAddresses,r.options);f({id:n,action:t,result:y(e)});break}case"syncConversations":await w.conversations.sync(),f({id:n,action:t,result:void 0});break;case"getConversationById":{const e=w.conversations.getConversationById(r.id);f({id:n,action:t,result:e?y(e):void 0});break}case"getMessageById":{const e=w.conversations.getMessageById(r.id);f({id:n,action:t,result:e});break}case"syncGroup":{const e=w.conversations.getConversationById(r.id);e?(await e.sync(),f({id:n,action:t,result:y(e)})):A({id:n,action:t,error:"Group not found"});break}case"updateGroupName":{const e=w.conversations.getConversationById(r.id);e?(await e.updateName(r.name),f({id:n,action:t,result:void 0})):A({id:n,action:t,error:"Group not found"});break}case"updateGroupDescription":{const e=w.conversations.getConversationById(r.id);e?(await e.updateDescription(r.description),f({id:n,action:t,result:void 0})):A({id:n,action:t,error:"Group not found"});break}case"updateGroupImageUrlSquare":{const e=w.conversations.getConversationById(r.id);e?(await e.updateImageUrl(r.imageUrl),f({id:n,action:t,result:void 0})):A({id:n,action:t,error:"Group not found"});break}case"updateGroupPinnedFrameUrl":{const e=w.conversations.getConversationById(r.id);e?(await e.updatePinnedFrameUrl(r.pinnedFrameUrl),f({id:n,action:t,result:void 0})):A({id:n,action:t,error:"Group not found"});break}case"sendGroupMessage":{const e=w.conversations.getConversationById(r.id);if(e){const s=await e.send(p(m(r.content)));f({id:n,action:t,result:s})}else A({id:n,action:t,error:"Group not found"});break}case"sendOptimisticGroupMessage":{const e=w.conversations.getConversationById(r.id);if(e){const s=e.sendOptimistic(p(m(r.content)));f({id:n,action:t,result:s})}else A({id:n,action:t,error:"Group not found"});break}case"publishGroupMessages":{const e=w.conversations.getConversationById(r.id);e?(await e.publishMessages(),f({id:n,action:t,result:void 0})):A({id:n,action:t,error:"Group not found"});break}case"getGroupMessages":{const e=w.conversations.getConversationById(r.id);if(e){const s=e.messages(r.options);f({id:n,action:t,result:s.map((e=>g(e)))})}else A({id:n,action:t,error:"Group not found"});break}case"getGroupMembers":{const e=w.conversations.getConversationById(r.id);if(e){const r=await e.members();f({id:n,action:t,result:r.map((e=>(e=>({accountAddresses:e.account_addresses,consentState:e.consent_state,inboxId:e.inbox_id,installationIds:e.installation_ids,permissionLevel:e.permission_level}))(e)))})}else A({id:n,action:t,error:"Group not found"});break}case"getGroupAdmins":{const e=w.conversations.getConversationById(r.id);e?f({id:n,action:t,result:e.admins}):A({id:n,action:t,error:"Group not found"});break}case"getGroupSuperAdmins":{const e=w.conversations.getConversationById(r.id);e?f({id:n,action:t,result:e.superAdmins}):A({id:n,action:t,error:"Group not found"});break}case"getGroupConsentState":{const e=w.conversations.getConversationById(r.id);e?f({id:n,action:t,result:e.consentState}):A({id:n,action:t,error:"Group not found"});break}case"updateGroupConsentState":{const e=w.conversations.getConversationById(r.id);e?(e.updateConsentState(r.state),f({id:n,action:t,result:void 0})):A({id:n,action:t,error:"Group not found"});break}case"addGroupAdmin":{const e=w.conversations.getConversationById(r.id);e?(await e.addAdmin(r.inboxId),f({id:n,action:t,result:void 0})):A({id:n,action:t,error:"Group not found"});break}case"removeGroupAdmin":{const e=w.conversations.getConversationById(r.id);e?(await e.removeAdmin(r.inboxId),f({id:n,action:t,result:void 0})):A({id:n,action:t,error:"Group not found"});break}case"addGroupSuperAdmin":{const e=w.conversations.getConversationById(r.id);e?(await e.addSuperAdmin(r.inboxId),f({id:n,action:t,result:void 0})):A({id:n,action:t,error:"Group not found"});break}case"removeGroupSuperAdmin":{const e=w.conversations.getConversationById(r.id);e?(await e.removeSuperAdmin(r.inboxId),f({id:n,action:t,result:void 0})):A({id:n,action:t,error:"Group not found"});break}case"addGroupMembers":{const e=w.conversations.getConversationById(r.id);e?(await e.addMembers(r.accountAddresses),f({id:n,action:t,result:void 0})):A({id:n,action:t,error:"Group not found"});break}case"removeGroupMembers":{const e=w.conversations.getConversationById(r.id);e?(await e.removeMembers(r.accountAddresses),f({id:n,action:t,result:void 0})):A({id:n,action:t,error:"Group not found"});break}case"addGroupMembersByInboxId":{const e=w.conversations.getConversationById(r.id);e?(await e.addMembersByInboxId(r.inboxIds),f({id:n,action:t,result:void 0})):A({id:n,action:t,error:"Group not found"});break}case"removeGroupMembersByInboxId":{const e=w.conversations.getConversationById(r.id);e?(await e.removeMembersByInboxId(r.inboxIds),f({id:n,action:t,result:void 0})):A({id:n,action:t,error:"Group not found"});break}case"isGroupAdmin":{const e=w.conversations.getConversationById(r.id);if(e){const s=e.isAdmin(r.inboxId);f({id:n,action:t,result:s})}else A({id:n,action:t,error:"Group not found"});break}case"isGroupSuperAdmin":{const e=w.conversations.getConversationById(r.id);if(e){const s=e.isSuperAdmin(r.inboxId);f({id:n,action:t,result:s})}else A({id:n,action:t,error:"Group not found"});break}}}catch(e){A({id:n,action:t,error:e.message})}else A({id:n,action:t,error:"Client not initialized"})};
2
+ //# sourceMappingURL=client.js.map
@@ -0,0 +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 WasmConsent,\n WasmContentTypeId,\n WasmCreateGroupOptions,\n WasmEncodedContent,\n WasmGroupMember,\n WasmListConversationsOptions,\n WasmListMessagesOptions,\n type WasmConsentEntityType,\n type WasmConsentState,\n type WasmDeliveryStatus,\n type WasmGroupMessageKind,\n type WasmGroupPermissionsOptions,\n type WasmInboxState,\n type WasmInstallation,\n type WasmMessage,\n type WasmPermissionLevel,\n type WasmPermissionPolicy,\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.authority_id,\n typeId: contentTypeId.type_id,\n versionMajor: contentTypeId.version_major,\n versionMinor: contentTypeId.version_minor,\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: WasmDeliveryStatus;\n id: string;\n kind: WasmGroupMessageKind;\n senderInboxId: string;\n sentAtNs: bigint;\n};\n\nexport const toSafeMessage = (message: WasmMessage): SafeMessage => ({\n content: toSafeEncodedContent(toEncodedContent(message.content)),\n convoId: message.convo_id,\n deliveryStatus: message.delivery_status,\n id: message.id,\n kind: message.kind,\n senderInboxId: message.sender_inbox_id,\n sentAtNs: message.sent_at_ns,\n});\n\nexport type SafeListMessagesOptions = {\n delivery_status?: WasmDeliveryStatus;\n limit?: bigint;\n sent_after_ns?: bigint;\n sent_before_ns?: bigint;\n};\n\nexport const toSafeListMessagesOptions = (\n options: WasmListMessagesOptions,\n): SafeListMessagesOptions => ({\n delivery_status: options.delivery_status,\n limit: options.limit,\n sent_after_ns: options.sent_after_ns,\n sent_before_ns: options.sent_before_ns,\n});\n\nexport const fromSafeListMessagesOptions = (\n options: SafeListMessagesOptions,\n): WasmListMessagesOptions =>\n new WasmListMessagesOptions(\n options.sent_before_ns,\n options.sent_after_ns,\n options.limit,\n options.delivery_status,\n );\n\nexport type SafeListConversationsOptions = {\n created_after_ns?: bigint;\n created_before_ns?: bigint;\n limit?: bigint;\n};\n\nexport const toSafeListConversationsOptions = (\n options: WasmListConversationsOptions,\n): SafeListConversationsOptions => ({\n created_after_ns: options.created_after_ns,\n created_before_ns: options.created_before_ns,\n limit: options.limit,\n});\n\nexport const fromSafeListConversationsOptions = (\n options: SafeListConversationsOptions,\n): WasmListConversationsOptions =>\n new WasmListConversationsOptions(\n options.created_after_ns,\n options.created_before_ns,\n options.limit,\n );\n\nexport type SafeCreateGroupOptions = {\n permissions?: WasmGroupPermissionsOptions;\n name?: string;\n imageUrlSquare?: string;\n description?: string;\n pinnedFrameUrl?: string;\n};\n\nexport const toSafeCreateGroupOptions = (\n options: WasmCreateGroupOptions,\n): SafeCreateGroupOptions => ({\n permissions: options.permissions,\n name: options.group_name,\n imageUrlSquare: options.group_image_url_square,\n description: options.group_description,\n pinnedFrameUrl: options.group_pinned_frame_url,\n});\n\nexport const fromSafeCreateGroupOptions = (\n options: SafeCreateGroupOptions,\n): WasmCreateGroupOptions =>\n new WasmCreateGroupOptions(\n options.permissions,\n options.name,\n options.imageUrlSquare,\n options.description,\n options.pinnedFrameUrl,\n );\n\nexport type SafeConversation = {\n id: string;\n name: string;\n imageUrl: string;\n description: string;\n pinnedFrameUrl: string;\n permissions: {\n policyType: WasmGroupPermissionsOptions;\n policySet: {\n addAdminPolicy: WasmPermissionPolicy;\n addMemberPolicy: WasmPermissionPolicy;\n removeAdminPolicy: WasmPermissionPolicy;\n removeMemberPolicy: WasmPermissionPolicy;\n updateGroupDescriptionPolicy: WasmPermissionPolicy;\n updateGroupImageUrlSquarePolicy: WasmPermissionPolicy;\n updateGroupNamePolicy: WasmPermissionPolicy;\n updateGroupPinnedFrameUrlPolicy: WasmPermissionPolicy;\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 = (\n conversation: WorkerConversation,\n): SafeConversation => ({\n id: conversation.id,\n name: conversation.name,\n imageUrl: conversation.imageUrl,\n description: conversation.description,\n pinnedFrameUrl: conversation.pinnedFrameUrl,\n permissions: {\n policyType: conversation.permissions.policyType,\n policySet: {\n addAdminPolicy: conversation.permissions.policySet.add_admin_policy,\n addMemberPolicy: conversation.permissions.policySet.add_member_policy,\n removeAdminPolicy: conversation.permissions.policySet.remove_admin_policy,\n removeMemberPolicy:\n conversation.permissions.policySet.remove_member_policy,\n updateGroupDescriptionPolicy:\n conversation.permissions.policySet.update_group_description_policy,\n updateGroupImageUrlSquarePolicy:\n conversation.permissions.policySet.update_group_image_url_square_policy,\n updateGroupNamePolicy:\n conversation.permissions.policySet.update_group_name_policy,\n updateGroupPinnedFrameUrlPolicy:\n conversation.permissions.policySet.update_group_pinned_frame_url_policy,\n },\n },\n isActive: conversation.isActive,\n addedByInboxId: conversation.addedByInboxId,\n metadata: conversation.metadata,\n admins: conversation.admins,\n superAdmins: conversation.superAdmins,\n createdAtNs: conversation.createdAtNs,\n});\n\nexport type SafeInstallation = {\n id: string;\n clientTimestampNs?: bigint;\n};\n\nexport const toSafeInstallation = (\n installation: WasmInstallation,\n): SafeInstallation => ({\n id: installation.id,\n clientTimestampNs: installation.client_timestamp_ns,\n});\n\nexport type SafeInboxState = {\n accountAddresses: string[];\n inboxId: string;\n installations: SafeInstallation[];\n recoveryAddress: string;\n};\n\nexport const toSafeInboxState = (\n inboxState: WasmInboxState,\n): SafeInboxState => ({\n accountAddresses: inboxState.account_addresses,\n inboxId: inboxState.inbox_id,\n installations: inboxState.installations.map(toSafeInstallation),\n recoveryAddress: inboxState.recovery_address,\n});\n\nexport type SafeConsent = {\n entity: string;\n entityType: WasmConsentEntityType;\n state: WasmConsentState;\n};\n\nexport const toSafeConsent = (consent: WasmConsent): SafeConsent => ({\n entity: consent.entity,\n entityType: consent.entity_type,\n state: consent.state,\n});\n\nexport const fromSafeConsent = (consent: SafeConsent): WasmConsent =>\n new WasmConsent(consent.entityType, consent.state, consent.entity);\n\nexport type SafeGroupMember = {\n accountAddresses: string[];\n consentState: WasmConsentState;\n inboxId: string;\n installationIds: string[];\n permissionLevel: WasmPermissionLevel;\n};\n\nexport const toSafeGroupMember = (\n member: WasmGroupMember,\n): SafeGroupMember => ({\n accountAddresses: member.account_addresses,\n consentState: member.consent_state,\n inboxId: member.inbox_id,\n installationIds: member.installation_ids,\n permissionLevel: member.permission_level,\n});\n\nexport const fromSafeGroupMember = (member: SafeGroupMember): WasmGroupMember =>\n new WasmGroupMember(\n member.inboxId,\n member.accountAddresses,\n member.installationIds,\n member.permissionLevel,\n member.consentState,\n );\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","import type {\n WasmConsentState,\n WasmEncodedContent,\n WasmGroup,\n WasmGroupMember,\n} from \"@xmtp/wasm-bindings\";\nimport {\n fromSafeListMessagesOptions,\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: WasmGroup;\n\n constructor(client: WorkerClient, group: WasmGroup) {\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.group_name();\n }\n\n async updateName(name: string) {\n return this.#group.update_group_name(name);\n }\n\n get imageUrl() {\n return this.#group.group_image_url_square();\n }\n\n async updateImageUrl(imageUrl: string) {\n return this.#group.update_group_image_url_square(imageUrl);\n }\n\n get description() {\n return this.#group.group_description();\n }\n\n async updateDescription(description: string) {\n return this.#group.update_group_description(description);\n }\n\n get pinnedFrameUrl() {\n return this.#group.group_pinned_frame_url();\n }\n\n async updatePinnedFrameUrl(pinnedFrameUrl: string) {\n return this.#group.update_group_pinned_frame_url(pinnedFrameUrl);\n }\n\n get isActive() {\n return this.#group.is_active();\n }\n\n get addedByInboxId() {\n return this.#group.added_by_inbox_id();\n }\n\n get createdAtNs() {\n return this.#group.created_at_ns();\n }\n\n get metadata() {\n const metadata = this.#group.group_metadata();\n return {\n creatorInboxId: metadata.creator_inbox_id(),\n conversationType: metadata.conversation_type(),\n };\n }\n\n async members() {\n return this.#group.list_members() as Promise<WasmGroupMember[]>;\n }\n\n get admins() {\n return this.#group.admin_list();\n }\n\n get superAdmins() {\n return this.#group.super_admin_list();\n }\n\n get permissions() {\n const permissions = this.#group.group_permissions();\n return {\n policyType: permissions.policy_type(),\n policySet: permissions.policy_set(),\n };\n }\n\n isAdmin(inboxId: string) {\n return this.#group.is_admin(inboxId);\n }\n\n isSuperAdmin(inboxId: string) {\n return this.#group.is_super_admin(inboxId);\n }\n\n async sync() {\n return this.#group.sync();\n }\n\n async addMembers(accountAddresses: string[]) {\n return this.#group.add_members(accountAddresses);\n }\n\n async addMembersByInboxId(inboxIds: string[]) {\n return this.#group.add_members_by_inbox_id(inboxIds);\n }\n\n async removeMembers(accountAddresses: string[]) {\n return this.#group.remove_members(accountAddresses);\n }\n\n async removeMembersByInboxId(inboxIds: string[]) {\n return this.#group.remove_members_by_inbox_id(inboxIds);\n }\n\n async addAdmin(inboxId: string) {\n return this.#group.add_admin(inboxId);\n }\n\n async removeAdmin(inboxId: string) {\n return this.#group.remove_admin(inboxId);\n }\n\n async addSuperAdmin(inboxId: string) {\n return this.#group.add_super_admin(inboxId);\n }\n\n async removeSuperAdmin(inboxId: string) {\n return this.#group.remove_super_admin(inboxId);\n }\n\n async publishMessages() {\n return this.#group.publish_messages();\n }\n\n sendOptimistic(encodedContent: WasmEncodedContent) {\n return this.#group.send_optimistic(encodedContent);\n }\n\n async send(encodedContent: WasmEncodedContent) {\n return this.#group.send(encodedContent);\n }\n\n messages(options?: SafeListMessagesOptions) {\n return this.#group.find_messages(\n options ? fromSafeListMessagesOptions(options) : undefined,\n );\n }\n\n get consentState() {\n return this.#group.consent_state();\n }\n\n updateConsentState(state: WasmConsentState) {\n this.#group.update_consent_state(state);\n }\n}\n","import type { WasmConversations, WasmGroup } from \"@xmtp/wasm-bindings\";\nimport {\n fromSafeCreateGroupOptions,\n fromSafeListConversationsOptions,\n toSafeMessage,\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: WasmConversations;\n\n constructor(client: WorkerClient, conversations: WasmConversations) {\n this.#client = client;\n this.#conversations = conversations;\n }\n\n async sync() {\n return this.#conversations.sync();\n }\n\n getConversationById(id: string) {\n try {\n const group = this.#conversations.find_group_by_id(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 const message = this.#conversations.find_message_by_id(id);\n return toSafeMessage(message);\n } catch {\n return undefined;\n }\n }\n\n async list(options?: SafeListConversationsOptions) {\n const groups = (await this.#conversations.list(\n options ? fromSafeListConversationsOptions(options) : undefined,\n )) as WasmGroup[];\n return groups.map((group) => new WorkerConversation(this.#client, group));\n }\n\n async newGroup(accountAddresses: string[], options?: SafeCreateGroupOptions) {\n const group = await this.#conversations.create_group(\n accountAddresses,\n options ? fromSafeCreateGroupOptions(options) : undefined,\n );\n return new WorkerConversation(this.#client, group);\n }\n}\n","import {\n type WasmClient,\n type WasmConsentEntityType,\n type WasmSignatureRequestType,\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: WasmClient;\n\n #conversations: WorkerConversations;\n\n #accountAddress: string;\n\n constructor(client: WasmClient) {\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 options?: Omit<ClientOptions, \"codecs\">,\n ) {\n const client = await createClient(accountAddress, 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 isRegistered() {\n return this.#client.isRegistered;\n }\n\n async getCreateInboxSignatureText() {\n try {\n return await this.#client.createInboxSignatureText();\n } catch {\n return undefined;\n }\n }\n\n async getAddWalletSignatureText(accountAddress: string) {\n try {\n return await this.#client.addWalletSignatureText(\n this.#accountAddress,\n accountAddress,\n );\n } catch {\n return undefined;\n }\n }\n\n async getRevokeWalletSignatureText(accountAddress: string) {\n try {\n return await this.#client.revokeWalletSignatureText(accountAddress);\n } catch {\n return undefined;\n }\n }\n\n async getRevokeInstallationsSignatureText() {\n try {\n return await this.#client.revokeInstallationsSignatureText();\n } catch {\n return undefined;\n }\n }\n\n async addSignature(type: WasmSignatureRequestType, bytes: Uint8Array) {\n return this.#client.addSignature(type, bytes);\n }\n\n async applySignaturesRequests() {\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: WasmConsentEntityType, entity: string) {\n return this.#client.getConsentState(entityType, entity);\n }\n\n get conversations() {\n return this.#conversations;\n }\n}\n","import init, {\n createClient as createWasmClient,\n generateInboxId,\n getInboxIdForAddress,\n} from \"@xmtp/wasm-bindings\";\nimport { ApiUrls } from \"@/constants\";\nimport type { ClientOptions } from \"@/types\";\n\nexport const createClient = async (\n accountAddress: string,\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 = `xmtp-${options?.env ?? \"dev\"}-${accountAddress}.db3`;\n\n const inboxId =\n (await getInboxIdForAddress(host, accountAddress)) ||\n generateInboxId(accountAddress);\n\n return createWasmClient(\n host,\n inboxId,\n accountAddress,\n dbPath,\n options?.encryptionKey,\n );\n};\n","import type {\n ClientEventsActions,\n ClientEventsClientMessageData,\n ClientEventsErrorData,\n ClientEventsWorkerPostMessageData,\n} from \"@/types\";\nimport {\n fromEncodedContent,\n fromSafeEncodedContent,\n toSafeConversation,\n toSafeGroupMember,\n toSafeInboxState,\n toSafeMessage,\n} from \"@/utils/conversions\";\nimport { WorkerClient } from \"@/WorkerClient\";\n\nlet client: WorkerClient;\nlet enableLogging = false;\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\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 // a client is required for all actions except init\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (action !== \"init\" && !client) {\n postMessageError({\n id,\n action,\n error: \"Client not initialized\",\n });\n return;\n }\n\n try {\n switch (action) {\n /**\n * Client actions\n */\n case \"init\":\n client = await WorkerClient.create(data.address, data.options);\n enableLogging = data.options?.enableLogging ?? false;\n postMessage({\n id,\n action,\n result: {\n inboxId: client.inboxId,\n installationId: client.installationId,\n },\n });\n break;\n case \"getCreateInboxSignatureText\": {\n const result = await client.getCreateInboxSignatureText();\n postMessage({\n id,\n action,\n result,\n });\n break;\n }\n case \"getAddWalletSignatureText\": {\n const result = await client.getAddWalletSignatureText(\n data.accountAddress,\n );\n postMessage({\n id,\n action,\n result,\n });\n break;\n }\n case \"getRevokeWalletSignatureText\": {\n const result = await client.getRevokeWalletSignatureText(\n data.accountAddress,\n );\n postMessage({\n id,\n action,\n result,\n });\n break;\n }\n case \"addSignature\":\n await client.addSignature(data.type, data.bytes);\n postMessage({\n id,\n action,\n result: undefined,\n });\n break;\n case \"applySignaturesRequests\":\n await client.applySignaturesRequests();\n postMessage({\n id,\n action,\n result: undefined,\n });\n break;\n case \"registerIdentity\":\n await client.registerIdentity();\n postMessage({\n id,\n action,\n result: undefined,\n });\n break;\n case \"isRegistered\": {\n const result = client.isRegistered;\n postMessage({\n id,\n action,\n result,\n });\n break;\n }\n case \"canMessage\": {\n const result = await client.canMessage(data.accountAddresses);\n postMessage({\n id,\n action,\n result,\n });\n break;\n }\n case \"inboxState\": {\n const result = await client.inboxState(data.refreshFromNetwork);\n postMessage({\n id,\n action,\n result: toSafeInboxState(result),\n });\n break;\n }\n case \"getLatestInboxState\": {\n const result = await client.getLatestInboxState(data.inboxId);\n postMessage({\n id,\n action,\n result: toSafeInboxState(result),\n });\n break;\n }\n case \"setConsentStates\": {\n await client.setConsentStates(data.records);\n postMessage({\n id,\n action,\n result: undefined,\n });\n break;\n }\n case \"getConsentState\": {\n const result = await client.getConsentState(\n data.entityType,\n data.entity,\n );\n postMessage({\n id,\n action,\n result,\n });\n break;\n }\n case \"findInboxIdByAddress\": {\n const result = await client.findInboxIdByAddress(data.address);\n postMessage({\n id,\n action,\n result,\n });\n break;\n }\n /**\n * Conversations actions\n */\n case \"getConversations\": {\n const conversations = await client.conversations.list(data.options);\n postMessage({\n id,\n action,\n result: conversations.map((conversation) =>\n toSafeConversation(conversation),\n ),\n });\n break;\n }\n case \"newGroup\": {\n const conversation = await client.conversations.newGroup(\n data.accountAddresses,\n data.options,\n );\n postMessage({\n id,\n action,\n result: toSafeConversation(conversation),\n });\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 \"getConversationById\": {\n const conversation = client.conversations.getConversationById(data.id);\n postMessage({\n id,\n action,\n result: conversation ? toSafeConversation(conversation) : undefined,\n });\n break;\n }\n case \"getMessageById\": {\n const message = client.conversations.getMessageById(data.id);\n postMessage({\n id,\n action,\n result: message,\n });\n break;\n }\n /**\n * Group actions\n */\n case \"syncGroup\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n await group.sync();\n postMessage({\n id,\n action,\n result: toSafeConversation(group),\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"updateGroupName\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n await group.updateName(data.name);\n postMessage({\n id,\n action,\n result: undefined,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"updateGroupDescription\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n await group.updateDescription(data.description);\n postMessage({\n id,\n action,\n result: undefined,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"updateGroupImageUrlSquare\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n await group.updateImageUrl(data.imageUrl);\n postMessage({\n id,\n action,\n result: undefined,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"updateGroupPinnedFrameUrl\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n await group.updatePinnedFrameUrl(data.pinnedFrameUrl);\n postMessage({\n id,\n action,\n result: undefined,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"sendGroupMessage\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n const result = await group.send(\n fromEncodedContent(fromSafeEncodedContent(data.content)),\n );\n postMessage({\n id,\n action,\n result,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"sendOptimisticGroupMessage\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n const result = group.sendOptimistic(\n fromEncodedContent(fromSafeEncodedContent(data.content)),\n );\n postMessage({\n id,\n action,\n result,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"publishGroupMessages\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n await group.publishMessages();\n postMessage({\n id,\n action,\n result: undefined,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"getGroupMessages\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n const messages = group.messages(data.options);\n postMessage({\n id,\n action,\n result: messages.map((message) => toSafeMessage(message)),\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"getGroupMembers\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n const members = await group.members();\n postMessage({\n id,\n action,\n result: members.map((member) => toSafeGroupMember(member)),\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"getGroupAdmins\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n postMessage({\n id,\n action,\n result: group.admins,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"getGroupSuperAdmins\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n postMessage({\n id,\n action,\n result: group.superAdmins,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"getGroupConsentState\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n postMessage({\n id,\n action,\n result: group.consentState,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"updateGroupConsentState\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n group.updateConsentState(data.state);\n postMessage({\n id,\n action,\n result: undefined,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"addGroupAdmin\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n await group.addAdmin(data.inboxId);\n postMessage({\n id,\n action,\n result: undefined,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"removeGroupAdmin\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n await group.removeAdmin(data.inboxId);\n postMessage({\n id,\n action,\n result: undefined,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"addGroupSuperAdmin\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n await group.addSuperAdmin(data.inboxId);\n postMessage({\n id,\n action,\n result: undefined,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"removeGroupSuperAdmin\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n await group.removeSuperAdmin(data.inboxId);\n postMessage({\n id,\n action,\n result: undefined,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"addGroupMembers\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n await group.addMembers(data.accountAddresses);\n postMessage({\n id,\n action,\n result: undefined,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"removeGroupMembers\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n await group.removeMembers(data.accountAddresses);\n postMessage({\n id,\n action,\n result: undefined,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"addGroupMembersByInboxId\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n await group.addMembersByInboxId(data.inboxIds);\n postMessage({\n id,\n action,\n result: undefined,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"removeGroupMembersByInboxId\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n await group.removeMembersByInboxId(data.inboxIds);\n postMessage({\n id,\n action,\n result: undefined,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"isGroupAdmin\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n const result = group.isAdmin(data.inboxId);\n postMessage({\n id,\n action,\n result,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\n break;\n }\n case \"isGroupSuperAdmin\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n const result = group.isSuperAdmin(data.inboxId);\n postMessage({\n id,\n action,\n result,\n });\n } else {\n postMessageError({\n id,\n action,\n error: \"Group not found\",\n });\n }\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","authority_id","type_id","version_major","version_minor","fromEntries","convoId","convo_id","deliveryStatus","delivery_status","id","kind","senderInboxId","sender_inbox_id","sentAtNs","sent_at_ns","toSafeConversation","conversation","name","imageUrl","description","pinnedFrameUrl","permissions","policyType","policySet","addAdminPolicy","add_admin_policy","addMemberPolicy","add_member_policy","removeAdminPolicy","remove_admin_policy","removeMemberPolicy","remove_member_policy","updateGroupDescriptionPolicy","update_group_description_policy","updateGroupImageUrlSquarePolicy","update_group_image_url_square_policy","updateGroupNamePolicy","update_group_name_policy","updateGroupPinnedFrameUrlPolicy","update_group_pinned_frame_url_policy","isActive","addedByInboxId","metadata","admins","superAdmins","createdAtNs","toSafeInstallation","installation","clientTimestampNs","client_timestamp_ns","toSafeInboxState","inboxState","accountAddresses","account_addresses","inboxId","inbox_id","installations","map","recoveryAddress","recovery_address","fromSafeConsent","consent","WasmConsent","entityType","state","entity","ApiUrls","local","dev","production","WorkerConversation","client","group","constructor","this","group_name","updateName","update_group_name","group_image_url_square","updateImageUrl","update_group_image_url_square","group_description","updateDescription","update_group_description","group_pinned_frame_url","updatePinnedFrameUrl","update_group_pinned_frame_url","is_active","added_by_inbox_id","created_at_ns","group_metadata","creatorInboxId","creator_inbox_id","conversationType","conversation_type","members","list_members","admin_list","super_admin_list","group_permissions","policy_type","policy_set","isAdmin","is_admin","isSuperAdmin","is_super_admin","sync","addMembers","add_members","addMembersByInboxId","inboxIds","add_members_by_inbox_id","removeMembers","remove_members","removeMembersByInboxId","remove_members_by_inbox_id","addAdmin","add_admin","removeAdmin","remove_admin","addSuperAdmin","add_super_admin","removeSuperAdmin","remove_super_admin","publishMessages","publish_messages","sendOptimistic","encodedContent","send_optimistic","send","messages","options","find_messages","WasmListMessagesOptions","sent_before_ns","sent_after_ns","limit","fromSafeListMessagesOptions","undefined","consentState","consent_state","updateConsentState","update_consent_state","WorkerConversations","conversations","getConversationById","find_group_by_id","getMessageById","find_message_by_id","list","groups","WasmListConversationsOptions","created_after_ns","created_before_ns","fromSafeListConversationsOptions","newGroup","create_group","WasmCreateGroupOptions","imageUrlSquare","fromSafeCreateGroupOptions","WorkerClient","accountAddress","create","async","init","host","apiUrl","env","dbPath","getInboxIdForAddress","generateInboxId","createWasmClient","encryptionKey","createClient","installationId","isRegistered","getCreateInboxSignatureText","createInboxSignatureText","getAddWalletSignatureText","addWalletSignatureText","getRevokeWalletSignatureText","revokeWalletSignatureText","getRevokeInstallationsSignatureText","revokeInstallationsSignatureText","addSignature","bytes","applySignaturesRequests","applySignatureRequests","canMessage","registerIdentity","findInboxIdByAddress","address","refreshFromNetwork","getLatestInboxState","setConsentStates","records","getConsentState","enableLogging","postMessage","data","self","postMessageError","onmessage","event","action","console","log","result","error","member","installationIds","installation_ids","permissionLevel","permission_level","toSafeGroupMember","e"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import e,{generateInboxId as t,getInboxIdForAddress as a}from"@xmtp/wasm-bindings";const s={local:"http://localhost:5555",dev:"https://dev.xmtp.network",production:"https://production.xmtp.network"},o=e=>{self.postMessage(e)},n=async a=>(await e(),t(a)),d=async(t,o)=>{await e();return a(o?s[o]:s.dev,t)};self.onmessage=async e=>{const{action:t,id:a,data:s}=e.data;s.enableLogging&&console.log("utils worker received event data",e.data);try{switch(t){case"generateInboxId":o({id:a,action:t,result:await n(s.address)});break;case"getInboxIdForAddress":o({id:a,action:t,result:await d(s.address,s.env)})}}catch(e){(e=>{self.postMessage(e)})({id:a,action:t,error:e.message})}};export{n as generateInboxId,d as getInboxIdForAddress};
2
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +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","import init, {\n generateInboxId as generate_inbox_id,\n getInboxIdForAddress as get_inbox_id_for_address,\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\nexport const generateInboxId = async (address: string) => {\n await init();\n return generate_inbox_id(address);\n};\n\nexport const getInboxIdForAddress = async (address: string, env?: XmtpEnv) => {\n await init();\n const host = env ? ApiUrls[env] : ApiUrls.dev;\n return get_inbox_id_for_address(host, address);\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 try {\n switch (action) {\n case \"generateInboxId\":\n postMessage({\n id,\n action,\n result: await generateInboxId(data.address),\n });\n break;\n case \"getInboxIdForAddress\":\n postMessage({\n id,\n action,\n result: await getInboxIdForAddress(data.address, 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","generateInboxId","async","address","init","generate_inbox_id","getInboxIdForAddress","env","get_inbox_id_for_address","onmessage","event","action","id","enableLogging","console","log","result","e","postMessageError","error","message"],"mappings":"mFAAO,MAAMA,EAAU,CACrBC,MAAO,wBACPC,IAAK,2BACLC,WAAY,mCCaRC,EACJC,IAEAC,KAAKF,YAAYC,EAAK,EAUXE,EAAkBC,MAAOC,UAC9BC,IACCC,EAAkBF,IAGdG,EAAuBJ,MAAOC,EAAiBI,WACpDH,IAEN,OAAOI,EADMD,EAAMb,EAAQa,GAAOb,EAAQE,IACJO,EAAQ,EAGhDH,KAAKS,UAAYP,MAAOQ,IACtB,MAAMC,OAAEA,EAAMC,GAAEA,EAAEb,KAAEA,GAASW,EAAMX,KAC/BA,EAAKc,eACPC,QAAQC,IAAI,mCAAoCL,EAAMX,MAGxD,IACE,OAAQY,GACN,IAAK,kBACHb,EAAY,CACVc,KACAD,SACAK,aAAcf,EAAgBF,EAAKI,WAErC,MACF,IAAK,uBACHL,EAAY,CACVc,KACAD,SACAK,aAAcV,EAAqBP,EAAKI,QAASJ,EAAKQ,OAK7D,CAAC,MAAOU,GAvCc,CAAClB,IACxBC,KAAKF,YAAYC,EAAK,EAuCpBmB,CAAiB,CACfN,KACAD,SACAQ,MAAQF,EAAYG,SAEvB"}
package/package.json ADDED
@@ -0,0 +1,101 @@
1
+ {
2
+ "name": "@xmtp/browser-sdk",
3
+ "version": "0.0.1",
4
+ "description": "XMTP client SDK for browsers written in TypeScript",
5
+ "keywords": [
6
+ "xmtp",
7
+ "messaging",
8
+ "web3",
9
+ "sdk",
10
+ "js",
11
+ "ts",
12
+ "javascript",
13
+ "typescript"
14
+ ],
15
+ "homepage": "https://github.com/xmtp/xmtp-js",
16
+ "bugs": {
17
+ "url": "https://github.com/xmtp/xmtp-js/issues"
18
+ },
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+ssh://git@github.com/xmtp/xmtp-js.git",
22
+ "directory": "sdks/browser-sdk"
23
+ },
24
+ "license": "MIT",
25
+ "author": "XMTP Labs <eng@xmtp.com>",
26
+ "sideEffects": false,
27
+ "type": "module",
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/index.d.ts",
31
+ "default": "./dist/index.js"
32
+ }
33
+ },
34
+ "module": "dist/index.js",
35
+ "browser": "dist/index.js",
36
+ "types": "dist/index.d.ts",
37
+ "files": [
38
+ "dist",
39
+ "src",
40
+ "tsconfig.json"
41
+ ],
42
+ "scripts": {
43
+ "build": "yarn clean:dist && yarn rollup -c",
44
+ "clean": "rm -rf .turbo && rm -rf node_modules && yarn clean:dist",
45
+ "clean:dist": "rm -rf dist",
46
+ "dev": "yarn clean:dist && yarn rollup -c --watch",
47
+ "test": "vitest run",
48
+ "typecheck": "tsc",
49
+ "typedoc": "typedoc"
50
+ },
51
+ "browserslist": {
52
+ "production": [
53
+ ">0.2%",
54
+ "not dead",
55
+ "not op_mini all"
56
+ ],
57
+ "development": [
58
+ "last 3 chrome versions",
59
+ "last 3 firefox versions",
60
+ "last 3 safari versions"
61
+ ]
62
+ },
63
+ "dependencies": {
64
+ "@xmtp/content-type-group-updated": "^1.0.0",
65
+ "@xmtp/content-type-primitives": "^1.0.1",
66
+ "@xmtp/content-type-text": "^1.0.0",
67
+ "@xmtp/proto": "^3.70.0",
68
+ "@xmtp/wasm-bindings": "^0.0.1",
69
+ "uuid": "^10.0.0"
70
+ },
71
+ "devDependencies": {
72
+ "@rollup/plugin-terser": "^0.4.4",
73
+ "@rollup/plugin-typescript": "^11.1.6",
74
+ "@testing-library/dom": "^10.3.2",
75
+ "@testing-library/jest-dom": "^6.4.6",
76
+ "@types/uuid": "^10.0.0",
77
+ "@vitest/browser": "^2.1.3",
78
+ "@vitest/coverage-v8": "^2.0.3",
79
+ "@web/rollup-plugin-copy": "^0.5.1",
80
+ "playwright": "^1.48.1",
81
+ "rollup": "^4.18.1",
82
+ "rollup-plugin-dts": "^6.1.1",
83
+ "rollup-plugin-filesize": "^10.0.0",
84
+ "rollup-plugin-tsconfig-paths": "^1.5.2",
85
+ "tsconfig": "workspace:*",
86
+ "typedoc": "^0.26.4",
87
+ "typescript": "^5.5.3",
88
+ "viem": "^2.17.4",
89
+ "vite": "^5.4.9",
90
+ "vite-tsconfig-paths": "^5.0.1",
91
+ "vitest": "^2.1.3"
92
+ },
93
+ "engines": {
94
+ "node": ">=20"
95
+ },
96
+ "publishConfig": {
97
+ "access": "public",
98
+ "provenance": true,
99
+ "registry": "https://registry.npmjs.org/"
100
+ }
101
+ }
package/src/Client.ts ADDED
@@ -0,0 +1,181 @@
1
+ import {
2
+ ContentTypeGroupUpdated,
3
+ GroupUpdatedCodec,
4
+ } from "@xmtp/content-type-group-updated";
5
+ import type {
6
+ ContentCodec,
7
+ ContentTypeId,
8
+ } from "@xmtp/content-type-primitives";
9
+ import { TextCodec } from "@xmtp/content-type-text";
10
+ import {
11
+ WasmGroupMessageKind,
12
+ type WasmConsentEntityType,
13
+ type WasmSignatureRequestType,
14
+ } from "@xmtp/wasm-bindings";
15
+ import { ClientWorkerClass } from "@/ClientWorkerClass";
16
+ import { Conversations } from "@/Conversations";
17
+ import type { ClientOptions } from "@/types";
18
+ import {
19
+ fromSafeEncodedContent,
20
+ toSafeEncodedContent,
21
+ type SafeConsent,
22
+ type SafeMessage,
23
+ } from "@/utils/conversions";
24
+
25
+ export class Client extends ClientWorkerClass {
26
+ address: string;
27
+
28
+ options?: ClientOptions;
29
+
30
+ #isReady = false;
31
+
32
+ #inboxId: string | undefined;
33
+
34
+ #installationId: string | undefined;
35
+
36
+ #conversations: Conversations;
37
+
38
+ #codecs: Map<string, ContentCodec>;
39
+
40
+ constructor(address: string, options?: ClientOptions) {
41
+ const worker = new Worker(new URL("./workers/client", import.meta.url), {
42
+ type: "module",
43
+ });
44
+ super(worker, options?.enableLogging ?? false);
45
+ this.address = address;
46
+ this.options = options;
47
+ this.#conversations = new Conversations(this);
48
+ const codecs = [
49
+ new GroupUpdatedCodec(),
50
+ new TextCodec(),
51
+ ...(options?.codecs ?? []),
52
+ ];
53
+ this.#codecs = new Map(
54
+ codecs.map((codec) => [codec.contentType.toString(), codec]),
55
+ );
56
+ }
57
+
58
+ async init() {
59
+ const result = await this.sendMessage("init", {
60
+ address: this.address,
61
+ options: this.options,
62
+ });
63
+ this.#inboxId = result.inboxId;
64
+ this.#installationId = result.installationId;
65
+ this.#isReady = true;
66
+ }
67
+
68
+ static async create(address: string, options?: ClientOptions) {
69
+ const client = new Client(address, options);
70
+ await client.init();
71
+ return client;
72
+ }
73
+
74
+ get isReady() {
75
+ return this.#isReady;
76
+ }
77
+
78
+ get inboxId() {
79
+ return this.#inboxId;
80
+ }
81
+
82
+ get installationId() {
83
+ return this.#installationId;
84
+ }
85
+
86
+ async getCreateInboxSignatureText() {
87
+ return this.sendMessage("getCreateInboxSignatureText", undefined);
88
+ }
89
+
90
+ async getAddWalletSignatureText(accountAddress: string) {
91
+ return this.sendMessage("getAddWalletSignatureText", { accountAddress });
92
+ }
93
+
94
+ async getRevokeWalletSignatureText(accountAddress: string) {
95
+ return this.sendMessage("getRevokeWalletSignatureText", { accountAddress });
96
+ }
97
+
98
+ async addSignature(type: WasmSignatureRequestType, bytes: Uint8Array) {
99
+ return this.sendMessage("addSignature", { type, bytes });
100
+ }
101
+
102
+ async applySignaturesRequests() {
103
+ return this.sendMessage("applySignaturesRequests", undefined);
104
+ }
105
+
106
+ async registerIdentity() {
107
+ return this.sendMessage("registerIdentity", undefined);
108
+ }
109
+
110
+ async isRegistered() {
111
+ return this.sendMessage("isRegistered", undefined);
112
+ }
113
+
114
+ async canMessage(accountAddresses: string[]) {
115
+ return this.sendMessage("canMessage", { accountAddresses });
116
+ }
117
+
118
+ async findInboxIdByAddress(address: string) {
119
+ return this.sendMessage("findInboxIdByAddress", { address });
120
+ }
121
+
122
+ async inboxState(refreshFromNetwork: boolean) {
123
+ return this.sendMessage("inboxState", { refreshFromNetwork });
124
+ }
125
+
126
+ async getLatestInboxState(inboxId: string) {
127
+ return this.sendMessage("getLatestInboxState", { inboxId });
128
+ }
129
+
130
+ async setConsentStates(records: SafeConsent[]) {
131
+ return this.sendMessage("setConsentStates", { records });
132
+ }
133
+
134
+ async getConsentState(entityType: WasmConsentEntityType, entity: string) {
135
+ return this.sendMessage("getConsentState", { entityType, entity });
136
+ }
137
+
138
+ get conversations() {
139
+ return this.#conversations;
140
+ }
141
+
142
+ codecFor(contentType: ContentTypeId) {
143
+ return this.#codecs.get(contentType.toString());
144
+ }
145
+
146
+ encodeContent(content: any, contentType: ContentTypeId) {
147
+ const codec = this.codecFor(contentType);
148
+ if (!codec) {
149
+ throw new Error(
150
+ `Codec not found for "${contentType.toString()}" content type`,
151
+ );
152
+ }
153
+ const encoded = codec.encode(content, this);
154
+ const fallback = codec.fallback(content);
155
+ if (fallback) {
156
+ encoded.fallback = fallback;
157
+ }
158
+ return toSafeEncodedContent(encoded);
159
+ }
160
+
161
+ decodeContent(message: SafeMessage, contentType: ContentTypeId) {
162
+ const codec = this.codecFor(contentType);
163
+ if (!codec) {
164
+ throw new Error(
165
+ `Codec not found for "${contentType.toString()}" content type`,
166
+ );
167
+ }
168
+
169
+ // throw an error if there's an invalid group membership change message
170
+ if (
171
+ contentType.sameAs(ContentTypeGroupUpdated) &&
172
+ message.kind !== WasmGroupMessageKind.MembershipChange
173
+ ) {
174
+ throw new Error("Error decoding group membership change");
175
+ }
176
+
177
+ const encodedContent = fromSafeEncodedContent(message.content);
178
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
179
+ return codec.decode(encodedContent, this);
180
+ }
181
+ }