@xmtp/browser-sdk 5.2.0 → 6.0.0
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 +587 -670
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/workers/client.js +1 -1
- package/dist/workers/client.js.map +1 -1
- package/dist/workers/opfs.js +2 -0
- package/dist/workers/opfs.js.map +1 -0
- package/package.json +12 -16
- package/src/Client.ts +92 -219
- package/src/CodecRegistry.ts +27 -0
- package/src/Conversation.ts +275 -104
- package/src/Conversations.ts +188 -99
- package/src/DebugInformation.ts +10 -27
- package/src/DecodedMessage.ts +155 -58
- package/src/Dm.ts +25 -9
- package/src/Group.ts +69 -26
- package/src/Opfs.ts +63 -0
- package/src/Preferences.ts +68 -52
- package/src/WorkerClient.ts +5 -5
- package/src/WorkerConversation.ts +119 -44
- package/src/WorkerConversations.ts +35 -74
- package/src/WorkerDebugInformation.ts +1 -12
- package/src/WorkerPreferences.ts +6 -14
- package/src/index.ts +53 -24
- package/src/types/actions/client.ts +6 -17
- package/src/types/actions/conversation.ts +160 -31
- package/src/types/actions/conversations.ts +21 -24
- package/src/types/actions/debugInformation.ts +3 -11
- package/src/types/actions/dm.ts +1 -1
- package/src/types/actions/group.ts +25 -0
- package/src/types/actions/opfs.ts +66 -0
- package/src/types/actions/preferences.ts +6 -13
- package/src/types/actions/streams.ts +8 -8
- package/src/types/actions.ts +11 -9
- package/src/types/options.ts +47 -6
- package/src/{ClientWorkerClass.ts → utils/WorkerBridge.ts} +35 -45
- package/src/utils/contentTypes.ts +77 -0
- package/src/utils/conversions.ts +18 -588
- package/src/utils/createClient.ts +16 -11
- package/src/utils/errors.ts +13 -19
- package/src/utils/inboxId.ts +46 -0
- package/src/utils/inboxState.ts +23 -0
- package/src/utils/installations.ts +95 -0
- package/src/utils/metadata.ts +15 -0
- package/src/utils/signer.ts +4 -4
- package/src/utils/uuid.ts +8 -0
- package/src/workers/client.ts +191 -132
- package/src/workers/opfs.ts +127 -0
- package/dist/workers/utils.js +0 -2
- package/dist/workers/utils.js.map +0 -1
- package/src/Utils.ts +0 -143
- package/src/UtilsWorkerClass.ts +0 -121
- package/src/types/actions/utils.ts +0 -69
- package/src/workers/utils.ts +0 -155
package/src/workers/client.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import init, {
|
|
2
|
+
LogLevel,
|
|
2
3
|
type Consent,
|
|
3
4
|
type Conversation,
|
|
4
5
|
type Message,
|
|
5
6
|
type SignatureRequestHandle,
|
|
6
7
|
type StreamCloser,
|
|
7
|
-
type
|
|
8
|
+
type UserPreferenceUpdate,
|
|
8
9
|
} from "@xmtp/wasm-bindings";
|
|
9
10
|
import type {
|
|
10
11
|
ActionErrorData,
|
|
@@ -18,21 +19,7 @@ import type {
|
|
|
18
19
|
StreamActionErrorData,
|
|
19
20
|
StreamActionName,
|
|
20
21
|
} from "@/types/actions/streams";
|
|
21
|
-
import {
|
|
22
|
-
fromEncodedContent,
|
|
23
|
-
fromSafeEncodedContent,
|
|
24
|
-
fromSafeSendMessageOpts,
|
|
25
|
-
toSafeApiStats,
|
|
26
|
-
toSafeConsent,
|
|
27
|
-
toSafeConversation,
|
|
28
|
-
toSafeConversationDebugInfo,
|
|
29
|
-
toSafeHmacKey,
|
|
30
|
-
toSafeIdentityStats,
|
|
31
|
-
toSafeInboxState,
|
|
32
|
-
toSafeKeyPackageStatus,
|
|
33
|
-
toSafeMessage,
|
|
34
|
-
toSafeMessageDisappearingSettings,
|
|
35
|
-
} from "@/utils/conversions";
|
|
22
|
+
import { toSafeConversation } from "@/utils/conversions";
|
|
36
23
|
import {
|
|
37
24
|
ClientNotInitializedError,
|
|
38
25
|
GroupNotFoundError,
|
|
@@ -97,14 +84,16 @@ self.onmessage = async (
|
|
|
97
84
|
maybeClient = await WorkerClient.create(data.identifier, data.options);
|
|
98
85
|
enableLogging =
|
|
99
86
|
data.options?.loggingLevel !== undefined &&
|
|
100
|
-
data.options.loggingLevel !==
|
|
87
|
+
data.options.loggingLevel !== LogLevel.Off;
|
|
101
88
|
postMessage({
|
|
102
89
|
id,
|
|
103
90
|
action,
|
|
104
91
|
result: {
|
|
92
|
+
appVersion: maybeClient.appVersion,
|
|
105
93
|
inboxId: maybeClient.inboxId,
|
|
106
94
|
installationId: maybeClient.installationId,
|
|
107
95
|
installationIdBytes: maybeClient.installationIdBytes,
|
|
96
|
+
libxmtpVersion: maybeClient.libxmtpVersion,
|
|
108
97
|
},
|
|
109
98
|
});
|
|
110
99
|
return;
|
|
@@ -309,8 +298,8 @@ self.onmessage = async (
|
|
|
309
298
|
postMessage({ id, action, result });
|
|
310
299
|
break;
|
|
311
300
|
}
|
|
312
|
-
case "client.
|
|
313
|
-
const result = await client.
|
|
301
|
+
case "client.getInboxIdByIdentifier": {
|
|
302
|
+
const result = await client.getInboxIdByIdentifier(data.identifier);
|
|
314
303
|
postMessage({ id, action, result });
|
|
315
304
|
break;
|
|
316
305
|
}
|
|
@@ -336,46 +325,27 @@ self.onmessage = async (
|
|
|
336
325
|
postMessage({ id, action, result });
|
|
337
326
|
break;
|
|
338
327
|
}
|
|
339
|
-
case "client.
|
|
340
|
-
const result = await client.
|
|
328
|
+
case "client.fetchKeyPackageStatuses": {
|
|
329
|
+
const result = await client.fetchKeyPackageStatuses(
|
|
341
330
|
data.installationIds,
|
|
342
331
|
);
|
|
343
|
-
const safeResult = new Map(
|
|
344
|
-
Array.from(result.entries()).map(([installationId, status]) => [
|
|
345
|
-
installationId,
|
|
346
|
-
toSafeKeyPackageStatus(status),
|
|
347
|
-
]),
|
|
348
|
-
);
|
|
349
332
|
postMessage({
|
|
350
333
|
id,
|
|
351
334
|
action,
|
|
352
|
-
result
|
|
335
|
+
result,
|
|
353
336
|
});
|
|
354
337
|
break;
|
|
355
338
|
}
|
|
356
|
-
case "client.libxmtpVersion": {
|
|
357
|
-
const result = client.libxmtpVersion;
|
|
358
|
-
postMessage({ id, action, result });
|
|
359
|
-
break;
|
|
360
|
-
}
|
|
361
|
-
case "client.appVersion": {
|
|
362
|
-
const result = client.appVersion;
|
|
363
|
-
postMessage({ id, action, result });
|
|
364
|
-
break;
|
|
365
|
-
}
|
|
366
339
|
/**
|
|
367
340
|
* Debug information actions
|
|
368
341
|
*/
|
|
369
342
|
case "debugInformation.apiStatistics": {
|
|
370
|
-
const
|
|
371
|
-
const result = toSafeApiStats(apiStats);
|
|
343
|
+
const result = client.debugInformation.apiStatistics();
|
|
372
344
|
postMessage({ id, action, result });
|
|
373
345
|
break;
|
|
374
346
|
}
|
|
375
347
|
case "debugInformation.apiIdentityStatistics": {
|
|
376
|
-
const
|
|
377
|
-
client.debugInformation.apiIdentityStatistics();
|
|
378
|
-
const result = toSafeIdentityStats(apiIdentityStats);
|
|
348
|
+
const result = client.debugInformation.apiIdentityStatistics();
|
|
379
349
|
postMessage({ id, action, result });
|
|
380
350
|
break;
|
|
381
351
|
}
|
|
@@ -389,38 +359,21 @@ self.onmessage = async (
|
|
|
389
359
|
postMessage({ id, action, result: undefined });
|
|
390
360
|
break;
|
|
391
361
|
}
|
|
392
|
-
case "debugInformation.uploadDebugArchive": {
|
|
393
|
-
const result = await client.debugInformation.uploadDebugArchive(
|
|
394
|
-
data.serverUrl,
|
|
395
|
-
);
|
|
396
|
-
postMessage({ id, action, result });
|
|
397
|
-
break;
|
|
398
|
-
}
|
|
399
362
|
/**
|
|
400
363
|
* Preferences actions
|
|
401
364
|
*/
|
|
402
365
|
case "preferences.inboxState": {
|
|
403
|
-
const
|
|
366
|
+
const result = await client.preferences.inboxState(
|
|
404
367
|
data.refreshFromNetwork,
|
|
405
368
|
);
|
|
406
|
-
const result = toSafeInboxState(inboxState);
|
|
407
369
|
postMessage({ id, action, result });
|
|
408
370
|
break;
|
|
409
371
|
}
|
|
410
|
-
case "preferences.
|
|
411
|
-
const
|
|
372
|
+
case "preferences.getInboxStates": {
|
|
373
|
+
const result = await client.preferences.getInboxStates(
|
|
412
374
|
data.inboxIds,
|
|
413
375
|
data.refreshFromNetwork,
|
|
414
376
|
);
|
|
415
|
-
const result = inboxStates.map(toSafeInboxState);
|
|
416
|
-
postMessage({ id, action, result });
|
|
417
|
-
break;
|
|
418
|
-
}
|
|
419
|
-
case "preferences.getLatestInboxState": {
|
|
420
|
-
const inboxState = await client.preferences.getLatestInboxState(
|
|
421
|
-
data.inboxId,
|
|
422
|
-
);
|
|
423
|
-
const result = toSafeInboxState(inboxState);
|
|
424
377
|
postMessage({ id, action, result });
|
|
425
378
|
break;
|
|
426
379
|
}
|
|
@@ -457,7 +410,7 @@ self.onmessage = async (
|
|
|
457
410
|
postStreamMessage({
|
|
458
411
|
action: "stream.consent",
|
|
459
412
|
streamId: data.streamId,
|
|
460
|
-
result: value
|
|
413
|
+
result: value ?? [],
|
|
461
414
|
});
|
|
462
415
|
}
|
|
463
416
|
};
|
|
@@ -483,7 +436,7 @@ self.onmessage = async (
|
|
|
483
436
|
case "preferences.streamPreferences": {
|
|
484
437
|
const streamCallback = (
|
|
485
438
|
error: Error | null,
|
|
486
|
-
value:
|
|
439
|
+
value: UserPreferenceUpdate[] | undefined,
|
|
487
440
|
) => {
|
|
488
441
|
if (error) {
|
|
489
442
|
postStreamMessageError({
|
|
@@ -585,12 +538,19 @@ self.onmessage = async (
|
|
|
585
538
|
streamId: data.streamId,
|
|
586
539
|
error,
|
|
587
540
|
});
|
|
588
|
-
} else {
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
541
|
+
} else if (value) {
|
|
542
|
+
void client.conversations
|
|
543
|
+
.getMessageById(value.id)
|
|
544
|
+
.then((enrichedMessage) => {
|
|
545
|
+
// guard against any edge cases where the message is not found
|
|
546
|
+
if (enrichedMessage) {
|
|
547
|
+
postStreamMessage({
|
|
548
|
+
action: "stream.message",
|
|
549
|
+
streamId: data.streamId,
|
|
550
|
+
result: enrichedMessage,
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
});
|
|
594
554
|
}
|
|
595
555
|
};
|
|
596
556
|
const streamCloser = client.conversations.streamAllMessages(
|
|
@@ -660,25 +620,26 @@ self.onmessage = async (
|
|
|
660
620
|
postMessage({ id, action, result });
|
|
661
621
|
break;
|
|
662
622
|
}
|
|
663
|
-
case "conversations.
|
|
664
|
-
const conversation = client.conversations.
|
|
623
|
+
case "conversations.createGroupOptimistic": {
|
|
624
|
+
const conversation = client.conversations.createGroupOptimistic(
|
|
665
625
|
data.options,
|
|
666
626
|
);
|
|
667
627
|
const result = await toSafeConversation(conversation);
|
|
668
628
|
postMessage({ id, action, result });
|
|
669
629
|
break;
|
|
670
630
|
}
|
|
671
|
-
case "conversations.
|
|
672
|
-
const conversation =
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
631
|
+
case "conversations.createGroupWithIdentifiers": {
|
|
632
|
+
const conversation =
|
|
633
|
+
await client.conversations.createGroupWithIdentifiers(
|
|
634
|
+
data.identifiers,
|
|
635
|
+
data.options,
|
|
636
|
+
);
|
|
676
637
|
const result = await toSafeConversation(conversation);
|
|
677
638
|
postMessage({ id, action, result });
|
|
678
639
|
break;
|
|
679
640
|
}
|
|
680
|
-
case "conversations.
|
|
681
|
-
const conversation = await client.conversations.
|
|
641
|
+
case "conversations.createGroup": {
|
|
642
|
+
const conversation = await client.conversations.createGroup(
|
|
682
643
|
data.inboxIds,
|
|
683
644
|
data.options,
|
|
684
645
|
);
|
|
@@ -686,8 +647,8 @@ self.onmessage = async (
|
|
|
686
647
|
postMessage({ id, action, result });
|
|
687
648
|
break;
|
|
688
649
|
}
|
|
689
|
-
case "conversations.
|
|
690
|
-
const conversation = await client.conversations.
|
|
650
|
+
case "conversations.createDmWithIdentifier": {
|
|
651
|
+
const conversation = await client.conversations.createDmWithIdentifier(
|
|
691
652
|
data.identifier,
|
|
692
653
|
data.options,
|
|
693
654
|
);
|
|
@@ -695,8 +656,8 @@ self.onmessage = async (
|
|
|
695
656
|
postMessage({ id, action, result });
|
|
696
657
|
break;
|
|
697
658
|
}
|
|
698
|
-
case "conversations.
|
|
699
|
-
const conversation = await client.conversations.
|
|
659
|
+
case "conversations.createDm": {
|
|
660
|
+
const conversation = await client.conversations.createDm(
|
|
700
661
|
data.inboxId,
|
|
701
662
|
data.options,
|
|
702
663
|
);
|
|
@@ -723,8 +684,7 @@ self.onmessage = async (
|
|
|
723
684
|
break;
|
|
724
685
|
}
|
|
725
686
|
case "conversations.getMessageById": {
|
|
726
|
-
const
|
|
727
|
-
const result = message ? toSafeMessage(message) : undefined;
|
|
687
|
+
const result = await client.conversations.getMessageById(data.id);
|
|
728
688
|
postMessage({ id, action, result });
|
|
729
689
|
break;
|
|
730
690
|
}
|
|
@@ -736,15 +696,9 @@ self.onmessage = async (
|
|
|
736
696
|
postMessage({ id, action, result });
|
|
737
697
|
break;
|
|
738
698
|
}
|
|
739
|
-
case "conversations.
|
|
740
|
-
const hmacKeys = client.conversations.
|
|
741
|
-
|
|
742
|
-
Array.from(hmacKeys.entries()).map(([groupId, hmacKeys]) => [
|
|
743
|
-
groupId,
|
|
744
|
-
hmacKeys.map(toSafeHmacKey),
|
|
745
|
-
]),
|
|
746
|
-
);
|
|
747
|
-
postMessage({ id, action, result });
|
|
699
|
+
case "conversations.hmacKeys": {
|
|
700
|
+
const hmacKeys = client.conversations.hmacKeys();
|
|
701
|
+
postMessage({ id, action, result: hmacKeys });
|
|
748
702
|
break;
|
|
749
703
|
}
|
|
750
704
|
/**
|
|
@@ -759,12 +713,9 @@ self.onmessage = async (
|
|
|
759
713
|
}
|
|
760
714
|
case "conversation.lastMessage": {
|
|
761
715
|
const group = getGroup(data.id);
|
|
716
|
+
// lastMessage() now returns enriched DecodedMessage directly
|
|
762
717
|
const result = await group.lastMessage();
|
|
763
|
-
postMessage({
|
|
764
|
-
id,
|
|
765
|
-
action,
|
|
766
|
-
result: result ? toSafeMessage(result) : undefined,
|
|
767
|
-
});
|
|
718
|
+
postMessage({ id, action, result });
|
|
768
719
|
break;
|
|
769
720
|
}
|
|
770
721
|
case "conversation.isActive": {
|
|
@@ -775,7 +726,7 @@ self.onmessage = async (
|
|
|
775
726
|
}
|
|
776
727
|
case "conversation.consentState": {
|
|
777
728
|
const group = getGroup(data.id);
|
|
778
|
-
const result = group.consentState;
|
|
729
|
+
const result = group.consentState();
|
|
779
730
|
postMessage({ id, action, result });
|
|
780
731
|
break;
|
|
781
732
|
}
|
|
@@ -803,21 +754,15 @@ self.onmessage = async (
|
|
|
803
754
|
postMessage({ id, action, result: undefined });
|
|
804
755
|
break;
|
|
805
756
|
}
|
|
806
|
-
case "
|
|
757
|
+
case "group.updateAppData": {
|
|
807
758
|
const group = getGroup(data.id);
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
fromSafeSendMessageOpts(data.sendOptions),
|
|
811
|
-
);
|
|
812
|
-
postMessage({ id, action, result });
|
|
759
|
+
await group.updateAppData(data.appData);
|
|
760
|
+
postMessage({ id, action, result: undefined });
|
|
813
761
|
break;
|
|
814
762
|
}
|
|
815
|
-
case "conversation.
|
|
763
|
+
case "conversation.send": {
|
|
816
764
|
const group = getGroup(data.id);
|
|
817
|
-
const result = group.
|
|
818
|
-
fromEncodedContent(fromSafeEncodedContent(data.content)),
|
|
819
|
-
fromSafeSendMessageOpts(data.sendOptions),
|
|
820
|
-
);
|
|
765
|
+
const result = await group.send(data.content, data.options);
|
|
821
766
|
postMessage({ id, action, result });
|
|
822
767
|
break;
|
|
823
768
|
}
|
|
@@ -830,8 +775,8 @@ self.onmessage = async (
|
|
|
830
775
|
case "conversation.messages": {
|
|
831
776
|
const group = getGroup(data.id);
|
|
832
777
|
const messages = await group.messages(data.options);
|
|
833
|
-
|
|
834
|
-
postMessage({ id, action, result });
|
|
778
|
+
// messages() now returns enriched DecodedMessage[] directly
|
|
779
|
+
postMessage({ id, action, result: messages });
|
|
835
780
|
break;
|
|
836
781
|
}
|
|
837
782
|
case "conversation.countMessages": {
|
|
@@ -848,13 +793,13 @@ self.onmessage = async (
|
|
|
848
793
|
}
|
|
849
794
|
case "group.listAdmins": {
|
|
850
795
|
const group = getGroup(data.id);
|
|
851
|
-
const result = group.
|
|
796
|
+
const result = group.listAdmins();
|
|
852
797
|
postMessage({ id, action, result });
|
|
853
798
|
break;
|
|
854
799
|
}
|
|
855
800
|
case "group.listSuperAdmins": {
|
|
856
801
|
const group = getGroup(data.id);
|
|
857
|
-
const result = group.
|
|
802
|
+
const result = group.listSuperAdmins();
|
|
858
803
|
postMessage({ id, action, result });
|
|
859
804
|
break;
|
|
860
805
|
}
|
|
@@ -941,12 +886,21 @@ self.onmessage = async (
|
|
|
941
886
|
postMessage({ id, action, result });
|
|
942
887
|
break;
|
|
943
888
|
}
|
|
889
|
+
case "group.requestRemoval": {
|
|
890
|
+
const group = getGroup(data.id);
|
|
891
|
+
await group.requestRemoval();
|
|
892
|
+
postMessage({ id, action, result: undefined });
|
|
893
|
+
break;
|
|
894
|
+
}
|
|
895
|
+
case "group.isPendingRemoval": {
|
|
896
|
+
const group = getGroup(data.id);
|
|
897
|
+
const result = group.isPendingRemoval();
|
|
898
|
+
postMessage({ id, action, result });
|
|
899
|
+
break;
|
|
900
|
+
}
|
|
944
901
|
case "conversation.messageDisappearingSettings": {
|
|
945
902
|
const group = getGroup(data.id);
|
|
946
|
-
const
|
|
947
|
-
const result = settings
|
|
948
|
-
? toSafeMessageDisappearingSettings(settings)
|
|
949
|
-
: undefined;
|
|
903
|
+
const result = group.messageDisappearingSettings();
|
|
950
904
|
postMessage({ id, action, result });
|
|
951
905
|
break;
|
|
952
906
|
}
|
|
@@ -980,12 +934,19 @@ self.onmessage = async (
|
|
|
980
934
|
streamId: data.streamId,
|
|
981
935
|
error,
|
|
982
936
|
});
|
|
983
|
-
} else {
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
937
|
+
} else if (value) {
|
|
938
|
+
void client.conversations
|
|
939
|
+
.getMessageById(value.id)
|
|
940
|
+
.then((enrichedMessage) => {
|
|
941
|
+
// guard against any edge cases where the message is not found
|
|
942
|
+
if (enrichedMessage) {
|
|
943
|
+
postStreamMessage({
|
|
944
|
+
action: "stream.message",
|
|
945
|
+
streamId: data.streamId,
|
|
946
|
+
result: enrichedMessage,
|
|
947
|
+
});
|
|
948
|
+
}
|
|
949
|
+
});
|
|
989
950
|
}
|
|
990
951
|
};
|
|
991
952
|
const streamCloser = group.stream(streamCallback, () => {
|
|
@@ -1006,15 +967,15 @@ self.onmessage = async (
|
|
|
1006
967
|
postMessage({ id, action, result });
|
|
1007
968
|
break;
|
|
1008
969
|
}
|
|
1009
|
-
case "conversation.
|
|
970
|
+
case "conversation.hmacKeys": {
|
|
1010
971
|
const group = getGroup(data.id);
|
|
1011
|
-
const result = group.
|
|
972
|
+
const result = group.hmacKeys();
|
|
1012
973
|
postMessage({ id, action, result });
|
|
1013
974
|
break;
|
|
1014
975
|
}
|
|
1015
|
-
case "dm.
|
|
976
|
+
case "dm.duplicateDms": {
|
|
1016
977
|
const group = getGroup(data.id);
|
|
1017
|
-
const dms = await group.
|
|
978
|
+
const dms = await group.duplicateDms();
|
|
1018
979
|
const result = await Promise.all(
|
|
1019
980
|
dms.map((dm) => toSafeConversation(dm)),
|
|
1020
981
|
);
|
|
@@ -1023,8 +984,106 @@ self.onmessage = async (
|
|
|
1023
984
|
}
|
|
1024
985
|
case "conversation.debugInfo": {
|
|
1025
986
|
const group = getGroup(data.id);
|
|
1026
|
-
const
|
|
1027
|
-
|
|
987
|
+
const result = await group.debugInfo();
|
|
988
|
+
postMessage({ id, action, result });
|
|
989
|
+
break;
|
|
990
|
+
}
|
|
991
|
+
case "conversation.lastReadTimes": {
|
|
992
|
+
const group = getGroup(data.id);
|
|
993
|
+
const result = await group.lastReadTimes();
|
|
994
|
+
postMessage({ id, action, result });
|
|
995
|
+
break;
|
|
996
|
+
}
|
|
997
|
+
case "conversation.sendText": {
|
|
998
|
+
const group = getGroup(data.id);
|
|
999
|
+
const result = await group.sendText(data.text, data.isOptimistic);
|
|
1000
|
+
postMessage({ id, action, result });
|
|
1001
|
+
break;
|
|
1002
|
+
}
|
|
1003
|
+
case "conversation.sendMarkdown": {
|
|
1004
|
+
const group = getGroup(data.id);
|
|
1005
|
+
const result = await group.sendMarkdown(
|
|
1006
|
+
data.markdown,
|
|
1007
|
+
data.isOptimistic,
|
|
1008
|
+
);
|
|
1009
|
+
postMessage({ id, action, result });
|
|
1010
|
+
break;
|
|
1011
|
+
}
|
|
1012
|
+
case "conversation.sendReaction": {
|
|
1013
|
+
const group = getGroup(data.id);
|
|
1014
|
+
const result = await group.sendReaction(
|
|
1015
|
+
data.reaction,
|
|
1016
|
+
data.isOptimistic,
|
|
1017
|
+
);
|
|
1018
|
+
postMessage({ id, action, result });
|
|
1019
|
+
break;
|
|
1020
|
+
}
|
|
1021
|
+
case "conversation.sendReadReceipt": {
|
|
1022
|
+
const group = getGroup(data.id);
|
|
1023
|
+
const result = await group.sendReadReceipt(data.isOptimistic);
|
|
1024
|
+
postMessage({ id, action, result });
|
|
1025
|
+
break;
|
|
1026
|
+
}
|
|
1027
|
+
case "conversation.sendReply": {
|
|
1028
|
+
const group = getGroup(data.id);
|
|
1029
|
+
const result = await group.sendReply(data.reply, data.isOptimistic);
|
|
1030
|
+
postMessage({ id, action, result });
|
|
1031
|
+
break;
|
|
1032
|
+
}
|
|
1033
|
+
case "conversation.sendTransactionReference": {
|
|
1034
|
+
const group = getGroup(data.id);
|
|
1035
|
+
const result = await group.sendTransactionReference(
|
|
1036
|
+
data.transactionReference,
|
|
1037
|
+
data.isOptimistic,
|
|
1038
|
+
);
|
|
1039
|
+
postMessage({ id, action, result });
|
|
1040
|
+
break;
|
|
1041
|
+
}
|
|
1042
|
+
case "conversation.sendWalletSendCalls": {
|
|
1043
|
+
const group = getGroup(data.id);
|
|
1044
|
+
const result = await group.sendWalletSendCalls(
|
|
1045
|
+
data.walletSendCalls,
|
|
1046
|
+
data.isOptimistic,
|
|
1047
|
+
);
|
|
1048
|
+
postMessage({ id, action, result });
|
|
1049
|
+
break;
|
|
1050
|
+
}
|
|
1051
|
+
case "conversation.sendActions": {
|
|
1052
|
+
const group = getGroup(data.id);
|
|
1053
|
+
const result = await group.sendActions(data.actions, data.isOptimistic);
|
|
1054
|
+
postMessage({ id, action, result });
|
|
1055
|
+
break;
|
|
1056
|
+
}
|
|
1057
|
+
case "conversation.sendIntent": {
|
|
1058
|
+
const group = getGroup(data.id);
|
|
1059
|
+
const result = await group.sendIntent(data.intent, data.isOptimistic);
|
|
1060
|
+
postMessage({ id, action, result });
|
|
1061
|
+
break;
|
|
1062
|
+
}
|
|
1063
|
+
case "conversation.sendAttachment": {
|
|
1064
|
+
const group = getGroup(data.id);
|
|
1065
|
+
const result = await group.sendAttachment(
|
|
1066
|
+
data.attachment,
|
|
1067
|
+
data.isOptimistic,
|
|
1068
|
+
);
|
|
1069
|
+
postMessage({ id, action, result });
|
|
1070
|
+
break;
|
|
1071
|
+
}
|
|
1072
|
+
case "conversation.sendMultiRemoteAttachment": {
|
|
1073
|
+
const group = getGroup(data.id);
|
|
1074
|
+
const result = await group.sendMultiRemoteAttachment(
|
|
1075
|
+
data.multiRemoteAttachment,
|
|
1076
|
+
data.isOptimistic,
|
|
1077
|
+
);
|
|
1078
|
+
postMessage({ id, action, result });
|
|
1079
|
+
break;
|
|
1080
|
+
}
|
|
1081
|
+
case "conversation.sendRemoteAttachment": {
|
|
1082
|
+
const group = getGroup(data.id);
|
|
1083
|
+
const result = await group.sendRemoteAttachment(
|
|
1084
|
+
data.remoteAttachment,
|
|
1085
|
+
data.isOptimistic,
|
|
1086
|
+
);
|
|
1028
1087
|
postMessage({ id, action, result });
|
|
1029
1088
|
break;
|
|
1030
1089
|
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import init, {
|
|
2
|
+
opfsClearAll,
|
|
3
|
+
opfsDeleteFile,
|
|
4
|
+
opfsExportDb,
|
|
5
|
+
opfsFileCount,
|
|
6
|
+
opfsFileExists,
|
|
7
|
+
opfsImportDb,
|
|
8
|
+
opfsInit,
|
|
9
|
+
opfsListFiles,
|
|
10
|
+
opfsPoolCapacity,
|
|
11
|
+
} from "@xmtp/wasm-bindings";
|
|
12
|
+
import type {
|
|
13
|
+
ActionErrorData,
|
|
14
|
+
ActionName,
|
|
15
|
+
ActionWithoutResult,
|
|
16
|
+
ExtractActionWithoutData,
|
|
17
|
+
} from "@/types/actions";
|
|
18
|
+
import type { OpfsAction } from "@/types/actions/opfs";
|
|
19
|
+
import {
|
|
20
|
+
OpfsInitializationError,
|
|
21
|
+
OpfsNotInitializedError,
|
|
22
|
+
} from "@/utils/errors";
|
|
23
|
+
|
|
24
|
+
let initialized = false;
|
|
25
|
+
let enableLogging = false;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Type-safe postMessage
|
|
29
|
+
*/
|
|
30
|
+
const postMessage = <A extends ActionName<OpfsAction>>(
|
|
31
|
+
data: ExtractActionWithoutData<OpfsAction, A>,
|
|
32
|
+
) => {
|
|
33
|
+
self.postMessage(data);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Type-safe postMessage for errors
|
|
38
|
+
*/
|
|
39
|
+
const postMessageError = (data: ActionErrorData<OpfsAction>) => {
|
|
40
|
+
self.postMessage(data);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
self.onmessage = async (
|
|
44
|
+
event: MessageEvent<ActionWithoutResult<OpfsAction>>,
|
|
45
|
+
) => {
|
|
46
|
+
const { action, id, data } = event.data;
|
|
47
|
+
|
|
48
|
+
// initialize WASM module
|
|
49
|
+
await init();
|
|
50
|
+
|
|
51
|
+
try {
|
|
52
|
+
// init is a special action that initializes the client
|
|
53
|
+
if (action === "opfs.init" && !initialized) {
|
|
54
|
+
try {
|
|
55
|
+
await opfsInit();
|
|
56
|
+
} catch {
|
|
57
|
+
throw new OpfsInitializationError();
|
|
58
|
+
}
|
|
59
|
+
initialized = true;
|
|
60
|
+
enableLogging = data.enableLogging ?? false;
|
|
61
|
+
postMessage({ id, action, result: undefined });
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (enableLogging) {
|
|
65
|
+
console.log("[worker] worker received event data", event.data);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// nothing else to do
|
|
69
|
+
if (action === "opfs.init") {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// OPFS must be initialized for all other actions
|
|
74
|
+
if (!initialized) {
|
|
75
|
+
throw new OpfsNotInitializedError();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
switch (action) {
|
|
79
|
+
case "opfs.listFiles": {
|
|
80
|
+
const files = await opfsListFiles();
|
|
81
|
+
postMessage({ id, action, result: files });
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
case "opfs.fileCount": {
|
|
85
|
+
const fileCount = await opfsFileCount();
|
|
86
|
+
postMessage({ id, action, result: fileCount });
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
case "opfs.poolCapacity": {
|
|
90
|
+
const poolCapacity = await opfsPoolCapacity();
|
|
91
|
+
postMessage({ id, action, result: poolCapacity });
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
case "opfs.fileExists": {
|
|
95
|
+
const fileExists = await opfsFileExists(data.path);
|
|
96
|
+
postMessage({ id, action, result: fileExists });
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
case "opfs.deleteFile": {
|
|
100
|
+
const deleted = await opfsDeleteFile(data.path);
|
|
101
|
+
postMessage({ id, action, result: deleted });
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
case "opfs.exportDb": {
|
|
105
|
+
const db = await opfsExportDb(data.path);
|
|
106
|
+
postMessage({ id, action, result: db });
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
case "opfs.importDb": {
|
|
110
|
+
await opfsImportDb(data.path, data.data);
|
|
111
|
+
postMessage({ id, action, result: undefined });
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
case "opfs.clearAll": {
|
|
115
|
+
await opfsClearAll();
|
|
116
|
+
postMessage({ id, action, result: undefined });
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
} catch (e) {
|
|
121
|
+
postMessageError({
|
|
122
|
+
id,
|
|
123
|
+
action,
|
|
124
|
+
error: e as Error,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
};
|
package/dist/workers/utils.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import e,{inboxStateFromInboxIds as t,applySignatureRequest as i,revokeInstallationsSignatureRequest as a,generateInboxId as s,getInboxIdForIdentifier as n}from"@xmtp/wasm-bindings";import"@xmtp/content-type-primitives";const r={local:"http://localhost:5557",dev:"https://api.dev.xmtp.network:5558",production:"https://api.production.xmtp.network:5558"},o=e=>({bytes:e.bytes,clientTimestampNs:e.clientTimestampNs,id:e.id}),d=new Map,c=e=>{self.postMessage(e)};let l=!1;self.onmessage=async u=>{const{action:g,id:I,data:p}=u.data;l&&console.log("utils worker received event data",u.data),await e();try{switch(g){case"utils.init":l=p.enableLogging,c({id:I,action:g,result:void 0});break;case"utils.generateInboxId":{const e=s(p.identifier);c({id:I,action:g,result:e});break}case"utils.getInboxIdForIdentifier":{const e=await(async(e,t,i)=>n(t?r[t]:r.dev,i??null,e))(p.identifier,p.env,p.gatewayHost);c({id:I,action:g,result:e});break}case"utils.revokeInstallationsSignatureText":{const e=r[p.env??"dev"],t=a(e,p.gatewayHost,p.identifier,p.inboxId,p.installationIds),i=await t.signatureText();d.set(p.signatureRequestId,t);const s={signatureText:i,signatureRequestId:p.signatureRequestId};c({id:I,action:g,result:s});break}case"utils.revokeInstallations":{const e=r[p.env??"dev"],t=d.get(p.signatureRequestId);if(!t)throw new Error("Signature request not found");switch(p.signer.type){case"EOA":await t.addEcdsaSignature(p.signer.signature);break;case"SCW":await t.addScwSignature(p.signer.identifier,p.signer.signature,p.signer.chainId,p.signer.blockNumber)}await i(e,p.gatewayHost??null,t),d.delete(p.signatureRequestId),c({id:I,action:g,result:[]});break}case"utils.inboxStateFromInboxIds":{const e=r[p.env??"dev"];try{const i=(await t(e,p.gatewayHost??null,p.inboxIds)).map((e=>(e=>({identifiers:e.accountIdentifiers,inboxId:e.inboxId,installations:e.installations.map(o),recoveryIdentifier:e.recoveryIdentifier}))(e)));c({id:I,action:g,result:i})}catch(e){console.error("utils received error",e)}break}}}catch(e){(e=>{self.postMessage(e)})({id:I,action:g,error:e})}};
|
|
2
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../src/constants.ts","../../src/utils/conversions.ts","../../src/workers/utils.ts"],"sourcesContent":[null,null,null],"names":["ApiUrls","local","dev","production","toSafeInstallation","installation","bytes","clientTimestampNs","id","signatureRequests","Map","postMessage","data","self","enableLogging","onmessage","async","event","action","console","log","init","result","undefined","generateInboxId","identifier","env","gatewayHost","get_inbox_id_for_identifier","getInboxIdForIdentifier","host","signatureRequest","revokeInstallationsSignatureRequest","inboxId","installationIds","signatureText","set","signatureRequestId","get","Error","signer","type","addEcdsaSignature","signature","addScwSignature","chainId","blockNumber","applySignatureRequest","delete","inboxStateFromInboxIds","inboxIds","map","inboxState","identifiers","accountIdentifiers","installations","recoveryIdentifier","toSafeInboxState","e","error","postMessageError"],"mappings":"4NAQO,MAAMA,EAAU,CACrBC,MAAO,wBACPC,IAAK,oCACLC,WAAY,4CCyaDC,EACXC,IAA0B,CAE1BC,MAAOD,EAAaC,MACpBC,kBAAmBF,EAAaE,kBAChCC,GAAIH,EAAaG,KCrabC,EAAoB,IAAIC,IAKxBC,EACJC,IAEAC,KAAKF,YAAYC,EAAK,EAmBxB,IAAIE,GAAgB,EAEpBD,KAAKE,UAAYC,MACfC,IAEA,MAAMC,OAAEA,EAAMV,GAAEA,EAAEI,KAAEA,GAASK,EAAML,KAE/BE,GACFK,QAAQC,IAAI,mCAAoCH,EAAML,YAIlDS,IAEN,IACE,OAAQH,GACN,IAAK,aACHJ,EAAgBF,EAAKE,cACrBH,EAAY,CAAEH,KAAIU,SAAQI,YAAQC,IAClC,MAEF,IAAK,wBAAyB,CAC5B,MAAMD,EAASE,EAAgBZ,EAAKa,YACpCd,EAAY,CACVH,KACAU,SACAI,WAEF,KACF,CACA,IAAK,gCAAiC,CACpC,MAAMA,OAxCkBN,OAC9BS,EACAC,EACAC,IAGOC,EADMF,EAAM1B,EAAQ0B,GAAO1B,EAAQE,IACDyB,GAAe,KAAMF,GAkCnCI,CACnBjB,EAAKa,WACLb,EAAKc,IACLd,EAAKe,aAEPhB,EAAY,CAAEH,KAAIU,SAAQI,WAC1B,KACF,CACA,IAAK,yCAA0C,CAC7C,MAAMQ,EAAO9B,EAAQY,EAAKc,KAAO,OAC3BK,EAAmBC,EACvBF,EACAlB,EAAKe,YACLf,EAAKa,WACLb,EAAKqB,QACLrB,EAAKsB,iBAEDC,QAAsBJ,EAAiBI,gBAC7C1B,EAAkB2B,IAAIxB,EAAKyB,mBAAoBN,GAC/C,MAAMT,EAAS,CACba,gBACAE,mBAAoBzB,EAAKyB,oBAE3B1B,EAAY,CAAEH,KAAIU,SAAQI,WAC1B,KACF,CACA,IAAK,4BAA6B,CAChC,MAAMQ,EAAO9B,EAAQY,EAAKc,KAAO,OAC3BK,EAAmBtB,EAAkB6B,IAAI1B,EAAKyB,oBACpD,IAAKN,EACH,MAAM,IAAIQ,MAAM,+BAElB,OAAQ3B,EAAK4B,OAAOC,MAClB,IAAK,YACGV,EAAiBW,kBAAkB9B,EAAK4B,OAAOG,WACrD,MACF,IAAK,YACGZ,EAAiBa,gBACrBhC,EAAK4B,OAAOf,WACZb,EAAK4B,OAAOG,UACZ/B,EAAK4B,OAAOK,QACZjC,EAAK4B,OAAOM,mBAIZC,EACJjB,EACAlB,EAAKe,aAAe,KACpBI,GAEFtB,EAAkBuC,OAAOpC,EAAKyB,oBAC9B1B,EAAY,CAAEH,KAAIU,SAAQI,OAAQ,KAClC,KACF,CAEA,IAAK,+BAAgC,CACnC,MAAMQ,EAAO9B,EAAQY,EAAKc,KAAO,OACjC,IACE,MAKMJ,SALoB2B,EACxBnB,EACAlB,EAAKe,aAAe,KACpBf,EAAKsC,WAEoBC,KAAKC,GDsTV,CAACA,IAAsB,CACrDC,YAAaD,EAAWE,mBACxBrB,QAASmB,EAAWnB,QACpBsB,cAAeH,EAAWG,cAAcJ,IAAI/C,GAC5CoD,mBAAoBJ,EAAWI,qBCzTrBC,CAAiBL,KAEnBzC,EAAY,CAAEH,KAAIU,SAAQI,UAC5B,CAAE,MAAOoC,GACPvC,QAAQwC,MAAM,uBAAwBD,EACxC,CACA,KACF,EAEJ,CAAE,MAAOA,GArHc,CAAC9C,IACxBC,KAAKF,YAAYC,EAAK,EAqHpBgD,CAAiB,CAAEpD,KAAIU,SAAQyC,MAAOD,GACxC"}
|