@wireapp/core-crypto 1.0.0-rc.7 → 1.0.0-rc.8

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wireapp/core-crypto",
3
- "version": "1.0.0-rc.7",
3
+ "version": "1.0.0-rc.8",
4
4
  "description": "CoreCrypto bindings for the Web",
5
5
  "type": "module",
6
6
  "module": "platforms/web/corecrypto.js",
@@ -386,6 +386,45 @@ export interface DecryptedMessage {
386
386
  * Present for all messages
387
387
  */
388
388
  identity?: WireIdentity;
389
+ /**
390
+ * Only set when the decrypted message is a commit.
391
+ * Contains buffered messages for next epoch which were received before the commit creating the epoch
392
+ * because the DS did not fan them out in order.
393
+ */
394
+ bufferedMessages?: BufferedDecryptedMessage[];
395
+ }
396
+ /**
397
+ * Almost same as {@link DecryptedMessage} but avoids recursion
398
+ */
399
+ export interface BufferedDecryptedMessage {
400
+ /**
401
+ * see {@link DecryptedMessage.message}
402
+ */
403
+ message?: Uint8Array;
404
+ /**
405
+ * see {@link DecryptedMessage.proposals}
406
+ */
407
+ proposals: ProposalBundle[];
408
+ /**
409
+ * see {@link DecryptedMessage.isActive}
410
+ */
411
+ isActive: boolean;
412
+ /**
413
+ * see {@link DecryptedMessage.commitDelay}
414
+ */
415
+ commitDelay?: number;
416
+ /**
417
+ * see {@link DecryptedMessage.senderClientId}
418
+ */
419
+ senderClientId?: ClientId;
420
+ /**
421
+ * see {@link DecryptedMessage.hasEpochChanged}
422
+ */
423
+ hasEpochChanged: boolean;
424
+ /**
425
+ * see {@link DecryptedMessage.identity}
426
+ */
427
+ identity?: WireIdentity;
389
428
  }
390
429
  /**
391
430
  * Represents the identity claims identifying a client. Those claims are verifiable by any member in the group
@@ -625,7 +664,7 @@ export declare class CoreCrypto {
625
664
  /**
626
665
  * Closes this {@link CoreCrypto} instance and deallocates all loaded resources
627
666
  *
628
- * **CAUTION**: This {@link CoreCrypto} instance won't be useable after a call to this method, but there's no way to express this requirement in TypeScript so you'll get errors instead!
667
+ * **CAUTION**: This {@link CoreCrypto} instance won't be usable after a call to this method, but there's no way to express this requirement in TypeScript, so you'll get errors instead!
629
668
  */
630
669
  close(): Promise<void>;
631
670
  /**
@@ -691,7 +730,12 @@ export declare class CoreCrypto {
691
730
  */
692
731
  createConversation(conversationId: ConversationId, creatorCredentialType: CredentialType, configuration?: ConversationConfiguration): Promise<any>;
693
732
  /**
694
- * Decrypts a message for a given conversation
733
+ * Decrypts a message for a given conversation.
734
+ *
735
+ * Note: you should catch & ignore the following error reasons:
736
+ * * "We already decrypted this message once"
737
+ * * "You tried to join with an external commit but did not merge it yet. We will reapply this message for you when you merge your external commit"
738
+ * * "Incoming message is for a future epoch. We will buffer it until the commit for that epoch arrives"
695
739
  *
696
740
  * @param conversationId - The ID of the conversation
697
741
  * @param payload - The encrypted message buffer
@@ -723,7 +767,7 @@ export declare class CoreCrypto {
723
767
  *
724
768
  * @returns A {@link CommitBundle}
725
769
  */
726
- update_trust_anchors_from_conversation(conversationId: ConversationId, removeDomainNames: string[], addTrustAnchors: PerDomainTrustAnchor[]): Promise<CommitBundle>;
770
+ updateTrustAnchorsFromConversation(conversationId: ConversationId, removeDomainNames: string[], addTrustAnchors: PerDomainTrustAnchor[]): Promise<CommitBundle>;
727
771
  /**
728
772
  * Ingest a TLS-serialized MLS welcome message to join an existing MLS group
729
773
  *
@@ -737,7 +781,10 @@ export declare class CoreCrypto {
737
781
  */
738
782
  processWelcomeMessage(welcomeMessage: Uint8Array, configuration?: CustomConfiguration): Promise<ConversationId>;
739
783
  /**
740
- * @returns The client's public key
784
+ * Get the client's public signature key. To upload to the DS for further backend side validation
785
+ *
786
+ * @param ciphersuite - of the signature key to get
787
+ * @returns the client's public signature key
741
788
  */
742
789
  clientPublicKey(ciphersuite: Ciphersuite): Promise<Uint8Array>;
743
790
  /**
@@ -766,7 +813,7 @@ export declare class CoreCrypto {
766
813
  /**
767
814
  * Adds new clients to a conversation, assuming the current client has the right to add new clients to the conversation.
768
815
  *
769
- * **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called afterwards **ONLY IF** the Delivery Service responds
816
+ * **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called afterward **ONLY IF** the Delivery Service responds
770
817
  * '200 OK' to the {@link CommitBundle} upload. It will "merge" the commit locally i.e. increment the local group
771
818
  * epoch, use new encryption secrets etc...
772
819
  *
@@ -780,7 +827,7 @@ export declare class CoreCrypto {
780
827
  * Removes the provided clients from a conversation; Assuming those clients exist and the current client is allowed
781
828
  * to do so, otherwise this operation does nothing.
782
829
  *
783
- * **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called afterwards **ONLY IF** the Delivery Service responds
830
+ * **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called afterward **ONLY IF** the Delivery Service responds
784
831
  * '200 OK' to the {@link CommitBundle} upload. It will "merge" the commit locally i.e. increment the local group
785
832
  * epoch, use new encryption secrets etc...
786
833
  *
@@ -791,9 +838,9 @@ export declare class CoreCrypto {
791
838
  */
792
839
  removeClientsFromConversation(conversationId: ConversationId, clientIds: ClientId[]): Promise<CommitBundle>;
793
840
  /**
794
- * Creates an update commit which forces every client to update their keypackages in the conversation
841
+ * Creates an update commit which forces every client to update their LeafNode in the conversation
795
842
  *
796
- * **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called afterwards **ONLY IF** the Delivery Service responds
843
+ * **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called afterward **ONLY IF** the Delivery Service responds
797
844
  * '200 OK' to the {@link CommitBundle} upload. It will "merge" the commit locally i.e. increment the local group
798
845
  * epoch, use new encryption secrets etc...
799
846
  *
@@ -823,6 +870,9 @@ export declare class CoreCrypto {
823
870
  * @returns A {@link ProposalBundle} containing the Proposal and its reference in order to roll it back if necessary
824
871
  */
825
872
  newProposal(proposalType: ProposalType, args: ProposalArgs | AddProposalArgs | RemoveProposalArgs): Promise<ProposalBundle>;
873
+ /**
874
+ * Creates a new external Add proposal for self client to join a conversation.
875
+ */
826
876
  newExternalProposal(externalProposalType: ExternalProposalType, args: ExternalAddProposalArgs): Promise<Uint8Array>;
827
877
  /**
828
878
  * Allows to create an external commit to "apply" to join a group through its GroupInfo.
@@ -847,8 +897,9 @@ export declare class CoreCrypto {
847
897
  * and deletes the temporary one. This step makes the group operational and ready to encrypt/decrypt message
848
898
  *
849
899
  * @param conversationId - The ID of the conversation
900
+ * @returns eventually decrypted buffered messages if any
850
901
  */
851
- mergePendingGroupFromExternalCommit(conversationId: ConversationId): Promise<DecryptedMessage[] | undefined>;
902
+ mergePendingGroupFromExternalCommit(conversationId: ConversationId): Promise<BufferedDecryptedMessage[] | undefined>;
852
903
  /**
853
904
  * In case the external commit generated by {@link CoreCrypto.joinByExternalCommit} is rejected by the Delivery Service, and we
854
905
  * want to abort this external commit once for all, we can wipe out the pending group from the keystore in order
@@ -858,26 +909,24 @@ export declare class CoreCrypto {
858
909
  */
859
910
  clearPendingGroupFromExternalCommit(conversationId: ConversationId): Promise<void>;
860
911
  /**
861
- * Allows to mark the latest commit produced as "accepted" and be able to safely merge it
862
- * into the local group state
912
+ * Allows to mark the latest commit produced as "accepted" and be able to safely merge it into the local group state
863
913
  *
864
914
  * @param conversationId - The group's ID
915
+ * @returns the messages from current epoch which had been buffered, if any
865
916
  */
866
- commitAccepted(conversationId: ConversationId): Promise<void>;
917
+ commitAccepted(conversationId: ConversationId): Promise<BufferedDecryptedMessage[] | undefined>;
867
918
  /**
868
- * Allows to remove a pending proposal (rollback). Use this when backend rejects the proposal you just sent e.g. if permissions
869
- * have changed meanwhile.
919
+ * Allows to remove a pending proposal (rollback). Use this when backend rejects the proposal you just sent e.g. if permissions have changed meanwhile.
870
920
  *
871
921
  * **CAUTION**: only use this when you had an explicit response from the Delivery Service
872
- * e.g. 403 or 409. Do not use otherwise e.g. 5xx responses, timeout etc..
922
+ * e.g. 403 or 409. Do not use otherwise e.g. 5xx responses, timeout etc
873
923
  *
874
924
  * @param conversationId - The group's ID
875
925
  * @param proposalRef - A reference to the proposal to delete. You get one when using {@link CoreCrypto.newProposal}
876
926
  */
