shogun-core 6.2.3 → 6.3.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.
Files changed (233) hide show
  1. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed448_js.shogun-core.js +93 -341
  2. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed448_js.shogun-core.js.map +1 -1
  3. package/dist/browser/shogun-core.js +138850 -146638
  4. package/dist/browser/shogun-core.js.map +1 -1
  5. package/dist/{core.js → src/core.js} +167 -107
  6. package/dist/src/crypto/asymmetric.js +168 -0
  7. package/dist/src/crypto/double-ratchet.js +908 -0
  8. package/dist/src/crypto/file-encryption.js +352 -0
  9. package/dist/src/crypto/hashing.js +160 -0
  10. package/dist/src/crypto/index.js +18 -0
  11. package/dist/{crypto → src/crypto}/mls-codec.js +24 -34
  12. package/dist/src/crypto/mls.js +734 -0
  13. package/dist/src/crypto/pgp.js +619 -0
  14. package/dist/{crypto → src/crypto}/random-generation.js +125 -103
  15. package/dist/src/crypto/sframe.js +466 -0
  16. package/dist/src/crypto/signal-protocol.js +943 -0
  17. package/dist/src/crypto/symmetric.js +165 -0
  18. package/dist/src/crypto/utils.js +220 -0
  19. package/dist/src/examples/auth-test.js +535 -0
  20. package/dist/src/examples/crypto-identity-example.js +294 -0
  21. package/dist/src/examples/crypto-working-test.js +149 -0
  22. package/dist/src/examples/double-ratchet-test.js +240 -0
  23. package/dist/src/examples/mls-3-member-test.js +183 -0
  24. package/dist/src/examples/mls-multi-member.js +439 -0
  25. package/dist/src/examples/mls-sframe-test.js +491 -0
  26. package/dist/src/examples/mls-simple-test.js +122 -0
  27. package/dist/src/examples/pgp-example.js +354 -0
  28. package/dist/src/examples/random-generation-test.js +191 -0
  29. package/dist/src/examples/shogun-core-example.js +204 -0
  30. package/dist/src/examples/signal-protocol-test.js +82 -0
  31. package/dist/src/examples/zkproof-credentials-example.js +357 -0
  32. package/dist/src/examples/zkproof-example.js +357 -0
  33. package/dist/src/gundb/crypto.js +420 -0
  34. package/dist/src/gundb/db.js +728 -0
  35. package/dist/src/gundb/derive.js +327 -0
  36. package/dist/src/gundb/errors.js +115 -0
  37. package/dist/src/gundb/gun-es.js +8 -0
  38. package/dist/src/gundb/index.js +5 -0
  39. package/dist/{gundb → src/gundb}/rxjs.js +147 -111
  40. package/dist/{gundb → src/gundb}/types.js +1 -2
  41. package/dist/src/index.js +19 -0
  42. package/dist/src/interfaces/events.js +57 -0
  43. package/dist/{interfaces → src/interfaces}/shogun.js +4 -7
  44. package/dist/src/managers/AuthManager.js +301 -0
  45. package/dist/src/managers/CoreInitializer.js +304 -0
  46. package/dist/src/managers/CryptoIdentityManager.js +230 -0
  47. package/dist/{managers → src/managers}/EventManager.js +19 -21
  48. package/dist/{managers → src/managers}/PluginManager.js +123 -89
  49. package/dist/src/plugins/base.js +90 -0
  50. package/dist/src/plugins/index.js +17 -0
  51. package/dist/src/plugins/nostr/index.js +4 -0
  52. package/dist/src/plugins/nostr/nostrConnector.js +539 -0
  53. package/dist/src/plugins/nostr/nostrConnectorPlugin.js +663 -0
  54. package/dist/src/plugins/nostr/nostrSigner.js +414 -0
  55. package/dist/src/plugins/smartwallet/index.js +2 -0
  56. package/dist/src/plugins/smartwallet/smartWalletPlugin.js +824 -0
  57. package/dist/src/plugins/web3/index.js +4 -0
  58. package/dist/src/plugins/web3/types.js +1 -0
  59. package/dist/src/plugins/web3/web3Connector.js +738 -0
  60. package/dist/src/plugins/web3/web3ConnectorPlugin.js +639 -0
  61. package/dist/src/plugins/web3/web3Signer.js +432 -0
  62. package/dist/src/plugins/webauthn/index.js +3 -0
  63. package/dist/{plugins → src/plugins}/webauthn/types.js +2 -5
  64. package/dist/src/plugins/webauthn/webauthn.js +647 -0
  65. package/dist/src/plugins/webauthn/webauthnPlugin.js +689 -0
  66. package/dist/src/plugins/webauthn/webauthnSigner.js +419 -0
  67. package/dist/{plugins → src/plugins}/zkproof/index.js +3 -10
  68. package/dist/src/plugins/zkproof/types.js +1 -0
  69. package/dist/src/plugins/zkproof/zkCredentials.js +287 -0
  70. package/dist/src/plugins/zkproof/zkProofConnector.js +267 -0
  71. package/dist/src/plugins/zkproof/zkProofPlugin.js +405 -0
  72. package/dist/src/storage/storage.js +189 -0
  73. package/dist/src/utils/errorHandler.js +339 -0
  74. package/dist/{utils → src/utils}/eventEmitter.js +26 -26
  75. package/dist/{utils → src/utils}/seedPhrase.js +23 -32
  76. package/dist/{utils → src/utils}/validation.js +14 -21
  77. package/dist/tsconfig.tsbuildinfo +1 -0
  78. package/dist/types/{crypto → src/crypto}/double-ratchet.d.ts +1 -1
  79. package/dist/types/{crypto → src/crypto}/signal-protocol.d.ts +25 -0
  80. package/dist/types/{crypto → src/crypto}/types.d.ts +3 -1
  81. package/dist/types/src/examples/crypto-working-test.d.ts +1 -0
  82. package/dist/types/src/examples/double-ratchet-test.d.ts +1 -0
  83. package/dist/types/src/examples/mls-sframe-test.d.ts +1 -0
  84. package/dist/types/src/examples/random-generation-test.d.ts +1 -0
  85. package/dist/types/src/examples/signal-protocol-test.d.ts +1 -0
  86. package/dist/types/{gundb → src/gundb}/db.d.ts +14 -1
  87. package/dist/types/src/gundb/gun-es.d.ts +8 -0
  88. package/dist/types/src/gundb/min.d.ts +3 -0
  89. package/dist/types/{index.d.ts → src/index.d.ts} +1 -0
  90. package/package.json +14 -11
  91. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_curve_js-node_modules_noble_curves_esm_-1ce4ed.shogun-core.js +0 -1651
  92. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_curve_js-node_modules_noble_curves_esm_-1ce4ed.shogun-core.js.map +0 -1
  93. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_nist_js.shogun-core.js +0 -1608
  94. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_nist_js.shogun-core.js.map +0 -1
  95. package/dist/crypto/asymmetric.js +0 -99
  96. package/dist/crypto/double-ratchet.js +0 -370
  97. package/dist/crypto/file-encryption.js +0 -213
  98. package/dist/crypto/hashing.js +0 -87
  99. package/dist/crypto/index.js +0 -34
  100. package/dist/crypto/mls.js +0 -569
  101. package/dist/crypto/pgp.js +0 -390
  102. package/dist/crypto/sframe.js +0 -352
  103. package/dist/crypto/signal-protocol.js +0 -456
  104. package/dist/crypto/symmetric.js +0 -91
  105. package/dist/crypto/types.js +0 -2
  106. package/dist/crypto/utils.js +0 -140
  107. package/dist/examples/auth-test.js +0 -453
  108. package/dist/examples/crypto-identity-example.js +0 -196
  109. package/dist/examples/crypto-working-test.js +0 -83
  110. package/dist/examples/double-ratchet-test.js +0 -155
  111. package/dist/examples/mls-3-member-test.js +0 -97
  112. package/dist/examples/mls-multi-member.js +0 -153
  113. package/dist/examples/mls-sframe-test.js +0 -307
  114. package/dist/examples/mls-simple-test.js +0 -58
  115. package/dist/examples/pgp-example.js +0 -200
  116. package/dist/examples/random-generation-test.js +0 -151
  117. package/dist/examples/shogun-core-example.js +0 -150
  118. package/dist/examples/signal-protocol-test.js +0 -38
  119. package/dist/examples/zkproof-credentials-example.js +0 -217
  120. package/dist/examples/zkproof-example.js +0 -242
  121. package/dist/gundb/crypto.js +0 -306
  122. package/dist/gundb/db.js +0 -485
  123. package/dist/gundb/derive.js +0 -232
  124. package/dist/gundb/errors.js +0 -76
  125. package/dist/gundb/gun-es.js +0 -12
  126. package/dist/gundb/index.js +0 -21
  127. package/dist/gundb/min.js +0 -10
  128. package/dist/index.esm.js +0 -22
  129. package/dist/index.js +0 -47
  130. package/dist/interfaces/common.js +0 -2
  131. package/dist/interfaces/events.js +0 -40
  132. package/dist/interfaces/plugin.js +0 -2
  133. package/dist/managers/AuthManager.js +0 -226
  134. package/dist/managers/CoreInitializer.js +0 -250
  135. package/dist/managers/CryptoIdentityManager.js +0 -138
  136. package/dist/plugins/base.js +0 -50
  137. package/dist/plugins/index.js +0 -32
  138. package/dist/plugins/nostr/index.js +0 -20
  139. package/dist/plugins/nostr/nostrConnector.js +0 -419
  140. package/dist/plugins/nostr/nostrConnectorPlugin.js +0 -453
  141. package/dist/plugins/nostr/nostrSigner.js +0 -319
  142. package/dist/plugins/nostr/types.js +0 -2
  143. package/dist/plugins/smartwallet/index.js +0 -18
  144. package/dist/plugins/smartwallet/smartWalletPlugin.js +0 -511
  145. package/dist/plugins/smartwallet/types.js +0 -2
  146. package/dist/plugins/web3/index.js +0 -20
  147. package/dist/plugins/web3/types.js +0 -2
  148. package/dist/plugins/web3/web3Connector.js +0 -533
  149. package/dist/plugins/web3/web3ConnectorPlugin.js +0 -455
  150. package/dist/plugins/web3/web3Signer.js +0 -314
  151. package/dist/plugins/webauthn/index.js +0 -19
  152. package/dist/plugins/webauthn/webauthn.js +0 -496
  153. package/dist/plugins/webauthn/webauthnPlugin.js +0 -490
  154. package/dist/plugins/webauthn/webauthnSigner.js +0 -310
  155. package/dist/plugins/zkproof/types.js +0 -2
  156. package/dist/plugins/zkproof/zkCredentials.js +0 -216
  157. package/dist/plugins/zkproof/zkProofConnector.js +0 -198
  158. package/dist/plugins/zkproof/zkProofPlugin.js +0 -272
  159. package/dist/storage/storage.js +0 -145
  160. package/dist/types/gundb/gun-es.d.ts +0 -8
  161. package/dist/utils/errorHandler.js +0 -246
  162. /package/dist/{types/examples/crypto-working-test.d.ts → src/crypto/types.js} +0 -0
  163. /package/dist/{types/gundb/min.d.ts → src/gundb/min.js} +0 -0
  164. /package/dist/{types/examples/double-ratchet-test.d.ts → src/interfaces/common.js} +0 -0
  165. /package/dist/{types/examples/mls-sframe-test.d.ts → src/interfaces/plugin.js} +0 -0
  166. /package/dist/{types/examples/random-generation-test.d.ts → src/plugins/nostr/types.js} +0 -0
  167. /package/dist/{types/examples/signal-protocol-test.d.ts → src/plugins/smartwallet/types.js} +0 -0
  168. /package/dist/types/{core.d.ts → src/core.d.ts} +0 -0
  169. /package/dist/types/{crypto → src/crypto}/asymmetric.d.ts +0 -0
  170. /package/dist/types/{crypto → src/crypto}/file-encryption.d.ts +0 -0
  171. /package/dist/types/{crypto → src/crypto}/hashing.d.ts +0 -0
  172. /package/dist/types/{crypto → src/crypto}/index.d.ts +0 -0
  173. /package/dist/types/{crypto → src/crypto}/mls-codec.d.ts +0 -0
  174. /package/dist/types/{crypto → src/crypto}/mls.d.ts +0 -0
  175. /package/dist/types/{crypto → src/crypto}/pgp.d.ts +0 -0
  176. /package/dist/types/{crypto → src/crypto}/random-generation.d.ts +0 -0
  177. /package/dist/types/{crypto → src/crypto}/sframe.d.ts +0 -0
  178. /package/dist/types/{crypto → src/crypto}/symmetric.d.ts +0 -0
  179. /package/dist/types/{crypto → src/crypto}/utils.d.ts +0 -0
  180. /package/dist/types/{examples → src/examples}/auth-test.d.ts +0 -0
  181. /package/dist/types/{examples → src/examples}/crypto-identity-example.d.ts +0 -0
  182. /package/dist/types/{examples → src/examples}/mls-3-member-test.d.ts +0 -0
  183. /package/dist/types/{examples → src/examples}/mls-multi-member.d.ts +0 -0
  184. /package/dist/types/{examples → src/examples}/mls-simple-test.d.ts +0 -0
  185. /package/dist/types/{examples → src/examples}/pgp-example.d.ts +0 -0
  186. /package/dist/types/{examples → src/examples}/shogun-core-example.d.ts +0 -0
  187. /package/dist/types/{examples → src/examples}/zkproof-credentials-example.d.ts +0 -0
  188. /package/dist/types/{examples → src/examples}/zkproof-example.d.ts +0 -0
  189. /package/dist/types/{gundb → src/gundb}/crypto.d.ts +0 -0
  190. /package/dist/types/{gundb → src/gundb}/derive.d.ts +0 -0
  191. /package/dist/types/{gundb → src/gundb}/errors.d.ts +0 -0
  192. /package/dist/types/{gundb → src/gundb}/index.d.ts +0 -0
  193. /package/dist/types/{gundb → src/gundb}/rxjs.d.ts +0 -0
  194. /package/dist/types/{gundb → src/gundb}/types.d.ts +0 -0
  195. /package/dist/types/{interfaces → src/interfaces}/common.d.ts +0 -0
  196. /package/dist/types/{interfaces → src/interfaces}/events.d.ts +0 -0
  197. /package/dist/types/{interfaces → src/interfaces}/plugin.d.ts +0 -0
  198. /package/dist/types/{interfaces → src/interfaces}/shogun.d.ts +0 -0
  199. /package/dist/types/{managers → src/managers}/AuthManager.d.ts +0 -0
  200. /package/dist/types/{managers → src/managers}/CoreInitializer.d.ts +0 -0
  201. /package/dist/types/{managers → src/managers}/CryptoIdentityManager.d.ts +0 -0
  202. /package/dist/types/{managers → src/managers}/EventManager.d.ts +0 -0
  203. /package/dist/types/{managers → src/managers}/PluginManager.d.ts +0 -0
  204. /package/dist/types/{plugins → src/plugins}/base.d.ts +0 -0
  205. /package/dist/types/{plugins → src/plugins}/index.d.ts +0 -0
  206. /package/dist/types/{plugins → src/plugins}/nostr/index.d.ts +0 -0
  207. /package/dist/types/{plugins → src/plugins}/nostr/nostrConnector.d.ts +0 -0
  208. /package/dist/types/{plugins → src/plugins}/nostr/nostrConnectorPlugin.d.ts +0 -0
  209. /package/dist/types/{plugins → src/plugins}/nostr/nostrSigner.d.ts +0 -0
  210. /package/dist/types/{plugins → src/plugins}/nostr/types.d.ts +0 -0
  211. /package/dist/types/{plugins → src/plugins}/smartwallet/index.d.ts +0 -0
  212. /package/dist/types/{plugins → src/plugins}/smartwallet/smartWalletPlugin.d.ts +0 -0
  213. /package/dist/types/{plugins → src/plugins}/smartwallet/types.d.ts +0 -0
  214. /package/dist/types/{plugins → src/plugins}/web3/index.d.ts +0 -0
  215. /package/dist/types/{plugins → src/plugins}/web3/types.d.ts +0 -0
  216. /package/dist/types/{plugins → src/plugins}/web3/web3Connector.d.ts +0 -0
  217. /package/dist/types/{plugins → src/plugins}/web3/web3ConnectorPlugin.d.ts +0 -0
  218. /package/dist/types/{plugins → src/plugins}/web3/web3Signer.d.ts +0 -0
  219. /package/dist/types/{plugins → src/plugins}/webauthn/index.d.ts +0 -0
  220. /package/dist/types/{plugins → src/plugins}/webauthn/types.d.ts +0 -0
  221. /package/dist/types/{plugins → src/plugins}/webauthn/webauthn.d.ts +0 -0
  222. /package/dist/types/{plugins → src/plugins}/webauthn/webauthnPlugin.d.ts +0 -0
  223. /package/dist/types/{plugins → src/plugins}/webauthn/webauthnSigner.d.ts +0 -0
  224. /package/dist/types/{plugins → src/plugins}/zkproof/index.d.ts +0 -0
  225. /package/dist/types/{plugins → src/plugins}/zkproof/types.d.ts +0 -0
  226. /package/dist/types/{plugins → src/plugins}/zkproof/zkCredentials.d.ts +0 -0
  227. /package/dist/types/{plugins → src/plugins}/zkproof/zkProofConnector.d.ts +0 -0
  228. /package/dist/types/{plugins → src/plugins}/zkproof/zkProofPlugin.d.ts +0 -0
  229. /package/dist/types/{storage → src/storage}/storage.d.ts +0 -0
  230. /package/dist/types/{utils → src/utils}/errorHandler.d.ts +0 -0
  231. /package/dist/types/{utils → src/utils}/eventEmitter.d.ts +0 -0
  232. /package/dist/types/{utils → src/utils}/seedPhrase.d.ts +0 -0
  233. /package/dist/types/{utils → src/utils}/validation.d.ts +0 -0
