@xmtp/browser-sdk 0.0.2 → 0.0.3

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.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as _xmtp_wasm_bindings from '@xmtp/wasm-bindings';
2
2
  import { SignatureRequestType, ConsentState, ConsentEntityType, Conversations as Conversations$1, Client as Client$1, Conversation as Conversation$1, EncodedContent, ContentTypeId, DeliveryStatus, GroupMessageKind, Message, SortDirection, ListMessagesOptions, GroupMembershipState, ConversationType, ListConversationsOptions, GroupPermissionsOptions, CreateGroupOptions, PermissionPolicy, Installation, InboxState, Consent, PermissionLevel, GroupMember } from '@xmtp/wasm-bindings';
3
- export * from '@xmtp/wasm-bindings';
3
+ export { Consent, ConsentEntityType, ConsentState, ContentTypeId, ConversationType, CreateGroupOptions, DeliveryStatus, EncodedContent, GroupMember, GroupMembershipState, GroupMessageKind, GroupMetadata, GroupPermissions, GroupPermissionsOptions, InboxState, Installation, ListConversationsOptions, ListMessagesOptions, Message, PermissionLevel, PermissionPolicy, PermissionPolicySet, PermissionUpdateType, SignatureRequestType, SortDirection } from '@xmtp/wasm-bindings';
4
4
  import { ContentCodec, ContentTypeId as ContentTypeId$1, EncodedContent as EncodedContent$1 } from '@xmtp/content-type-primitives';
5
5
 