877
927
  clearPendingProposal(conversationId: ConversationId, proposalRef: ProposalRef): Promise<void>;
878
928
  /**
879
- * Allows to remove a pending commit (rollback). Use this when backend rejects the commit you just sent e.g. if permissions
880
- * have changed meanwhile.
929
+ * Allows to remove a pending commit (rollback). Use this when backend rejects the commit you just sent e.g. if permissions have changed meanwhile.
881
930
  *
882
931
  * **CAUTION**: only use this when you had an explicit response from the Delivery Service
883
932
  * e.g. 403. Do not use otherwise e.g. 5xx responses, timeout etc..
@@ -921,7 +970,7 @@ export declare class CoreCrypto {
921
970
  */
922
971
  reseedRng(seed: Uint8Array): Promise<void>;
923
972
  /**
924
- * Initiailizes the proteus client
973
+ * Initializes the proteus client
925
974
  */
926
975
  proteusInit(): Promise<void>;
927
976
  /**
@@ -1054,47 +1103,49 @@ export declare class CoreCrypto {
1054
1103
  * Creates an enrollment instance with private key material you can use in order to fetch
1055
1104
  * a new x509 certificate from the acme server.
1056
1105
  *
1057
- * @param clientId client identifier with user b64Url encoded & clientId hex encoded e.g. `NDUyMGUyMmY2YjA3NGU3NjkyZjE1NjJjZTAwMmQ2NTQ:6add501bacd1d90e@example.com`
1058
- * @param displayName human readable name displayed in the application e.g. `Smith, Alice M (QA)`
1059
- * @param handle user handle e.g. `alice.smith.qa@example.com`
1060
- * @param expiryDays generated x509 certificate expiry
1106
+ * @param clientId - client identifier with user b64Url encoded & clientId hex encoded e.g. `NDUyMGUyMmY2YjA3NGU3NjkyZjE1NjJjZTAwMmQ2NTQ:6add501bacd1d90e@example.com`
1107
+ * @param displayName - human-readable name displayed in the application e.g. `Smith, Alice M (QA)`
1108
+ * @param handle - user handle e.g. `alice.smith.qa@example.com`
1109
+ * @param expiryDays - generated x509 certificate expiry
1061
1110
  * @param ciphersuite - for generating signing key material
1062
- * @returns The new {@link WireE2eIdentity} object
1111
+ * @returns The new {@link E2eiEnrollment} enrollment instance to use with {@link CoreCrypto.e2eiMlsInitOnly}
1063
1112
  */
1064
- e2eiNewEnrollment(clientId: string, displayName: string, handle: string, expiryDays: number, ciphersuite: Ciphersuite): Promise<WireE2eIdentity>;
1113
+ e2eiNewEnrollment(clientId: string, displayName: string, handle: string, expiryDays: number, ciphersuite: Ciphersuite): Promise<E2eiEnrollment>;
1065
1114
  /**
1066
1115
  * Generates an E2EI enrollment instance for a "regular" client (with a Basic credential) willing to migrate to E2EI.
1067
1116
  * Once the enrollment is finished, use the instance in {@link CoreCrypto.e2eiRotateAll} to do the rotation.
1068
1117
  *
1069
- * @param clientId client identifier with user b64Url encoded & clientId hex encoded e.g. `NDUyMGUyMmY2YjA3NGU3NjkyZjE1NjJjZTAwMmQ2NTQ:6add501bacd1d90e@example.com`
1070
- * @param displayName human readable name displayed in the application e.g. `Smith, Alice M (QA)`
1071
- * @param handle user handle e.g. `alice.smith.qa@example.com`
1072
- * @param expiryDays generated x509 certificate expiry
1118
+ * @param clientId - client identifier with user b64Url encoded & clientId hex encoded e.g. `NDUyMGUyMmY2YjA3NGU3NjkyZjE1NjJjZTAwMmQ2NTQ:6add501bacd1d90e@example.com`
1119
+ * @param displayName - human-readable name displayed in the application e.g. `Smith, Alice M (QA)`
1120
+ * @param handle - user handle e.g. `alice.smith.qa@example.com`
1121
+ * @param expiryDays - generated x509 certificate expiry
1073
1122
  * @param ciphersuite - for generating signing key material
1074
- * @returns The new {@link WireE2eIdentity} object
1123
+ * @returns The new {@link E2eiEnrollment} enrollment instance to use with {@link CoreCrypto.e2eiRotateAll}
1075
1124
  */
1076
- e2eiNewActivationEnrollment(clientId: string, displayName: string, handle: string, expiryDays: number, ciphersuite: Ciphersuite): Promise<WireE2eIdentity>;
1125
+ e2eiNewActivationEnrollment(clientId: string, displayName: string, handle: string, expiryDays: number, ciphersuite: Ciphersuite): Promise<E2eiEnrollment>;
1077
1126
  /**
1078
1127
  * Generates an E2EI enrollment instance for a E2EI client (with a X509 certificate credential)
1079
1128
  * having to change/rotate their credential, either because the former one is expired or it
1080
1129
  * has been revoked. It lets you change the DisplayName or the handle
1081
1130
  * if you need to. Once the enrollment is finished, use the instance in {@link CoreCrypto.e2eiRotateAll} to do the rotation.
1082
1131
  *
1083
- * @param clientId client identifier with user b64Url encoded & clientId hex encoded e.g. `NDUyMGUyMmY2YjA3NGU3NjkyZjE1NjJjZTAwMmQ2NTQ:6add501bacd1d90e@example.com`
1084
- * @param expiryDays generated x509 certificate expiry
1132
+ * @param clientId - client identifier with user b64Url encoded & clientId hex encoded e.g. `NDUyMGUyMmY2YjA3NGU3NjkyZjE1NjJjZTAwMmQ2NTQ:6add501bacd1d90e@example.com`
1133
+ * @param expiryDays - generated x509 certificate expiry
1085
1134
  * @param ciphersuite - for generating signing key material
1086
- * @param displayName human readable name displayed in the application e.g. `Smith, Alice M (QA)`
1087
- * @param handle user handle e.g. `alice.smith.qa@example.com`
1088
- * @returns The new {@link WireE2eIdentity} object
1135
+ * @param displayName - human-readable name displayed in the application e.g. `Smith, Alice M (QA)`
1136
+ * @param handle - user handle e.g. `alice.smith.qa@example.com`
1137
+ * @returns The new {@link E2eiEnrollment} enrollment instance to use with {@link CoreCrypto.e2eiRotateAll}
1089
1138
  */
1090
- e2eiNewRotateEnrollment(clientId: string, expiryDays: number, ciphersuite: Ciphersuite, displayName?: string, handle?: string): Promise<WireE2eIdentity>;
1139
+ e2eiNewRotateEnrollment(clientId: string, expiryDays: number, ciphersuite: Ciphersuite, displayName?: string, handle?: string): Promise<E2eiEnrollment>;
1091
1140
  /**
1092
- * Use this method to initialize end-to-end identity when a client signs up and the grace period is already expired ; that means he cannot initialize with a Basic credential
1141
+ * Use this method to initialize end-to-end identity when a client signs up and the grace period is already expired ;
1142
+ * that means he cannot initialize with a Basic credential
1093
1143
  *
1094
1144
  * @param enrollment - the enrollment instance used to fetch the certificates
1095
1145
  * @param certificateChain - the raw response from ACME server
1146
+ * @returns a MlsClient initialized with only a x509 credential
1096
1147
  */
1097
- e2eiMlsInitOnly(enrollment: WireE2eIdentity, certificateChain: string): Promise<void>;
1148
+ e2eiMlsInitOnly(enrollment: E2eiEnrollment, certificateChain: string): Promise<void>;
1098
1149
  /**
1099
1150
  * Creates a commit in all local conversations for changing the credential. Requires first
1100
1151
  * having enrolled a new X509 certificate with either {@link CoreCrypto.e2eiNewActivationEnrollment}
@@ -1103,8 +1154,9 @@ export declare class CoreCrypto {
1103
1154
  * @param enrollment - the enrollment instance used to fetch the certificates
1104
1155
  * @param certificateChain - the raw response from ACME server
1105
1156
  * @param newKeyPackageCount - number of KeyPackages with new identity to generate
1157
+ * @returns a {@link RotateBundle} with commits to fan-out to other group members, KeyPackages to upload and old ones to delete
1106
1158
  */
1107
- e2eiRotateAll(enrollment: WireE2eIdentity, certificateChain: string, newKeyPackageCount: number): Promise<RotateBundle>;
1159
+ e2eiRotateAll(enrollment: E2eiEnrollment, certificateChain: string, newKeyPackageCount: number): Promise<RotateBundle>;
1108
1160
  /**
1109
1161
  * Allows persisting an active enrollment (for example while redirecting the user during OAuth) in order to resume
1110
1162
  * it later with {@link e2eiEnrollmentStashPop}
@@ -1112,14 +1164,14 @@ export declare class CoreCrypto {
1112
1164
  * @param enrollment the enrollment instance to persist
1113
1165
  * @returns a handle to fetch the enrollment later with {@link e2eiEnrollmentStashPop}
1114
1166
  */
