shogun-core 5.2.0 → 5.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/dist/browser/defaultVendors-node_modules_hpke_chacha20poly1305_esm_mod_js.shogun-core.js +1220 -0
  2. package/dist/browser/defaultVendors-node_modules_hpke_chacha20poly1305_esm_mod_js.shogun-core.js.map +1 -0
  3. package/dist/browser/defaultVendors-node_modules_hpke_hybridkem-x-wing_esm_mod_js.shogun-core.js +844 -0
  4. package/dist/browser/defaultVendors-node_modules_hpke_hybridkem-x-wing_esm_mod_js.shogun-core.js.map +1 -0
  5. package/dist/browser/defaultVendors-node_modules_mlkem_esm_mod_js.shogun-core.js +2335 -0
  6. package/dist/browser/defaultVendors-node_modules_mlkem_esm_mod_js.shogun-core.js.map +1 -0
  7. package/dist/browser/defaultVendors-node_modules_noble_ciphers_chacha_js.shogun-core.js +999 -0
  8. package/dist/browser/defaultVendors-node_modules_noble_ciphers_chacha_js.shogun-core.js.map +1 -0
  9. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_curve_js-node_modules_noble_curves_esm_-1ce4ed.shogun-core.js +1651 -0
  10. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_curve_js-node_modules_noble_curves_esm_-1ce4ed.shogun-core.js.map +1 -0
  11. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_edwards_js-node_modules_noble_curves_es-a82056.shogun-core.js +825 -0
  12. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_edwards_js-node_modules_noble_curves_es-a82056.shogun-core.js.map +1 -0
  13. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed25519_js.shogun-core.js +508 -0
  14. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed25519_js.shogun-core.js.map +1 -0
  15. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed448_js.shogun-core.js +747 -0
  16. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed448_js.shogun-core.js.map +1 -0
  17. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_nist_js.shogun-core.js +1608 -0
  18. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_nist_js.shogun-core.js.map +1 -0
  19. package/dist/browser/defaultVendors-node_modules_noble_post-quantum_ml-dsa_js.shogun-core.js +2117 -0
  20. package/dist/browser/defaultVendors-node_modules_noble_post-quantum_ml-dsa_js.shogun-core.js.map +1 -0
  21. package/dist/browser/defaultVendors-node_modules_openpgp_dist_openpgp_min_mjs.shogun-core.js +86 -0
  22. package/dist/browser/defaultVendors-node_modules_openpgp_dist_openpgp_min_mjs.shogun-core.js.map +1 -0
  23. package/dist/browser/node_modules_hpke_ml-kem_esm_mod_js.shogun-core.js +539 -0
  24. package/dist/browser/node_modules_hpke_ml-kem_esm_mod_js.shogun-core.js.map +1 -0
  25. package/dist/browser/shogun-core.js +160386 -0
  26. package/dist/browser/shogun-core.js.map +1 -0
  27. package/dist/config/simplified-config.js +236 -0
  28. package/dist/core.js +329 -0
  29. package/dist/crypto/asymmetric.js +99 -0
  30. package/dist/crypto/double-ratchet.js +370 -0
  31. package/dist/crypto/file-encryption.js +213 -0
  32. package/dist/crypto/hashing.js +87 -0
  33. package/dist/crypto/index.js +34 -0
  34. package/dist/crypto/mls-codec.js +202 -0
  35. package/dist/crypto/mls.js +550 -0
  36. package/dist/crypto/pgp.js +390 -0
  37. package/dist/crypto/random-generation.js +341 -0
  38. package/dist/crypto/sframe.js +350 -0
  39. package/dist/crypto/signal-protocol.js +376 -0
  40. package/dist/crypto/symmetric.js +91 -0
  41. package/dist/crypto/types.js +2 -0
  42. package/dist/crypto/utils.js +140 -0
  43. package/dist/examples/auth-test.js +253 -0
  44. package/dist/examples/crypto-identity-example.js +151 -0
  45. package/dist/examples/crypto-working-test.js +83 -0
  46. package/dist/examples/double-ratchet-test.js +155 -0
  47. package/dist/examples/mls-advanced-example.js +294 -0
  48. package/dist/examples/mls-sframe-test.js +304 -0
  49. package/dist/examples/pgp-example.js +200 -0
  50. package/dist/examples/quick-auth-test.js +61 -0
  51. package/dist/examples/random-generation-test.js +151 -0
  52. package/dist/examples/signal-protocol-test.js +38 -0
  53. package/dist/examples/simple-api-test.js +114 -0
  54. package/dist/examples/simple-crypto-identity-example.js +84 -0
  55. package/dist/examples/timeout-test.js +227 -0
  56. package/dist/examples/zkproof-credentials-example.js +212 -0
  57. package/dist/examples/zkproof-example.js +201 -0
  58. package/dist/gundb/api.js +435 -0
  59. package/dist/gundb/crypto.js +283 -0
  60. package/dist/gundb/db.js +1946 -0
  61. package/dist/gundb/derive.js +232 -0
  62. package/dist/gundb/errors.js +76 -0
  63. package/dist/gundb/index.js +22 -0
  64. package/dist/gundb/rxjs.js +447 -0
  65. package/dist/gundb/types.js +5 -0
  66. package/dist/index.js +58 -0
  67. package/dist/interfaces/common.js +2 -0
  68. package/dist/interfaces/events.js +40 -0
  69. package/dist/interfaces/plugin.js +2 -0
  70. package/dist/interfaces/shogun.js +37 -0
  71. package/dist/managers/AuthManager.js +226 -0
  72. package/dist/managers/CoreInitializer.js +228 -0
  73. package/dist/managers/CryptoIdentityManager.js +366 -0
  74. package/dist/managers/EventManager.js +70 -0
  75. package/dist/managers/PluginManager.js +299 -0
  76. package/dist/plugins/base.js +50 -0
  77. package/dist/plugins/index.js +32 -0
  78. package/dist/plugins/nostr/index.js +20 -0
  79. package/dist/plugins/nostr/nostrConnector.js +419 -0
  80. package/dist/plugins/nostr/nostrConnectorPlugin.js +453 -0
  81. package/dist/plugins/nostr/nostrSigner.js +319 -0
  82. package/dist/plugins/nostr/types.js +2 -0
  83. package/dist/plugins/smartwallet/index.js +18 -0
  84. package/dist/plugins/smartwallet/smartWalletPlugin.js +511 -0
  85. package/dist/plugins/smartwallet/types.js +2 -0
  86. package/dist/plugins/web3/index.js +20 -0
  87. package/dist/plugins/web3/types.js +2 -0
  88. package/dist/plugins/web3/web3Connector.js +533 -0
  89. package/dist/plugins/web3/web3ConnectorPlugin.js +455 -0
  90. package/dist/plugins/web3/web3Signer.js +314 -0
  91. package/dist/plugins/webauthn/index.js +19 -0
  92. package/dist/plugins/webauthn/types.js +14 -0
  93. package/dist/plugins/webauthn/webauthn.js +496 -0
  94. package/dist/plugins/webauthn/webauthnPlugin.js +489 -0
  95. package/dist/plugins/webauthn/webauthnSigner.js +310 -0
  96. package/dist/plugins/zkproof/index.js +53 -0
  97. package/dist/plugins/zkproof/types.js +2 -0
  98. package/dist/plugins/zkproof/zkCredentials.js +213 -0
  99. package/dist/plugins/zkproof/zkProofConnector.js +198 -0
  100. package/dist/plugins/zkproof/zkProofPlugin.js +272 -0
  101. package/dist/storage/storage.js +145 -0
  102. package/dist/types/config/simplified-config.d.ts +114 -0
  103. package/dist/types/core.d.ts +305 -0
  104. package/dist/types/crypto/asymmetric.d.ts +6 -0
  105. package/dist/types/crypto/double-ratchet.d.ts +22 -0
  106. package/dist/types/crypto/file-encryption.d.ts +19 -0
  107. package/dist/types/crypto/hashing.d.ts +9 -0
  108. package/dist/types/crypto/index.d.ts +13 -0
  109. package/dist/types/crypto/mls-codec.d.ts +39 -0
  110. package/dist/types/crypto/mls.d.ts +130 -0
  111. package/dist/types/crypto/pgp.d.ts +95 -0
  112. package/dist/types/crypto/random-generation.d.ts +35 -0
  113. package/dist/types/crypto/sframe.d.ts +102 -0
  114. package/dist/types/crypto/signal-protocol.d.ts +26 -0
  115. package/dist/types/crypto/symmetric.d.ts +9 -0
  116. package/dist/types/crypto/types.d.ts +144 -0
  117. package/dist/types/crypto/utils.d.ts +22 -0
  118. package/dist/types/examples/auth-test.d.ts +8 -0
  119. package/dist/types/examples/crypto-identity-example.d.ts +5 -0
  120. package/dist/types/examples/crypto-working-test.d.ts +1 -0
  121. package/dist/types/examples/double-ratchet-test.d.ts +1 -0
  122. package/dist/types/examples/mls-advanced-example.d.ts +53 -0
  123. package/dist/types/examples/mls-sframe-test.d.ts +1 -0
  124. package/dist/types/examples/pgp-example.d.ts +75 -0
  125. package/dist/types/examples/quick-auth-test.d.ts +8 -0
  126. package/dist/types/examples/random-generation-test.d.ts +1 -0
  127. package/dist/types/examples/signal-protocol-test.d.ts +1 -0
  128. package/dist/types/examples/simple-api-test.d.ts +10 -0
  129. package/dist/types/examples/simple-crypto-identity-example.d.ts +6 -0
  130. package/dist/types/examples/timeout-test.d.ts +8 -0
  131. package/dist/types/examples/zkproof-credentials-example.d.ts +12 -0
  132. package/dist/types/examples/zkproof-example.d.ts +11 -0
  133. package/dist/types/gundb/api.d.ts +185 -0
  134. package/dist/types/gundb/crypto.d.ts +95 -0
  135. package/dist/types/gundb/db.d.ts +397 -0
  136. package/dist/types/gundb/derive.d.ts +21 -0
  137. package/dist/types/gundb/errors.d.ts +42 -0
  138. package/dist/types/gundb/index.d.ts +3 -0
  139. package/dist/types/gundb/rxjs.d.ts +110 -0
  140. package/dist/types/gundb/types.d.ts +255 -0
  141. package/dist/types/index.d.ts +16 -0
  142. package/dist/types/interfaces/common.d.ts +85 -0
  143. package/dist/types/interfaces/events.d.ts +131 -0
  144. package/dist/types/interfaces/plugin.d.ts +162 -0
  145. package/dist/types/interfaces/shogun.d.ts +208 -0
  146. package/dist/types/managers/AuthManager.d.ts +72 -0
  147. package/dist/types/managers/CoreInitializer.d.ts +40 -0
  148. package/dist/types/managers/CryptoIdentityManager.d.ts +102 -0
  149. package/dist/types/managers/EventManager.d.ts +49 -0
  150. package/dist/types/managers/PluginManager.d.ts +145 -0
  151. package/dist/types/plugins/base.d.ts +35 -0
  152. package/dist/types/plugins/index.d.ts +18 -0
  153. package/dist/types/plugins/nostr/index.d.ts +4 -0
  154. package/dist/types/plugins/nostr/nostrConnector.d.ts +119 -0
  155. package/dist/types/plugins/nostr/nostrConnectorPlugin.d.ts +163 -0
  156. package/dist/types/plugins/nostr/nostrSigner.d.ts +105 -0
  157. package/dist/types/plugins/nostr/types.d.ts +122 -0
  158. package/dist/types/plugins/smartwallet/index.d.ts +2 -0
  159. package/dist/types/plugins/smartwallet/smartWalletPlugin.d.ts +67 -0
  160. package/dist/types/plugins/smartwallet/types.d.ts +80 -0
  161. package/dist/types/plugins/web3/index.d.ts +4 -0
  162. package/dist/types/plugins/web3/types.d.ts +107 -0
  163. package/dist/types/plugins/web3/web3Connector.d.ts +129 -0
  164. package/dist/types/plugins/web3/web3ConnectorPlugin.d.ts +160 -0
  165. package/dist/types/plugins/web3/web3Signer.d.ts +114 -0
  166. package/dist/types/plugins/webauthn/index.d.ts +3 -0
  167. package/dist/types/plugins/webauthn/types.d.ts +183 -0
  168. package/dist/types/plugins/webauthn/webauthn.d.ts +129 -0
  169. package/dist/types/plugins/webauthn/webauthnPlugin.d.ts +179 -0
  170. package/dist/types/plugins/webauthn/webauthnSigner.d.ts +91 -0
  171. package/dist/types/plugins/zkproof/index.d.ts +48 -0
  172. package/dist/types/plugins/zkproof/types.d.ts +123 -0
  173. package/dist/types/plugins/zkproof/zkCredentials.d.ts +112 -0
  174. package/dist/types/plugins/zkproof/zkProofConnector.d.ts +46 -0
  175. package/dist/types/plugins/zkproof/zkProofPlugin.d.ts +76 -0
  176. package/dist/types/storage/storage.d.ts +51 -0
  177. package/dist/types/utils/errorHandler.d.ts +119 -0
  178. package/dist/types/utils/eventEmitter.d.ts +39 -0
  179. package/dist/types/utils/seedPhrase.d.ts +50 -0
  180. package/dist/types/utils/validation.d.ts +27 -0
  181. package/dist/utils/errorHandler.js +246 -0
  182. package/dist/utils/eventEmitter.js +79 -0
  183. package/dist/utils/seedPhrase.js +97 -0
  184. package/dist/utils/validation.js +81 -0
  185. package/package.json +10 -1