@@ -0,0 +1,439 @@
1
+ /**
2
+ * MLS Working Multi-Member Test
3
+ * Usa l'approccio corretto basato sull'implementazione funzionante
4
+ */
5
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7
+ return new (P || (P = Promise))(function (resolve, reject) {
8
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
11
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
12
+ });
13
+ };
14
+ var __generator = (this && this.__generator) || function (thisArg, body) {
15
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
16
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
17
+ function verb(n) { return function (v) { return step([n, v]); }; }
18
+ function step(op) {
19
+ if (f) throw new TypeError("Generator is already executing.");
20
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
21
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
22
+ if (y = 0, t) op = [op[0] & 2, t.value];
23
+ switch (op[0]) {
24
+ case 0: case 1: t = op; break;
25
+ case 4: _.label++; return { value: op[1], done: false };
26
+ case 5: _.label++; y = op[1]; op = [0]; continue;
27
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
28
+ default:
29
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
30
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
31
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
32
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
33
+ if (t[2]) _.ops.pop();
34
+ _.trys.pop(); continue;
35
+ }
36
+ op = body.call(thisArg, _);
37
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
38
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
39
+ }
40
+ };
41
+ var __values = (this && this.__values) || function(o) {
42
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
43
+ if (m) return m.call(o);
44
+ if (o && typeof o.length === "number") return {
45
+ next: function () {
46
+ if (o && i >= o.length) o = void 0;
47
+ return { value: o && o[i++], done: !o };
48
+ }
49
+ };
50
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
51
+ };
52
+ var __read = (this && this.__read) || function (o, n) {
53
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
54
+ if (!m) return o;
55
+ var i = m.call(o), r, ar = [], e;
56
+ try {
57
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
58
+ }
59
+ catch (error) { e = { error: error }; }
60
+ finally {
61
+ try {
62
+ if (r && !r.done && (m = i["return"])) m.call(i);
63
+ }
64
+ finally { if (e) throw e.error; }
65
+ }
66
+ return ar;
67
+ };
68
+ import { MLSManager } from "../crypto/index.js";
69
+ function testMLSWorkingMultiMembers() {
70
+ return __awaiter(this, void 0, void 0, function () {
71
+ var members, managers, members_1, members_1_1, memberId, manager, e_1_1, groupId, alice, otherMembers, keyPackages, addResult, otherMembers_1, otherMembers_1_1, memberId, manager, e_2_1, epochInfos, members_2, members_2_1, memberId, info, e_3_1, epochInfos_1, epochInfos_1_1, _a, memberId, epoch, epochs_1, allSameEpoch, members_3, members_3_1, senderId, sender, message, envelope, successCount, managers_1, managers_1_1, _b, memberId, manager, decrypted, error_1, e_4_1, e_5_1, initiator, updateCommit, managers_2, managers_2_1, _c, memberId, manager, error_2, e_6_1, testMessage, aliceEnvelope, postRotationSuccess, managers_3, managers_3_1, _d, memberId, manager, decrypted, error_3, e_7_1, managers_4, managers_4_1, _e, memberId, manager, e_8_1, error_4;
72
+ var e_1, _f, e_2, _g, e_3, _h, e_9, _j, e_5, _k, e_4, _l, e_6, _m, e_7, _o, e_8, _p;
73
+ return __generator(this, function (_q) {
74
+ switch (_q.label) {
75
+ case 0:
76
+ console.log("🚀 Starting MLS Working Multi-Member Test");
77
+ console.log("=".repeat(50));
78
+ members = ["alice", "bob", "charlie", "david", "eve"];
79
+ managers = new Map();
80
+ _q.label = 1;
81
+ case 1:
82
+ _q.trys.push([1, 76, , 77]);
83
+ // Step 1: Initialize all managers
84
+ console.log("\n📋 Step 1: Initializing all managers");
85
+ _q.label = 2;
86
+ case 2:
87
+ _q.trys.push([2, 7, 8, 9]);
88
+ members_1 = __values(members), members_1_1 = members_1.next();
89
+ _q.label = 3;
90
+ case 3:
91
+ if (!!members_1_1.done) return [3 /*break*/, 6];
92
+ memberId = members_1_1.value;
93
+ manager = new MLSManager(memberId);
94
+ return [4 /*yield*/, manager.initialize()];
95
+ case 4:
96
+ _q.sent();
97
+ managers.set(memberId, manager);
98
+ console.log("\u2705 ".concat(memberId, " initialized"));
99
+ _q.label = 5;
100
+ case 5:
101
+ members_1_1 = members_1.next();
102
+ return [3 /*break*/, 3];
103
+ case 6: return [3 /*break*/, 9];
104
+ case 7:
105
+ e_1_1 = _q.sent();
106
+ e_1 = { error: e_1_1 };
107
+ return [3 /*break*/, 9];
108
+ case 8:
109
+ try {
110
+ if (members_1_1 && !members_1_1.done && (_f = members_1.return)) _f.call(members_1);
111
+ }
112
+ finally { if (e_1) throw e_1.error; }
113
+ return [7 /*endfinally*/];
114
+ case 9:
115
+ // Step 2: Alice creates group
116
+ console.log("\n📋 Step 2: Creating group");
117
+ groupId = "working-multi-member-group";
118
+ alice = managers.get("alice");
119
+ return [4 /*yield*/, alice.createGroup(groupId)];
120
+ case 10:
121
+ _q.sent();
122
+ console.log("✅ Group created by Alice");
123
+ // Step 3: Add all members at once (this is the key!)
124
+ console.log("\n📋 Step 3: Adding all members at once");
125
+ otherMembers = members.slice(1);
126
+ keyPackages = otherMembers.map(function (id) { return managers.get(id).getKeyPackage(); });
127
+ console.log("\u2795 Adding ".concat(otherMembers.length, " members: ").concat(otherMembers.join(", ")));
128
+ return [4 /*yield*/, alice.addMembers(groupId, keyPackages)];
129
+ case 11:
130
+ addResult = _q.sent();
131
+ console.log("✅ All members added by Alice");
132
+ // Step 4: All other members join via welcome
133
+ console.log("\n📋 Step 4: All members join via welcome");
134
+ _q.label = 12;
135
+ case 12:
136
+ _q.trys.push([12, 17, 18, 19]);
137
+ otherMembers_1 = __values(otherMembers), otherMembers_1_1 = otherMembers_1.next();
138
+ _q.label = 13;
139
+ case 13:
140
+ if (!!otherMembers_1_1.done) return [3 /*break*/, 16];
141
+ memberId = otherMembers_1_1.value;
142
+ manager = managers.get(memberId);
143
+ return [4 /*yield*/, manager.processWelcome(addResult.welcome, addResult.ratchetTree)];
144
+ case 14:
145
+ _q.sent();
146
+ console.log("\u2705 ".concat(memberId, " joined group"));
147
+ _q.label = 15;
148
+ case 15:
149
+ otherMembers_1_1 = otherMembers_1.next();
150
+ return [3 /*break*/, 13];
151
+ case 16: return [3 /*break*/, 19];
152
+ case 17:
153
+ e_2_1 = _q.sent();
154
+ e_2 = { error: e_2_1 };
155
+ return [3 /*break*/, 19];
156
+ case 18:
157
+ try {
158
+ if (otherMembers_1_1 && !otherMembers_1_1.done && (_g = otherMembers_1.return)) _g.call(otherMembers_1);
159
+ }
160
+ finally { if (e_2) throw e_2.error; }
161
+ return [7 /*endfinally*/];
162
+ case 19:
163
+ // Step 5: Verify synchronization
164
+ console.log("\n📋 Step 5: Verifying synchronization");
165
+ epochInfos = new Map();
166
+ _q.label = 20;
167
+ case 20:
168
+ _q.trys.push([20, 25, 26, 27]);
169
+ members_2 = __values(members), members_2_1 = members_2.next();
170
+ _q.label = 21;
171
+ case 21:
172
+ if (!!members_2_1.done) return [3 /*break*/, 24];
173
+ memberId = members_2_1.value;
174
+ return [4 /*yield*/, managers.get(memberId).getGroupKeyInfo(groupId)];
175
+ case 22:
176
+ info = _q.sent();
177
+ epochInfos.set(memberId, info === null || info === void 0 ? void 0 : info.epoch);
178
+ _q.label = 23;
179
+ case 23:
180
+ members_2_1 = members_2.next();
181
+ return [3 /*break*/, 21];
182
+ case 24: return [3 /*break*/, 27];
183
+ case 25:
184
+ e_3_1 = _q.sent();
185
+ e_3 = { error: e_3_1 };
186
+ return [3 /*break*/, 27];
187
+ case 26:
188
+ try {
189
+ if (members_2_1 && !members_2_1.done && (_h = members_2.return)) _h.call(members_2);
190
+ }
191
+ finally { if (e_3) throw e_3.error; }
192
+ return [7 /*endfinally*/];
193
+ case 27:
194
+ console.log("📊 Epoch verification:");
195
+ try {
196
+ for (epochInfos_1 = __values(epochInfos), epochInfos_1_1 = epochInfos_1.next(); !epochInfos_1_1.done; epochInfos_1_1 = epochInfos_1.next()) {
197
+ _a = __read(epochInfos_1_1.value, 2), memberId = _a[0], epoch = _a[1];
198
+ console.log(" ".concat(memberId, ": ").concat(epoch));
199
+ }
200
+ }
201
+ catch (e_9_1) { e_9 = { error: e_9_1 }; }
202
+ finally {
203
+ try {
204
+ if (epochInfos_1_1 && !epochInfos_1_1.done && (_j = epochInfos_1.return)) _j.call(epochInfos_1);
205
+ }
206
+ finally { if (e_9) throw e_9.error; }
207
+ }
208
+ epochs_1 = Array.from(epochInfos.values());
209
+ allSameEpoch = epochs_1.every(function (epoch) { return epoch === epochs_1[0]; });
210
+ if (!allSameEpoch) {
211
+ console.log("\u274C CRITICAL: Members at different epochs - aborting test");
212
+ return [2 /*return*/];
213
+ }
214
+ console.log("\u2705 All ".concat(members.length, " members synchronized at epoch ").concat(epochs_1[0]));
215
+ // Step 6: Test message exchange
216
+ console.log("\n📋 Step 6: Testing message exchange");
217
+ _q.label = 28;
218
+ case 28:
219
+ _q.trys.push([28, 43, 44, 45]);
220
+ members_3 = __values(members), members_3_1 = members_3.next();
221
+ _q.label = 29;
222
+ case 29:
223
+ if (!!members_3_1.done) return [3 /*break*/, 42];
224
+ senderId = members_3_1.value;
225
+ console.log("\n\uD83D\uDCAC ".concat(senderId, " sending message..."));
226
+ sender = managers.get(senderId);
227
+ message = "Hello from ".concat(senderId, " to everyone!");
228
+ return [4 /*yield*/, sender.encryptMessage(groupId, message)];
229
+ case 30:
230
+ envelope = _q.sent();
231
+ console.log("\u2705 ".concat(senderId, " encrypted message"));
232
+ successCount = 0;
233
+ _q.label = 31;
234
+ case 31:
235
+ _q.trys.push([31, 38, 39, 40]);
236
+ managers_1 = (e_4 = void 0, __values(managers)), managers_1_1 = managers_1.next();
237
+ _q.label = 32;
238
+ case 32:
239
+ if (!!managers_1_1.done) return [3 /*break*/, 37];
240
+ _b = __read(managers_1_1.value, 2), memberId = _b[0], manager = _b[1];
241
+ if (memberId === senderId) {
242
+ console.log("\u2705 ".concat(memberId, " (sender) does not need to decrypt their own message."));
243
+ successCount++;
244
+ return [3 /*break*/, 36];
245
+ }
246
+ _q.label = 33;
247
+ case 33:
248
+ _q.trys.push([33, 35, , 36]);
249
+ return [4 /*yield*/, manager.decryptMessage(envelope)];
250
+ case 34:
251
+ decrypted = _q.sent();
252
+ console.log("\u2705 ".concat(memberId, " decrypted: \"").concat(decrypted, "\""));
253
+ successCount++;
254
+ return [3 /*break*/, 36];
255
+ case 35:
256
+ error_1 = _q.sent();
257
+ console.error("\u274C ".concat(memberId, " failed to decrypt:"), error_1);
258
+ return [3 /*break*/, 36];
259
+ case 36:
260
+ managers_1_1 = managers_1.next();
261
+ return [3 /*break*/, 32];
262
+ case 37: return [3 /*break*/, 40];
263
+ case 38:
264
+ e_4_1 = _q.sent();
265
+ e_4 = { error: e_4_1 };
266
+ return [3 /*break*/, 40];
267
+ case 39:
268
+ try {
269
+ if (managers_1_1 && !managers_1_1.done && (_l = managers_1.return)) _l.call(managers_1);
270
+ }
271
+ finally { if (e_4) throw e_4.error; }
272
+ return [7 /*endfinally*/];
273
+ case 40:
274
+ if (successCount === members.length) {
275
+ console.log("\uD83C\uDF89 All ".concat(members.length, " members successfully decrypted ").concat(senderId, "'s message"));
276
+ }
277
+ else {
278
+ console.log("\u26A0\uFE0F Only ".concat(successCount, "/").concat(members.length, " members could decrypt ").concat(senderId, "'s message"));
279
+ }
280
+ _q.label = 41;
281
+ case 41:
282
+ members_3_1 = members_3.next();
283
+ return [3 /*break*/, 29];
284
+ case 42: return [3 /*break*/, 45];
285
+ case 43:
286
+ e_5_1 = _q.sent();
287
+ e_5 = { error: e_5_1 };
288
+ return [3 /*break*/, 45];
289
+ case 44:
290
+ try {
291
+ if (members_3_1 && !members_3_1.done && (_k = members_3.return)) _k.call(members_3);
292
+ }
293
+ finally { if (e_5) throw e_5.error; }
294
+ return [7 /*endfinally*/];
295
+ case 45:
296
+ // Step 7: Test key rotation
297
+ console.log("\n📋 Step 7: Testing key rotation");
298
+ initiator = managers.get("alice");
299
+ console.log("🔄 Alice initiating key rotation...");
300
+ return [4 /*yield*/, initiator.updateKey(groupId)];
301
+ case 46:
302
+ updateCommit = _q.sent();
303
+ console.log("✅ Key rotation commit created");
304
+ _q.label = 47;
305
+ case 47:
306
+ _q.trys.push([47, 54, 55, 56]);
307
+ managers_2 = __values(managers), managers_2_1 = managers_2.next();
308
+ _q.label = 48;
309
+ case 48:
310
+ if (!!managers_2_1.done) return [3 /*break*/, 53];
311
+ _c = __read(managers_2_1.value, 2), memberId = _c[0], manager = _c[1];
312
+ if (memberId === initiator.getUserId()) {
313
+ console.log("\u2705 ".concat(memberId, " (initiator) already processed key rotation."));
314
+ return [3 /*break*/, 52];
315
+ }
316
+ _q.label = 49;
317
+ case 49:
318
+ _q.trys.push([49, 51, , 52]);
319
+ return [4 /*yield*/, manager.processCommit(groupId, updateCommit)];
320
+ case 50:
321
+ _q.sent();
322
+ console.log("\u2705 ".concat(memberId, " processed key rotation"));
323
+ return [3 /*break*/, 52];
324
+ case 51:
325
+ error_2 = _q.sent();
326
+ console.error("\u274C ".concat(memberId, " failed to process key rotation:"), error_2);
327
+ return [3 /*break*/, 52];
328
+ case 52:
329
+ managers_2_1 = managers_2.next();
330
+ return [3 /*break*/, 48];
331
+ case 53: return [3 /*break*/, 56];
332
+ case 54:
333
+ e_6_1 = _q.sent();
334
+ e_6 = { error: e_6_1 };
335
+ return [3 /*break*/, 56];
336
+ case 55:
337
+ try {
338
+ if (managers_2_1 && !managers_2_1.done && (_m = managers_2.return)) _m.call(managers_2);
339
+ }
340
+ finally { if (e_6) throw e_6.error; }
341
+ return [7 /*endfinally*/];
342
+ case 56:
343
+ // Step 8: Test messages after key rotation
344
+ console.log("\n📋 Step 8: Testing messages after key rotation");
345
+ testMessage = "This message is sent after key rotation!";
346
+ return [4 /*yield*/, alice.encryptMessage(groupId, testMessage)];
347
+ case 57:
348
+ aliceEnvelope = _q.sent();
349
+ postRotationSuccess = 0;
350
+ _q.label = 58;
351
+ case 58:
352
+ _q.trys.push([58, 65, 66, 67]);
353
+ managers_3 = __values(managers), managers_3_1 = managers_3.next();
354
+ _q.label = 59;
355
+ case 59:
356
+ if (!!managers_3_1.done) return [3 /*break*/, 64];
357
+ _d = __read(managers_3_1.value, 2), memberId = _d[0], manager = _d[1];
358
+ if (memberId === alice.getUserId()) {
359
+ console.log("\u2705 ".concat(memberId, " (sender) does not need to decrypt their own message after rotation."));
360
+ postRotationSuccess++;
361
+ return [3 /*break*/, 63];
362
+ }
363
+ _q.label = 60;
364
+ case 60:
365
+ _q.trys.push([60, 62, , 63]);
366
+ return [4 /*yield*/, manager.decryptMessage(aliceEnvelope)];
367
+ case 61:
368
+ decrypted = _q.sent();
369
+ console.log("\u2705 ".concat(memberId, " decrypted after rotation: \"").concat(decrypted, "\""));
370
+ postRotationSuccess++;
371
+ return [3 /*break*/, 63];
372
+ case 62:
373
+ error_3 = _q.sent();
374
+ console.error("\u274C ".concat(memberId, " failed to decrypt after rotation:"), error_3);
375
+ return [3 /*break*/, 63];
376
+ case 63:
377
+ managers_3_1 = managers_3.next();
378
+ return [3 /*break*/, 59];
379
+ case 64: return [3 /*break*/, 67];
380
+ case 65:
381
+ e_7_1 = _q.sent();
382
+ e_7 = { error: e_7_1 };
383
+ return [3 /*break*/, 67];
384
+ case 66:
385
+ try {
386
+ if (managers_3_1 && !managers_3_1.done && (_o = managers_3.return)) _o.call(managers_3);
387
+ }
388
+ finally { if (e_7) throw e_7.error; }
389
+ return [7 /*endfinally*/];
390
+ case 67:
391
+ console.log("\n🎉 MLS Working Multi-Member Test completed!");
392
+ console.log("\u2705 Group creation with ".concat(members.length, " members"));
393
+ console.log("\u2705 Bidirectional encrypted messaging");
394
+ console.log("\u2705 Key rotation and forward secrecy");
395
+ console.log("\u2705 All members can send and receive messages");
396
+ // Cleanup
397
+ console.log("\n📋 Cleanup");
398
+ _q.label = 68;
399
+ case 68:
400
+ _q.trys.push([68, 73, 74, 75]);
401
+ managers_4 = __values(managers), managers_4_1 = managers_4.next();
402
+ _q.label = 69;
403
+ case 69:
404
+ if (!!managers_4_1.done) return [3 /*break*/, 72];
405
+ _e = __read(managers_4_1.value, 2), memberId = _e[0], manager = _e[1];
406
+ return [4 /*yield*/, manager.destroy()];
407
+ case 70:
408
+ _q.sent();
409
+ console.log("\u2705 ".concat(memberId, " destroyed"));
410
+ _q.label = 71;
411
+ case 71:
412
+ managers_4_1 = managers_4.next();
413
+ return [3 /*break*/, 69];
414
+ case 72: return [3 /*break*/, 75];
415
+ case 73:
416
+ e_8_1 = _q.sent();
417
+ e_8 = { error: e_8_1 };
418
+ return [3 /*break*/, 75];
419
+ case 74:
420
+ try {
421
+ if (managers_4_1 && !managers_4_1.done && (_p = managers_4.return)) _p.call(managers_4);
422
+ }
423
+ finally { if (e_8) throw e_8.error; }
424
+ return [7 /*endfinally*/];
425
+ case 75: return [3 /*break*/, 77];
426
+ case 76:
427
+ error_4 = _q.sent();
428
+ console.error("❌ Test failed:", error_4);
429
+ return [3 /*break*/, 77];
430
+ case 77: return [2 /*return*/];
431
+ }
432
+ });
433
+ });
434
+ }
435
+ // Run the test
436
+ if (require.main === module) {
437
+ testMLSWorkingMultiMembers().catch(console.error);
438
+ }
439
+ export { testMLSWorkingMultiMembers };