1115
- e2eiEnrollmentStash(enrollment: WireE2eIdentity): Promise<Uint8Array>;
1167
+ e2eiEnrollmentStash(enrollment: E2eiEnrollment): Promise<Uint8Array>;
1116
1168
  /**
1117
1169
  * Fetches the persisted enrollment and deletes it from the keystore
1118
1170
  *
1119
1171
  * @param handle returned by {@link e2eiEnrollmentStash}
1120
1172
  * @returns the persisted enrollment instance
1121
1173
  */
1122
- e2eiEnrollmentStashPop(handle: Uint8Array): Promise<WireE2eIdentity>;
1174
+ e2eiEnrollmentStashPop(handle: Uint8Array): Promise<E2eiEnrollment>;
1123
1175
  /**
1124
1176
  * Indicates when to mark a conversation as degraded i.e. when not all its members have a X509.
1125
1177
  * Credential generated by Wire's end-to-end identity enrollment
@@ -1132,9 +1184,18 @@ export declare class CoreCrypto {
1132
1184
  * Returns true when end-to-end-identity is enabled for the given Ciphersuite
1133
1185
  *
1134
1186
  * @param ciphersuite of the credential to check
1135
- * @returns true end-to-end identity is enabled for the given ciphersuite
1187
+ * @returns true if end-to-end identity is enabled for the given ciphersuite
1136
1188
  */
1137
1189
  e2eiIsEnabled(ciphersuite: Ciphersuite): Promise<boolean>;
1190
+ /**
1191
+ * From a given conversation, get the identity of the members supplied. Identity is only present for members with a
1192
+ * Certificate Credential (after turning on end-to-end identity).
1193
+ *
1194
+ * @param conversationId - identifier of the conversation
1195
+ * @param clientIds - identifiers of the user
1196
+ * @returns identities or if no member has a x509 certificate, it will return an empty List
1197
+ */
1198
+ getUserIdentities(conversationId: ConversationId, clientIds: ClientId[]): Promise<WireIdentity[]>;
1138
1199
  /**
1139
1200
  * Returns the current version of {@link CoreCrypto}
1140
1201
  *
@@ -1143,7 +1204,7 @@ export declare class CoreCrypto {
1143
1204
  static version(): string;
1144
1205
  }
1145
1206
  type JsonRawData = Uint8Array;
1146
- export declare class WireE2eIdentity {
1207
+ export declare class E2eiEnrollment {
1147
1208
  #private;
1148
1209
  /** @hidden */
1149
1210
  constructor(e2ei: unknown);