@@ -0,0 +1,366 @@
1
+ "use strict";
2
+ /**
3
+ * CryptoIdentityManager - Gestisce la generazione e il salvataggio delle identità crypto
4
+ * dopo l'autenticazione SEA dell'utente
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.CryptoIdentityManager = void 0;
11
+ const sea_1 = __importDefault(require("gun/sea"));
12
+ const asymmetric_1 = require("../crypto/asymmetric");
13
+ const symmetric_1 = require("../crypto/symmetric");
14
+ const signal_protocol_1 = require("../crypto/signal-protocol");
15
+ const pgp_1 = require("../crypto/pgp");
16
+ const mls_1 = require("../crypto/mls");
17
+ const sframe_1 = require("../crypto/sframe");
18
+ const errorHandler_1 = require("../utils/errorHandler");
19
+ /**
20
+ * Manager per la gestione delle identità crypto
21
+ * Genera automaticamente tutte le identità crypto disponibili dopo l'autenticazione SEA
22
+ */
23
+ class CryptoIdentityManager {
24
+ constructor(core) {
25
+ this.core = core;
26
+ this.pgpManager = new pgp_1.PGPManager();
27
+ this.mlsManager = new mls_1.MLSManager("default-user");
28
+ this.sframeManager = new sframe_1.SFrameManager();
29
+ // Inizializza PGP Manager
30
+ this.pgpManager.initialize().catch((error) => {
31
+ console.warn("PGP Manager initialization failed:", error);
32
+ });
33
+ }
34
+ /**
35
+ * Genera tutte le identità crypto disponibili per un utente
36
+ * @param username - Nome utente
37
+ * @param seaPair - Coppia di chiavi SEA dell'utente
38
+ * @returns Promise con le identità generate
39
+ */
40
+ async generateAllIdentities(username, seaPair) {
41
+ try {
42
+ console.log(`🔐 [CryptoIdentityManager] Generating crypto identities for: ${username}`);
43
+ const identities = {
44
+ createdAt: Date.now(),
45
+ version: "1.0.0",
46
+ };
47
+ // 1. Genera coppia di chiavi RSA-4096
48
+ console.log(`🔑 [${username}] Generating RSA key pair...`);
49
+ try {
50
+ identities.rsa = await (0, asymmetric_1.generateKeyPair)();
51
+ console.log(`✅ [${username}] RSA key pair generated`);
52
+ }
53
+ catch (error) {
54
+ console.error(`❌ [${username}] RSA key generation failed:`, error);
55
+ }
56
+ // 2. Genera chiave simmetrica AES-256
57
+ console.log(`🔑 [${username}] Generating AES symmetric key...`);
58
+ try {
59
+ identities.aes = await (0, symmetric_1.generateSymmetricKey)();
60
+ console.log(`✅ [${username}] AES symmetric key generated`);
61
+ }
62
+ catch (error) {
63
+ console.error(`❌ [${username}] AES key generation failed:`, error);
64
+ }
65
+ // 3. Genera identità Signal Protocol
66
+ console.log(`🔑 [${username}] Generating Signal Protocol identity...`);
67
+ try {
68
+ identities.signal = await (0, signal_protocol_1.initializeSignalUser)(username);
69
+ console.log(`✅ [${username}] Signal Protocol identity generated`);
70
+ }
71
+ catch (error) {
72
+ console.error(`❌ [${username}] Signal Protocol generation failed:`, error);
73
+ }
74
+ // 4. Genera coppia di chiavi PGP
75
+ console.log(`🔑 [${username}] Generating PGP key pair...`);
76
+ try {
77
+ identities.pgp = await this.pgpManager.generateKeyPair(username, `${username}@example.com`);
78
+ console.log(`✅ [${username}] PGP key pair generated`);
79
+ }
80
+ catch (error) {
81
+ console.error(`❌ [${username}] PGP key generation failed:`, error);
82
+ }
83
+ // 5. Inizializza MLS Manager e crea gruppo
84
+ console.log(`🔑 [${username}] Initializing MLS group...`);
85
+ try {
86
+ await this.mlsManager.initialize();
87
+ const groupId = `group_${username}_${Date.now()}`;
88
+ const groupInfo = await this.mlsManager.createGroup(groupId);
89
+ // Skip adding members for now due to MLS library issues
90
+ // await this.mlsManager.addMembers(groupId, [username]);
91
+ identities.mls = {
92
+ groupId: groupInfo.groupId.toString(),
93
+ memberId: username,
94
+ };
95
+ console.log(`✅ [${username}] MLS group created: ${groupId}`);
96
+ }
97
+ catch (error) {
98
+ console.error(`❌ [${username}] MLS initialization failed:`, error);
99
+ }
100
+ // 6. Genera chiave SFrame
101
+ console.log(`🔑 [${username}] Generating SFrame key...`);
102
+ try {
103
+ await this.sframeManager.initialize();
104
+ const sframeKey = await this.sframeManager.generateKey(1);
105
+ identities.sframe = { keyId: sframeKey.keyId };
106
+ console.log(`✅ [${username}] SFrame key generated: ${sframeKey.keyId}`);
107
+ }
108
+ catch (error) {
109
+ console.error(`❌ [${username}] SFrame key generation failed:`, error);
110
+ }
111
+ console.log(`✅ [CryptoIdentityManager] All crypto identities generated for: ${username}`);
112
+ return {
113
+ success: true,
114
+ identities,
115
+ };
116
+ }
117
+ catch (error) {
118
+ console.error(`❌ [CryptoIdentityManager] Identity generation failed:`, error);
119
+ errorHandler_1.ErrorHandler.handle(errorHandler_1.ErrorType.ENCRYPTION, "IDENTITY_GENERATION_FAILED", error.message ?? "Failed to generate crypto identities", error);
120
+ return {
121
+ success: false,
122
+ error: error.message ?? "Failed to generate crypto identities",
123
+ };
124
+ }
125
+ }
126
+ /**
127
+ * Cripta e salva le identità crypto su GunDB usando il SEA pair
128
+ * @param username - Nome utente
129
+ * @param identities - Identità crypto da salvare
130
+ * @param seaPair - Coppia di chiavi SEA per la crittografia
131
+ * @returns Promise con il risultato del salvataggio
132
+ */
133
+ async saveIdentitiesToGun(username, identities, seaPair) {
134
+ try {
135
+ console.log(`💾 [CryptoIdentityManager] Saving crypto identities for: ${username}`);
136
+ const savedKeys = [];
137
+ const userPub = seaPair.pub;
138
+ // Serializza le identità in JSON
139
+ const identitiesJson = JSON.stringify(identities);
140
+ // Cripta usando SEA con la chiave privata dell'utente
141
+ const encryptedIdentities = await sea_1.default.encrypt(identitiesJson, seaPair.priv);
142
+ if (!encryptedIdentities) {
143
+ throw new Error("Failed to encrypt identities with SEA");
144
+ }
145
+ // Salva su GunDB nel percorso privato dell'utente
146
+ const saveResult = await new Promise((resolve, reject) => {
147
+ this.core.gun
148
+ .user()
149
+ .get("crypto-identities")
150
+ .put(encryptedIdentities, (ack) => {
151
+ if (ack.err) {
152
+ console.error(`❌ [${username}] Failed to save identities:`, ack.err);
153
+ reject(new Error(ack.err));
154
+ }
155
+ else {
156
+ console.log(`✅ [${username}] Crypto identities saved successfully`);
157
+ savedKeys.push("crypto-identities");
158
+ resolve(true);
159
+ }
160
+ });
161
+ });
162
+ // Salva anche una copia di backup nel percorso pubblico (solo hash per verifica)
163
+ const identitiesHash = await sea_1.default.work(identitiesJson, null, null, {
164
+ name: "SHA-256",
165
+ });
166
+ await new Promise((resolve, reject) => {
167
+ this.core.gun
168
+ .user()
169
+ .get("crypto-identities-hash")
170
+ .put(identitiesHash, (ack) => {
171
+ if (ack.err) {
172
+ console.error(`❌ [${username}] Failed to save identities hash:`, ack.err);
173
+ reject(new Error(ack.err));
174
+ }
175
+ else {
176
+ console.log(`✅ [${username}] Crypto identities hash saved`);
177
+ savedKeys.push("crypto-identities-hash");
178
+ resolve(true);
179
+ }
180
+ });
181
+ });
182
+ return {
183
+ success: true,
184
+ savedKeys,
185
+ };
186
+ }
187
+ catch (error) {
188
+ console.error(`❌ [CryptoIdentityManager] Failed to save identities:`, error);
189
+ errorHandler_1.ErrorHandler.handle(errorHandler_1.ErrorType.ENCRYPTION, "IDENTITY_SAVE_FAILED", error.message ?? "Failed to save crypto identities", error);
190
+ return {
191
+ success: false,
192
+ savedKeys: [],
193
+ error: error.message ?? "Failed to save crypto identities",
194
+ };
195
+ }
196
+ }
197
+ /**
198
+ * Recupera e decripta le identità crypto da GunDB
199
+ * @param username - Nome utente
200
+ * @param seaPair - Coppia di chiavi SEA per la decrittografia
201
+ * @returns Promise con le identità recuperate
202
+ */
203
+ async retrieveIdentitiesFromGun(username, seaPair) {
204
+ try {
205
+ console.log(`🔍 [CryptoIdentityManager] Retrieving crypto identities for: ${username}`);
206
+ // Recupera le identità criptate da GunDB
207
+ const encryptedIdentities = await new Promise((resolve, reject) => {
208
+ this.core.gun
209
+ .user()
210
+ .get("crypto-identities")
211
+ .once((data) => {
212
+ if (data) {
213
+ resolve(data);
214
+ }
215
+ else {
216
+ reject(new Error("No crypto identities found"));
217
+ }
218
+ });
219
+ });
220
+ if (!encryptedIdentities) {
221
+ return {
222
+ success: false,
223
+ error: "No crypto identities found for user",
224
+ };
225
+ }
226
+ // Decripta usando SEA con la chiave privata dell'utente
227
+ const decryptedIdentities = await sea_1.default.decrypt(encryptedIdentities, seaPair.priv);
228
+ if (!decryptedIdentities) {
229
+ throw new Error("Failed to decrypt identities with SEA");
230
+ }
231
+ // Assicurati che sia una stringa
232
+ const identitiesString = typeof decryptedIdentities === "string"
233
+ ? decryptedIdentities
234
+ : JSON.stringify(decryptedIdentities);
235
+ // Deserializza le identità
236
+ const identities = JSON.parse(identitiesString);
237
+ console.log(`✅ [CryptoIdentityManager] Crypto identities retrieved for: ${username}`);
238
+ return {
239
+ success: true,
240
+ identities,
241
+ };
242
+ }
243
+ catch (error) {
244
+ console.error(`❌ [CryptoIdentityManager] Failed to retrieve identities:`, error);
245
+ errorHandler_1.ErrorHandler.handle(errorHandler_1.ErrorType.ENCRYPTION, "IDENTITY_RETRIEVAL_FAILED", error.message ?? "Failed to retrieve crypto identities", error);
246
+ return {
247
+ success: false,
248
+ error: error.message ?? "Failed to retrieve crypto identities",
249
+ };
250
+ }
251
+ }
252
+ /**
253
+ * Verifica se l'utente ha già delle identità crypto salvate
254
+ * @param username - Nome utente
255
+ * @returns Promise con il risultato della verifica
256
+ */
257
+ async hasStoredIdentities(username) {
258
+ try {
259
+ const hasIdentities = await new Promise((resolve) => {
260
+ this.core.gun
261
+ .user()
262
+ .get("crypto-identities")
263
+ .once((data) => {
264
+ resolve(!!data);
265
+ });
266
+ });
267
+ return hasIdentities;
268
+ }
269
+ catch (error) {
270
+ console.error(`❌ [CryptoIdentityManager] Error checking stored identities:`, error);
271
+ return false;
272
+ }
273
+ }
274
+ /**
275
+ * Processo completo: genera, salva e gestisce le identità crypto dopo l'autenticazione
276
+ * @param username - Nome utente
277
+ * @param seaPair - Coppia di chiavi SEA dell'utente
278
+ * @param forceRegenerate - Se true, rigenera anche se esistono già
279
+ * @returns Promise con il risultato del processo completo
280
+ */
281
+ async setupCryptoIdentities(username, seaPair, forceRegenerate = false) {
282
+ try {
283
+ console.log(`🚀 [CryptoIdentityManager] Setting up crypto identities for: ${username}`);
284
+ // Verifica se esistono già identità salvate
285
+ const hasExisting = await this.hasStoredIdentities(username);
286
+ if (hasExisting && !forceRegenerate) {
287
+ console.log(`ℹ️ [${username}] Crypto identities already exist, skipping generation`);
288
+ // Recupera le identità esistenti
289
+ const retrievalResult = await this.retrieveIdentitiesFromGun(username, seaPair);
290
+ if (retrievalResult.success) {
291
+ return {
292
+ success: true,
293
+ identities: retrievalResult.identities,
294
+ savedKeys: ["crypto-identities", "crypto-identities-hash"],
295
+ };
296
+ }
297
+ }
298
+ // Genera nuove identità
299
+ const generationResult = await this.generateAllIdentities(username, seaPair);
300
+ if (!generationResult.success || !generationResult.identities) {
301
+ return {
302
+ success: false,
303
+ savedKeys: [],
304
+ error: generationResult.error || "Failed to generate identities",
305
+ };
306
+ }
307
+ // Salva le identità generate
308
+ const saveResult = await this.saveIdentitiesToGun(username, generationResult.identities, seaPair);
309
+ if (!saveResult.success) {
310
+ return {
311
+ success: false,
312
+ savedKeys: [],
313
+ error: saveResult.error || "Failed to save identities",
314
+ };
315
+ }
316
+ console.log(`✅ [CryptoIdentityManager] Crypto identities setup completed for: ${username}`);
317
+ return {
318
+ success: true,
319
+ identities: generationResult.identities,
320
+ savedKeys: saveResult.savedKeys,
321
+ };
322
+ }
323
+ catch (error) {
324
+ console.error(`❌ [CryptoIdentityManager] Setup failed:`, error);
325
+ errorHandler_1.ErrorHandler.handle(errorHandler_1.ErrorType.ENCRYPTION, "IDENTITY_SETUP_FAILED", error.message ?? "Failed to setup crypto identities", error);
326
+ return {
327
+ success: false,
328
+ savedKeys: [],
329
+ error: error.message ?? "Failed to setup crypto identities",
330
+ };
331
+ }
332
+ }
333
+ /**
334
+ * Ottiene le identità crypto dell'utente corrente
335
+ * @returns Promise con le identità dell'utente corrente
336
+ */
337
+ async getCurrentUserIdentities() {
338
+ try {
339
+ const currentUser = this.core.getCurrentUser();
340
+ if (!currentUser || !currentUser.pub) {
341
+ return {
342
+ success: false,
343
+ error: "No authenticated user found",
344
+ };
345
+ }
346
+ // Ottieni il SEA pair dell'utente corrente
347
+ const userInstance = this.core.gun.user();
348
+ const seaPair = userInstance?._?.sea;
349
+ if (!seaPair) {
350
+ return {
351
+ success: false,
352
+ error: "No SEA pair found for current user",
353
+ };
354
+ }
355
+ return await this.retrieveIdentitiesFromGun(currentUser.pub, seaPair);
356
+ }
357
+ catch (error) {
358
+ console.error(`❌ [CryptoIdentityManager] Failed to get current user identities:`, error);
359
+ return {
360
+ success: false,
361
+ error: error.message ?? "Failed to get current user identities",
362
+ };
363
+ }
364
+ }
365
+ }
366
+ exports.CryptoIdentityManager = CryptoIdentityManager;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventManager = void 0;
4
+ const events_1 = require("../interfaces/events");
5
+ /**
6
+ * Manages event operations for ShogunCore
7
+ */
8
+ class EventManager {
9
+ constructor() {
10
+ this.eventEmitter = new events_1.ShogunEventEmitter();
11
+ }
12
+ /**
13
+ * Emits an event through the core's event emitter.
14
+ * Plugins should use this method to emit events instead of accessing the private eventEmitter directly.
15
+ * @param eventName The name of the event to emit.
16
+ * @param data The data to pass with the event.
17
+ * @returns {boolean} Indicates if the event had listeners.
18
+ */
19
+ emit(eventName, data) {
20
+ return this.eventEmitter.emit(eventName, data);
21
+ }
22
+ /**
23
+ * Add an event listener
24
+ * @param eventName The name of the event to listen for
25
+ * @param listener The callback function to execute when the event is emitted
26
+ * @returns {this} Returns this instance for method chaining
27
+ */
28
+ on(eventName, listener) {
29
+ this.eventEmitter.on(eventName, listener);
30
+ return this;
31
+ }
32
+ /**
33
+ * Add a one-time event listener
34
+ * @param eventName The name of the event to listen for
35
+ * @param listener The callback function to execute when the event is emitted
36
+ * @returns {this} Returns this instance for method chaining
37
+ */
38
+ once(eventName, listener) {
39
+ this.eventEmitter.once(eventName, listener);
40
+ return this;
41
+ }
42
+ /**
43
+ * Remove an event listener
44
+ * @param eventName The name of the event to stop listening for
45
+ * @param listener The callback function to remove
46
+ * @returns {this} Returns this instance for method chaining
47
+ */
48
+ off(eventName, listener) {
49
+ this.eventEmitter.off(eventName, listener);
50
+ return this;
51
+ }
52
+ /**
53
+ * Remove all listeners for a specific event or all events
54
+ * @param eventName Optional. The name of the event to remove listeners for.
55
+ * If not provided, all listeners for all events are removed.
56
+ * @returns {this} Returns this instance for method chaining
57
+ */
58
+ removeAllListeners(eventName) {
59
+ this.eventEmitter.removeAllListeners(eventName);
60
+ return this;
61
+ }
62
+ /**
63
+ * Get the underlying event emitter instance
64
+ * @returns The ShogunEventEmitter instance
65
+ */
66
+ getEventEmitter() {
67
+ return this.eventEmitter;
68
+ }
69
+ }
70
+ exports.EventManager = EventManager;