6
6
  declare const ApiUrls: {
@@ -24,15 +24,6 @@ type NetworkOptions = {
24
24
  */
25
25
  apiUrl?: string;
26
26
  };
27
- /**
28
- * Encryption options
29
- */
30
- type EncryptionOptions = {
31
- /**
32
- * Encryption key to use for the local DB
33
- */
34
- encryptionKey?: Uint8Array;
35
- };
36
27
  /**
37
28
  * Storage options
38
29
  */
@@ -50,11 +41,19 @@ type ContentOptions = {
50
41
  };
51
42
  type OtherOptions = {
52
43
  /**
53
- * Enable logging of events between the client and worker
44
+ * Enable structured JSON logging
45
+ */
46
+ structuredLogging?: boolean;
47
+ /**
48
+ * Enable performance metrics
49
+ */
50
+ performanceLogging?: boolean;
51
+ /**
52
+ * Logging level
54
53
  */
55
- enableLogging?: boolean;
54
+ loggingLevel?: "off" | "error" | "warn" | "info" | "debug" | "trace";
56
55
  };
57
- type ClientOptions = NetworkOptions & EncryptionOptions & StorageOptions & ContentOptions & OtherOptions;
56
+ type ClientOptions = NetworkOptions & StorageOptions & ContentOptions & OtherOptions;
58
57
 
59
58
  type ClientEvents =
60
59
  /**
@@ -69,6 +68,7 @@ type ClientEvents =
69
68
  };
70
69
  data: {
71
70
  address: string;
71
+ encryptionKey: Uint8Array;
72
72
  options?: ClientOptions;
73
73
  };
74
74
  } | {
@@ -103,6 +103,16 @@ type ClientEvents =
103
103
  type: SignatureRequestType;
104
104
  bytes: Uint8Array;
105
105
  };
106
+ } | {
107
+ action: "addScwSignature";
108
+ id: string;
109
+ result: undefined;
110
+ data: {
111
+ type: SignatureRequestType;
112
+ bytes: Uint8Array;
113
+ chainId: bigint;
114
+ blockNumber?: bigint;
115
+ };
106
116
  } | {
107
117
  action: "applySignatures";
108
118
  id: string;
@@ -512,7 +522,7 @@ declare class WorkerConversations {
512
522
  declare class WorkerClient {
513
523
  #private;
514
524
  constructor(client: Client$1);
515
- static create(accountAddress: string, options?: Omit<ClientOptions, "codecs">): Promise<WorkerClient>;
525
+ static create(accountAddress: string, encryptionKey: Uint8Array, options?: Omit<ClientOptions, "codecs">): Promise<WorkerClient>;
516
526
  get accountAddress(): string;
517
527
  get inboxId(): string;
518
528
  get installationId(): string;
@@ -522,6 +532,7 @@ declare class WorkerClient {
522
532
  getRevokeWalletSignatureText(accountAddress: string): Promise<string | undefined>;
523
533
  getRevokeInstallationsSignatureText(): Promise<string | undefined>;
524
534
  addSignature(type: SignatureRequestType, bytes: Uint8Array): Promise<void>;
535
+ addScwSignature(type: SignatureRequestType, bytes: Uint8Array, chainId: bigint, blockNumber?: bigint): Promise<void>;
525
536
  applySignatures(): Promise<void>;
526
537
  canMessage(accountAddresses: string[]): Promise<Map<string, boolean>>;
527
538
  registerIdentity(): Promise<void>;
@@ -693,15 +704,7 @@ type SafeGroupMember = {
693
704
  installationIds: string[];
694
705
  permissionLevel: PermissionLevel;
695
706
  };
696
- declare class WasmGroupMember {
697
- account_addresses: string[];
698
- consent_state: ConsentState;
699
- inbox_id: string;
700
- installation_ids: string[];
701
- permission_level: PermissionLevel;
702
- constructor(inbox_id: string, account_addresses: string[], installation_ids: string[], permission_level: PermissionLevel, consent_state: ConsentState);
703
- }
704
- declare const toSafeGroupMember: (member: WasmGroupMember) => SafeGroupMember;
707
+ declare const toSafeGroupMember: (member: GroupMember) => SafeGroupMember;
705
708
  declare const fromSafeGroupMember: (member: SafeGroupMember) => GroupMember;
706
709
 
707
710
  declare class ClientWorkerClass {
@@ -804,9 +807,9 @@ declare class Client extends ClientWorkerClass {
804
807
  #private;
805
808
  address: string;
806
809
  options?: ClientOptions;
807
- constructor(address: string, options?: ClientOptions);
810
+ constructor(address: string, encryptionKey: Uint8Array, options?: ClientOptions);
808
811
  init(): Promise<void>;
809
- static create(address: string, options?: ClientOptions): Promise<Client>;
812
+ static create(address: string, encryptionKey: Uint8Array, options?: ClientOptions): Promise<Client>;
810
813
  get isReady(): boolean;
811
814
  get inboxId(): string | undefined;
812
815
  get installationId(): string | undefined;
@@ -815,6 +818,7 @@ declare class Client extends ClientWorkerClass {
815
818
  getRevokeWalletSignatureText(accountAddress: string): Promise<string | undefined>;
816
819
  getRevokeInstallationsSignatureText(): Promise<string | undefined>;
817
820
  addSignature(type: SignatureRequestType, bytes: Uint8Array): Promise<undefined>;
821
+ addScwSignature(type: SignatureRequestType, bytes: Uint8Array, chainId: bigint, blockNumber?: bigint): Promise<undefined>;
818
822
  applySignatures(): Promise<undefined>;
819
823
  registerIdentity(): Promise<undefined>;
820
824
  isRegistered(): Promise<boolean>;
@@ -845,4 +849,4 @@ declare class Utils extends UtilsWorkerClass {
845
849
  getInboxIdForAddress(address: string, env?: XmtpEnv): Promise<string | undefined>;
846
850
  }
847
851
 
848
- export { ApiUrls, Client, type ClientEvents, type ClientEventsActions, type ClientEventsClientMessageData, type ClientEventsClientPostMessageData, type ClientEventsErrorData, type ClientEventsResult, type ClientEventsWorkerMessageData, type ClientEventsWorkerPostMessageData, type ClientOptions, type ClientSendMessageData, type ContentOptions, Conversation, Conversations, DecodedMessage, type EncryptionOptions, type EventsClientMessageData, type EventsClientPostMessageData, type EventsErrorData, type EventsResult, type EventsWorkerMessageData, type EventsWorkerPostMessageData, type GenericEvent, type MessageDeliveryStatus, type MessageKind, type NetworkOptions, type OtherOptions, type SafeConsent, type SafeContentTypeId, type SafeConversation, type SafeCreateGroupOptions, type SafeEncodedContent, type SafeGroupMember, type SafeInboxState, type SafeInstallation, type SafeListConversationsOptions, type SafeListMessagesOptions, type SafeMessage, type SendMessageData, type StorageOptions, Utils, type UtilsEvents, type UtilsEventsActions, type UtilsEventsClientMessageData, type UtilsEventsClientPostMessageData, type UtilsEventsErrorData, type UtilsEventsResult, type UtilsEventsWorkerMessageData, type UtilsEventsWorkerPostMessageData, type UtilsSendMessageData, WasmGroupMember, type XmtpEnv, fromContentTypeId, fromEncodedContent, fromSafeConsent, fromSafeContentTypeId, fromSafeCreateGroupOptions, fromSafeEncodedContent, fromSafeGroupMember, fromSafeListConversationsOptions, fromSafeListMessagesOptions, toContentTypeId, toEncodedContent, toSafeConsent, toSafeContentTypeId, toSafeConversation, toSafeCreateGroupOptions, toSafeEncodedContent, toSafeGroupMember, toSafeInboxState, toSafeInstallation, toSafeListConversationsOptions, toSafeListMessagesOptions, toSafeMessage };
852
+ export { ApiUrls, Client, type ClientEvents, type ClientEventsActions, type ClientEventsClientMessageData, type ClientEventsClientPostMessageData, type ClientEventsErrorData, type ClientEventsResult, type ClientEventsWorkerMessageData, type ClientEventsWorkerPostMessageData, type ClientOptions, type ClientSendMessageData, type ContentOptions, Conversation, Conversations, DecodedMessage, type EventsClientMessageData, type EventsClientPostMessageData, type EventsErrorData, type EventsResult, type EventsWorkerMessageData, type EventsWorkerPostMessageData, type GenericEvent, type MessageDeliveryStatus, type MessageKind, type NetworkOptions, type OtherOptions, type SafeConsent, type SafeContentTypeId, type SafeConversation, type SafeCreateGroupOptions, type SafeEncodedContent, type SafeGroupMember, type SafeInboxState, type SafeInstallation, type SafeListConversationsOptions, type SafeListMessagesOptions, type SafeMessage, type SendMessageData, type StorageOptions, Utils, type UtilsEvents, type UtilsEventsActions, type UtilsEventsClientMessageData, type UtilsEventsClientPostMessageData, type UtilsEventsErrorData, type UtilsEventsResult, type UtilsEventsWorkerMessageData, type UtilsEventsWorkerPostMessageData, type UtilsSendMessageData, type XmtpEnv, fromContentTypeId, fromEncodedContent, fromSafeConsent, fromSafeContentTypeId, fromSafeCreateGroupOptions, fromSafeEncodedContent, fromSafeGroupMember, fromSafeListConversationsOptions, fromSafeListMessagesOptions, toContentTypeId, toEncodedContent, toSafeConsent, toSafeContentTypeId, toSafeConversation, toSafeCreateGroupOptions, toSafeEncodedContent, toSafeGroupMember, toSafeInboxState, toSafeInstallation, toSafeListConversationsOptions, toSafeListMessagesOptions, toSafeMessage };
package/dist/index.js CHANGED
@@ -1,2 +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{ContentTypeId as i,EncodedContent as r,ListMessagesOptions as o,ListConversationsOptions as a,CreateGroupOptions as d,Consent as c,GroupMember as l,GroupMessageKind as p,DeliveryStatus 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 I=e=>new u({authorityId:e.authorityId,typeId:e.typeId,versionMajor:e.versionMajor,versionMinor:e.versionMinor}),b=e=>new i(e.authorityId,e.typeId,e.versionMajor,e.versionMinor),v=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}),w=e=>({type:I(e.type),parameters:Object.fromEntries(e.parameters),fallback:e.fallback,compression:e.compression,content:e.content}),x=e=>new r(b(e.type),new Map(Object.entries(e.parameters)),e.fallback,e.compression,e.content),A=e=>({type:v(e.type),parameters:e.parameters,fallback:e.fallback,compression:e.compression,content:e.content}),S=e=>({type:M(e.type),parameters:e.parameters,fallback:e.fallback,compression:e.compression,content:e.content}),k=e=>({content:A(w(e.content)),convoId:e.convoId,deliveryStatus:e.deliveryStatus,id:e.id,kind:e.kind,senderInboxId:e.senderInboxId,sentAtNs:e.sentAtNs}),f=e=>({deliveryStatus:e.deliveryStatus,direction:e.direction,limit:e.limit,sentAfterNs:e.sentAfterNs,sentBeforeNs:e.sentBeforeNs}),N=e=>new o(e.sentBeforeNs,e.sentAfterNs,e.limit,e.deliveryStatus,e.direction),U=e=>({allowedStates:e.allowedStates,conversationType:e.conversationType,createdAfterNs:e.createdAfterNs,createdBeforeNs:e.createdBeforeNs,limit:e.limit}),G=e=>new a(e.allowedStates,e.conversationType,e.createdAfterNs,e.createdBeforeNs,e.limit),C=e=>({permissions:e.permissions,name:e.groupName,imageUrlSquare:e.groupImageUrlSquare,description:e.groupDescription,pinnedFrameUrl:e.groupPinnedFrameUrl}),L=e=>new d(e.permissions,e.name,e.imageUrlSquare,e.description,e.pinnedFrameUrl),P=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.addAdminPolicy,addMemberPolicy:e.permissions.policySet.addMemberPolicy,removeAdminPolicy:e.permissions.policySet.removeAdminPolicy,removeMemberPolicy:e.permissions.policySet.removeMemberPolicy,updateGroupDescriptionPolicy:e.permissions.policySet.updateGroupDescriptionPolicy,updateGroupImageUrlSquarePolicy:e.permissions.policySet.updateGroupImageUrlSquarePolicy,updateGroupNamePolicy:e.permissions.policySet.updateGroupNamePolicy,updateGroupPinnedFrameUrlPolicy:e.permissions.policySet.updateGroupPinnedFrameUrlPolicy}},isActive:e.isActive,addedByInboxId:e.addedByInboxId,metadata:e.metadata,admins:e.admins,superAdmins:e.superAdmins,createdAtNs:e.createdAtNs}),B=e=>({id:e.id,clientTimestampNs:e.clientTimestampNs}),T=e=>({accountAddresses:e.accountAddresses,inboxId:e.inboxId,installations:e.installations.map(B),recoveryAddress:e.recoveryAddress}),F=e=>({entity:e.entity,entityType:e.entityType,state:e.state}),E=e=>new c(e.entityType,e.state,e.entity);class D{account_addresses;consent_state;inbox_id;installation_ids;permission_level;constructor(e,t,s,n,i){this.inbox_id=e,this.account_addresses=t,this.installation_ids=s,this.permission_level=n,this.consent_state=i}}const _=e=>({accountAddresses:e.account_addresses,consentState:e.consent_state,inboxId:e.inbox_id,installationIds:e.installation_ids,permissionLevel:e.permission_level}),j=e=>new l(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 p.Application:this.kind="application";break;case p.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;#l;#p;#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.#l=e?.addedByInboxId??"",this.#p=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.#l}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.#p}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})}async dmPeerInboxId(){return this.#n.sendMessage("getDmPeerInboxId",{id:this.#i})}}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 getDmByInboxId(e){return this.#n.sendMessage("getDmByInboxId",{inboxId:e})}async list(e){return(await this.#n.sendMessage("getConversations",{options:e})).map((e=>new q(this.#n,e.id,e)))}async listGroups(e){return this.#n.sendMessage("getGroups",{options:e})}async listDms(e){return this.#n.sendMessage("getDms",{options:e})}async newGroup(e,t){const s=await this.#n.sendMessage("newGroup",{accountAddresses:e,options:t});return new q(this.#n,s.id,s)}async newDm(e){const t=await this.#n.sendMessage("newDm",{accountAddress:e});return new q(this.#n,t.id,t)}}class $ extends y{address;options;#g=!1;#y;#I;#b;#v;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.#b=new W(this);const i=[new e,new n,...s?.codecs??[]];this.#v=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.#I=e.installationId,this.#g=!0}static async create(e,t){const s=new $(e,t);return await s.init(),s}get isReady(){return this.#g}get inboxId(){return this.#y}get installationId(){return this.#I}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 getRevokeInstallationsSignatureText(){return this.sendMessage("getRevokeInstallationsSignatureText",void 0)}async addSignature(e,t){return this.sendMessage("addSignature",{type:e,bytes:t})}async applySignatures(){return this.sendMessage("applySignatures",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??!1})}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.#b}codecFor(e){return this.#v.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),A(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!==p.MembershipChange)throw new Error("Error decoding group membership change");const i=S(e.content);return n.decode(i,this)}}const O=e=>{console.error(`Worker error on line ${e.lineno} in "${e.filename}"`),console.error(e.message)};class z{#e;#t;#s=new Map;constructor(e,t){this.#e=e,this.#e.addEventListener("message",this.handleMessage),this.#e.addEventListener("error",O),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",O),this.#e.terminate()}}class H extends z{#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 J={local:"http://localhost:5555",dev:"https://dev.xmtp.network",production:"https://production.xmtp.network"};export{J as ApiUrls,$ as Client,q as Conversation,W as Conversations,R as DecodedMessage,H as Utils,D as WasmGroupMember,b as fromContentTypeId,x as fromEncodedContent,E as fromSafeConsent,M as fromSafeContentTypeId,L as fromSafeCreateGroupOptions,S as fromSafeEncodedContent,j as fromSafeGroupMember,G as fromSafeListConversationsOptions,N as fromSafeListMessagesOptions,I as toContentTypeId,w as toEncodedContent,F as toSafeConsent,v as toSafeContentTypeId,P as toSafeConversation,C as toSafeCreateGroupOptions,A as toSafeEncodedContent,_ as toSafeGroupMember,T as toSafeInboxState,B as toSafeInstallation,U as toSafeListConversationsOptions,f as toSafeListMessagesOptions,k as toSafeMessage};
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{ContentTypeId as i,EncodedContent as r,ListMessagesOptions as o,ListConversationsOptions as a,CreateGroupOptions as d,Consent as c,GroupMember as p,GroupMessageKind as l,DeliveryStatus as m}from"@xmtp/wasm-bindings";export{Consent,ConsentEntityType,ConsentState,ContentTypeId,ConversationType,CreateGroupOptions,DeliveryStatus,EncodedContent,GroupMember,GroupMembershipState,GroupMessageKind,GroupMetadata,GroupPermissions,GroupPermissionsOptions,InboxState,Installation,ListConversationsOptions,ListMessagesOptions,Message,PermissionLevel,PermissionPolicy,PermissionPolicySet,PermissionUpdateType,SignatureRequestType,SortDirection}from"@xmtp/wasm-bindings";import{v4 as u}from"uuid";import{ContentTypeId as g}from"@xmtp/content-type-primitives";const h=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",h),this.#t=t}sendMessage(e,t){const s=u();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",h),this.#e.terminate()}}const I=e=>new g({authorityId:e.authorityId,typeId:e.typeId,versionMajor:e.versionMajor,versionMinor:e.versionMinor}),b=e=>new i(e.authorityId,e.typeId,e.versionMajor,e.versionMinor),v=e=>({authorityId:e.authorityId,typeId:e.typeId,versionMajor:e.versionMajor,versionMinor:e.versionMinor}),M=e=>new g({authorityId:e.authorityId,typeId:e.typeId,versionMajor:e.versionMajor,versionMinor:e.versionMinor}),w=e=>({type:I(e.type),parameters:Object.fromEntries(e.parameters),fallback:e.fallback,compression:e.compression,content:e.content}),S=e=>new r(b(e.type),new Map(Object.entries(e.parameters)),e.fallback,e.compression,e.content),x=e=>({type:v(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}),f=e=>({content:x(w(e.content)),convoId:e.convoId,deliveryStatus:e.deliveryStatus,id:e.id,kind:e.kind,senderInboxId:e.senderInboxId,sentAtNs:e.sentAtNs}),k=e=>({deliveryStatus:e.deliveryStatus,direction:e.direction,limit:e.limit,sentAfterNs:e.sentAfterNs,sentBeforeNs:e.sentBeforeNs}),G=e=>new o(e.sentBeforeNs,e.sentAfterNs,e.limit,e.deliveryStatus,e.direction),N=e=>({allowedStates:e.allowedStates,conversationType:e.conversationType,createdAfterNs:e.createdAfterNs,createdBeforeNs:e.createdBeforeNs,limit:e.limit}),U=e=>new a(e.allowedStates,e.conversationType,e.createdAfterNs,e.createdBeforeNs,e.limit),C=e=>({permissions:e.permissions,name:e.groupName,imageUrlSquare:e.groupImageUrlSquare,description:e.groupDescription,pinnedFrameUrl:e.groupPinnedFrameUrl}),P=e=>new d(e.permissions,e.name,e.imageUrlSquare,e.description,e.pinnedFrameUrl),L=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.addAdminPolicy,addMemberPolicy:e.permissions.policySet.addMemberPolicy,removeAdminPolicy:e.permissions.policySet.removeAdminPolicy,removeMemberPolicy:e.permissions.policySet.removeMemberPolicy,updateGroupDescriptionPolicy:e.permissions.policySet.updateGroupDescriptionPolicy,updateGroupImageUrlSquarePolicy:e.permissions.policySet.updateGroupImageUrlSquarePolicy,updateGroupNamePolicy:e.permissions.policySet.updateGroupNamePolicy,updateGroupPinnedFrameUrlPolicy:e.permissions.policySet.updateGroupPinnedFrameUrlPolicy}},isActive:e.isActive,addedByInboxId:e.addedByInboxId,metadata:e.metadata,admins:e.admins,superAdmins:e.superAdmins,createdAtNs:e.createdAtNs}),T=e=>({id:e.id,clientTimestampNs:e.clientTimestampNs}),B=e=>({accountAddresses:e.accountAddresses,inboxId:e.inboxId,installations:e.installations.map(T),recoveryAddress:e.recoveryAddress}),F=e=>({entity:e.entity,entityType:e.entityType,state:e.state}),E=e=>new c(e.entityType,e.state,e.entity),D=e=>({accountAddresses:e.accountAddresses,consentState:e.consentState,inboxId:e.inboxId,installationIds:e.installationIds,permissionLevel:e.permissionLevel}),j=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;#u;constructor(e,t,s){this.#n=e,this.#i=t,this.#g(s)}#g(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.#u=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.#u}get createdAt(){return this.#u?(e=this.#u,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.#g(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})}async dmPeerInboxId(){return this.#n.sendMessage("getDmPeerInboxId",{id:this.#i})}}class O{#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 getDmByInboxId(e){return this.#n.sendMessage("getDmByInboxId",{inboxId:e})}async list(e){return(await this.#n.sendMessage("getConversations",{options:e})).map((e=>new q(this.#n,e.id,e)))}async listGroups(e){return this.#n.sendMessage("getGroups",{options:e})}async listDms(e){return this.#n.sendMessage("getDms",{options:e})}async newGroup(e,t){const s=await this.#n.sendMessage("newGroup",{accountAddresses:e,options:t});return new q(this.#n,s.id,s)}async newDm(e){const t=await this.#n.sendMessage("newDm",{accountAddress:e});return new q(this.#n,t.id,t)}}class W extends y{address;options;#h=!1;#y;#I;#b;#v;#M;constructor(t,s,i){super(new Worker(new URL("./workers/client",import.meta.url),{type:"module"}),void 0!==i?.loggingLevel&&"off"!==i.loggingLevel),this.address=t,this.options=i,this.#M=s,this.#b=new O(this);const r=[new e,new n,...i?.codecs??[]];this.#v=new Map(r.map((e=>[e.contentType.toString(),e])))}async init(){const e=await this.sendMessage("init",{address:this.address,encryptionKey:this.#M,options:this.options});this.#y=e.inboxId,this.#I=e.installationId,this.#h=!0}static async create(e,t,s){const n=new W(e,t,s);return await n.init(),n}get isReady(){return this.#h}get inboxId(){return this.#y}get installationId(){return this.#I}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 getRevokeInstallationsSignatureText(){return this.sendMessage("getRevokeInstallationsSignatureText",void 0)}async addSignature(e,t){return this.sendMessage("addSignature",{type:e,bytes:t})}async addScwSignature(e,t,s,n){return this.sendMessage("addScwSignature",{type:e,bytes:t,chainId:s,blockNumber:n})}async applySignatures(){return this.sendMessage("applySignatures",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??!1})}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.#b}codecFor(e){return this.#v.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 K{#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=u();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 _ extends K{#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 z={local:"http://localhost:5555",dev:"https://dev.xmtp.network",production:"https://production.xmtp.network"};export{z as ApiUrls,W as Client,q as Conversation,O as Conversations,R as DecodedMessage,_ as Utils,b as fromContentTypeId,S as fromEncodedContent,E as fromSafeConsent,M as fromSafeContentTypeId,P as fromSafeCreateGroupOptions,A as fromSafeEncodedContent,j as fromSafeGroupMember,U as fromSafeListConversationsOptions,G as fromSafeListMessagesOptions,I as toContentTypeId,w as toEncodedContent,F as toSafeConsent,v as toSafeContentTypeId,L as toSafeConversation,C as toSafeCreateGroupOptions,x as toSafeEncodedContent,D as toSafeGroupMember,B as toSafeInboxState,T as toSafeInstallation,N as toSafeListConversationsOptions,k as toSafeListMessagesOptions,f as toSafeMessage};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +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 Consent,\n CreateGroupOptions,\n GroupMember,\n ListConversationsOptions,\n ListMessagesOptions,\n ContentTypeId as WasmContentTypeId,\n EncodedContent as WasmEncodedContent,\n type ConsentEntityType,\n type ConsentState,\n type ConversationType,\n type DeliveryStatus,\n type GroupMembershipState,\n type GroupMessageKind,\n type GroupPermissionsOptions,\n type InboxState,\n type Installation,\n type Message,\n type PermissionLevel,\n type PermissionPolicy,\n type SortDirection,\n} from \"@xmtp/wasm-bindings\";\nimport type { WorkerConversation } from \"@/WorkerConversation\";\n\nexport const toContentTypeId = (\n contentTypeId: WasmContentTypeId,\n): ContentTypeId =>\n new ContentTypeId({\n authorityId: contentTypeId.authorityId,\n typeId: contentTypeId.typeId,\n versionMajor: contentTypeId.versionMajor,\n versionMinor: contentTypeId.versionMinor,\n });\n\nexport const fromContentTypeId = (\n contentTypeId: ContentTypeId,\n): WasmContentTypeId =>\n new WasmContentTypeId(\n contentTypeId.authorityId,\n contentTypeId.typeId,\n contentTypeId.versionMajor,\n contentTypeId.versionMinor,\n );\n\nexport type SafeContentTypeId = {\n authorityId: string;\n typeId: string;\n versionMajor: number;\n versionMinor: number;\n};\n\nexport const toSafeContentTypeId = (\n contentTypeId: ContentTypeId,\n): SafeContentTypeId => ({\n authorityId: contentTypeId.authorityId,\n typeId: contentTypeId.typeId,\n versionMajor: contentTypeId.versionMajor,\n versionMinor: contentTypeId.versionMinor,\n});\n\nexport const fromSafeContentTypeId = (\n contentTypeId: SafeContentTypeId,\n): ContentTypeId =>\n new ContentTypeId({\n authorityId: contentTypeId.authorityId,\n typeId: contentTypeId.typeId,\n versionMajor: contentTypeId.versionMajor,\n versionMinor: contentTypeId.versionMinor,\n });\n\nexport const toEncodedContent = (\n content: WasmEncodedContent,\n): EncodedContent => ({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n type: toContentTypeId(content.type!),\n parameters: Object.fromEntries(content.parameters as Map<string, string>),\n fallback: content.fallback,\n compression: content.compression,\n content: content.content,\n});\n\nexport const fromEncodedContent = (\n content: EncodedContent,\n): WasmEncodedContent =>\n new WasmEncodedContent(\n fromContentTypeId(content.type),\n new Map(Object.entries(content.parameters)),\n content.fallback,\n content.compression,\n content.content,\n );\n\nexport type SafeEncodedContent = {\n type: SafeContentTypeId;\n parameters: Record<string, string>;\n fallback?: string;\n compression?: number;\n content: Uint8Array;\n};\n\nexport const toSafeEncodedContent = (\n content: EncodedContent,\n): SafeEncodedContent => ({\n type: toSafeContentTypeId(content.type),\n parameters: content.parameters,\n fallback: content.fallback,\n compression: content.compression,\n content: content.content,\n});\n\nexport const fromSafeEncodedContent = (\n content: SafeEncodedContent,\n): EncodedContent => ({\n type: fromSafeContentTypeId(content.type),\n parameters: content.parameters,\n fallback: content.fallback,\n compression: content.compression,\n content: content.content,\n});\n\nexport type SafeMessage = {\n content: SafeEncodedContent;\n convoId: string;\n deliveryStatus: DeliveryStatus;\n id: string;\n kind: GroupMessageKind;\n senderInboxId: string;\n sentAtNs: bigint;\n};\n\nexport const toSafeMessage = (message: Message): SafeMessage => ({\n content: toSafeEncodedContent(toEncodedContent(message.content)),\n convoId: message.convoId,\n deliveryStatus: message.deliveryStatus,\n id: message.id,\n kind: message.kind,\n senderInboxId: message.senderInboxId,\n sentAtNs: message.sentAtNs,\n});\n\nexport type SafeListMessagesOptions = {\n deliveryStatus?: DeliveryStatus;\n direction?: SortDirection;\n limit?: bigint;\n sentAfterNs?: bigint;\n sentBeforeNs?: bigint;\n};\n\nexport const toSafeListMessagesOptions = (\n options: ListMessagesOptions,\n): SafeListMessagesOptions => ({\n deliveryStatus: options.deliveryStatus,\n direction: options.direction,\n limit: options.limit,\n sentAfterNs: options.sentAfterNs,\n sentBeforeNs: options.sentBeforeNs,\n});\n\nexport const fromSafeListMessagesOptions = (\n options: SafeListMessagesOptions,\n): ListMessagesOptions =>\n new ListMessagesOptions(\n options.sentBeforeNs,\n options.sentAfterNs,\n options.limit,\n options.deliveryStatus,\n options.direction,\n );\n\nexport type SafeListConversationsOptions = {\n allowedStates?: GroupMembershipState[];\n conversationType?: ConversationType;\n createdAfterNs?: bigint;\n createdBeforeNs?: bigint;\n limit?: bigint;\n};\n\nexport const toSafeListConversationsOptions = (\n options: ListConversationsOptions,\n): SafeListConversationsOptions => ({\n allowedStates: options.allowedStates,\n conversationType: options.conversationType,\n createdAfterNs: options.createdAfterNs,\n createdBeforeNs: options.createdBeforeNs,\n limit: options.limit,\n});\n\nexport const fromSafeListConversationsOptions = (\n options: SafeListConversationsOptions,\n): ListConversationsOptions =>\n new ListConversationsOptions(\n options.allowedStates,\n options.conversationType,\n options.createdAfterNs,\n options.createdBeforeNs,\n options.limit,\n );\n\nexport type SafeCreateGroupOptions = {\n permissions?: GroupPermissionsOptions;\n name?: string;\n imageUrlSquare?: string;\n description?: string;\n pinnedFrameUrl?: string;\n};\n\nexport const toSafeCreateGroupOptions = (\n options: CreateGroupOptions,\n): SafeCreateGroupOptions => ({\n permissions: options.permissions,\n name: options.groupName,\n imageUrlSquare: options.groupImageUrlSquare,\n description: options.groupDescription,\n pinnedFrameUrl: options.groupPinnedFrameUrl,\n});\n\nexport const fromSafeCreateGroupOptions = (\n options: SafeCreateGroupOptions,\n): CreateGroupOptions =>\n new CreateGroupOptions(\n options.permissions,\n options.name,\n options.imageUrlSquare,\n options.description,\n 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: GroupPermissionsOptions;\n policySet: {\n addAdminPolicy: PermissionPolicy;\n addMemberPolicy: PermissionPolicy;\n removeAdminPolicy: PermissionPolicy;\n removeMemberPolicy: PermissionPolicy;\n updateGroupDescriptionPolicy: PermissionPolicy;\n updateGroupImageUrlSquarePolicy: PermissionPolicy;\n updateGroupNamePolicy: PermissionPolicy;\n updateGroupPinnedFrameUrlPolicy: PermissionPolicy;\n };\n };\n isActive: boolean;\n addedByInboxId: string;\n metadata: {\n creatorInboxId: string;\n conversationType: string;\n };\n admins: string[];\n superAdmins: string[];\n createdAtNs: bigint;\n};\n\nexport const toSafeConversation = (\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.addAdminPolicy,\n addMemberPolicy: conversation.permissions.policySet.addMemberPolicy,\n removeAdminPolicy: conversation.permissions.policySet.removeAdminPolicy,\n removeMemberPolicy: conversation.permissions.policySet.removeMemberPolicy,\n updateGroupDescriptionPolicy:\n conversation.permissions.policySet.updateGroupDescriptionPolicy,\n updateGroupImageUrlSquarePolicy:\n conversation.permissions.policySet.updateGroupImageUrlSquarePolicy,\n updateGroupNamePolicy:\n conversation.permissions.policySet.updateGroupNamePolicy,\n updateGroupPinnedFrameUrlPolicy:\n conversation.permissions.policySet.updateGroupPinnedFrameUrlPolicy,\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: Installation,\n): SafeInstallation => ({\n id: installation.id,\n clientTimestampNs: installation.clientTimestampNs,\n});\n\nexport type SafeInboxState = {\n accountAddresses: string[];\n inboxId: string;\n installations: SafeInstallation[];\n recoveryAddress: string;\n};\n\nexport const toSafeInboxState = (inboxState: InboxState): SafeInboxState => ({\n accountAddresses: inboxState.accountAddresses,\n inboxId: inboxState.inboxId,\n installations: inboxState.installations.map(toSafeInstallation),\n recoveryAddress: inboxState.recoveryAddress,\n});\n\nexport type SafeConsent = {\n entity: string;\n entityType: ConsentEntityType;\n state: ConsentState;\n};\n\nexport const toSafeConsent = (consent: Consent): SafeConsent => ({\n entity: consent.entity,\n entityType: consent.entityType,\n state: consent.state,\n});\n\nexport const fromSafeConsent = (consent: SafeConsent): Consent =>\n new Consent(consent.entityType, consent.state, consent.entity);\n\nexport type SafeGroupMember = {\n accountAddresses: string[];\n consentState: ConsentState;\n inboxId: string;\n installationIds: string[];\n permissionLevel: PermissionLevel;\n};\n\nexport class WasmGroupMember {\n account_addresses: string[];\n consent_state: ConsentState;\n inbox_id: string;\n installation_ids: string[];\n permission_level: PermissionLevel;\n\n constructor(\n inbox_id: string,\n account_addresses: string[],\n installation_ids: string[],\n permission_level: PermissionLevel,\n consent_state: ConsentState,\n ) {\n this.inbox_id = inbox_id;\n this.account_addresses = account_addresses;\n this.installation_ids = installation_ids;\n this.permission_level = permission_level;\n this.consent_state = consent_state;\n }\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): GroupMember =>\n new GroupMember(\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 { DeliveryStatus, GroupMessageKind } 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 GroupMessageKind.Application:\n this.kind = \"application\";\n break;\n case GroupMessageKind.MembershipChange:\n this.kind = \"membership_change\";\n break;\n // no default\n }\n\n switch (message.deliveryStatus) {\n case DeliveryStatus.Unpublished:\n this.deliveryStatus = \"unpublished\";\n break;\n case DeliveryStatus.Published:\n this.deliveryStatus = \"published\";\n break;\n case DeliveryStatus.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 { ConsentState } 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: ConsentState) {\n return this.#client.sendMessage(\"updateGroupConsentState\", {\n id: this.#id,\n state,\n });\n }\n\n async dmPeerInboxId() {\n return this.#client.sendMessage(\"getDmPeerInboxId\", {\n id: this.#id,\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 getDmByInboxId(inboxId: string) {\n return this.#client.sendMessage(\"getDmByInboxId\", {\n inboxId,\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 listGroups(\n options?: Omit<SafeListConversationsOptions, \"conversation_type\">,\n ) {\n return this.#client.sendMessage(\"getGroups\", {\n options,\n });\n }\n\n async listDms(\n options?: Omit<SafeListConversationsOptions, \"conversation_type\">,\n ) {\n return this.#client.sendMessage(\"getDms\", {\n options,\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 async newDm(accountAddress: string) {\n const conversation = await this.#client.sendMessage(\"newDm\", {\n accountAddress,\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 GroupMessageKind,\n type ConsentEntityType,\n type SignatureRequestType,\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 getRevokeInstallationsSignatureText() {\n return this.sendMessage(\"getRevokeInstallationsSignatureText\", undefined);\n }\n\n async addSignature(type: SignatureRequestType, bytes: Uint8Array) {\n return this.sendMessage(\"addSignature\", { type, bytes });\n }\n\n async applySignatures() {\n return this.sendMessage(\"applySignatures\", 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\", {\n refreshFromNetwork: refreshFromNetwork ?? false,\n });\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: ConsentEntityType, 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 !== GroupMessageKind.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","typeId","versionMajor","versionMinor","fromContentTypeId","WasmContentTypeId","toSafeContentTypeId","fromSafeContentTypeId","toEncodedContent","content","type","parameters","Object","fromEntries","fallback","compression","fromEncodedContent","WasmEncodedContent","entries","toSafeEncodedContent","fromSafeEncodedContent","toSafeMessage","convoId","deliveryStatus","kind","senderInboxId","sentAtNs","toSafeListMessagesOptions","options","direction","limit","sentAfterNs","sentBeforeNs","fromSafeListMessagesOptions","ListMessagesOptions","toSafeListConversationsOptions","allowedStates","conversationType","createdAfterNs","createdBeforeNs","fromSafeListConversationsOptions","ListConversationsOptions","toSafeCreateGroupOptions","permissions","name","groupName","imageUrlSquare","groupImageUrlSquare","description","groupDescription","pinnedFrameUrl","groupPinnedFrameUrl","fromSafeCreateGroupOptions","CreateGroupOptions","toSafeConversation","conversation","imageUrl","policyType","policySet","addAdminPolicy","addMemberPolicy","removeAdminPolicy","removeMemberPolicy","updateGroupDescriptionPolicy","updateGroupImageUrlSquarePolicy","updateGroupNamePolicy","updateGroupPinnedFrameUrlPolicy","isActive","addedByInboxId","metadata","admins","superAdmins","createdAtNs","toSafeInstallation","installation","clientTimestampNs","toSafeInboxState","inboxState","accountAddresses","inboxId","installations","map","recoveryAddress","toSafeConsent","consent","entity","entityType","state","fromSafeConsent","Consent","WasmGroupMember","account_addresses","consent_state","inbox_id","installation_ids","permission_level","toSafeGroupMember","member","consentState","installationIds","permissionLevel","fromSafeGroupMember","GroupMember","DecodedMessage","client","contentType","conversationId","GroupMessageKind","Application","MembershipChange","DeliveryStatus","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","dmPeerInboxId","Conversations","getConversationById","getMessageById","getDmByInboxId","list","listGroups","listDms","newGroup","newDm","accountAddress","Client","address","isReady","installationId","conversations","codecs","super","Worker","URL","url","GroupUpdatedCodec","TextCodec","codec","toString","init","create","getCreateInboxSignatureText","getAddWalletSignatureText","getRevokeWalletSignatureText","getRevokeInstallationsSignatureText","addSignature","bytes","applySignatures","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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"}
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 Consent,\n CreateGroupOptions,\n GroupMember,\n ListConversationsOptions,\n ListMessagesOptions,\n ContentTypeId as WasmContentTypeId,\n EncodedContent as WasmEncodedContent,\n type ConsentEntityType,\n type ConsentState,\n type ConversationType,\n type DeliveryStatus,\n type GroupMembershipState,\n type GroupMessageKind,\n type GroupPermissionsOptions,\n type InboxState,\n type Installation,\n type Message,\n type PermissionLevel,\n type PermissionPolicy,\n type SortDirection,\n} from \"@xmtp/wasm-bindings\";\nimport type { WorkerConversation } from \"@/WorkerConversation\";\n\nexport const toContentTypeId = (\n contentTypeId: WasmContentTypeId,\n): ContentTypeId =>\n new ContentTypeId({\n authorityId: contentTypeId.authorityId,\n typeId: contentTypeId.typeId,\n versionMajor: contentTypeId.versionMajor,\n versionMinor: contentTypeId.versionMinor,\n });\n\nexport const fromContentTypeId = (\n contentTypeId: ContentTypeId,\n): WasmContentTypeId =>\n new WasmContentTypeId(\n contentTypeId.authorityId,\n contentTypeId.typeId,\n contentTypeId.versionMajor,\n contentTypeId.versionMinor,\n );\n\nexport type SafeContentTypeId = {\n authorityId: string;\n typeId: string;\n versionMajor: number;\n versionMinor: number;\n};\n\nexport const toSafeContentTypeId = (\n contentTypeId: ContentTypeId,\n): SafeContentTypeId => ({\n authorityId: contentTypeId.authorityId,\n typeId: contentTypeId.typeId,\n versionMajor: contentTypeId.versionMajor,\n versionMinor: contentTypeId.versionMinor,\n});\n\nexport const fromSafeContentTypeId = (\n contentTypeId: SafeContentTypeId,\n): ContentTypeId =>\n new ContentTypeId({\n authorityId: contentTypeId.authorityId,\n typeId: contentTypeId.typeId,\n versionMajor: contentTypeId.versionMajor,\n versionMinor: contentTypeId.versionMinor,\n });\n\nexport const toEncodedContent = (\n content: WasmEncodedContent,\n): EncodedContent => ({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n type: toContentTypeId(content.type!),\n parameters: Object.fromEntries(content.parameters as Map<string, string>),\n fallback: content.fallback,\n compression: content.compression,\n content: content.content,\n});\n\nexport const fromEncodedContent = (\n content: EncodedContent,\n): WasmEncodedContent =>\n new WasmEncodedContent(\n fromContentTypeId(content.type),\n new Map(Object.entries(content.parameters)),\n content.fallback,\n content.compression,\n content.content,\n );\n\nexport type SafeEncodedContent = {\n type: SafeContentTypeId;\n parameters: Record<string, string>;\n fallback?: string;\n compression?: number;\n content: Uint8Array;\n};\n\nexport const toSafeEncodedContent = (\n content: EncodedContent,\n): SafeEncodedContent => ({\n type: toSafeContentTypeId(content.type),\n parameters: content.parameters,\n fallback: content.fallback,\n compression: content.compression,\n content: content.content,\n});\n\nexport const fromSafeEncodedContent = (\n content: SafeEncodedContent,\n): EncodedContent => ({\n type: fromSafeContentTypeId(content.type),\n parameters: content.parameters,\n fallback: content.fallback,\n compression: content.compression,\n content: content.content,\n});\n\nexport type SafeMessage = {\n content: SafeEncodedContent;\n convoId: string;\n deliveryStatus: DeliveryStatus;\n id: string;\n kind: GroupMessageKind;\n senderInboxId: string;\n sentAtNs: bigint;\n};\n\nexport const toSafeMessage = (message: Message): SafeMessage => ({\n content: toSafeEncodedContent(toEncodedContent(message.content)),\n convoId: message.convoId,\n deliveryStatus: message.deliveryStatus,\n id: message.id,\n kind: message.kind,\n senderInboxId: message.senderInboxId,\n sentAtNs: message.sentAtNs,\n});\n\nexport type SafeListMessagesOptions = {\n deliveryStatus?: DeliveryStatus;\n direction?: SortDirection;\n limit?: bigint;\n sentAfterNs?: bigint;\n sentBeforeNs?: bigint;\n};\n\nexport const toSafeListMessagesOptions = (\n options: ListMessagesOptions,\n): SafeListMessagesOptions => ({\n deliveryStatus: options.deliveryStatus,\n direction: options.direction,\n limit: options.limit,\n sentAfterNs: options.sentAfterNs,\n sentBeforeNs: options.sentBeforeNs,\n});\n\nexport const fromSafeListMessagesOptions = (\n options: SafeListMessagesOptions,\n): ListMessagesOptions =>\n new ListMessagesOptions(\n options.sentBeforeNs,\n options.sentAfterNs,\n options.limit,\n options.deliveryStatus,\n options.direction,\n );\n\nexport type SafeListConversationsOptions = {\n allowedStates?: GroupMembershipState[];\n conversationType?: ConversationType;\n createdAfterNs?: bigint;\n createdBeforeNs?: bigint;\n limit?: bigint;\n};\n\nexport const toSafeListConversationsOptions = (\n options: ListConversationsOptions,\n): SafeListConversationsOptions => ({\n allowedStates: options.allowedStates,\n conversationType: options.conversationType,\n createdAfterNs: options.createdAfterNs,\n createdBeforeNs: options.createdBeforeNs,\n limit: options.limit,\n});\n\nexport const fromSafeListConversationsOptions = (\n options: SafeListConversationsOptions,\n): ListConversationsOptions =>\n new ListConversationsOptions(\n options.allowedStates,\n options.conversationType,\n options.createdAfterNs,\n options.createdBeforeNs,\n options.limit,\n );\n\nexport type SafeCreateGroupOptions = {\n permissions?: GroupPermissionsOptions;\n name?: string;\n imageUrlSquare?: string;\n description?: string;\n pinnedFrameUrl?: string;\n};\n\nexport const toSafeCreateGroupOptions = (\n options: CreateGroupOptions,\n): SafeCreateGroupOptions => ({\n permissions: options.permissions,\n name: options.groupName,\n imageUrlSquare: options.groupImageUrlSquare,\n description: options.groupDescription,\n pinnedFrameUrl: options.groupPinnedFrameUrl,\n});\n\nexport const fromSafeCreateGroupOptions = (\n options: SafeCreateGroupOptions,\n): CreateGroupOptions =>\n new CreateGroupOptions(\n options.permissions,\n options.name,\n options.imageUrlSquare,\n options.description,\n 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: GroupPermissionsOptions;\n policySet: {\n addAdminPolicy: PermissionPolicy;\n addMemberPolicy: PermissionPolicy;\n removeAdminPolicy: PermissionPolicy;\n removeMemberPolicy: PermissionPolicy;\n updateGroupDescriptionPolicy: PermissionPolicy;\n updateGroupImageUrlSquarePolicy: PermissionPolicy;\n updateGroupNamePolicy: PermissionPolicy;\n updateGroupPinnedFrameUrlPolicy: PermissionPolicy;\n };\n };\n isActive: boolean;\n addedByInboxId: string;\n metadata: {\n creatorInboxId: string;\n conversationType: string;\n };\n admins: string[];\n superAdmins: string[];\n createdAtNs: bigint;\n};\n\nexport const toSafeConversation = (\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.addAdminPolicy,\n addMemberPolicy: conversation.permissions.policySet.addMemberPolicy,\n removeAdminPolicy: conversation.permissions.policySet.removeAdminPolicy,\n removeMemberPolicy: conversation.permissions.policySet.removeMemberPolicy,\n updateGroupDescriptionPolicy:\n conversation.permissions.policySet.updateGroupDescriptionPolicy,\n updateGroupImageUrlSquarePolicy:\n conversation.permissions.policySet.updateGroupImageUrlSquarePolicy,\n updateGroupNamePolicy:\n conversation.permissions.policySet.updateGroupNamePolicy,\n updateGroupPinnedFrameUrlPolicy:\n conversation.permissions.policySet.updateGroupPinnedFrameUrlPolicy,\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: Installation,\n): SafeInstallation => ({\n id: installation.id,\n clientTimestampNs: installation.clientTimestampNs,\n});\n\nexport type SafeInboxState = {\n accountAddresses: string[];\n inboxId: string;\n installations: SafeInstallation[];\n recoveryAddress: string;\n};\n\nexport const toSafeInboxState = (inboxState: InboxState): SafeInboxState => ({\n accountAddresses: inboxState.accountAddresses,\n inboxId: inboxState.inboxId,\n installations: inboxState.installations.map(toSafeInstallation),\n recoveryAddress: inboxState.recoveryAddress,\n});\n\nexport type SafeConsent = {\n entity: string;\n entityType: ConsentEntityType;\n state: ConsentState;\n};\n\nexport const toSafeConsent = (consent: Consent): SafeConsent => ({\n entity: consent.entity,\n entityType: consent.entityType,\n state: consent.state,\n});\n\nexport const fromSafeConsent = (consent: SafeConsent): Consent =>\n new Consent(consent.entityType, consent.state, consent.entity);\n\nexport type SafeGroupMember = {\n accountAddresses: string[];\n consentState: ConsentState;\n inboxId: string;\n installationIds: string[];\n permissionLevel: PermissionLevel;\n};\n\nexport const toSafeGroupMember = (member: GroupMember): SafeGroupMember => ({\n accountAddresses: member.accountAddresses,\n consentState: member.consentState,\n inboxId: member.inboxId,\n installationIds: member.installationIds,\n permissionLevel: member.permissionLevel,\n});\n\nexport const fromSafeGroupMember = (member: SafeGroupMember): GroupMember =>\n new GroupMember(\n member.inboxId,\n member.accountAddresses,\n member.installationIds,\n member.permissionLevel,\n member.consentState,\n );\n","import type { ContentTypeId } from \"@xmtp/content-type-primitives\";\nimport { DeliveryStatus, GroupMessageKind } 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 GroupMessageKind.Application:\n this.kind = \"application\";\n break;\n case GroupMessageKind.MembershipChange:\n this.kind = \"membership_change\";\n break;\n // no default\n }\n\n switch (message.deliveryStatus) {\n case DeliveryStatus.Unpublished:\n this.deliveryStatus = \"unpublished\";\n break;\n case DeliveryStatus.Published:\n this.deliveryStatus = \"published\";\n break;\n case DeliveryStatus.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 { ConsentState } 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: ConsentState) {\n return this.#client.sendMessage(\"updateGroupConsentState\", {\n id: this.#id,\n state,\n });\n }\n\n async dmPeerInboxId() {\n return this.#client.sendMessage(\"getDmPeerInboxId\", {\n id: this.#id,\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 getDmByInboxId(inboxId: string) {\n return this.#client.sendMessage(\"getDmByInboxId\", {\n inboxId,\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 listGroups(\n options?: Omit<SafeListConversationsOptions, \"conversation_type\">,\n ) {\n return this.#client.sendMessage(\"getGroups\", {\n options,\n });\n }\n\n async listDms(\n options?: Omit<SafeListConversationsOptions, \"conversation_type\">,\n ) {\n return this.#client.sendMessage(\"getDms\", {\n options,\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 async newDm(accountAddress: string) {\n const conversation = await this.#client.sendMessage(\"newDm\", {\n accountAddress,\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 GroupMessageKind,\n type ConsentEntityType,\n type SignatureRequestType,\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 #encryptionKey: Uint8Array;\n\n constructor(\n address: string,\n encryptionKey: Uint8Array,\n options?: ClientOptions,\n ) {\n const worker = new Worker(new URL(\"./workers/client\", import.meta.url), {\n type: \"module\",\n });\n super(\n worker,\n options?.loggingLevel !== undefined && options.loggingLevel !== \"off\",\n );\n this.address = address;\n this.options = options;\n this.#encryptionKey = encryptionKey;\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 encryptionKey: this.#encryptionKey,\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(\n address: string,\n encryptionKey: Uint8Array,\n options?: ClientOptions,\n ) {\n const client = new Client(address, encryptionKey, 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 getRevokeInstallationsSignatureText() {\n return this.sendMessage(\"getRevokeInstallationsSignatureText\", undefined);\n }\n\n async addSignature(type: SignatureRequestType, bytes: Uint8Array) {\n return this.sendMessage(\"addSignature\", { type, bytes });\n }\n\n async addScwSignature(\n type: SignatureRequestType,\n bytes: Uint8Array,\n chainId: bigint,\n blockNumber?: bigint,\n ) {\n return this.sendMessage(\"addScwSignature\", {\n type,\n bytes,\n chainId,\n blockNumber,\n });\n }\n\n async applySignatures() {\n return this.sendMessage(\"applySignatures\", 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\", {\n refreshFromNetwork: refreshFromNetwork ?? false,\n });\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: ConsentEntityType, 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 !== GroupMessageKind.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","typeId","versionMajor","versionMinor","fromContentTypeId","WasmContentTypeId","toSafeContentTypeId","fromSafeContentTypeId","toEncodedContent","content","type","parameters","Object","fromEntries","fallback","compression","fromEncodedContent","WasmEncodedContent","entries","toSafeEncodedContent","fromSafeEncodedContent","toSafeMessage","convoId","deliveryStatus","kind","senderInboxId","sentAtNs","toSafeListMessagesOptions","options","direction","limit","sentAfterNs","sentBeforeNs","fromSafeListMessagesOptions","ListMessagesOptions","toSafeListConversationsOptions","allowedStates","conversationType","createdAfterNs","createdBeforeNs","fromSafeListConversationsOptions","ListConversationsOptions","toSafeCreateGroupOptions","permissions","name","groupName","imageUrlSquare","groupImageUrlSquare","description","groupDescription","pinnedFrameUrl","groupPinnedFrameUrl","fromSafeCreateGroupOptions","CreateGroupOptions","toSafeConversation","conversation","imageUrl","policyType","policySet","addAdminPolicy","addMemberPolicy","removeAdminPolicy","removeMemberPolicy","updateGroupDescriptionPolicy","updateGroupImageUrlSquarePolicy","updateGroupNamePolicy","updateGroupPinnedFrameUrlPolicy","isActive","addedByInboxId","metadata","admins","superAdmins","createdAtNs","toSafeInstallation","installation","clientTimestampNs","toSafeInboxState","inboxState","accountAddresses","inboxId","installations","map","recoveryAddress","toSafeConsent","consent","entity","entityType","state","fromSafeConsent","Consent","toSafeGroupMember","member","consentState","installationIds","permissionLevel","fromSafeGroupMember","GroupMember","DecodedMessage","client","contentType","conversationId","GroupMessageKind","Application","MembershipChange","DeliveryStatus","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","dmPeerInboxId","Conversations","getConversationById","getMessageById","getDmByInboxId","list","listGroups","listDms","newGroup","newDm","accountAddress","Client","address","isReady","installationId","conversations","codecs","encryptionKey","super","Worker","URL","url","loggingLevel","GroupUpdatedCodec","TextCodec","codec","toString","init","create","getCreateInboxSignatureText","getAddWalletSignatureText","getRevokeWalletSignatureText","getRevokeInstallationsSignatureText","addSignature","bytes","addScwSignature","chainId","blockNumber","applySignatures","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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"}
@@ -1,2 +1,2 @@
1
- import{ContentTypeId as e}from"@xmtp/content-type-primitives";import t,{EncodedContent as n,ContentTypeId as r,Consent as s,ListConversationsOptions as o,CreateGroupOptions as i,ListMessagesOptions 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.authorityId,typeId:r.typeId,versionMajor:r.versionMajor,versionMinor:r.versionMinor})),parameters:Object.fromEntries(n.parameters),fallback:n.fallback,compression:n.compression,content:n.content})),convoId:t.convoId,deliveryStatus:t.deliveryStatus,id:t.id,kind:t.kind,senderInboxId:t.senderInboxId,sentAtNs:t.sentAtNs};var n,r},y=e=>new o(e.allowedStates,e.conversationType,e.createdAfterNs,e.createdBeforeNs,e.limit),v=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.addAdminPolicy,addMemberPolicy:e.permissions.policySet.addMemberPolicy,removeAdminPolicy:e.permissions.policySet.removeAdminPolicy,removeMemberPolicy:e.permissions.policySet.removeMemberPolicy,updateGroupDescriptionPolicy:e.permissions.policySet.updateGroupDescriptionPolicy,updateGroupImageUrlSquarePolicy:e.permissions.policySet.updateGroupImageUrlSquarePolicy,updateGroupNamePolicy:e.permissions.policySet.updateGroupNamePolicy,updateGroupPinnedFrameUrlPolicy:e.permissions.policySet.updateGroupPinnedFrameUrlPolicy}},isActive:e.isActive,addedByInboxId:e.addedByInboxId,metadata:e.metadata,admins:e.admins,superAdmins:e.superAdmins,createdAtNs:e.createdAtNs}),b=e=>({id:e.id,clientTimestampNs:e.clientTimestampNs}),I=e=>({accountAddresses:e.accountAddresses,inboxId:e.inboxId,installations:e.installations.map(b),recoveryAddress:e.recoveryAddress}),h=e=>new s(e.entityType,e.state,e.entity),S={local:"http://localhost:5555",dev:"https://dev.xmtp.network",production:"https://production.xmtp.network"};class w{#e;#t;constructor(e,t){this.#e=e,this.#t=t}get id(){return this.#t.id()}get name(){return this.#t.groupName()}async updateName(e){return this.#t.updateGroupName(e)}get imageUrl(){return this.#t.groupImageUrlSquare()}async updateImageUrl(e){return this.#t.updateGroupImageUrlSquare(e)}get description(){return this.#t.groupDescription()}async updateDescription(e){return this.#t.updateGroupDescription(e)}get pinnedFrameUrl(){return this.#t.groupPinnedFrameUrl()}async updatePinnedFrameUrl(e){return this.#t.updateGroupPinnedFrameUrl(e)}get isActive(){return this.#t.isActive()}get addedByInboxId(){return this.#t.addedByInboxId()}get createdAtNs(){return this.#t.createdAtNs()}get metadata(){const e=this.#t.groupMetadata();return{creatorInboxId:e.creator_inbox_id(),conversationType:e.conversation_type()}}async members(){return(await this.#t.listMembers()).map((e=>(e=>({accountAddresses:e.account_addresses,consentState:e.consent_state,inboxId:e.inbox_id,installationIds:e.installation_ids,permissionLevel:e.permission_level}))(e)))}get admins(){return this.#t.adminList()}get superAdmins(){return this.#t.superAdminList()}get permissions(){const e=this.#t.groupPermissions();return{policyType:e.policyType(),policySet:e.policySet()}}isAdmin(e){return this.#t.isAdmin(e)}isSuperAdmin(e){return this.#t.isSuperAdmin(e)}async sync(){return this.#t.sync()}async addMembers(e){return this.#t.addMembers(e)}async addMembersByInboxId(e){return this.#t.addMembersByInboxId(e)}async removeMembers(e){return this.#t.removeMembers(e)}async removeMembersByInboxId(e){return this.#t.removeMembersByInboxId(e)}async addAdmin(e){return this.#t.addAdmin(e)}async removeAdmin(e){return this.#t.removeAdmin(e)}async addSuperAdmin(e){return this.#t.addSuperAdmin(e)}async removeSuperAdmin(e){return this.#t.removeSuperAdmin(e)}async publishMessages(){return this.#t.publishMessages()}sendOptimistic(e){return this.#t.sendOptimistic(e)}async send(e){return this.#t.send(e)}messages(e){return this.#t.findMessages(e?(e=>new a(e.sentBeforeNs,e.sentAfterNs,e.limit,e.deliveryStatus,e.direction))(e):void 0)}get consentState(){return this.#t.consentState()}updateConsentState(e){this.#t.updateConsentState(e)}dmPeerInboxId(){return this.#t.dmPeerInboxId()}}class x{#e;#n;constructor(e,t){this.#e=e,this.#n=t}async sync(){return this.#n.sync()}getConversationById(e){try{const t=this.#n.findGroupById(e);return new w(this.#e,t)}catch{return}}getMessageById(e){try{const t=this.#n.findMessageById(e);return g(t)}catch{return}}getDmByInboxId(e){try{const t=this.#n.findDmByTargetInboxId(e);return new w(this.#e,t)}catch{return}}async list(e){return(await this.#n.list(e?y(e):void 0)).map((e=>new w(this.#e,e)))}async listGroups(e){return(await this.#n.listGroups(e?y(e):void 0)).map((e=>new w(this.#e,e)))}async listDms(e){return(await this.#n.listDms(e?y(e):void 0)).map((e=>new w(this.#e,e)))}async newGroup(e,t){const n=await this.#n.createGroup(e,t?(e=>new i(e.permissions,e.name,e.imageUrlSquare,e.description,e.pinnedFrameUrl))(t):void 0);return new w(this.#e,n)}async newDm(e){const t=await this.#n.createDm(e);return new w(this.#e,t)}}class A{#e;#n;#r;constructor(e){this.#e=e,this.#r=e.accountAddress,this.#n=new x(this,e.conversations())}static async create(e,n){const r=await(async(e,n)=>{await t();const r=n?.apiUrl??S[n?.env??"dev"],s=n?.dbPath??`xmtp-${n?.env??"dev"}-${e}.db3`,o=await d(r,e)||c(e);return u(r,o,e,s,n?.encryptionKey)})(e,n);return new A(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 applySignatures(){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(h))}async getConsentState(e,t){return this.#e.getConsentState(e,t)}get conversations(){return this.#n}}let k,G=!1;const f=e=>{self.postMessage(e)},M=e=>{self.postMessage(e)};self.onmessage=async e=>{const{action:t,id:n,data:r}=e.data;if(G&&console.log("client worker received event data",e.data),"init"===t||k)try{switch(t){case"init":k=await A.create(r.address,r.options),G=r.options?.enableLogging??!1,f({id:n,action:t,result:{inboxId:k.inboxId,installationId:k.installationId}});break;case"getCreateInboxSignatureText":{const e=await k.getCreateInboxSignatureText();f({id:n,action:t,result:e});break}case"getAddWalletSignatureText":{const e=await k.getAddWalletSignatureText(r.accountAddress);f({id:n,action:t,result:e});break}case"getRevokeWalletSignatureText":{const e=await k.getRevokeWalletSignatureText(r.accountAddress);f({id:n,action:t,result:e});break}case"getRevokeInstallationsSignatureText":{const e=await k.getRevokeInstallationsSignatureText();f({id:n,action:t,result:e});break}case"addSignature":await k.addSignature(r.type,r.bytes),f({id:n,action:t,result:void 0});break;case"applySignatures":await k.applySignatures(),f({id:n,action:t,result:void 0});break;case"registerIdentity":await k.registerIdentity(),f({id:n,action:t,result:void 0});break;case"isRegistered":{const e=k.isRegistered;f({id:n,action:t,result:e});break}case"canMessage":{const e=await k.canMessage(r.accountAddresses);f({id:n,action:t,result:e});break}case"inboxState":{const e=await k.inboxState(r.refreshFromNetwork);f({id:n,action:t,result:I(e)});break}case"getLatestInboxState":{const e=await k.getLatestInboxState(r.inboxId);f({id:n,action:t,result:I(e)});break}case"setConsentStates":await k.setConsentStates(r.records),f({id:n,action:t,result:void 0});break;case"getConsentState":{const e=await k.getConsentState(r.entityType,r.entity);f({id:n,action:t,result:e});break}case"findInboxIdByAddress":{const e=await k.findInboxIdByAddress(r.address);f({id:n,action:t,result:e});break}case"getConversations":{const e=await k.conversations.list(r.options);f({id:n,action:t,result:e.map((e=>v(e)))});break}case"getGroups":{const e=await k.conversations.listGroups(r.options);f({id:n,action:t,result:e.map((e=>v(e)))});break}case"getDms":{const e=await k.conversations.listDms(r.options);f({id:n,action:t,result:e.map((e=>v(e)))});break}case"newGroup":{const e=await k.conversations.newGroup(r.accountAddresses,r.options);f({id:n,action:t,result:v(e)});break}case"newDm":{const e=await k.conversations.newDm(r.accountAddress);f({id:n,action:t,result:v(e)});break}case"syncConversations":await k.conversations.sync(),f({id:n,action:t,result:void 0});break;case"getConversationById":{const e=k.conversations.getConversationById(r.id);f({id:n,action:t,result:e?v(e):void 0});break}case"getMessageById":{const e=k.conversations.getMessageById(r.id);f({id:n,action:t,result:e});break}case"getDmByInboxId":{const e=k.conversations.getDmByInboxId(r.inboxId);f({id:n,action:t,result:e?v(e):void 0});break}case"syncGroup":{const e=k.conversations.getConversationById(r.id);e?(await e.sync(),f({id:n,action:t,result:v(e)})):M({id:n,action:t,error:"Group not found"});break}case"updateGroupName":{const e=k.conversations.getConversationById(r.id);e?(await e.updateName(r.name),f({id:n,action:t,result:void 0})):M({id:n,action:t,error:"Group not found"});break}case"updateGroupDescription":{const e=k.conversations.getConversationById(r.id);e?(await e.updateDescription(r.description),f({id:n,action:t,result:void 0})):M({id:n,action:t,error:"Group not found"});break}case"updateGroupImageUrlSquare":{const e=k.conversations.getConversationById(r.id);e?(await e.updateImageUrl(r.imageUrl),f({id:n,action:t,result:void 0})):M({id:n,action:t,error:"Group not found"});break}case"updateGroupPinnedFrameUrl":{const e=k.conversations.getConversationById(r.id);e?(await e.updatePinnedFrameUrl(r.pinnedFrameUrl),f({id:n,action:t,result:void 0})):M({id:n,action:t,error:"Group not found"});break}case"sendGroupMessage":{const e=k.conversations.getConversationById(r.id);if(e){const s=await e.send(p(m(r.content)));f({id:n,action:t,result:s})}else M({id:n,action:t,error:"Group not found"});break}case"sendOptimisticGroupMessage":{const e=k.conversations.getConversationById(r.id);if(e){const s=e.sendOptimistic(p(m(r.content)));f({id:n,action:t,result:s})}else M({id:n,action:t,error:"Group not found"});break}case"publishGroupMessages":{const e=k.conversations.getConversationById(r.id);e?(await e.publishMessages(),f({id:n,action:t,result:void 0})):M({id:n,action:t,error:"Group not found"});break}case"getGroupMessages":{const e=k.conversations.getConversationById(r.id);if(e){const s=e.messages(r.options);f({id:n,action:t,result:s.map((e=>g(e)))})}else M({id:n,action:t,error:"Group not found"});break}case"getGroupMembers":{const e=k.conversations.getConversationById(r.id);if(e){const r=await e.members();f({id:n,action:t,result:r})}else M({id:n,action:t,error:"Group not found"});break}case"getGroupAdmins":{const e=k.conversations.getConversationById(r.id);e?f({id:n,action:t,result:e.admins}):M({id:n,action:t,error:"Group not found"});break}case"getGroupSuperAdmins":{const e=k.conversations.getConversationById(r.id);e?f({id:n,action:t,result:e.superAdmins}):M({id:n,action:t,error:"Group not found"});break}case"getGroupConsentState":{const e=k.conversations.getConversationById(r.id);e?f({id:n,action:t,result:e.consentState}):M({id:n,action:t,error:"Group not found"});break}case"updateGroupConsentState":{const e=k.conversations.getConversationById(r.id);e?(e.updateConsentState(r.state),f({id:n,action:t,result:void 0})):M({id:n,action:t,error:"Group not found"});break}case"addGroupAdmin":{const e=k.conversations.getConversationById(r.id);e?(await e.addAdmin(r.inboxId),f({id:n,action:t,result:void 0})):M({id:n,action:t,error:"Group not found"});break}case"removeGroupAdmin":{const e=k.conversations.getConversationById(r.id);e?(await e.removeAdmin(r.inboxId),f({id:n,action:t,result:void 0})):M({id:n,action:t,error:"Group not found"});break}case"addGroupSuperAdmin":{const e=k.conversations.getConversationById(r.id);e?(await e.addSuperAdmin(r.inboxId),f({id:n,action:t,result:void 0})):M({id:n,action:t,error:"Group not found"});break}case"removeGroupSuperAdmin":{const e=k.conversations.getConversationById(r.id);e?(await e.removeSuperAdmin(r.inboxId),f({id:n,action:t,result:void 0})):M({id:n,action:t,error:"Group not found"});break}case"addGroupMembers":{const e=k.conversations.getConversationById(r.id);e?(await e.addMembers(r.accountAddresses),f({id:n,action:t,result:void 0})):M({id:n,action:t,error:"Group not found"});break}case"removeGroupMembers":{const e=k.conversations.getConversationById(r.id);e?(await e.removeMembers(r.accountAddresses),f({id:n,action:t,result:void 0})):M({id:n,action:t,error:"Group not found"});break}case"addGroupMembersByInboxId":{const e=k.conversations.getConversationById(r.id);e?(await e.addMembersByInboxId(r.inboxIds),f({id:n,action:t,result:void 0})):M({id:n,action:t,error:"Group not found"});break}case"removeGroupMembersByInboxId":{const e=k.conversations.getConversationById(r.id);e?(await e.removeMembersByInboxId(r.inboxIds),f({id:n,action:t,result:void 0})):M({id:n,action:t,error:"Group not found"});break}case"isGroupAdmin":{const e=k.conversations.getConversationById(r.id);if(e){const s=e.isAdmin(r.inboxId);f({id:n,action:t,result:s})}else M({id:n,action:t,error:"Group not found"});break}case"isGroupSuperAdmin":{const e=k.conversations.getConversationById(r.id);if(e){const s=e.isSuperAdmin(r.inboxId);f({id:n,action:t,result:s})}else M({id:n,action:t,error:"Group not found"});break}case"getDmPeerInboxId":{const e=k.conversations.getConversationById(r.id);if(e){const r=e.dmPeerInboxId();f({id:n,action:t,result:r})}else M({id:n,action:t,error:"Group not found"});break}}}catch(e){M({id:n,action:t,error:e.message})}else M({id:n,action:t,error:"Client not initialized"})};
1
+ import{ContentTypeId as e}from"@xmtp/content-type-primitives";import t,{EncodedContent as n,ContentTypeId as r,Consent as o,ListConversationsOptions as i,CreateGroupOptions as s,ListMessagesOptions as a,getInboxIdForAddress as d,generateInboxId as c,createClient as u,LogOptions as p}from"@xmtp/wasm-bindings";const l=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},g=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},y=t=>{return{content:g((n=t.content,{type:(r=n.type,new e({authorityId:r.authorityId,typeId:r.typeId,versionMajor:r.versionMajor,versionMinor:r.versionMinor})),parameters:Object.fromEntries(n.parameters),fallback:n.fallback,compression:n.compression,content:n.content})),convoId:t.convoId,deliveryStatus:t.deliveryStatus,id:t.id,kind:t.kind,senderInboxId:t.senderInboxId,sentAtNs:t.sentAtNs};var n,r},v=e=>new i(e.allowedStates,e.conversationType,e.createdAfterNs,e.createdBeforeNs,e.limit),I=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.addAdminPolicy,addMemberPolicy:e.permissions.policySet.addMemberPolicy,removeAdminPolicy:e.permissions.policySet.removeAdminPolicy,removeMemberPolicy:e.permissions.policySet.removeMemberPolicy,updateGroupDescriptionPolicy:e.permissions.policySet.updateGroupDescriptionPolicy,updateGroupImageUrlSquarePolicy:e.permissions.policySet.updateGroupImageUrlSquarePolicy,updateGroupNamePolicy:e.permissions.policySet.updateGroupNamePolicy,updateGroupPinnedFrameUrlPolicy:e.permissions.policySet.updateGroupPinnedFrameUrlPolicy}},isActive:e.isActive,addedByInboxId:e.addedByInboxId,metadata:e.metadata,admins:e.admins,superAdmins:e.superAdmins,createdAtNs:e.createdAtNs}),b=e=>({id:e.id,clientTimestampNs:e.clientTimestampNs}),h=e=>({accountAddresses:e.accountAddresses,inboxId:e.inboxId,installations:e.installations.map(b),recoveryAddress:e.recoveryAddress}),S=e=>new o(e.entityType,e.state,e.entity),w={local:"http://localhost:5555",dev:"https://dev.xmtp.network",production:"https://production.xmtp.network"};class x{#e;#t;constructor(e,t){this.#e=e,this.#t=t}get id(){return this.#t.id()}get name(){return this.#t.groupName()}async updateName(e){return this.#t.updateGroupName(e)}get imageUrl(){return this.#t.groupImageUrlSquare()}async updateImageUrl(e){return this.#t.updateGroupImageUrlSquare(e)}get description(){return this.#t.groupDescription()}async updateDescription(e){return this.#t.updateGroupDescription(e)}get pinnedFrameUrl(){return this.#t.groupPinnedFrameUrl()}async updatePinnedFrameUrl(e){return this.#t.updateGroupPinnedFrameUrl(e)}get isActive(){return this.#t.isActive()}get addedByInboxId(){return this.#t.addedByInboxId()}get createdAtNs(){return this.#t.createdAtNs()}get metadata(){const e=this.#t.groupMetadata();return{creatorInboxId:e.creatorInboxId(),conversationType:e.conversationType()}}async members(){return(await this.#t.listMembers()).map((e=>(e=>({accountAddresses:e.accountAddresses,consentState:e.consentState,inboxId:e.inboxId,installationIds:e.installationIds,permissionLevel:e.permissionLevel}))(e)))}get admins(){return this.#t.adminList()}get superAdmins(){return this.#t.superAdminList()}get permissions(){const e=this.#t.groupPermissions();return{policyType:e.policyType(),policySet:e.policySet()}}isAdmin(e){return this.#t.isAdmin(e)}isSuperAdmin(e){return this.#t.isSuperAdmin(e)}async sync(){return this.#t.sync()}async addMembers(e){return this.#t.addMembers(e)}async addMembersByInboxId(e){return this.#t.addMembersByInboxId(e)}async removeMembers(e){return this.#t.removeMembers(e)}async removeMembersByInboxId(e){return this.#t.removeMembersByInboxId(e)}async addAdmin(e){return this.#t.addAdmin(e)}async removeAdmin(e){return this.#t.removeAdmin(e)}async addSuperAdmin(e){return this.#t.addSuperAdmin(e)}async removeSuperAdmin(e){return this.#t.removeSuperAdmin(e)}async publishMessages(){return this.#t.publishMessages()}sendOptimistic(e){return this.#t.sendOptimistic(e)}async send(e){return this.#t.send(e)}messages(e){return this.#t.findMessages(e?(e=>new a(e.sentBeforeNs,e.sentAfterNs,e.limit,e.deliveryStatus,e.direction))(e):void 0)}get consentState(){return this.#t.consentState()}updateConsentState(e){this.#t.updateConsentState(e)}dmPeerInboxId(){return this.#t.dmPeerInboxId()}}class A{#e;#n;constructor(e,t){this.#e=e,this.#n=t}async sync(){return this.#n.sync()}getConversationById(e){try{const t=this.#n.findGroupById(e);return new x(this.#e,t)}catch{return}}getMessageById(e){try{const t=this.#n.findMessageById(e);return y(t)}catch{return}}getDmByInboxId(e){try{const t=this.#n.findDmByTargetInboxId(e);return new x(this.#e,t)}catch{return}}async list(e){return(await this.#n.list(e?v(e):void 0)).map((e=>new x(this.#e,e)))}async listGroups(e){return(await this.#n.listGroups(e?v(e):void 0)).map((e=>new x(this.#e,e)))}async listDms(e){return(await this.#n.listDms(e?v(e):void 0)).map((e=>new x(this.#e,e)))}async newGroup(e,t){const n=await this.#n.createGroup(e,t?(e=>new s(e.permissions,e.name,e.imageUrlSquare,e.description,e.pinnedFrameUrl))(t):void 0);return new x(this.#e,n)}async newDm(e){const t=await this.#n.createDm(e);return new x(this.#e,t)}}class k{#e;#n;#r;constructor(e){this.#e=e,this.#r=e.accountAddress,this.#n=new A(this,e.conversations())}static async create(e,n,r){const o=await(async(e,n,r)=>{await t();const o=r?.apiUrl??w[r?.env??"dev"],i=r?.dbPath??`xmtp-${r?.env??"dev"}-${e}.db3`,s=await d(o,e)||c(e),a=r&&(void 0!==r.loggingLevel||r.structuredLogging||r.performanceLogging);return u(o,s,e,i,n,void 0,a?new p(r.structuredLogging??!1,r.performanceLogging??!1,r.loggingLevel):void 0)})(e,n,r);return new k(o)}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 addScwSignature(e,t,n,r){return this.#e.addScwSignature(e,t,n,r)}async applySignatures(){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(S))}async getConsentState(e,t){return this.#e.getConsentState(e,t)}get conversations(){return this.#n}}let G,f=!1;const M=e=>{self.postMessage(e)},B=e=>{self.postMessage(e)};self.onmessage=async e=>{const{action:t,id:n,data:r}=e.data;if(f&&console.log("client worker received event data",e.data),"init"===t||G)try{switch(t){case"init":G=await k.create(r.address,r.encryptionKey,r.options),f=void 0!==r.options?.loggingLevel&&"off"!==r.options.loggingLevel,M({id:n,action:t,result:{inboxId:G.inboxId,installationId:G.installationId}});break;case"getCreateInboxSignatureText":{const e=await G.getCreateInboxSignatureText();M({id:n,action:t,result:e});break}case"getAddWalletSignatureText":{const e=await G.getAddWalletSignatureText(r.accountAddress);M({id:n,action:t,result:e});break}case"getRevokeWalletSignatureText":{const e=await G.getRevokeWalletSignatureText(r.accountAddress);M({id:n,action:t,result:e});break}case"getRevokeInstallationsSignatureText":{const e=await G.getRevokeInstallationsSignatureText();M({id:n,action:t,result:e});break}case"addSignature":await G.addSignature(r.type,r.bytes),M({id:n,action:t,result:void 0});break;case"addScwSignature":await G.addScwSignature(r.type,r.bytes,r.chainId,r.blockNumber),M({id:n,action:t,result:void 0});break;case"applySignatures":await G.applySignatures(),M({id:n,action:t,result:void 0});break;case"registerIdentity":await G.registerIdentity(),M({id:n,action:t,result:void 0});break;case"isRegistered":{const e=G.isRegistered;M({id:n,action:t,result:e});break}case"canMessage":{const e=await G.canMessage(r.accountAddresses);M({id:n,action:t,result:e});break}case"inboxState":{const e=await G.inboxState(r.refreshFromNetwork);M({id:n,action:t,result:h(e)});break}case"getLatestInboxState":{const e=await G.getLatestInboxState(r.inboxId);M({id:n,action:t,result:h(e)});break}case"setConsentStates":await G.setConsentStates(r.records),M({id:n,action:t,result:void 0});break;case"getConsentState":{const e=await G.getConsentState(r.entityType,r.entity);M({id:n,action:t,result:e});break}case"findInboxIdByAddress":{const e=await G.findInboxIdByAddress(r.address);M({id:n,action:t,result:e});break}case"getConversations":{const e=await G.conversations.list(r.options);M({id:n,action:t,result:e.map((e=>I(e)))});break}case"getGroups":{const e=await G.conversations.listGroups(r.options);M({id:n,action:t,result:e.map((e=>I(e)))});break}case"getDms":{const e=await G.conversations.listDms(r.options);M({id:n,action:t,result:e.map((e=>I(e)))});break}case"newGroup":{const e=await G.conversations.newGroup(r.accountAddresses,r.options);M({id:n,action:t,result:I(e)});break}case"newDm":{const e=await G.conversations.newDm(r.accountAddress);M({id:n,action:t,result:I(e)});break}case"syncConversations":await G.conversations.sync(),M({id:n,action:t,result:void 0});break;case"getConversationById":{const e=G.conversations.getConversationById(r.id);M({id:n,action:t,result:e?I(e):void 0});break}case"getMessageById":{const e=G.conversations.getMessageById(r.id);M({id:n,action:t,result:e});break}case"getDmByInboxId":{const e=G.conversations.getDmByInboxId(r.inboxId);M({id:n,action:t,result:e?I(e):void 0});break}case"syncGroup":{const e=G.conversations.getConversationById(r.id);e?(await e.sync(),M({id:n,action:t,result:I(e)})):B({id:n,action:t,error:"Group not found"});break}case"updateGroupName":{const e=G.conversations.getConversationById(r.id);e?(await e.updateName(r.name),M({id:n,action:t,result:void 0})):B({id:n,action:t,error:"Group not found"});break}case"updateGroupDescription":{const e=G.conversations.getConversationById(r.id);e?(await e.updateDescription(r.description),M({id:n,action:t,result:void 0})):B({id:n,action:t,error:"Group not found"});break}case"updateGroupImageUrlSquare":{const e=G.conversations.getConversationById(r.id);e?(await e.updateImageUrl(r.imageUrl),M({id:n,action:t,result:void 0})):B({id:n,action:t,error:"Group not found"});break}case"updateGroupPinnedFrameUrl":{const e=G.conversations.getConversationById(r.id);e?(await e.updatePinnedFrameUrl(r.pinnedFrameUrl),M({id:n,action:t,result:void 0})):B({id:n,action:t,error:"Group not found"});break}case"sendGroupMessage":{const e=G.conversations.getConversationById(r.id);if(e){const o=await e.send(l(m(r.content)));M({id:n,action:t,result:o})}else B({id:n,action:t,error:"Group not found"});break}case"sendOptimisticGroupMessage":{const e=G.conversations.getConversationById(r.id);if(e){const o=e.sendOptimistic(l(m(r.content)));M({id:n,action:t,result:o})}else B({id:n,action:t,error:"Group not found"});break}case"publishGroupMessages":{const e=G.conversations.getConversationById(r.id);e?(await e.publishMessages(),M({id:n,action:t,result:void 0})):B({id:n,action:t,error:"Group not found"});break}case"getGroupMessages":{const e=G.conversations.getConversationById(r.id);if(e){const o=e.messages(r.options);M({id:n,action:t,result:o.map((e=>y(e)))})}else B({id:n,action:t,error:"Group not found"});break}case"getGroupMembers":{const e=G.conversations.getConversationById(r.id);if(e){const r=await e.members();M({id:n,action:t,result:r})}else B({id:n,action:t,error:"Group not found"});break}case"getGroupAdmins":{const e=G.conversations.getConversationById(r.id);e?M({id:n,action:t,result:e.admins}):B({id:n,action:t,error:"Group not found"});break}case"getGroupSuperAdmins":{const e=G.conversations.getConversationById(r.id);e?M({id:n,action:t,result:e.superAdmins}):B({id:n,action:t,error:"Group not found"});break}case"getGroupConsentState":{const e=G.conversations.getConversationById(r.id);e?M({id:n,action:t,result:e.consentState}):B({id:n,action:t,error:"Group not found"});break}case"updateGroupConsentState":{const e=G.conversations.getConversationById(r.id);e?(e.updateConsentState(r.state),M({id:n,action:t,result:void 0})):B({id:n,action:t,error:"Group not found"});break}case"addGroupAdmin":{const e=G.conversations.getConversationById(r.id);e?(await e.addAdmin(r.inboxId),M({id:n,action:t,result:void 0})):B({id:n,action:t,error:"Group not found"});break}case"removeGroupAdmin":{const e=G.conversations.getConversationById(r.id);e?(await e.removeAdmin(r.inboxId),M({id:n,action:t,result:void 0})):B({id:n,action:t,error:"Group not found"});break}case"addGroupSuperAdmin":{const e=G.conversations.getConversationById(r.id);e?(await e.addSuperAdmin(r.inboxId),M({id:n,action:t,result:void 0})):B({id:n,action:t,error:"Group not found"});break}case"removeGroupSuperAdmin":{const e=G.conversations.getConversationById(r.id);e?(await e.removeSuperAdmin(r.inboxId),M({id:n,action:t,result:void 0})):B({id:n,action:t,error:"Group not found"});break}case"addGroupMembers":{const e=G.conversations.getConversationById(r.id);e?(await e.addMembers(r.accountAddresses),M({id:n,action:t,result:void 0})):B({id:n,action:t,error:"Group not found"});break}case"removeGroupMembers":{const e=G.conversations.getConversationById(r.id);e?(await e.removeMembers(r.accountAddresses),M({id:n,action:t,result:void 0})):B({id:n,action:t,error:"Group not found"});break}case"addGroupMembersByInboxId":{const e=G.conversations.getConversationById(r.id);e?(await e.addMembersByInboxId(r.inboxIds),M({id:n,action:t,result:void 0})):B({id:n,action:t,error:"Group not found"});break}case"removeGroupMembersByInboxId":{const e=G.conversations.getConversationById(r.id);e?(await e.removeMembersByInboxId(r.inboxIds),M({id:n,action:t,result:void 0})):B({id:n,action:t,error:"Group not found"});break}case"isGroupAdmin":{const e=G.conversations.getConversationById(r.id);if(e){const o=e.isAdmin(r.inboxId);M({id:n,action:t,result:o})}else B({id:n,action:t,error:"Group not found"});break}case"isGroupSuperAdmin":{const e=G.conversations.getConversationById(r.id);if(e){const o=e.isSuperAdmin(r.inboxId);M({id:n,action:t,result:o})}else B({id:n,action:t,error:"Group not found"});break}case"getDmPeerInboxId":{const e=G.conversations.getConversationById(r.id);if(e){const r=e.dmPeerInboxId();M({id:n,action:t,result:r})}else B({id:n,action:t,error:"Group not found"});break}}}catch(e){B({id:n,action:t,error:e.message})}else B({id:n,action:t,error:"Client not initialized"})};
2
2
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sources":["../../src/utils/conversions.ts","../../src/constants.ts","../../src/WorkerConversation.ts","../../src/WorkerConversations.ts","../../src/WorkerClient.ts","../../src/utils/createClient.ts","../../src/workers/client.ts"],"sourcesContent":["import {\n ContentTypeId,\n type EncodedContent,\n} from \"@xmtp/content-type-primitives\";\nimport {\n Consent,\n CreateGroupOptions,\n GroupMember,\n ListConversationsOptions,\n ListMessagesOptions,\n ContentTypeId as WasmContentTypeId,\n EncodedContent as WasmEncodedContent,\n type ConsentEntityType,\n type ConsentState,\n type ConversationType,\n type DeliveryStatus,\n type GroupMembershipState,\n type GroupMessageKind,\n type GroupPermissionsOptions,\n type InboxState,\n type Installation,\n type Message,\n type PermissionLevel,\n type PermissionPolicy,\n type SortDirection,\n} from \"@xmtp/wasm-bindings\";\nimport type { WorkerConversation } from \"@/WorkerConversation\";\n\nexport const toContentTypeId = (\n contentTypeId: WasmContentTypeId,\n): ContentTypeId =>\n new ContentTypeId({\n authorityId: contentTypeId.authorityId,\n typeId: contentTypeId.typeId,\n versionMajor: contentTypeId.versionMajor,\n versionMinor: contentTypeId.versionMinor,\n });\n\nexport const fromContentTypeId = (\n contentTypeId: ContentTypeId,\n): WasmContentTypeId =>\n new WasmContentTypeId(\n contentTypeId.authorityId,\n contentTypeId.typeId,\n contentTypeId.versionMajor,\n contentTypeId.versionMinor,\n );\n\nexport type SafeContentTypeId = {\n authorityId: string;\n typeId: string;\n versionMajor: number;\n versionMinor: number;\n};\n\nexport const toSafeContentTypeId = (\n contentTypeId: ContentTypeId,\n): SafeContentTypeId => ({\n authorityId: contentTypeId.authorityId,\n typeId: contentTypeId.typeId,\n versionMajor: contentTypeId.versionMajor,\n versionMinor: contentTypeId.versionMinor,\n});\n\nexport const fromSafeContentTypeId = (\n contentTypeId: SafeContentTypeId,\n): ContentTypeId =>\n new ContentTypeId({\n authorityId: contentTypeId.authorityId,\n typeId: contentTypeId.typeId,\n versionMajor: contentTypeId.versionMajor,\n versionMinor: contentTypeId.versionMinor,\n });\n\nexport const toEncodedContent = (\n content: WasmEncodedContent,\n): EncodedContent => ({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n type: toContentTypeId(content.type!),\n parameters: Object.fromEntries(content.parameters as Map<string, string>),\n fallback: content.fallback,\n compression: content.compression,\n content: content.content,\n});\n\nexport const fromEncodedContent = (\n content: EncodedContent,\n): WasmEncodedContent =>\n new WasmEncodedContent(\n fromContentTypeId(content.type),\n new Map(Object.entries(content.parameters)),\n content.fallback,\n content.compression,\n content.content,\n );\n\nexport type SafeEncodedContent = {\n type: SafeContentTypeId;\n parameters: Record<string, string>;\n fallback?: string;\n compression?: number;\n content: Uint8Array;\n};\n\nexport const toSafeEncodedContent = (\n content: EncodedContent,\n): SafeEncodedContent => ({\n type: toSafeContentTypeId(content.type),\n parameters: content.parameters,\n fallback: content.fallback,\n compression: content.compression,\n content: content.content,\n});\n\nexport const fromSafeEncodedContent = (\n content: SafeEncodedContent,\n): EncodedContent => ({\n type: fromSafeContentTypeId(content.type),\n parameters: content.parameters,\n fallback: content.fallback,\n compression: content.compression,\n content: content.content,\n});\n\nexport type SafeMessage = {\n content: SafeEncodedContent;\n convoId: string;\n deliveryStatus: DeliveryStatus;\n id: string;\n kind: GroupMessageKind;\n senderInboxId: string;\n sentAtNs: bigint;\n};\n\nexport const toSafeMessage = (message: Message): SafeMessage => ({\n content: toSafeEncodedContent(toEncodedContent(message.content)),\n convoId: message.convoId,\n deliveryStatus: message.deliveryStatus,\n id: message.id,\n kind: message.kind,\n senderInboxId: message.senderInboxId,\n sentAtNs: message.sentAtNs,\n});\n\nexport type SafeListMessagesOptions = {\n deliveryStatus?: DeliveryStatus;\n direction?: SortDirection;\n limit?: bigint;\n sentAfterNs?: bigint;\n sentBeforeNs?: bigint;\n};\n\nexport const toSafeListMessagesOptions = (\n options: ListMessagesOptions,\n): SafeListMessagesOptions => ({\n deliveryStatus: options.deliveryStatus,\n direction: options.direction,\n limit: options.limit,\n sentAfterNs: options.sentAfterNs,\n sentBeforeNs: options.sentBeforeNs,\n});\n\nexport const fromSafeListMessagesOptions = (\n options: SafeListMessagesOptions,\n): ListMessagesOptions =>\n new ListMessagesOptions(\n options.sentBeforeNs,\n options.sentAfterNs,\n options.limit,\n options.deliveryStatus,\n options.direction,\n );\n\nexport type SafeListConversationsOptions = {\n allowedStates?: GroupMembershipState[];\n conversationType?: ConversationType;\n createdAfterNs?: bigint;\n createdBeforeNs?: bigint;\n limit?: bigint;\n};\n\nexport const toSafeListConversationsOptions = (\n options: ListConversationsOptions,\n): SafeListConversationsOptions => ({\n allowedStates: options.allowedStates,\n conversationType: options.conversationType,\n createdAfterNs: options.createdAfterNs,\n createdBeforeNs: options.createdBeforeNs,\n limit: options.limit,\n});\n\nexport const fromSafeListConversationsOptions = (\n options: SafeListConversationsOptions,\n): ListConversationsOptions =>\n new ListConversationsOptions(\n options.allowedStates,\n options.conversationType,\n options.createdAfterNs,\n options.createdBeforeNs,\n options.limit,\n );\n\nexport type SafeCreateGroupOptions = {\n permissions?: GroupPermissionsOptions;\n name?: string;\n imageUrlSquare?: string;\n description?: string;\n pinnedFrameUrl?: string;\n};\n\nexport const toSafeCreateGroupOptions = (\n options: CreateGroupOptions,\n): SafeCreateGroupOptions => ({\n permissions: options.permissions,\n name: options.groupName,\n imageUrlSquare: options.groupImageUrlSquare,\n description: options.groupDescription,\n pinnedFrameUrl: options.groupPinnedFrameUrl,\n});\n\nexport const fromSafeCreateGroupOptions = (\n options: SafeCreateGroupOptions,\n): CreateGroupOptions =>\n new CreateGroupOptions(\n options.permissions,\n options.name,\n options.imageUrlSquare,\n options.description,\n 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: GroupPermissionsOptions;\n policySet: {\n addAdminPolicy: PermissionPolicy;\n addMemberPolicy: PermissionPolicy;\n removeAdminPolicy: PermissionPolicy;\n removeMemberPolicy: PermissionPolicy;\n updateGroupDescriptionPolicy: PermissionPolicy;\n updateGroupImageUrlSquarePolicy: PermissionPolicy;\n updateGroupNamePolicy: PermissionPolicy;\n updateGroupPinnedFrameUrlPolicy: PermissionPolicy;\n };\n };\n isActive: boolean;\n addedByInboxId: string;\n metadata: {\n creatorInboxId: string;\n conversationType: string;\n };\n admins: string[];\n superAdmins: string[];\n createdAtNs: bigint;\n};\n\nexport const toSafeConversation = (\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.addAdminPolicy,\n addMemberPolicy: conversation.permissions.policySet.addMemberPolicy,\n removeAdminPolicy: conversation.permissions.policySet.removeAdminPolicy,\n removeMemberPolicy: conversation.permissions.policySet.removeMemberPolicy,\n updateGroupDescriptionPolicy:\n conversation.permissions.policySet.updateGroupDescriptionPolicy,\n updateGroupImageUrlSquarePolicy:\n conversation.permissions.policySet.updateGroupImageUrlSquarePolicy,\n updateGroupNamePolicy:\n conversation.permissions.policySet.updateGroupNamePolicy,\n updateGroupPinnedFrameUrlPolicy:\n conversation.permissions.policySet.updateGroupPinnedFrameUrlPolicy,\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: Installation,\n): SafeInstallation => ({\n id: installation.id,\n clientTimestampNs: installation.clientTimestampNs,\n});\n\nexport type SafeInboxState = {\n accountAddresses: string[];\n inboxId: string;\n installations: SafeInstallation[];\n recoveryAddress: string;\n};\n\nexport const toSafeInboxState = (inboxState: InboxState): SafeInboxState => ({\n accountAddresses: inboxState.accountAddresses,\n inboxId: inboxState.inboxId,\n installations: inboxState.installations.map(toSafeInstallation),\n recoveryAddress: inboxState.recoveryAddress,\n});\n\nexport type SafeConsent = {\n entity: string;\n entityType: ConsentEntityType;\n state: ConsentState;\n};\n\nexport const toSafeConsent = (consent: Consent): SafeConsent => ({\n entity: consent.entity,\n entityType: consent.entityType,\n state: consent.state,\n});\n\nexport const fromSafeConsent = (consent: SafeConsent): Consent =>\n new Consent(consent.entityType, consent.state, consent.entity);\n\nexport type SafeGroupMember = {\n accountAddresses: string[];\n consentState: ConsentState;\n inboxId: string;\n installationIds: string[];\n permissionLevel: PermissionLevel;\n};\n\nexport class WasmGroupMember {\n account_addresses: string[];\n consent_state: ConsentState;\n inbox_id: string;\n installation_ids: string[];\n permission_level: PermissionLevel;\n\n constructor(\n inbox_id: string,\n account_addresses: string[],\n installation_ids: string[],\n permission_level: PermissionLevel,\n consent_state: ConsentState,\n ) {\n this.inbox_id = inbox_id;\n this.account_addresses = account_addresses;\n this.installation_ids = installation_ids;\n this.permission_level = permission_level;\n this.consent_state = consent_state;\n }\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): GroupMember =>\n new GroupMember(\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 ConsentState,\n Conversation,\n EncodedContent,\n} from \"@xmtp/wasm-bindings\";\nimport {\n fromSafeListMessagesOptions,\n toSafeGroupMember,\n type SafeListMessagesOptions,\n type WasmGroupMember,\n} from \"@/utils/conversions\";\nimport type { WorkerClient } from \"@/WorkerClient\";\n\nexport class WorkerConversation {\n // eslint-disable-next-line no-unused-private-class-members\n #client: WorkerClient;\n\n #group: Conversation;\n\n constructor(client: WorkerClient, group: Conversation) {\n this.#client = client;\n this.#group = group;\n }\n\n get id() {\n return this.#group.id();\n }\n\n get name() {\n return this.#group.groupName();\n }\n\n async updateName(name: string) {\n return this.#group.updateGroupName(name);\n }\n\n get imageUrl() {\n return this.#group.groupImageUrlSquare();\n }\n\n async updateImageUrl(imageUrl: string) {\n return this.#group.updateGroupImageUrlSquare(imageUrl);\n }\n\n get description() {\n return this.#group.groupDescription();\n }\n\n async updateDescription(description: string) {\n return this.#group.updateGroupDescription(description);\n }\n\n get pinnedFrameUrl() {\n return this.#group.groupPinnedFrameUrl();\n }\n\n async updatePinnedFrameUrl(pinnedFrameUrl: string) {\n return this.#group.updateGroupPinnedFrameUrl(pinnedFrameUrl);\n }\n\n get isActive() {\n return this.#group.isActive();\n }\n\n get addedByInboxId() {\n return this.#group.addedByInboxId();\n }\n\n get createdAtNs() {\n return this.#group.createdAtNs();\n }\n\n get metadata() {\n const metadata = this.#group.groupMetadata();\n return {\n creatorInboxId: metadata.creator_inbox_id(),\n conversationType: metadata.conversation_type(),\n };\n }\n\n async members() {\n const members = (await this.#group.listMembers()) as WasmGroupMember[];\n return members.map((member) => toSafeGroupMember(member));\n }\n\n get admins() {\n return this.#group.adminList();\n }\n\n get superAdmins() {\n return this.#group.superAdminList();\n }\n\n get permissions() {\n const permissions = this.#group.groupPermissions();\n return {\n policyType: permissions.policyType(),\n policySet: permissions.policySet(),\n };\n }\n\n isAdmin(inboxId: string) {\n return this.#group.isAdmin(inboxId);\n }\n\n isSuperAdmin(inboxId: string) {\n return this.#group.isSuperAdmin(inboxId);\n }\n\n async sync() {\n return this.#group.sync();\n }\n\n async addMembers(accountAddresses: string[]) {\n return this.#group.addMembers(accountAddresses);\n }\n\n async addMembersByInboxId(inboxIds: string[]) {\n return this.#group.addMembersByInboxId(inboxIds);\n }\n\n async removeMembers(accountAddresses: string[]) {\n return this.#group.removeMembers(accountAddresses);\n }\n\n async removeMembersByInboxId(inboxIds: string[]) {\n return this.#group.removeMembersByInboxId(inboxIds);\n }\n\n async addAdmin(inboxId: string) {\n return this.#group.addAdmin(inboxId);\n }\n\n async removeAdmin(inboxId: string) {\n return this.#group.removeAdmin(inboxId);\n }\n\n async addSuperAdmin(inboxId: string) {\n return this.#group.addSuperAdmin(inboxId);\n }\n\n async removeSuperAdmin(inboxId: string) {\n return this.#group.removeSuperAdmin(inboxId);\n }\n\n async publishMessages() {\n return this.#group.publishMessages();\n }\n\n sendOptimistic(encodedContent: EncodedContent) {\n return this.#group.sendOptimistic(encodedContent);\n }\n\n async send(encodedContent: EncodedContent) {\n return this.#group.send(encodedContent);\n }\n\n messages(options?: SafeListMessagesOptions) {\n return this.#group.findMessages(\n options ? fromSafeListMessagesOptions(options) : undefined,\n );\n }\n\n get consentState() {\n return this.#group.consentState();\n }\n\n updateConsentState(state: ConsentState) {\n this.#group.updateConsentState(state);\n }\n\n dmPeerInboxId() {\n return this.#group.dmPeerInboxId();\n }\n}\n","import type { Conversation, Conversations } 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: Conversations;\n\n constructor(client: WorkerClient, conversations: Conversations) {\n this.#client = client;\n this.#conversations = conversations;\n }\n\n async sync() {\n return this.#conversations.sync();\n }\n\n getConversationById(id: string) {\n try {\n const group = this.#conversations.findGroupById(id);\n // findGroupById will throw if group is not found\n return new WorkerConversation(this.#client, group);\n } catch {\n return undefined;\n }\n }\n\n getMessageById(id: string) {\n try {\n // findMessageById will throw if message is not found\n const message = this.#conversations.findMessageById(id);\n return toSafeMessage(message);\n } catch {\n return undefined;\n }\n }\n\n getDmByInboxId(inboxId: string) {\n try {\n const group = this.#conversations.findDmByTargetInboxId(inboxId);\n return new WorkerConversation(this.#client, group);\n } catch {\n return undefined;\n }\n }\n\n async list(options?: SafeListConversationsOptions) {\n const groups = (await this.#conversations.list(\n options ? fromSafeListConversationsOptions(options) : undefined,\n )) as Conversation[];\n return groups.map((group) => new WorkerConversation(this.#client, group));\n }\n\n async listGroups(\n options?: Omit<SafeListConversationsOptions, \"conversation_type\">,\n ) {\n const groups = (await this.#conversations.listGroups(\n options ? fromSafeListConversationsOptions(options) : undefined,\n )) as Conversation[];\n return groups.map((group) => new WorkerConversation(this.#client, group));\n }\n\n async listDms(\n options?: Omit<SafeListConversationsOptions, \"conversation_type\">,\n ) {\n const groups = (await this.#conversations.listDms(\n options ? fromSafeListConversationsOptions(options) : undefined,\n )) as Conversation[];\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.createGroup(\n accountAddresses,\n options ? fromSafeCreateGroupOptions(options) : undefined,\n );\n return new WorkerConversation(this.#client, group);\n }\n\n async newDm(accountAddress: string) {\n const group = await this.#conversations.createDm(accountAddress);\n return new WorkerConversation(this.#client, group);\n }\n}\n","import {\n type Client,\n type ConsentEntityType,\n type SignatureRequestType,\n} from \"@xmtp/wasm-bindings\";\nimport type { ClientOptions } from \"@/types\";\nimport { fromSafeConsent, type SafeConsent } from \"@/utils/conversions\";\nimport { createClient } from \"@/utils/createClient\";\nimport { WorkerConversations } from \"@/WorkerConversations\";\n\nexport class WorkerClient {\n #client: Client;\n\n #conversations: WorkerConversations;\n\n #accountAddress: string;\n\n constructor(client: Client) {\n this.#client = client;\n this.#accountAddress = client.accountAddress;\n this.#conversations = new WorkerConversations(this, client.conversations());\n }\n\n static async create(\n accountAddress: string,\n 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: SignatureRequestType, bytes: Uint8Array) {\n return this.#client.addSignature(type, bytes);\n }\n\n async applySignatures() {\n return this.#client.applySignatureRequests();\n }\n\n async canMessage(accountAddresses: string[]) {\n return this.#client.canMessage(accountAddresses) as Promise<\n Map<string, boolean>\n >;\n }\n\n async registerIdentity() {\n return this.#client.registerIdentity();\n }\n\n async findInboxIdByAddress(address: string) {\n return this.#client.findInboxIdByAddress(address);\n }\n\n async inboxState(refreshFromNetwork: boolean) {\n return this.#client.inboxState(refreshFromNetwork);\n }\n\n async getLatestInboxState(inboxId: string) {\n return this.#client.getLatestInboxState(inboxId);\n }\n\n async setConsentStates(records: SafeConsent[]) {\n return this.#client.setConsentStates(records.map(fromSafeConsent));\n }\n\n async getConsentState(entityType: ConsentEntityType, entity: string) {\n return this.#client.getConsentState(entityType, entity);\n }\n\n get conversations() {\n return this.#conversations;\n }\n}\n","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 // TODO: add db path validation\n // - must end with .db3\n // - must not contain invalid characters\n // - must not start with a dot\n const dbPath =\n options?.dbPath ?? `xmtp-${options?.env ?? \"dev\"}-${accountAddress}.db3`;\n\n const inboxId =\n (await getInboxIdForAddress(host, accountAddress)) ||\n generateInboxId(accountAddress);\n\n 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 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 \"getRevokeInstallationsSignatureText\": {\n const result = await client.getRevokeInstallationsSignatureText();\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 \"applySignatures\":\n await client.applySignatures();\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 \"getGroups\": {\n const conversations = await client.conversations.listGroups(\n data.options,\n );\n postMessage({\n id,\n action,\n result: conversations.map((conversation) =>\n toSafeConversation(conversation),\n ),\n });\n break;\n }\n case \"getDms\": {\n const conversations = await client.conversations.listDms(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 \"newDm\": {\n const conversation = await client.conversations.newDm(\n data.accountAddress,\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 case \"getDmByInboxId\": {\n const conversation = client.conversations.getDmByInboxId(data.inboxId);\n postMessage({\n id,\n action,\n result: conversation ? toSafeConversation(conversation) : undefined,\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 result = await group.members();\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 \"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 case \"getDmPeerInboxId\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n const result = group.dmPeerInboxId();\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","fromEntries","convoId","deliveryStatus","id","kind","senderInboxId","sentAtNs","fromSafeListConversationsOptions","options","ListConversationsOptions","allowedStates","conversationType","createdAfterNs","createdBeforeNs","limit","toSafeConversation","conversation","name","imageUrl","description","pinnedFrameUrl","permissions","policyType","policySet","addAdminPolicy","addMemberPolicy","removeAdminPolicy","removeMemberPolicy","updateGroupDescriptionPolicy","updateGroupImageUrlSquarePolicy","updateGroupNamePolicy","updateGroupPinnedFrameUrlPolicy","isActive","addedByInboxId","metadata","admins","superAdmins","createdAtNs","toSafeInstallation","installation","clientTimestampNs","toSafeInboxState","inboxState","accountAddresses","inboxId","installations","map","recoveryAddress","fromSafeConsent","consent","Consent","entityType","state","entity","ApiUrls","local","dev","production","WorkerConversation","client","group","constructor","this","groupName","updateName","updateGroupName","groupImageUrlSquare","updateImageUrl","updateGroupImageUrlSquare","groupDescription","updateDescription","updateGroupDescription","groupPinnedFrameUrl","updatePinnedFrameUrl","updateGroupPinnedFrameUrl","groupMetadata","creatorInboxId","creator_inbox_id","conversation_type","members","listMembers","member","account_addresses","consentState","consent_state","inbox_id","installationIds","installation_ids","permissionLevel","permission_level","toSafeGroupMember","adminList","superAdminList","groupPermissions","isAdmin","isSuperAdmin","sync","addMembers","addMembersByInboxId","inboxIds","removeMembers","removeMembersByInboxId","addAdmin","removeAdmin","addSuperAdmin","removeSuperAdmin","publishMessages","sendOptimistic","encodedContent","send","messages","findMessages","ListMessagesOptions","sentBeforeNs","sentAfterNs","direction","fromSafeListMessagesOptions","undefined","updateConsentState","dmPeerInboxId","WorkerConversations","conversations","getConversationById","findGroupById","getMessageById","findMessageById","getDmByInboxId","findDmByTargetInboxId","list","listGroups","listDms","newGroup","createGroup","CreateGroupOptions","imageUrlSquare","fromSafeCreateGroupOptions","newDm","accountAddress","createDm","WorkerClient","create","async","init","host","apiUrl","env","dbPath","getInboxIdForAddress","generateInboxId","createWasmClient","encryptionKey","createClient","installationId","isRegistered","getCreateInboxSignatureText","createInboxSignatureText","getAddWalletSignatureText","addWalletSignatureText","getRevokeWalletSignatureText","revokeWalletSignatureText","getRevokeInstallationsSignatureText","revokeInstallationsSignatureText","addSignature","bytes","applySignatures","applySignatureRequests","canMessage","registerIdentity","findInboxIdByAddress","address","refreshFromNetwork","getLatestInboxState","setConsentStates","records","getConsentState","enableLogging","postMessage","data","self","postMessageError","onmessage","event","action","console","log","result","error","e"],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sources":["../../src/utils/conversions.ts","../../src/constants.ts","../../src/WorkerConversation.ts","../../src/WorkerConversations.ts","../../src/WorkerClient.ts","../../src/utils/createClient.ts","../../src/workers/client.ts"],"sourcesContent":["import {\n ContentTypeId,\n type EncodedContent,\n} from \"@xmtp/content-type-primitives\";\nimport {\n Consent,\n CreateGroupOptions,\n GroupMember,\n ListConversationsOptions,\n ListMessagesOptions,\n ContentTypeId as WasmContentTypeId,\n EncodedContent as WasmEncodedContent,\n type ConsentEntityType,\n type ConsentState,\n type ConversationType,\n type DeliveryStatus,\n type GroupMembershipState,\n type GroupMessageKind,\n type GroupPermissionsOptions,\n type InboxState,\n type Installation,\n type Message,\n type PermissionLevel,\n type PermissionPolicy,\n type SortDirection,\n} from \"@xmtp/wasm-bindings\";\nimport type { WorkerConversation } from \"@/WorkerConversation\";\n\nexport const toContentTypeId = (\n contentTypeId: WasmContentTypeId,\n): ContentTypeId =>\n new ContentTypeId({\n authorityId: contentTypeId.authorityId,\n typeId: contentTypeId.typeId,\n versionMajor: contentTypeId.versionMajor,\n versionMinor: contentTypeId.versionMinor,\n });\n\nexport const fromContentTypeId = (\n contentTypeId: ContentTypeId,\n): WasmContentTypeId =>\n new WasmContentTypeId(\n contentTypeId.authorityId,\n contentTypeId.typeId,\n contentTypeId.versionMajor,\n contentTypeId.versionMinor,\n );\n\nexport type SafeContentTypeId = {\n authorityId: string;\n typeId: string;\n versionMajor: number;\n versionMinor: number;\n};\n\nexport const toSafeContentTypeId = (\n contentTypeId: ContentTypeId,\n): SafeContentTypeId => ({\n authorityId: contentTypeId.authorityId,\n typeId: contentTypeId.typeId,\n versionMajor: contentTypeId.versionMajor,\n versionMinor: contentTypeId.versionMinor,\n});\n\nexport const fromSafeContentTypeId = (\n contentTypeId: SafeContentTypeId,\n): ContentTypeId =>\n new ContentTypeId({\n authorityId: contentTypeId.authorityId,\n typeId: contentTypeId.typeId,\n versionMajor: contentTypeId.versionMajor,\n versionMinor: contentTypeId.versionMinor,\n });\n\nexport const toEncodedContent = (\n content: WasmEncodedContent,\n): EncodedContent => ({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n type: toContentTypeId(content.type!),\n parameters: Object.fromEntries(content.parameters as Map<string, string>),\n fallback: content.fallback,\n compression: content.compression,\n content: content.content,\n});\n\nexport const fromEncodedContent = (\n content: EncodedContent,\n): WasmEncodedContent =>\n new WasmEncodedContent(\n fromContentTypeId(content.type),\n new Map(Object.entries(content.parameters)),\n content.fallback,\n content.compression,\n content.content,\n );\n\nexport type SafeEncodedContent = {\n type: SafeContentTypeId;\n parameters: Record<string, string>;\n fallback?: string;\n compression?: number;\n content: Uint8Array;\n};\n\nexport const toSafeEncodedContent = (\n content: EncodedContent,\n): SafeEncodedContent => ({\n type: toSafeContentTypeId(content.type),\n parameters: content.parameters,\n fallback: content.fallback,\n compression: content.compression,\n content: content.content,\n});\n\nexport const fromSafeEncodedContent = (\n content: SafeEncodedContent,\n): EncodedContent => ({\n type: fromSafeContentTypeId(content.type),\n parameters: content.parameters,\n fallback: content.fallback,\n compression: content.compression,\n content: content.content,\n});\n\nexport type SafeMessage = {\n content: SafeEncodedContent;\n convoId: string;\n deliveryStatus: DeliveryStatus;\n id: string;\n kind: GroupMessageKind;\n senderInboxId: string;\n sentAtNs: bigint;\n};\n\nexport const toSafeMessage = (message: Message): SafeMessage => ({\n content: toSafeEncodedContent(toEncodedContent(message.content)),\n convoId: message.convoId,\n deliveryStatus: message.deliveryStatus,\n id: message.id,\n kind: message.kind,\n senderInboxId: message.senderInboxId,\n sentAtNs: message.sentAtNs,\n});\n\nexport type SafeListMessagesOptions = {\n deliveryStatus?: DeliveryStatus;\n direction?: SortDirection;\n limit?: bigint;\n sentAfterNs?: bigint;\n sentBeforeNs?: bigint;\n};\n\nexport const toSafeListMessagesOptions = (\n options: ListMessagesOptions,\n): SafeListMessagesOptions => ({\n deliveryStatus: options.deliveryStatus,\n direction: options.direction,\n limit: options.limit,\n sentAfterNs: options.sentAfterNs,\n sentBeforeNs: options.sentBeforeNs,\n});\n\nexport const fromSafeListMessagesOptions = (\n options: SafeListMessagesOptions,\n): ListMessagesOptions =>\n new ListMessagesOptions(\n options.sentBeforeNs,\n options.sentAfterNs,\n options.limit,\n options.deliveryStatus,\n options.direction,\n );\n\nexport type SafeListConversationsOptions = {\n allowedStates?: GroupMembershipState[];\n conversationType?: ConversationType;\n createdAfterNs?: bigint;\n createdBeforeNs?: bigint;\n limit?: bigint;\n};\n\nexport const toSafeListConversationsOptions = (\n options: ListConversationsOptions,\n): SafeListConversationsOptions => ({\n allowedStates: options.allowedStates,\n conversationType: options.conversationType,\n createdAfterNs: options.createdAfterNs,\n createdBeforeNs: options.createdBeforeNs,\n limit: options.limit,\n});\n\nexport const fromSafeListConversationsOptions = (\n options: SafeListConversationsOptions,\n): ListConversationsOptions =>\n new ListConversationsOptions(\n options.allowedStates,\n options.conversationType,\n options.createdAfterNs,\n options.createdBeforeNs,\n options.limit,\n );\n\nexport type SafeCreateGroupOptions = {\n permissions?: GroupPermissionsOptions;\n name?: string;\n imageUrlSquare?: string;\n description?: string;\n pinnedFrameUrl?: string;\n};\n\nexport const toSafeCreateGroupOptions = (\n options: CreateGroupOptions,\n): SafeCreateGroupOptions => ({\n permissions: options.permissions,\n name: options.groupName,\n imageUrlSquare: options.groupImageUrlSquare,\n description: options.groupDescription,\n pinnedFrameUrl: options.groupPinnedFrameUrl,\n});\n\nexport const fromSafeCreateGroupOptions = (\n options: SafeCreateGroupOptions,\n): CreateGroupOptions =>\n new CreateGroupOptions(\n options.permissions,\n options.name,\n options.imageUrlSquare,\n options.description,\n 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: GroupPermissionsOptions;\n policySet: {\n addAdminPolicy: PermissionPolicy;\n addMemberPolicy: PermissionPolicy;\n removeAdminPolicy: PermissionPolicy;\n removeMemberPolicy: PermissionPolicy;\n updateGroupDescriptionPolicy: PermissionPolicy;\n updateGroupImageUrlSquarePolicy: PermissionPolicy;\n updateGroupNamePolicy: PermissionPolicy;\n updateGroupPinnedFrameUrlPolicy: PermissionPolicy;\n };\n };\n isActive: boolean;\n addedByInboxId: string;\n metadata: {\n creatorInboxId: string;\n conversationType: string;\n };\n admins: string[];\n superAdmins: string[];\n createdAtNs: bigint;\n};\n\nexport const toSafeConversation = (\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.addAdminPolicy,\n addMemberPolicy: conversation.permissions.policySet.addMemberPolicy,\n removeAdminPolicy: conversation.permissions.policySet.removeAdminPolicy,\n removeMemberPolicy: conversation.permissions.policySet.removeMemberPolicy,\n updateGroupDescriptionPolicy:\n conversation.permissions.policySet.updateGroupDescriptionPolicy,\n updateGroupImageUrlSquarePolicy:\n conversation.permissions.policySet.updateGroupImageUrlSquarePolicy,\n updateGroupNamePolicy:\n conversation.permissions.policySet.updateGroupNamePolicy,\n updateGroupPinnedFrameUrlPolicy:\n conversation.permissions.policySet.updateGroupPinnedFrameUrlPolicy,\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: Installation,\n): SafeInstallation => ({\n id: installation.id,\n clientTimestampNs: installation.clientTimestampNs,\n});\n\nexport type SafeInboxState = {\n accountAddresses: string[];\n inboxId: string;\n installations: SafeInstallation[];\n recoveryAddress: string;\n};\n\nexport const toSafeInboxState = (inboxState: InboxState): SafeInboxState => ({\n accountAddresses: inboxState.accountAddresses,\n inboxId: inboxState.inboxId,\n installations: inboxState.installations.map(toSafeInstallation),\n recoveryAddress: inboxState.recoveryAddress,\n});\n\nexport type SafeConsent = {\n entity: string;\n entityType: ConsentEntityType;\n state: ConsentState;\n};\n\nexport const toSafeConsent = (consent: Consent): SafeConsent => ({\n entity: consent.entity,\n entityType: consent.entityType,\n state: consent.state,\n});\n\nexport const fromSafeConsent = (consent: SafeConsent): Consent =>\n new Consent(consent.entityType, consent.state, consent.entity);\n\nexport type SafeGroupMember = {\n accountAddresses: string[];\n consentState: ConsentState;\n inboxId: string;\n installationIds: string[];\n permissionLevel: PermissionLevel;\n};\n\nexport const toSafeGroupMember = (member: GroupMember): SafeGroupMember => ({\n accountAddresses: member.accountAddresses,\n consentState: member.consentState,\n inboxId: member.inboxId,\n installationIds: member.installationIds,\n permissionLevel: member.permissionLevel,\n});\n\nexport const fromSafeGroupMember = (member: SafeGroupMember): GroupMember =>\n new GroupMember(\n member.inboxId,\n member.accountAddresses,\n member.installationIds,\n member.permissionLevel,\n member.consentState,\n );\n","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 ConsentState,\n Conversation,\n EncodedContent,\n GroupMember,\n} from \"@xmtp/wasm-bindings\";\nimport {\n fromSafeListMessagesOptions,\n toSafeGroupMember,\n type SafeListMessagesOptions,\n} from \"@/utils/conversions\";\nimport type { WorkerClient } from \"@/WorkerClient\";\n\nexport class WorkerConversation {\n // eslint-disable-next-line no-unused-private-class-members\n #client: WorkerClient;\n\n #group: Conversation;\n\n constructor(client: WorkerClient, group: Conversation) {\n this.#client = client;\n this.#group = group;\n }\n\n get id() {\n return this.#group.id();\n }\n\n get name() {\n return this.#group.groupName();\n }\n\n async updateName(name: string) {\n return this.#group.updateGroupName(name);\n }\n\n get imageUrl() {\n return this.#group.groupImageUrlSquare();\n }\n\n async updateImageUrl(imageUrl: string) {\n return this.#group.updateGroupImageUrlSquare(imageUrl);\n }\n\n get description() {\n return this.#group.groupDescription();\n }\n\n async updateDescription(description: string) {\n return this.#group.updateGroupDescription(description);\n }\n\n get pinnedFrameUrl() {\n return this.#group.groupPinnedFrameUrl();\n }\n\n async updatePinnedFrameUrl(pinnedFrameUrl: string) {\n return this.#group.updateGroupPinnedFrameUrl(pinnedFrameUrl);\n }\n\n get isActive() {\n return this.#group.isActive();\n }\n\n get addedByInboxId() {\n return this.#group.addedByInboxId();\n }\n\n get createdAtNs() {\n return this.#group.createdAtNs();\n }\n\n get metadata() {\n const metadata = this.#group.groupMetadata();\n return {\n creatorInboxId: metadata.creatorInboxId(),\n conversationType: metadata.conversationType(),\n };\n }\n\n async members() {\n const members = (await this.#group.listMembers()) as GroupMember[];\n return members.map((member) => toSafeGroupMember(member));\n }\n\n get admins() {\n return this.#group.adminList();\n }\n\n get superAdmins() {\n return this.#group.superAdminList();\n }\n\n get permissions() {\n const permissions = this.#group.groupPermissions();\n return {\n policyType: permissions.policyType(),\n policySet: permissions.policySet(),\n };\n }\n\n isAdmin(inboxId: string) {\n return this.#group.isAdmin(inboxId);\n }\n\n isSuperAdmin(inboxId: string) {\n return this.#group.isSuperAdmin(inboxId);\n }\n\n async sync() {\n return this.#group.sync();\n }\n\n async addMembers(accountAddresses: string[]) {\n return this.#group.addMembers(accountAddresses);\n }\n\n async addMembersByInboxId(inboxIds: string[]) {\n return this.#group.addMembersByInboxId(inboxIds);\n }\n\n async removeMembers(accountAddresses: string[]) {\n return this.#group.removeMembers(accountAddresses);\n }\n\n async removeMembersByInboxId(inboxIds: string[]) {\n return this.#group.removeMembersByInboxId(inboxIds);\n }\n\n async addAdmin(inboxId: string) {\n return this.#group.addAdmin(inboxId);\n }\n\n async removeAdmin(inboxId: string) {\n return this.#group.removeAdmin(inboxId);\n }\n\n async addSuperAdmin(inboxId: string) {\n return this.#group.addSuperAdmin(inboxId);\n }\n\n async removeSuperAdmin(inboxId: string) {\n return this.#group.removeSuperAdmin(inboxId);\n }\n\n async publishMessages() {\n return this.#group.publishMessages();\n }\n\n sendOptimistic(encodedContent: EncodedContent) {\n return this.#group.sendOptimistic(encodedContent);\n }\n\n async send(encodedContent: EncodedContent) {\n return this.#group.send(encodedContent);\n }\n\n messages(options?: SafeListMessagesOptions) {\n return this.#group.findMessages(\n options ? fromSafeListMessagesOptions(options) : undefined,\n );\n }\n\n get consentState() {\n return this.#group.consentState();\n }\n\n updateConsentState(state: ConsentState) {\n this.#group.updateConsentState(state);\n }\n\n dmPeerInboxId() {\n return this.#group.dmPeerInboxId();\n }\n}\n","import type { Conversation, Conversations } 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: Conversations;\n\n constructor(client: WorkerClient, conversations: Conversations) {\n this.#client = client;\n this.#conversations = conversations;\n }\n\n async sync() {\n return this.#conversations.sync();\n }\n\n getConversationById(id: string) {\n try {\n const group = this.#conversations.findGroupById(id);\n // findGroupById will throw if group is not found\n return new WorkerConversation(this.#client, group);\n } catch {\n return undefined;\n }\n }\n\n getMessageById(id: string) {\n try {\n // findMessageById will throw if message is not found\n const message = this.#conversations.findMessageById(id);\n return toSafeMessage(message);\n } catch {\n return undefined;\n }\n }\n\n getDmByInboxId(inboxId: string) {\n try {\n const group = this.#conversations.findDmByTargetInboxId(inboxId);\n return new WorkerConversation(this.#client, group);\n } catch {\n return undefined;\n }\n }\n\n async list(options?: SafeListConversationsOptions) {\n const groups = (await this.#conversations.list(\n options ? fromSafeListConversationsOptions(options) : undefined,\n )) as Conversation[];\n return groups.map((group) => new WorkerConversation(this.#client, group));\n }\n\n async listGroups(\n options?: Omit<SafeListConversationsOptions, \"conversation_type\">,\n ) {\n const groups = (await this.#conversations.listGroups(\n options ? fromSafeListConversationsOptions(options) : undefined,\n )) as Conversation[];\n return groups.map((group) => new WorkerConversation(this.#client, group));\n }\n\n async listDms(\n options?: Omit<SafeListConversationsOptions, \"conversation_type\">,\n ) {\n const groups = (await this.#conversations.listDms(\n options ? fromSafeListConversationsOptions(options) : undefined,\n )) as Conversation[];\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.createGroup(\n accountAddresses,\n options ? fromSafeCreateGroupOptions(options) : undefined,\n );\n return new WorkerConversation(this.#client, group);\n }\n\n async newDm(accountAddress: string) {\n const group = await this.#conversations.createDm(accountAddress);\n return new WorkerConversation(this.#client, group);\n }\n}\n","import {\n type Client,\n type ConsentEntityType,\n type SignatureRequestType,\n} from \"@xmtp/wasm-bindings\";\nimport type { ClientOptions } from \"@/types\";\nimport { fromSafeConsent, type SafeConsent } from \"@/utils/conversions\";\nimport { createClient } from \"@/utils/createClient\";\nimport { WorkerConversations } from \"@/WorkerConversations\";\n\nexport class WorkerClient {\n #client: Client;\n\n #conversations: WorkerConversations;\n\n #accountAddress: string;\n\n constructor(client: Client) {\n this.#client = client;\n this.#accountAddress = client.accountAddress;\n this.#conversations = new WorkerConversations(this, client.conversations());\n }\n\n static async create(\n accountAddress: string,\n encryptionKey: Uint8Array,\n options?: Omit<ClientOptions, \"codecs\">,\n ) {\n const client = await createClient(accountAddress, encryptionKey, options);\n return new WorkerClient(client);\n }\n\n get accountAddress() {\n return this.#accountAddress;\n }\n\n get inboxId() {\n return this.#client.inboxId;\n }\n\n get installationId() {\n return this.#client.installationId;\n }\n\n get 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: SignatureRequestType, bytes: Uint8Array) {\n return this.#client.addSignature(type, bytes);\n }\n\n async addScwSignature(\n type: SignatureRequestType,\n bytes: Uint8Array,\n chainId: bigint,\n blockNumber?: bigint,\n ) {\n return this.#client.addScwSignature(type, bytes, chainId, blockNumber);\n }\n\n async applySignatures() {\n return this.#client.applySignatureRequests();\n }\n\n async canMessage(accountAddresses: string[]) {\n return this.#client.canMessage(accountAddresses) as Promise<\n Map<string, boolean>\n >;\n }\n\n async registerIdentity() {\n return this.#client.registerIdentity();\n }\n\n async findInboxIdByAddress(address: string) {\n return this.#client.findInboxIdByAddress(address);\n }\n\n async inboxState(refreshFromNetwork: boolean) {\n return this.#client.inboxState(refreshFromNetwork);\n }\n\n async getLatestInboxState(inboxId: string) {\n return this.#client.getLatestInboxState(inboxId);\n }\n\n async setConsentStates(records: SafeConsent[]) {\n return this.#client.setConsentStates(records.map(fromSafeConsent));\n }\n\n async getConsentState(entityType: ConsentEntityType, entity: string) {\n return this.#client.getConsentState(entityType, entity);\n }\n\n get conversations() {\n return this.#conversations;\n }\n}\n","import init, {\n createClient as createWasmClient,\n generateInboxId,\n getInboxIdForAddress,\n LogOptions,\n} from \"@xmtp/wasm-bindings\";\nimport { ApiUrls } from \"@/constants\";\nimport type { ClientOptions } from \"@/types\";\n\nexport const createClient = async (\n accountAddress: string,\n encryptionKey: Uint8Array,\n options?: Omit<ClientOptions, \"codecs\">,\n) => {\n // initialize WASM module\n await init();\n\n const host = options?.apiUrl ?? ApiUrls[options?.env ?? \"dev\"];\n // TODO: add db path validation\n // - must end with .db3\n // - must not contain invalid characters\n // - must not start with a dot\n const dbPath =\n options?.dbPath ?? `xmtp-${options?.env ?? \"dev\"}-${accountAddress}.db3`;\n\n const inboxId =\n (await getInboxIdForAddress(host, accountAddress)) ||\n generateInboxId(accountAddress);\n\n const isLogging =\n options &&\n (options.loggingLevel !== undefined ||\n options.structuredLogging ||\n options.performanceLogging);\n\n return createWasmClient(\n host,\n inboxId,\n accountAddress,\n dbPath,\n encryptionKey,\n undefined,\n isLogging\n ? new LogOptions(\n options.structuredLogging ?? false,\n options.performanceLogging ?? false,\n options.loggingLevel,\n )\n : undefined,\n );\n};\n","import type {\n ClientEventsActions,\n ClientEventsClientMessageData,\n ClientEventsErrorData,\n ClientEventsWorkerPostMessageData,\n} from \"@/types\";\nimport {\n fromEncodedContent,\n fromSafeEncodedContent,\n toSafeConversation,\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(\n data.address,\n data.encryptionKey,\n data.options,\n );\n enableLogging =\n data.options?.loggingLevel !== undefined &&\n data.options.loggingLevel !== \"off\";\n postMessage({\n id,\n action,\n result: {\n inboxId: 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 \"getRevokeInstallationsSignatureText\": {\n const result = await client.getRevokeInstallationsSignatureText();\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 \"addScwSignature\":\n await client.addScwSignature(\n data.type,\n data.bytes,\n data.chainId,\n data.blockNumber,\n );\n postMessage({\n id,\n action,\n result: undefined,\n });\n break;\n case \"applySignatures\":\n await client.applySignatures();\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 \"getGroups\": {\n const conversations = await client.conversations.listGroups(\n data.options,\n );\n postMessage({\n id,\n action,\n result: conversations.map((conversation) =>\n toSafeConversation(conversation),\n ),\n });\n break;\n }\n case \"getDms\": {\n const conversations = await client.conversations.listDms(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 \"newDm\": {\n const conversation = await client.conversations.newDm(\n data.accountAddress,\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 case \"getDmByInboxId\": {\n const conversation = client.conversations.getDmByInboxId(data.inboxId);\n postMessage({\n id,\n action,\n result: conversation ? toSafeConversation(conversation) : undefined,\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 result = await group.members();\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 \"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 case \"getDmPeerInboxId\": {\n const group = client.conversations.getConversationById(data.id);\n if (group) {\n const result = group.dmPeerInboxId();\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","fromEntries","convoId","deliveryStatus","id","kind","senderInboxId","sentAtNs","fromSafeListConversationsOptions","options","ListConversationsOptions","allowedStates","conversationType","createdAfterNs","createdBeforeNs","limit","toSafeConversation","conversation","name","imageUrl","description","pinnedFrameUrl","permissions","policyType","policySet","addAdminPolicy","addMemberPolicy","removeAdminPolicy","removeMemberPolicy","updateGroupDescriptionPolicy","updateGroupImageUrlSquarePolicy","updateGroupNamePolicy","updateGroupPinnedFrameUrlPolicy","isActive","addedByInboxId","metadata","admins","superAdmins","createdAtNs","toSafeInstallation","installation","clientTimestampNs","toSafeInboxState","inboxState","accountAddresses","inboxId","installations","map","recoveryAddress","fromSafeConsent","consent","Consent","entityType","state","entity","ApiUrls","local","dev","production","WorkerConversation","client","group","constructor","this","groupName","updateName","updateGroupName","groupImageUrlSquare","updateImageUrl","updateGroupImageUrlSquare","groupDescription","updateDescription","updateGroupDescription","groupPinnedFrameUrl","updatePinnedFrameUrl","updateGroupPinnedFrameUrl","groupMetadata","creatorInboxId","members","listMembers","member","consentState","installationIds","permissionLevel","toSafeGroupMember","adminList","superAdminList","groupPermissions","isAdmin","isSuperAdmin","sync","addMembers","addMembersByInboxId","inboxIds","removeMembers","removeMembersByInboxId","addAdmin","removeAdmin","addSuperAdmin","removeSuperAdmin","publishMessages","sendOptimistic","encodedContent","send","messages","findMessages","ListMessagesOptions","sentBeforeNs","sentAfterNs","direction","fromSafeListMessagesOptions","undefined","updateConsentState","dmPeerInboxId","WorkerConversations","conversations","getConversationById","findGroupById","getMessageById","findMessageById","getDmByInboxId","findDmByTargetInboxId","list","listGroups","listDms","newGroup","createGroup","CreateGroupOptions","imageUrlSquare","fromSafeCreateGroupOptions","newDm","accountAddress","createDm","WorkerClient","create","encryptionKey","async","init","host","apiUrl","env","dbPath","getInboxIdForAddress","generateInboxId","isLogging","loggingLevel","structuredLogging","performanceLogging","createWasmClient","LogOptions","createClient","installationId","isRegistered","getCreateInboxSignatureText","createInboxSignatureText","getAddWalletSignatureText","addWalletSignatureText","getRevokeWalletSignatureText","revokeWalletSignatureText","getRevokeInstallationsSignatureText","revokeInstallationsSignatureText","addSignature","bytes","addScwSignature","chainId","blockNumber","applySignatures","applySignatureRequests","canMessage","registerIdentity","findInboxIdByAddress","address","refreshFromNetwork","getLatestInboxState","setConsentStates","records","getConsentState","enableLogging","postMessage","data","self","postMessageError","onmessage","event","action","console","log","result","error","e"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xmtp/browser-sdk",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "XMTP client SDK for browsers written in TypeScript",
5
5
  "keywords": [
6
6
  "xmtp",
@@ -65,7 +65,7 @@
65
65
  "@xmtp/content-type-primitives": "^1.0.1",
66
66
  "@xmtp/content-type-text": "^1.0.0",
67
67
  "@xmtp/proto": "^3.70.0",
68
- "@xmtp/wasm-bindings": "^0.0.3",
68
+ "@xmtp/wasm-bindings": "^0.0.4",
69
69
  "uuid": "^10.0.0"
70
70
  },
71
71
  "devDependencies": {
package/src/Client.ts CHANGED
@@ -37,13 +37,23 @@ export class Client extends ClientWorkerClass {
37
37
 
38
38
  #codecs: Map<string, ContentCodec>;
39
39
 
40
- constructor(address: string, options?: ClientOptions) {
40
+ #encryptionKey: Uint8Array;
41
+
42
+ constructor(
43
+ address: string,
44
+ encryptionKey: Uint8Array,
45
+ options?: ClientOptions,
46
+ ) {
41
47
  const worker = new Worker(new URL("./workers/client", import.meta.url), {
42
48
  type: "module",
43
49
  });
44
- super(worker, options?.enableLogging ?? false);
50
+ super(
51
+ worker,
52
+ options?.loggingLevel !== undefined && options.loggingLevel !== "off",
53
+ );
45
54
  this.address = address;
46
55
  this.options = options;
56
+ this.#encryptionKey = encryptionKey;
47
57
  this.#conversations = new Conversations(this);
48
58
  const codecs = [
49
59
  new GroupUpdatedCodec(),
@@ -58,6 +68,7 @@ export class Client extends ClientWorkerClass {
58
68
  async init() {
59
69
  const result = await this.sendMessage("init", {
60
70
  address: this.address,
71
+ encryptionKey: this.#encryptionKey,
61
72
  options: this.options,
62
73
  });
63
74
  this.#inboxId = result.inboxId;
@@ -65,8 +76,12 @@ export class Client extends ClientWorkerClass {
65
76
  this.#isReady = true;
66
77
  }
67
78
 
68
- static async create(address: string, options?: ClientOptions) {
69
- const client = new Client(address, options);
79
+ static async create(
80
+ address: string,
81
+ encryptionKey: Uint8Array,
82
+ options?: ClientOptions,
83
+ ) {
84
+ const client = new Client(address, encryptionKey, options);
70
85
  await client.init();
71
86
  return client;
72
87
  }
@@ -103,6 +118,20 @@ export class Client extends ClientWorkerClass {
103
118
  return this.sendMessage("addSignature", { type, bytes });
104
119
  }
105
120
 
121
+ async addScwSignature(
122
+ type: SignatureRequestType,
123
+ bytes: Uint8Array,
124
+ chainId: bigint,
125
+ blockNumber?: bigint,
126
+ ) {
127
+ return this.sendMessage("addScwSignature", {
128
+ type,
129
+ bytes,
130
+ chainId,
131
+ blockNumber,
132
+ });
133
+ }
134
+
106
135
  async applySignatures() {
107
136
  return this.sendMessage("applySignatures", undefined);
108
137
  }
@@ -23,9 +23,10 @@ export class WorkerClient {
23
23
 
24
24
  static async create(
25
25
  accountAddress: string,
26
+ encryptionKey: Uint8Array,
26
27
  options?: Omit<ClientOptions, "codecs">,
27
28
  ) {
28
- const client = await createClient(accountAddress, options);
29
+ const client = await createClient(accountAddress, encryptionKey, options);
29
30
  return new WorkerClient(client);
30
31
  }
31
32
 
@@ -84,6 +85,15 @@ export class WorkerClient {
84
85
  return this.#client.addSignature(type, bytes);
85
86
  }
86
87
 
88
+ async addScwSignature(
89
+ type: SignatureRequestType,
90
+ bytes: Uint8Array,
91
+ chainId: bigint,
92
+ blockNumber?: bigint,
93
+ ) {
94
+ return this.#client.addScwSignature(type, bytes, chainId, blockNumber);
95
+ }
96
+
87
97
  async applySignatures() {
88
98
  return this.#client.applySignatureRequests();
89
99
  }
@@ -2,12 +2,12 @@ import type {
2
2
  ConsentState,
3
3
  Conversation,
4
4
  EncodedContent,
5
+ GroupMember,
5
6
  } from "@xmtp/wasm-bindings";
6
7
  import {
7
8
  fromSafeListMessagesOptions,
8
9
  toSafeGroupMember,
9
10
  type SafeListMessagesOptions,
10
- type WasmGroupMember,
11
11
  } from "@/utils/conversions";
12
12
  import type { WorkerClient } from "@/WorkerClient";
13
13
 
@@ -73,13 +73,13 @@ export class WorkerConversation {
73
73
  get metadata() {
74
74
  const metadata = this.#group.groupMetadata();
75
75
  return {
76
- creatorInboxId: metadata.creator_inbox_id(),
77
- conversationType: metadata.conversation_type(),
76
+ creatorInboxId: metadata.creatorInboxId(),
77
+ conversationType: metadata.conversationType(),
78
78
  };
79
79
  }
80
80
 
81
81
  async members() {
82
- const members = (await this.#group.listMembers()) as WasmGroupMember[];
82
+ const members = (await this.#group.listMembers()) as GroupMember[];
83
83
  return members.map((member) => toSafeGroupMember(member));
84
84
  }
85
85
 
package/src/index.ts CHANGED
@@ -1,9 +1,36 @@
1
1
  export { Client } from "./Client";
2
2
  export { Conversations } from "./Conversations";
3
3
  export { Conversation } from "./Conversation";
4
- export * from "./DecodedMessage";
4
+ export type { MessageDeliveryStatus, MessageKind } from "./DecodedMessage";
5
+ export { DecodedMessage } from "./DecodedMessage";
5
6
  export { Utils } from "./Utils";
6
7
  export { ApiUrls } from "./constants";
7
8
  export type * from "./types";
8
9
  export * from "./utils/conversions";
9
- export type * from "@xmtp/wasm-bindings";
10
+ export {
11
+ ConsentEntityType,
12
+ ConsentState,
13
+ ConversationType,
14
+ CreateGroupOptions,
15
+ DeliveryStatus,
16
+ GroupMembershipState,
17
+ EncodedContent,
18
+ GroupMember,
19
+ GroupMetadata,
20
+ GroupPermissions,
21
+ GroupMessageKind,
22
+ GroupPermissionsOptions,
23
+ InboxState,
24
+ Installation,
25
+ ListConversationsOptions,
26
+ ListMessagesOptions,
27
+ Message,
28
+ PermissionLevel,
29
+ PermissionPolicy,
30
+ PermissionPolicySet,
31
+ PermissionUpdateType,
32
+ SignatureRequestType,
33
+ SortDirection,
34
+ Consent,
35
+ ContentTypeId,
36
+ } from "@xmtp/wasm-bindings";
@@ -38,6 +38,7 @@ export type ClientEvents =
38
38
  };
39
39
  data: {
40
40
  address: string;
41
+ encryptionKey: Uint8Array;
41
42
  options?: ClientOptions;
42
43
  };
43
44
  }
@@ -78,6 +79,17 @@ export type ClientEvents =
78
79
  bytes: Uint8Array;
79
80
  };
80
81
  }
82
+ | {
83
+ action: "addScwSignature";
84
+ id: string;
85
+ result: undefined;
86
+ data: {
87
+ type: SignatureRequestType;
88
+ bytes: Uint8Array;
89
+ chainId: bigint;
90
+ blockNumber?: bigint;
91
+ };
92
+ }
81
93
  | {
82
94
  action: "applySignatures";
83
95
  id: string;
@@ -18,16 +18,6 @@ export type NetworkOptions = {
18
18
  apiUrl?: string;
19
19
  };
20
20
 
21
- /**
22
- * Encryption options
23
- */
24
- export type EncryptionOptions = {
25
- /**
26
- * Encryption key to use for the local DB
27
- */
28
- encryptionKey?: Uint8Array;
29
- };
30
-
31
21
  /**
32
22
  * Storage options
33
23
  */
@@ -47,13 +37,20 @@ export type ContentOptions = {
47
37
 
48
38
  export type OtherOptions = {
49
39
  /**
50
- * Enable logging of events between the client and worker
40
+ * Enable structured JSON logging
41
+ */
42
+ structuredLogging?: boolean;
43
+ /**
44
+ * Enable performance metrics
45
+ */
46
+ performanceLogging?: boolean;
47
+ /**
48
+ * Logging level
51
49
  */
52
- enableLogging?: boolean;
50
+ loggingLevel?: "off" | "error" | "warn" | "info" | "debug" | "trace";
53
51
  };
54
52
 
55
53
  export type ClientOptions = NetworkOptions &
56
- EncryptionOptions &
57
54
  StorageOptions &
58
55
  ContentOptions &
59
56
  OtherOptions;
@@ -341,36 +341,12 @@ export type SafeGroupMember = {
341
341
  permissionLevel: PermissionLevel;
342
342
  };
343
343
 
344
- export class WasmGroupMember {
345
- account_addresses: string[];
346
- consent_state: ConsentState;
347
- inbox_id: string;
348
- installation_ids: string[];
349
- permission_level: PermissionLevel;
350
-
351
- constructor(
352
- inbox_id: string,
353
- account_addresses: string[],
354
- installation_ids: string[],
355
- permission_level: PermissionLevel,
356
- consent_state: ConsentState,
357
- ) {
358
- this.inbox_id = inbox_id;
359
- this.account_addresses = account_addresses;
360
- this.installation_ids = installation_ids;
361
- this.permission_level = permission_level;
362
- this.consent_state = consent_state;
363
- }
364
- }
365
-
366
- export const toSafeGroupMember = (
367
- member: WasmGroupMember,
368
- ): SafeGroupMember => ({
369
- accountAddresses: member.account_addresses,
370
- consentState: member.consent_state,
371
- inboxId: member.inbox_id,
372
- installationIds: member.installation_ids,
373
- permissionLevel: member.permission_level,
344
+ export const toSafeGroupMember = (member: GroupMember): SafeGroupMember => ({
345
+ accountAddresses: member.accountAddresses,
346
+ consentState: member.consentState,
347
+ inboxId: member.inboxId,
348
+ installationIds: member.installationIds,
349
+ permissionLevel: member.permissionLevel,
374
350
  });
375
351
 
376
352
  export const fromSafeGroupMember = (member: SafeGroupMember): GroupMember =>
@@ -2,12 +2,14 @@ import init, {
2
2
  createClient as createWasmClient,
3
3
  generateInboxId,
4
4
  getInboxIdForAddress,
5
+ LogOptions,
5
6
  } from "@xmtp/wasm-bindings";
6
7
  import { ApiUrls } from "@/constants";
7
8
  import type { ClientOptions } from "@/types";
8
9
 
9
10
  export const createClient = async (
10
11
  accountAddress: string,
12
+ encryptionKey: Uint8Array,
11
13
  options?: Omit<ClientOptions, "codecs">,
12
14
  ) => {
13
15
  // initialize WASM module
@@ -25,11 +27,25 @@ export const createClient = async (
25
27
  (await getInboxIdForAddress(host, accountAddress)) ||
26
28
  generateInboxId(accountAddress);
27
29
 
30
+ const isLogging =
31
+ options &&
32
+ (options.loggingLevel !== undefined ||
33
+ options.structuredLogging ||
34
+ options.performanceLogging);
35
+
28
36
  return createWasmClient(
29
37
  host,
30
38
  inboxId,
31
39
  accountAddress,
32
40
  dbPath,
33
- options?.encryptionKey,
41
+ encryptionKey,
42
+ undefined,
43
+ isLogging
44
+ ? new LogOptions(
45
+ options.structuredLogging ?? false,
46
+ options.performanceLogging ?? false,
47
+ options.loggingLevel,
48
+ )
49
+ : undefined,
34
50
  );
35
51
  };
@@ -56,8 +56,14 @@ self.onmessage = async (event: MessageEvent<ClientEventsClientMessageData>) => {
56
56
  * Client actions
57
57
  */
58
58
  case "init":
59
- client = await WorkerClient.create(data.address, data.options);
60
- enableLogging = data.options?.enableLogging ?? false;
59
+ client = await WorkerClient.create(
60
+ data.address,
61
+ data.encryptionKey,
62
+ data.options,
63
+ );
64
+ enableLogging =
65
+ data.options?.loggingLevel !== undefined &&
66
+ data.options.loggingLevel !== "off";
61
67
  postMessage({
62
68
  id,
63
69
  action,
@@ -115,6 +121,19 @@ self.onmessage = async (event: MessageEvent<ClientEventsClientMessageData>) => {
115
121
  result: undefined,
116
122
  });
117
123
  break;
124
+ case "addScwSignature":
125
+ await client.addScwSignature(
126
+ data.type,
127
+ data.bytes,
128
+ data.chainId,
129
+ data.blockNumber,
130
+ );
131
+ postMessage({
132
+ id,
133
+ action,
134
+ result: undefined,
135
+ });
136
+ break;
118
137
  case "applySignatures":
119
138
  await client.applySignatures();
120
139
  postMessage({