@@ -1252,7 +1313,7 @@ export declare class WireE2eIdentity {
1252
1313
  * Parses the response from `POST /acme/{provisioner-name}/order/{order-id}`.
1253
1314
  *
1254
1315
  * @param order HTTP response body
1255
- * @return the finalize url to use with {@link finalizeRequest}
1316
+ * @return finalize url to use with {@link finalizeRequest}
1256
1317
  * @see https://www.rfc-editor.org/rfc/rfc8555.html#section-7.4
1257
1318
  */
1258
1319
  checkOrderResponse(order: JsonRawData): string;
@@ -234,12 +234,12 @@ function makeMutClosure(arg0, arg1, dtor, f) {
234
234
  return real;
235
235
  }
236
236
  function __wbg_adapter_52(arg0, arg1, arg2) {
237
- wasm$1.wasm_bindgen__convert__closures__invoke1_mut__h17baf5e1d66e67f4(arg0, arg1, addHeapObject(arg2));
237
+ wasm$1.wasm_bindgen__convert__closures__invoke1_mut__hdb6540dbb26cf63b(arg0, arg1, addHeapObject(arg2));
238
238
  }
239
239
  function __wbg_adapter_55(arg0, arg1, arg2) {
240
240
  try {
241
241
  const retptr = wasm$1.__wbindgen_add_to_stack_pointer(-16);
242
- wasm$1.wasm_bindgen__convert__closures__invoke1_mut__h98d6800184b7661d(retptr, arg0, arg1, addHeapObject(arg2));
242
+ wasm$1.wasm_bindgen__convert__closures__invoke1_mut__h5e436dc96f7334f7(retptr, arg0, arg1, addHeapObject(arg2));
243
243
  var r0 = getInt32Memory0()[retptr / 4 + 0];
244
244
  var r1 = getInt32Memory0()[retptr / 4 + 1];
245
245
  if (r1) {
@@ -313,8 +313,8 @@ function handleError(f, args) {
313
313
  wasm$1.__wbindgen_exn_store(addHeapObject(e));
314
314
  }
315
315
  }
316
- function __wbg_adapter_299(arg0, arg1, arg2, arg3) {
317
- wasm$1.wasm_bindgen__convert__closures__invoke2_mut__haf4f26fdea6dc8ca(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
316
+ function __wbg_adapter_310(arg0, arg1, arg2, arg3) {
317
+ wasm$1.wasm_bindgen__convert__closures__invoke2_mut__h5286c52f12e3fed2(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
318
318
  }
319
319
  /**
320
320
  * see [core_crypto::prelude::MlsWirePolicy]
@@ -554,6 +554,83 @@ class AcmeDirectory {
554
554
  }
555
555
  }
556
556
  /**
557
+ * to avoid recursion
558
+ */
559
+ class BufferedDecryptedMessage {
560
+ static __wrap(ptr) {
561
+ ptr = ptr >>> 0;
562
+ const obj = Object.create(BufferedDecryptedMessage.prototype);
563
+ obj.__wbg_ptr = ptr;
564
+ return obj;
565
+ }
566
+ __destroy_into_raw() {
567
+ const ptr = this.__wbg_ptr;
568
+ this.__wbg_ptr = 0;
569
+ return ptr;
570
+ }
571
+ free() {
572
+ const ptr = this.__destroy_into_raw();
573
+ wasm$1.__wbg_buffereddecryptedmessage_free(ptr);
574
+ }
575
+ /**
576
+ * @returns {any}
577
+ */
578
+ get message() {
579
+ const ret = wasm$1.buffereddecryptedmessage_message(this.__wbg_ptr);
580
+ return takeObject(ret);
581
+ }
582
+ /**
583
+ * @returns {Array<any>}
584
+ */
585
+ get proposals() {
586
+ const ret = wasm$1.buffereddecryptedmessage_proposals(this.__wbg_ptr);
587
+ return takeObject(ret);
588
+ }
589
+ /**
590
+ * @returns {boolean}
591
+ */
592
+ get is_active() {
593
+ const ret = wasm$1.buffereddecryptedmessage_is_active(this.__wbg_ptr);
594
+ return ret !== 0;
595
+ }
596
+ /**
597
+ * @returns {number | undefined}
598
+ */
599
+ get commit_delay() {
600
+ try {
601
+ const retptr = wasm$1.__wbindgen_add_to_stack_pointer(-16);
602
+ wasm$1.buffereddecryptedmessage_commit_delay(retptr, this.__wbg_ptr);
603
+ var r0 = getInt32Memory0()[retptr / 4 + 0];
604
+ var r1 = getInt32Memory0()[retptr / 4 + 1];
605
+ return r0 === 0 ? undefined : r1 >>> 0;
606
+ }
607
+ finally {
608
+ wasm$1.__wbindgen_add_to_stack_pointer(16);
609
+ }
610
+ }
611
+ /**
612
+ * @returns {any}
613
+ */
614
+ get sender_client_id() {
615
+ const ret = wasm$1.buffereddecryptedmessage_sender_client_id(this.__wbg_ptr);
616
+ return takeObject(ret);
617
+ }
618
+ /**
619
+ * @returns {boolean}
620
+ */
621
+ get has_epoch_changed() {
622
+ const ret = wasm$1.buffereddecryptedmessage_has_epoch_changed(this.__wbg_ptr);
623
+ return ret !== 0;
624
+ }
625
+ /**
626
+ * @returns {WireIdentity | undefined}
627
+ */
628
+ get identity() {
629
+ const ret = wasm$1.buffereddecryptedmessage_identity(this.__wbg_ptr);
630
+ return ret === 0 ? undefined : WireIdentity.__wrap(ret);
631
+ }
632
+ }
633
+ /**
557
634
  */
558
635
  class CommitBundle {
559
636
  static __wrap(ptr) {
@@ -691,7 +768,7 @@ let CoreCrypto$1 = class CoreCrypto {
691
768
  wasm$1.__wbg_corecrypto_free(ptr);
692
769
  }
693
770
  /**
694
- * Returns: [`WasmCryptoResult<WireE2eIdentity>`]
771
+ * Returns: [`WasmCryptoResult<E2eiEnrollment>`]
695
772
  *
696
773
  * see [core_crypto::mls::MlsCentral::e2ei_new_enrollment]
697
774
  * @param {string} client_id
@@ -712,7 +789,7 @@ let CoreCrypto$1 = class CoreCrypto {
712
789
  return takeObject(ret);
713
790
  }
714
791
  /**
715
- * Returns: [`WasmCryptoResult<WireE2eIdentity>`]
792
+ * Returns: [`WasmCryptoResult<E2eiEnrollment>`]
716
793
  *
717
794
  * see [core_crypto::mls::MlsCentral::e2ei_new_activation_enrollment]
718
795
  * @param {string} client_id
@@ -733,7 +810,7 @@ let CoreCrypto$1 = class CoreCrypto {
733
810
  return takeObject(ret);
734
811
  }
735
812
  /**
736
- * Returns: [`WasmCryptoResult<WireE2eIdentity>`]
813
+ * Returns: [`WasmCryptoResult<E2eiEnrollment>`]
737
814
  *
738
815
  * see [core_crypto::mls::MlsCentral::e2ei_new_rotate_enrollment]
739
816
  * @param {string} client_id
@@ -829,6 +906,22 @@ let CoreCrypto$1 = class CoreCrypto {
829
906
  return takeObject(ret);
830
907
  }
831
908
  /**
909
+ * Returns [`WasmCryptoResult<Vec<WireIdentity>>`]
910
+ *
911
+ * see [core_crypto::mls::MlsCentral::get_user_identities]
912
+ * @param {Uint8Array} conversation_id
913
+ * @param {(Uint8Array)[]} client_ids
914
+ * @returns {Promise<any>}
915
+ */
916
+ get_user_identities(conversation_id, client_ids) {
917
+ const ptr0 = passArray8ToWasm0(conversation_id, wasm$1.__wbindgen_malloc);
918
+ const len0 = WASM_VECTOR_LEN;
919
+ const ptr1 = passArrayJsValueToWasm0(client_ids, wasm$1.__wbindgen_malloc);
920
+ const len1 = WASM_VECTOR_LEN;
921
+ const ret = wasm$1.corecrypto_get_user_identities(this.__wbg_ptr, ptr0, len0, ptr1, len1);
922
+ return takeObject(ret);
923
+ }
924
+ /**
832
925
  * Returns the current version of CoreCrypto
833
926
  * @returns {string}
834
927
  */
@@ -1766,14 +1859,14 @@ class DecryptedMessage {
1766
1859
  * @returns {any}
1767
1860
  */
1768
1861
  get message() {
1769
- const ret = wasm$1.decryptedmessage_message(this.__wbg_ptr);
1862
+ const ret = wasm$1.buffereddecryptedmessage_message(this.__wbg_ptr);
1770
1863
  return takeObject(ret);
1771
1864
  }
1772
1865
  /**
1773
1866
  * @returns {Array<any>}
1774
1867
  */
1775
1868
  get proposals() {
1776
- const ret = wasm$1.decryptedmessage_proposals(this.__wbg_ptr);
1869
+ const ret = wasm$1.buffereddecryptedmessage_proposals(this.__wbg_ptr);
1777
1870
  return takeObject(ret);
1778
1871
  }
1779
1872
  /**
@@ -1789,7 +1882,7 @@ class DecryptedMessage {
1789
1882
  get commit_delay() {
1790
1883
  try {
1791
1884
  const retptr = wasm$1.__wbindgen_add_to_stack_pointer(-16);
1792
- wasm$1.decryptedmessage_commit_delay(retptr, this.__wbg_ptr);
1885
+ wasm$1.buffereddecryptedmessage_commit_delay(retptr, this.__wbg_ptr);
1793
1886
  var r0 = getInt32Memory0()[retptr / 4 + 0];
1794
1887
  var r1 = getInt32Memory0()[retptr / 4 + 1];
1795
1888
  return r0 === 0 ? undefined : r1 >>> 0;
@@ -1802,7 +1895,7 @@ class DecryptedMessage {
1802
1895
  * @returns {any}
1803
1896
  */
1804
1897
  get sender_client_id() {
1805
- const ret = wasm$1.decryptedmessage_sender_client_id(this.__wbg_ptr);
1898
+ const ret = wasm$1.buffereddecryptedmessage_sender_client_id(this.__wbg_ptr);
1806
1899
  return takeObject(ret);
1807
1900
  }
1808
1901
  /**
@@ -1816,9 +1909,16 @@ class DecryptedMessage {
1816
1909
  * @returns {WireIdentity | undefined}
1817
1910
  */
1818
1911
  get identity() {
1819
- const ret = wasm$1.decryptedmessage_identity(this.__wbg_ptr);
1912
+ const ret = wasm$1.buffereddecryptedmessage_identity(this.__wbg_ptr);
1820
1913
  return ret === 0 ? undefined : WireIdentity.__wrap(ret);
1821
1914
  }
1915
+ /**
1916
+ * @returns {Array<any> | undefined}
1917
+ */
1918
+ get buffered_messages() {
1919
+ const ret = wasm$1.decryptedmessage_buffered_messages(this.__wbg_ptr);
1920
+ return takeObject(ret);
1921
+ }
1822
1922
  }
1823
1923
  /**
1824
1924
  */
@@ -2869,18 +2969,14 @@ function __wbg_get_imports() {
2869
2969
  const ret = getObject(arg0).length;
2870
2970
  return ret;
2871
2971
  };
2872
- imports.wbg.__wbg_new_8125e318e6245eed = function (arg0) {
2873
- const ret = new Uint8Array(getObject(arg0));
2874
- return addHeapObject(ret);
2875
- };
2876
2972
  imports.wbg.__wbg_call_01734de55d61e11d = function () {
2877
2973
  return handleError(function (arg0, arg1, arg2) {
2878
2974
  const ret = getObject(arg0).call(getObject(arg1), getObject(arg2));
2879
2975
  return addHeapObject(ret);
2880
2976
  }, arguments);
2881
2977
  };
2882
- imports.wbg.__wbg_new_b51585de1b234aff = function () {
2883
- const ret = new Object();
2978
+ imports.wbg.__wbg_new_8125e318e6245eed = function (arg0) {
2979
+ const ret = new Uint8Array(getObject(arg0));
2884
2980
  return addHeapObject(ret);
2885
2981
  };
2886
2982
  imports.wbg.__wbg_new_898a68150f225f2e = function () {
@@ -2890,26 +2986,33 @@ function __wbg_get_imports() {
2890
2986
  imports.wbg.__wbg_set_502d29070ea18557 = function (arg0, arg1, arg2) {
2891
2987
  getObject(arg0)[arg1 >>> 0] = takeObject(arg2);
2892
2988
  };
2989
+ imports.wbg.__wbg_ffiwiree2eidentity_new = function (arg0) {
2990
+ const ret = FfiWireE2EIdentity.__wrap(arg0);
2991
+ return addHeapObject(ret);
2992
+ };
2993
+ imports.wbg.__wbg_push_ca1c26067ef907ac = function (arg0, arg1) {
2994
+ const ret = getObject(arg0).push(getObject(arg1));
2995
+ return ret;
2996
+ };
2893
2997
  imports.wbg.__wbindgen_bigint_from_u64 = function (arg0) {
2894
2998
  const ret = BigInt.asUintN(64, arg0);
2895
2999
  return addHeapObject(ret);
2896
3000
  };
2897
- imports.wbg.__wbindgen_number_new = function (arg0) {
2898
- const ret = arg0;
3001
+ imports.wbg.__wbg_new_b51585de1b234aff = function () {
3002
+ const ret = new Object();
2899
3003
  return addHeapObject(ret);
2900
3004
  };
2901
- imports.wbg.__wbg_ffiwiree2eidentity_new = function (arg0) {
2902
- const ret = FfiWireE2EIdentity.__wrap(arg0);
3005
+ imports.wbg.__wbg_set_841ac57cff3d672b = function (arg0, arg1, arg2) {
3006
+ getObject(arg0)[takeObject(arg1)] = takeObject(arg2);
3007
+ };
3008
+ imports.wbg.__wbindgen_number_new = function (arg0) {
3009
+ const ret = arg0;
2903
3010
  return addHeapObject(ret);
2904
3011
  };
2905
3012
  imports.wbg.__wbg_proteusautoprekeybundle_new = function (arg0) {
2906
3013
  const ret = ProteusAutoPrekeyBundle.__wrap(arg0);
2907
3014
  return addHeapObject(ret);
2908
3015
  };
2909
- imports.wbg.__wbg_push_ca1c26067ef907ac = function (arg0, arg1) {
2910
- const ret = getObject(arg0).push(getObject(arg1));
2911
- return ret;
2912
- };
2913
3016
  imports.wbg.__wbg_new_56693dbed0c32988 = function () {
2914
3017
  const ret = new Map();
2915
3018
  return addHeapObject(ret);
@@ -2922,18 +3025,18 @@ function __wbg_get_imports() {
2922
3025
  const ret = new Error(getStringFromWasm0(arg0, arg1));
2923
3026
  return addHeapObject(ret);
2924
3027
  };
2925
- imports.wbg.__wbg_openCursor_555d508ba71b21cc = function () {
2926
- return handleError(function (arg0, arg1) {
2927
- const ret = getObject(arg0).openCursor(getObject(arg1));
2928
- return addHeapObject(ret);
2929
- }, arguments);
2930
- };
2931
3028
  imports.wbg.__wbg_openCursor_4d6f62b69b34be26 = function () {
2932
3029
  return handleError(function (arg0) {
2933
3030
  const ret = getObject(arg0).openCursor();
2934
3031
  return addHeapObject(ret);
2935
3032
  }, arguments);
2936
3033
  };
3034
+ imports.wbg.__wbg_openCursor_555d508ba71b21cc = function () {
3035
+ return handleError(function (arg0, arg1) {
3036
+ const ret = getObject(arg0).openCursor(getObject(arg1));
3037
+ return addHeapObject(ret);
3038
+ }, arguments);
3039
+ };
2937
3040
  imports.wbg.__wbg_setonsuccess_f518a37d8228a576 = function (arg0, arg1) {
2938
3041
  getObject(arg0).onsuccess = getObject(arg1);
2939
3042
  };
@@ -2990,9 +3093,6 @@ function __wbg_get_imports() {
2990
3093
  const ret = CoreCrypto$1.__wrap(arg0);
2991
3094
  return addHeapObject(ret);
2992
3095
  };
2993
- imports.wbg.__wbg_set_841ac57cff3d672b = function (arg0, arg1, arg2) {
2994
- getObject(arg0)[takeObject(arg1)] = takeObject(arg2);
2995
- };
2996
3096
  imports.wbg.__wbg_instanceof_Promise_0e98a5bf082e090f = function (arg0) {
2997
3097
  let result;
2998
3098
  try {
@@ -3044,7 +3144,7 @@ function __wbg_get_imports() {
3044
3144
  const a = state0.a;
3045
3145
  state0.a = 0;
3046
3146
  try {
3047
- return __wbg_adapter_299(a, state0.b, arg0, arg1);
3147
+ return __wbg_adapter_310(a, state0.b, arg0, arg1);
3048
3148
  }
3049
3149
  finally {
3050
3150
  state0.a = a;
@@ -3069,6 +3169,10 @@ function __wbg_get_imports() {
3069
3169
  const ret = ProposalBundle.__wrap(arg0);
3070
3170
  return addHeapObject(ret);
3071
3171
  };
3172
+ imports.wbg.__wbg_buffereddecryptedmessage_new = function (arg0) {
3173
+ const ret = BufferedDecryptedMessage.__wrap(arg0);
3174
+ return addHeapObject(ret);
3175
+ };
3072
3176
  imports.wbg.__wbg_commitbundle_new = function (arg0) {
3073
3177
  const ret = CommitBundle.__wrap(arg0);
3074
3178
  return addHeapObject(ret);
@@ -3142,18 +3246,18 @@ function __wbg_get_imports() {
3142
3246
  const ret = Date.now();
3143
3247
  return ret;
3144
3248
  };
3145
- imports.wbg.__wbg_put_fb32824d87feec5c = function () {
3146
- return handleError(function (arg0, arg1, arg2) {
3147
- const ret = getObject(arg0).put(getObject(arg1), getObject(arg2));
3148
- return addHeapObject(ret);
3149
- }, arguments);
3150
- };
3151
3249
  imports.wbg.__wbg_put_d6937bc51f51a398 = function () {
3152
3250
  return handleError(function (arg0, arg1) {
3153
3251
  const ret = getObject(arg0).put(getObject(arg1));
3154
3252
  return addHeapObject(ret);
3155
3253
  }, arguments);
3156
3254
  };
3255
+ imports.wbg.__wbg_put_fb32824d87feec5c = function () {
3256
+ return handleError(function (arg0, arg1, arg2) {
3257
+ const ret = getObject(arg0).put(getObject(arg1), getObject(arg2));
3258
+ return addHeapObject(ret);
3259
+ }, arguments);
3260
+ };
3157
3261
  imports.wbg.__wbg_delete_ca1cfc48f1f7981c = function () {
3158
3262
  return handleError(function (arg0, arg1) {
3159
3263
  const ret = getObject(arg0).delete(getObject(arg1));
@@ -3493,12 +3597,12 @@ function __wbg_get_imports() {
3493
3597
  return addHeapObject(ret);
3494
3598
  }, arguments);
3495
3599
  };
3496
- imports.wbg.__wbindgen_closure_wrapper1999 = function (arg0, arg1, arg2) {
3497
- const ret = makeMutClosure(arg0, arg1, 169, __wbg_adapter_52);
3600
+ imports.wbg.__wbindgen_closure_wrapper1725 = function (arg0, arg1, arg2) {
3601
+ const ret = makeMutClosure(arg0, arg1, 149, __wbg_adapter_52);
3498
3602
  return addHeapObject(ret);
3499
3603
  };
3500
- imports.wbg.__wbindgen_closure_wrapper4745 = function (arg0, arg1, arg2) {
3501
- const ret = makeMutClosure(arg0, arg1, 169, __wbg_adapter_55);
3604
+ imports.wbg.__wbindgen_closure_wrapper4854 = function (arg0, arg1, arg2) {
3605
+ const ret = makeMutClosure(arg0, arg1, 149, __wbg_adapter_55);
3502
3606
  return addHeapObject(ret);
3503
3607
  };
3504
3608
  return imports;
@@ -3539,6 +3643,7 @@ var exports = /*#__PURE__*/Object.freeze({
3539
3643
  __proto__: null,
3540
3644
  AcmeChallenge: AcmeChallenge,
3541
3645
  AcmeDirectory: AcmeDirectory,
3646
+ BufferedDecryptedMessage: BufferedDecryptedMessage,
3542
3647
  Ciphersuite: Ciphersuite$1,
3543
3648
  CommitBundle: CommitBundle,
3544
3649
  ConversationConfiguration: ConversationConfiguration,
@@ -3564,26 +3669,35 @@ var exports = /*#__PURE__*/Object.freeze({
3564
3669
  initSync: initSync
3565
3670
  });
3566
3671
 
3567
- var wasm = async (opt = {}) => {
3568
- let {importHook, serverPath} = opt;
3672
+ const wasm_path = "assets/core_crypto_ffi-ded089fb.wasm";
3569
3673
 
3570
- let path = "assets/core_crypto_ffi-663eb4cf.wasm";
3674
+
3675
+ var wasm = async (opt = {}) => {
3676
+ let {importHook, serverPath, initializeHook} = opt;
3677
+
3678
+ let final_path = wasm_path;
3571
3679
 
3572
3680
  if (serverPath != null) {
3573
- path = serverPath + /[^\/\\]*$/.exec(path)[0];
3681
+ final_path = serverPath + /[^\/\\]*$/.exec(final_path)[0];
3574
3682
  }
3575
3683
 
3576
3684
  if (importHook != null) {
3577
- path = importHook(path);
3685
+ final_path = importHook(final_path);
3686
+ }
3687
+
3688
+ if (initializeHook != null) {
3689
+ await initializeHook(__wbg_init, final_path);
3690
+
3691
+ } else {
3692
+ await __wbg_init(final_path);
3578
3693
  }
3579
3694
 
3580
- await __wbg_init(path);
3581
3695
  return exports;
3582
3696
  };
3583
3697
 
3584
3698
  // Wire
3585
3699
  // Copyright (C) 2022 Wire Swiss GmbH
3586
- var _a, _CoreCrypto_module, _CoreCrypto_cc, _CoreCrypto_assertModuleLoaded, _WireE2eIdentity_e2ei;
3700
+ var _a, _CoreCrypto_module, _CoreCrypto_cc, _CoreCrypto_assertModuleLoaded, _E2eiEnrollment_enrollment;
3587
3701
  /**
3588
3702
  * Error wrapper that takes care of extracting rich error details across the FFI (through JSON parsing)
3589
3703
  *
@@ -3891,7 +4005,7 @@ class CoreCrypto {
3891
4005
  /**
3892
4006
  * Closes this {@link CoreCrypto} instance and deallocates all loaded resources
3893
4007
  *
3894
- * **CAUTION**: This {@link CoreCrypto} instance won't be useable after a call to this method, but there's no way to express this requirement in TypeScript so you'll get errors instead!
4008
+ * **CAUTION**: This {@link CoreCrypto} instance won't be usable after a call to this method, but there's no way to express this requirement in TypeScript, so you'll get errors instead!
3895
4009
  */
3896
4010
  async close() {
3897
4011
  await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").close());
@@ -3985,7 +4099,12 @@ class CoreCrypto {
3985
4099
  }
3986
4100
  }
3987
4101
  /**
3988
- * Decrypts a message for a given conversation
4102
+ * Decrypts a message for a given conversation.
4103
+ *
4104
+ * Note: you should catch & ignore the following error reasons:
4105
+ * * "We already decrypted this message once"
4106
+ * * "You tried to join with an external commit but did not merge it yet. We will reapply this message for you when you merge your external commit"
4107
+ * * "Incoming message is for a future epoch. We will buffer it until the commit for that epoch arrives"
3989
4108
  *
3990
4109
  * @param conversationId - The ID of the conversation
3991
4110
  * @param payload - The encrypted message buffer
@@ -4010,6 +4129,16 @@ class CoreCrypto {
4010
4129
  senderClientId: ffiDecryptedMessage.sender_client_id,
4011
4130
  commitDelay,
4012
4131
  hasEpochChanged: ffiDecryptedMessage.has_epoch_changed,
4132
+ bufferedMessages: ffiDecryptedMessage.buffered_messages?.map(m => {
4133
+ return {
4134
+ message: m.message,
4135
+ proposals: m.proposals,
4136
+ isActive: m.is_active,
4137
+ senderClientId: m.sender_client_id,
4138
+ commitDelay: m.commit_delay,
4139
+ hasEpochChanged: m.has_epoch_changed,
4140
+ };
4141
+ }),
4013
4142
  };
4014
4143
  return ret;
4015
4144
  }
@@ -4043,7 +4172,7 @@ class CoreCrypto {
4043
4172
  *
4044
4173
  * @returns A {@link CommitBundle}
4045
4174
  */
4046
- async update_trust_anchors_from_conversation(conversationId, removeDomainNames, addTrustAnchors) {
4175
+ async updateTrustAnchorsFromConversation(conversationId, removeDomainNames, addTrustAnchors) {
4047
4176
  try {
4048
4177
  const ffiRet = await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").update_trust_anchors_from_conversation(conversationId, removeDomainNames, addTrustAnchors));
4049
4178
  const gi = ffiRet.group_info;
@@ -4084,7 +4213,10 @@ class CoreCrypto {
4084
4213
  }
4085
4214
  }
4086
4215
  /**
4087
- * @returns The client's public key
4216
+ * Get the client's public signature key. To upload to the DS for further backend side validation
4217
+ *
4218
+ * @param ciphersuite - of the signature key to get
4219
+ * @returns the client's public signature key
4088
4220
  */
4089
4221
  async clientPublicKey(ciphersuite) {
4090
4222
  return await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").client_public_key(ciphersuite));
@@ -4121,7 +4253,7 @@ class CoreCrypto {
4121
4253
  /**
4122
4254
  * Adds new clients to a conversation, assuming the current client has the right to add new clients to the conversation.
4123
4255
  *
4124
- * **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called afterwards **ONLY IF** the Delivery Service responds
4256
+ * **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called afterward **ONLY IF** the Delivery Service responds
4125
4257
  * '200 OK' to the {@link CommitBundle} upload. It will "merge" the commit locally i.e. increment the local group
4126
4258
  * epoch, use new encryption secrets etc...
4127
4259
  *
@@ -4155,7 +4287,7 @@ class CoreCrypto {
4155
4287
  * Removes the provided clients from a conversation; Assuming those clients exist and the current client is allowed
4156
4288
  * to do so, otherwise this operation does nothing.
4157
4289
  *
4158
- * **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called afterwards **ONLY IF** the Delivery Service responds
4290
+ * **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called afterward **ONLY IF** the Delivery Service responds
4159
4291
  * '200 OK' to the {@link CommitBundle} upload. It will "merge" the commit locally i.e. increment the local group
4160
4292
  * epoch, use new encryption secrets etc...
4161
4293
  *
@@ -4184,9 +4316,9 @@ class CoreCrypto {
4184
4316
  }
4185
4317
  }
4186
4318
  /**
4187
- * Creates an update commit which forces every client to update their keypackages in the conversation
4319
+ * Creates an update commit which forces every client to update their LeafNode in the conversation
4188
4320
  *
4189
- * **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called afterwards **ONLY IF** the Delivery Service responds
4321
+ * **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called afterward **ONLY IF** the Delivery Service responds
4190
4322
  * '200 OK' to the {@link CommitBundle} upload. It will "merge" the commit locally i.e. increment the local group
4191
4323
  * epoch, use new encryption secrets etc...
4192
4324
  *
@@ -4274,6 +4406,9 @@ class CoreCrypto {
4274
4406
  throw new Error("Invalid proposal type!");
4275
4407
  }
4276
4408
  }
4409
+ /**
4410
+ * Creates a new external Add proposal for self client to join a conversation.
4411
+ */
4277
4412
  async newExternalProposal(externalProposalType, args) {
4278
4413
  switch (externalProposalType) {
4279
4414
  case ExternalProposalType.Add: {
@@ -4327,6 +4462,7 @@ class CoreCrypto {
4327
4462
  * and deletes the temporary one. This step makes the group operational and ready to encrypt/decrypt message
4328
4463
  *
4329
4464
  * @param conversationId - The ID of the conversation
4465
+ * @returns eventually decrypted buffered messages if any
4330
4466
  */
4331
4467
  async mergePendingGroupFromExternalCommit(conversationId) {
4332
4468
  return await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").merge_pending_group_from_external_commit(conversationId));
@@ -4342,20 +4478,19 @@ class CoreCrypto {
4342
4478
  return await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").clear_pending_group_from_external_commit(conversationId));
4343
4479
  }
4344
4480
  /**
4345
- * Allows to mark the latest commit produced as "accepted" and be able to safely merge it
4346
- * into the local group state
4481
+ * Allows to mark the latest commit produced as "accepted" and be able to safely merge it into the local group state
4347
4482
  *
4348
4483
  * @param conversationId - The group's ID
4484
+ * @returns the messages from current epoch which had been buffered, if any
4349
4485
  */
4350
4486
  async commitAccepted(conversationId) {
4351
4487
  return await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").commit_accepted(conversationId));
4352
4488
  }
4353
4489
  /**
4354
- * Allows to remove a pending proposal (rollback). Use this when backend rejects the proposal you just sent e.g. if permissions
4355
- * have changed meanwhile.
4490
+ * Allows to remove a pending proposal (rollback). Use this when backend rejects the proposal you just sent e.g. if permissions have changed meanwhile.
4356
4491
  *
4357
4492
  * **CAUTION**: only use this when you had an explicit response from the Delivery Service
4358
- * e.g. 403 or 409. Do not use otherwise e.g. 5xx responses, timeout etc..
4493
+ * e.g. 403 or 409. Do not use otherwise e.g. 5xx responses, timeout etc
4359
4494
  *
4360
4495
  * @param conversationId - The group's ID
4361
4496
  * @param proposalRef - A reference to the proposal to delete. You get one when using {@link CoreCrypto.newProposal}
@@ -4364,8 +4499,7 @@ class CoreCrypto {
4364
4499
  return await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").clear_pending_proposal(conversationId, proposalRef));
4365
4500
  }
4366
4501
  /**
4367
- * Allows to remove a pending commit (rollback). Use this when backend rejects the commit you just sent e.g. if permissions
4368
- * have changed meanwhile.
4502
+ * Allows to remove a pending commit (rollback). Use this when backend rejects the commit you just sent e.g. if permissions have changed meanwhile.
4369
4503
  *
4370
4504
  * **CAUTION**: only use this when you had an explicit response from the Delivery Service
4371
4505
  * e.g. 403. Do not use otherwise e.g. 5xx responses, timeout etc..
@@ -4422,7 +4556,7 @@ class CoreCrypto {
4422
4556
  return await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").reseed_rng(seed));
4423
4557
  }
4424
4558
  /**
4425
- * Initiailizes the proteus client
4559
+ * Initializes the proteus client
4426
4560
  */
4427
4561
  async proteusInit() {
4428
4562
  return await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").proteus_init());
@@ -4599,31 +4733,31 @@ class CoreCrypto {
4599
4733
  * Creates an enrollment instance with private key material you can use in order to fetch
4600
4734
  * a new x509 certificate from the acme server.
4601
4735
  *
4602
- * @param clientId client identifier with user b64Url encoded & clientId hex encoded e.g. `NDUyMGUyMmY2YjA3NGU3NjkyZjE1NjJjZTAwMmQ2NTQ:6add501bacd1d90e@example.com`
4603
- * @param displayName human readable name displayed in the application e.g. `Smith, Alice M (QA)`
4604
- * @param handle user handle e.g. `alice.smith.qa@example.com`
4605
- * @param expiryDays generated x509 certificate expiry
4736
+ * @param clientId - client identifier with user b64Url encoded & clientId hex encoded e.g. `NDUyMGUyMmY2YjA3NGU3NjkyZjE1NjJjZTAwMmQ2NTQ:6add501bacd1d90e@example.com`
4737
+ * @param displayName - human-readable name displayed in the application e.g. `Smith, Alice M (QA)`
4738
+ * @param handle - user handle e.g. `alice.smith.qa@example.com`
4739
+ * @param expiryDays - generated x509 certificate expiry
4606
4740
  * @param ciphersuite - for generating signing key material
4607
- * @returns The new {@link WireE2eIdentity} object
4741
+ * @returns The new {@link E2eiEnrollment} enrollment instance to use with {@link CoreCrypto.e2eiMlsInitOnly}
4608
4742
  */
4609
4743
  async e2eiNewEnrollment(clientId, displayName, handle, expiryDays, ciphersuite) {
4610
4744
  const e2ei = await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").e2ei_new_enrollment(clientId, displayName, handle, expiryDays, ciphersuite));
4611
- return new WireE2eIdentity(e2ei);
4745
+ return new E2eiEnrollment(e2ei);
4612
4746
  }
4613
4747
  /**
4614
4748
  * Generates an E2EI enrollment instance for a "regular" client (with a Basic credential) willing to migrate to E2EI.
4615
4749
  * Once the enrollment is finished, use the instance in {@link CoreCrypto.e2eiRotateAll} to do the rotation.
4616
4750
  *
4617
- * @param clientId client identifier with user b64Url encoded & clientId hex encoded e.g. `NDUyMGUyMmY2YjA3NGU3NjkyZjE1NjJjZTAwMmQ2NTQ:6add501bacd1d90e@example.com`
4618
- * @param displayName human readable name displayed in the application e.g. `Smith, Alice M (QA)`
4619
- * @param handle user handle e.g. `alice.smith.qa@example.com`
4620
- * @param expiryDays generated x509 certificate expiry
4751
+ * @param clientId - client identifier with user b64Url encoded & clientId hex encoded e.g. `NDUyMGUyMmY2YjA3NGU3NjkyZjE1NjJjZTAwMmQ2NTQ:6add501bacd1d90e@example.com`
4752
+ * @param displayName - human-readable name displayed in the application e.g. `Smith, Alice M (QA)`
4753
+ * @param handle - user handle e.g. `alice.smith.qa@example.com`
4754
+ * @param expiryDays - generated x509 certificate expiry
4621
4755
  * @param ciphersuite - for generating signing key material
4622
- * @returns The new {@link WireE2eIdentity} object
4756
+ * @returns The new {@link E2eiEnrollment} enrollment instance to use with {@link CoreCrypto.e2eiRotateAll}
4623
4757
  */
4624
4758
  async e2eiNewActivationEnrollment(clientId, displayName, handle, expiryDays, ciphersuite) {
4625
4759
  const e2ei = await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").e2ei_new_activation_enrollment(clientId, displayName, handle, expiryDays, ciphersuite));
4626
- return new WireE2eIdentity(e2ei);
4760
+ return new E2eiEnrollment(e2ei);
4627
4761
  }
4628
4762
  /**
4629
4763
  * Generates an E2EI enrollment instance for a E2EI client (with a X509 certificate credential)
@@ -4631,22 +4765,24 @@ class CoreCrypto {
4631
4765
  * has been revoked. It lets you change the DisplayName or the handle
4632
4766
  * if you need to. Once the enrollment is finished, use the instance in {@link CoreCrypto.e2eiRotateAll} to do the rotation.
4633
4767
  *
4634
- * @param clientId client identifier with user b64Url encoded & clientId hex encoded e.g. `NDUyMGUyMmY2YjA3NGU3NjkyZjE1NjJjZTAwMmQ2NTQ:6add501bacd1d90e@example.com`
4635
- * @param expiryDays generated x509 certificate expiry
4768
+ * @param clientId - client identifier with user b64Url encoded & clientId hex encoded e.g. `NDUyMGUyMmY2YjA3NGU3NjkyZjE1NjJjZTAwMmQ2NTQ:6add501bacd1d90e@example.com`
4769
+ * @param expiryDays - generated x509 certificate expiry
4636
4770
  * @param ciphersuite - for generating signing key material
4637
- * @param displayName human readable name displayed in the application e.g. `Smith, Alice M (QA)`
4638
- * @param handle user handle e.g. `alice.smith.qa@example.com`
4639
- * @returns The new {@link WireE2eIdentity} object
4771
+ * @param displayName - human-readable name displayed in the application e.g. `Smith, Alice M (QA)`
4772
+ * @param handle - user handle e.g. `alice.smith.qa@example.com`
4773
+ * @returns The new {@link E2eiEnrollment} enrollment instance to use with {@link CoreCrypto.e2eiRotateAll}
4640
4774
  */
4641
4775
  async e2eiNewRotateEnrollment(clientId, expiryDays, ciphersuite, displayName, handle) {
4642
4776
  const e2ei = await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").e2ei_new_rotate_enrollment(clientId, displayName, handle, expiryDays, ciphersuite));
4643
- return new WireE2eIdentity(e2ei);
4777
+ return new E2eiEnrollment(e2ei);
4644
4778
  }
4645
4779
  /**
4646
- * Use this method to initialize end-to-end identity when a client signs up and the grace period is already expired ; that means he cannot initialize with a Basic credential
4780
+ * Use this method to initialize end-to-end identity when a client signs up and the grace period is already expired ;
4781
+ * that means he cannot initialize with a Basic credential
4647
4782
  *
4648
4783
  * @param enrollment - the enrollment instance used to fetch the certificates
4649
4784
  * @param certificateChain - the raw response from ACME server
4785
+ * @returns a MlsClient initialized with only a x509 credential
4650
4786
  */
4651
4787
  async e2eiMlsInitOnly(enrollment, certificateChain) {
4652
4788
  return await __classPrivateFieldGet(this, _CoreCrypto_cc, "f").e2ei_mls_init_only(enrollment.inner(), certificateChain);
@@ -4659,6 +4795,7 @@ class CoreCrypto {
4659
4795
  * @param enrollment - the enrollment instance used to fetch the certificates
4660
4796
  * @param certificateChain - the raw response from ACME server
4661
4797
  * @param newKeyPackageCount - number of KeyPackages with new identity to generate
4798
+ * @returns a {@link RotateBundle} with commits to fan-out to other group members, KeyPackages to upload and old ones to delete
4662
4799
  */
4663
4800
  async e2eiRotateAll(enrollment, certificateChain, newKeyPackageCount) {
4664
4801
  const ffiRet = await __classPrivateFieldGet(this, _CoreCrypto_cc, "f").e2ei_rotate_all(enrollment.inner(), certificateChain, newKeyPackageCount);
@@ -4687,7 +4824,7 @@ class CoreCrypto {
4687
4824
  */
4688
4825
  async e2eiEnrollmentStashPop(handle) {
4689
4826
  const e2ei = await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").e2ei_enrollment_stash_pop(handle));
4690
- return new WireE2eIdentity(e2ei);
4827
+ return new E2eiEnrollment(e2ei);
4691
4828
  }
4692
4829
  /**
4693
4830
  * Indicates when to mark a conversation as degraded i.e. when not all its members have a X509.
@@ -4705,11 +4842,22 @@ class CoreCrypto {
4705
4842
  * Returns true when end-to-end-identity is enabled for the given Ciphersuite
4706
4843
  *
4707
4844
  * @param ciphersuite of the credential to check
4708
- * @returns true end-to-end identity is enabled for the given ciphersuite
4845
+ * @returns true if end-to-end identity is enabled for the given ciphersuite
4709
4846
  */
4710
4847
  async e2eiIsEnabled(ciphersuite) {
4711
4848
  return await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").e2ei_is_enabled(ciphersuite));
4712
4849
  }
4850
+ /**
4851
+ * From a given conversation, get the identity of the members supplied. Identity is only present for members with a
4852
+ * Certificate Credential (after turning on end-to-end identity).
4853
+ *
4854
+ * @param conversationId - identifier of the conversation
4855
+ * @param clientIds - identifiers of the user
4856
+ * @returns identities or if no member has a x509 certificate, it will return an empty List
4857
+ */
4858
+ async getUserIdentities(conversationId, clientIds) {
4859
+ return await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").get_user_identities(conversationId, clientIds));
4860
+ }
4713
4861
  /**
4714
4862
  * Returns the current version of {@link CoreCrypto}
4715
4863
  *
@@ -4727,21 +4875,21 @@ _a = CoreCrypto, _CoreCrypto_cc = new WeakMap(), _CoreCrypto_assertModuleLoaded
4727
4875
  };
4728
4876
  /** @hidden */
4729
4877
  _CoreCrypto_module = { value: void 0 };
4730
- class WireE2eIdentity {
4878
+ class E2eiEnrollment {
4731
4879
  /** @hidden */
4732
4880
  constructor(e2ei) {
4733
4881
  /** @hidden */
4734
- _WireE2eIdentity_e2ei.set(this, void 0);
4735
- __classPrivateFieldSet(this, _WireE2eIdentity_e2ei, e2ei, "f");
4882
+ _E2eiEnrollment_enrollment.set(this, void 0);
4883
+ __classPrivateFieldSet(this, _E2eiEnrollment_enrollment, e2ei, "f");
4736
4884
  }
4737
4885
  free() {
4738
- __classPrivateFieldGet(this, _WireE2eIdentity_e2ei, "f").free();
4886
+ __classPrivateFieldGet(this, _E2eiEnrollment_enrollment, "f").free();
4739
4887
  }
4740
4888
  /**
4741
4889
  * Should only be used internally
4742
4890
  */
4743
4891
  inner() {
4744
- return __classPrivateFieldGet(this, _WireE2eIdentity_e2ei, "f");
4892
+ return __classPrivateFieldGet(this, _E2eiEnrollment_enrollment, "f");
4745
4893
  }
4746
4894
  /**
4747
4895
  * Parses the response from `GET /acme/{provisioner-name}/directory`.
@@ -4753,7 +4901,7 @@ class WireE2eIdentity {
4753
4901
  */
4754
4902
  directoryResponse(directory) {
4755
4903
  try {
4756
- return __classPrivateFieldGet(this, _WireE2eIdentity_e2ei, "f").directory_response(directory);
4904
+ return __classPrivateFieldGet(this, _E2eiEnrollment_enrollment, "f").directory_response(directory);
4757
4905
  }
4758
4906
  catch (e) {
4759
4907
  throw CoreCryptoError.fromStdError(e);
@@ -4768,7 +4916,7 @@ class WireE2eIdentity {
4768
4916
  */
4769
4917
  newAccountRequest(previousNonce) {
4770
4918
  try {
4771
- return __classPrivateFieldGet(this, _WireE2eIdentity_e2ei, "f").new_account_request(previousNonce);
4919
+ return __classPrivateFieldGet(this, _E2eiEnrollment_enrollment, "f").new_account_request(previousNonce);
4772
4920
  }
4773
4921
  catch (e) {
4774
4922
  throw CoreCryptoError.fromStdError(e);
@@ -4781,7 +4929,7 @@ class WireE2eIdentity {
4781
4929
  */
4782
4930
  newAccountResponse(account) {
4783
4931
  try {
4784
- return __classPrivateFieldGet(this, _WireE2eIdentity_e2ei, "f").new_account_response(account);
4932
+ return __classPrivateFieldGet(this, _E2eiEnrollment_enrollment, "f").new_account_response(account);
4785
4933
  }
4786
4934
  catch (e) {
4787
4935
  throw CoreCryptoError.fromStdError(e);
@@ -4795,7 +4943,7 @@ class WireE2eIdentity {
4795
4943
  */
4796
4944
  newOrderRequest(previousNonce) {
4797
4945
  try {
4798
- return __classPrivateFieldGet(this, _WireE2eIdentity_e2ei, "f").new_order_request(previousNonce);
4946
+ return __classPrivateFieldGet(this, _E2eiEnrollment_enrollment, "f").new_order_request(previousNonce);
4799
4947
  }
4800
4948
  catch (e) {
4801
4949
  throw CoreCryptoError.fromStdError(e);
@@ -4809,7 +4957,7 @@ class WireE2eIdentity {
4809
4957
  */
4810
4958
  newOrderResponse(order) {
4811
4959
  try {
4812
- return __classPrivateFieldGet(this, _WireE2eIdentity_e2ei, "f").new_order_response(order);
4960
+ return __classPrivateFieldGet(this, _E2eiEnrollment_enrollment, "f").new_order_response(order);
4813
4961
  }
4814
4962
  catch (e) {
4815
4963
  throw CoreCryptoError.fromStdError(e);
@@ -4825,7 +4973,7 @@ class WireE2eIdentity {
4825
4973
  */
4826
4974
  newAuthzRequest(url, previousNonce) {
4827
4975
  try {
4828
- return __classPrivateFieldGet(this, _WireE2eIdentity_e2ei, "f").new_authz_request(url, previousNonce);
4976
+ return __classPrivateFieldGet(this, _E2eiEnrollment_enrollment, "f").new_authz_request(url, previousNonce);
4829
4977
  }
4830
4978
  catch (e) {
4831
4979
  throw CoreCryptoError.fromStdError(e);
@@ -4839,7 +4987,7 @@ class WireE2eIdentity {
4839
4987
  */
4840
4988
  newAuthzResponse(authz) {
4841
4989
  try {
4842
- return __classPrivateFieldGet(this, _WireE2eIdentity_e2ei, "f").new_authz_response(authz);
4990
+ return __classPrivateFieldGet(this, _E2eiEnrollment_enrollment, "f").new_authz_response(authz);
4843
4991
  }
4844
4992
  catch (e) {
4845
4993
  throw CoreCryptoError.fromStdError(e);
@@ -4858,7 +5006,7 @@ class WireE2eIdentity {
4858
5006
  */
4859
5007
  createDpopToken(expirySecs, backendNonce) {
4860
5008
  try {
4861
- return __classPrivateFieldGet(this, _WireE2eIdentity_e2ei, "f").create_dpop_token(expirySecs, backendNonce);
5009
+ return __classPrivateFieldGet(this, _E2eiEnrollment_enrollment, "f").create_dpop_token(expirySecs, backendNonce);
4862
5010
  }
4863
5011
  catch (e) {
4864
5012
  throw CoreCryptoError.fromStdError(e);
@@ -4873,7 +5021,7 @@ class WireE2eIdentity {
4873
5021
  */
4874
5022
  newDpopChallengeRequest(accessToken, previousNonce) {
4875
5023
  try {
4876
- return __classPrivateFieldGet(this, _WireE2eIdentity_e2ei, "f").new_dpop_challenge_request(accessToken, previousNonce);
5024
+ return __classPrivateFieldGet(this, _E2eiEnrollment_enrollment, "f").new_dpop_challenge_request(accessToken, previousNonce);
4877
5025
  }
4878
5026
  catch (e) {
4879
5027
  throw CoreCryptoError.fromStdError(e);
@@ -4888,7 +5036,7 @@ class WireE2eIdentity {
4888
5036
  */
4889
5037
  newOidcChallengeRequest(idToken, previousNonce) {
4890
5038
  try {
4891
- return __classPrivateFieldGet(this, _WireE2eIdentity_e2ei, "f").new_oidc_challenge_request(idToken, previousNonce);
5039
+ return __classPrivateFieldGet(this, _E2eiEnrollment_enrollment, "f").new_oidc_challenge_request(idToken, previousNonce);
4892
5040
  }
4893
5041
  catch (e) {
4894
5042
  throw CoreCryptoError.fromStdError(e);
@@ -4902,7 +5050,7 @@ class WireE2eIdentity {
4902
5050
  */
4903
5051
  newChallengeResponse(challenge) {
4904
5052
  try {
4905
- return __classPrivateFieldGet(this, _WireE2eIdentity_e2ei, "f").new_challenge_response(challenge);
5053
+ return __classPrivateFieldGet(this, _E2eiEnrollment_enrollment, "f").new_challenge_response(challenge);
4906
5054
  }
4907
5055
  catch (e) {
4908
5056
  throw CoreCryptoError.fromStdError(e);
@@ -4917,7 +5065,7 @@ class WireE2eIdentity {
4917
5065
  */
4918
5066
  checkOrderRequest(orderUrl, previousNonce) {
4919
5067
  try {
4920
- return __classPrivateFieldGet(this, _WireE2eIdentity_e2ei, "f").check_order_request(orderUrl, previousNonce);
5068
+ return __classPrivateFieldGet(this, _E2eiEnrollment_enrollment, "f").check_order_request(orderUrl, previousNonce);
4921
5069
  }
4922
5070
  catch (e) {
4923
5071
  throw CoreCryptoError.fromStdError(e);
@@ -4927,12 +5075,12 @@ class WireE2eIdentity {
4927
5075
  * Parses the response from `POST /acme/{provisioner-name}/order/{order-id}`.
4928
5076
  *
4929
5077
  * @param order HTTP response body
4930
- * @return the finalize url to use with {@link finalizeRequest}
5078
+ * @return finalize url to use with {@link finalizeRequest}
4931
5079
  * @see https://www.rfc-editor.org/rfc/rfc8555.html#section-7.4
4932
5080
  */
4933
5081
  checkOrderResponse(order) {
4934
5082
  try {
4935
- return __classPrivateFieldGet(this, _WireE2eIdentity_e2ei, "f").check_order_response(order);
5083
+ return __classPrivateFieldGet(this, _E2eiEnrollment_enrollment, "f").check_order_response(order);
4936
5084
  }
4937
5085
  catch (e) {
4938
5086
  throw CoreCryptoError.fromStdError(e);
@@ -4946,7 +5094,7 @@ class WireE2eIdentity {
4946
5094
  */
4947
5095
  finalizeRequest(previousNonce) {
4948
5096
  try {
4949
- return __classPrivateFieldGet(this, _WireE2eIdentity_e2ei, "f").finalize_request(previousNonce);
5097
+ return __classPrivateFieldGet(this, _E2eiEnrollment_enrollment, "f").finalize_request(previousNonce);
4950
5098
  }
4951
5099
  catch (e) {
4952
5100
  throw CoreCryptoError.fromStdError(e);
@@ -4961,7 +5109,7 @@ class WireE2eIdentity {
4961
5109
  */
4962
5110
  finalizeResponse(finalize) {
4963
5111
  try {
4964
- return __classPrivateFieldGet(this, _WireE2eIdentity_e2ei, "f").finalize_response(finalize);
5112
+ return __classPrivateFieldGet(this, _E2eiEnrollment_enrollment, "f").finalize_response(finalize);
4965
5113
  }
4966
5114
  catch (e) {
4967
5115
  throw CoreCryptoError.fromStdError(e);
@@ -4975,14 +5123,14 @@ class WireE2eIdentity {
4975
5123
  */
4976
5124
  certificateRequest(previousNonce) {
4977
5125
  try {
4978
- return __classPrivateFieldGet(this, _WireE2eIdentity_e2ei, "f").certificate_request(previousNonce);
5126
+ return __classPrivateFieldGet(this, _E2eiEnrollment_enrollment, "f").certificate_request(previousNonce);
4979
5127
  }
4980
5128
  catch (e) {
4981
5129
  throw CoreCryptoError.fromStdError(e);
4982
5130
  }
4983
5131
  }
4984
5132
  }
4985
- _WireE2eIdentity_e2ei = new WeakMap();
5133
+ _E2eiEnrollment_enrollment = new WeakMap();
4986
5134
  /**
4987
5135
  * Indicates the state of a Conversation regarding end-to-end identity.
4988
5136
  * Note: this does not check pending state (pending commit, pending proposals) so it does not
@@ -5004,4 +5152,4 @@ var E2eiConversationState;
5004
5152
  E2eiConversationState[E2eiConversationState["NotEnabled"] = 3] = "NotEnabled";
5005
5153
  })(E2eiConversationState || (E2eiConversationState = {}));
5006
5154
 
5007
- export { Ciphersuite, CoreCrypto, CoreCryptoError, CredentialType, E2eiConversationState, ExternalProposalType, GroupInfoEncryptionType, ProposalType, RatchetTreeType, WireE2eIdentity, WirePolicy };
5155
+ export { Ciphersuite, CoreCrypto, CoreCryptoError, CredentialType, E2eiConversationState, E2eiEnrollment, ExternalProposalType, GroupInfoEncryptionType, ProposalType, RatchetTreeType, WirePolicy };