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.
- package/dist/browser/defaultVendors-node_modules_hpke_chacha20poly1305_esm_mod_js.shogun-core.js +1220 -0
- package/dist/browser/defaultVendors-node_modules_hpke_chacha20poly1305_esm_mod_js.shogun-core.js.map +1 -0
- package/dist/browser/defaultVendors-node_modules_hpke_hybridkem-x-wing_esm_mod_js.shogun-core.js +844 -0
- package/dist/browser/defaultVendors-node_modules_hpke_hybridkem-x-wing_esm_mod_js.shogun-core.js.map +1 -0
- package/dist/browser/defaultVendors-node_modules_mlkem_esm_mod_js.shogun-core.js +2335 -0
- package/dist/browser/defaultVendors-node_modules_mlkem_esm_mod_js.shogun-core.js.map +1 -0
- package/dist/browser/defaultVendors-node_modules_noble_ciphers_chacha_js.shogun-core.js +999 -0
- package/dist/browser/defaultVendors-node_modules_noble_ciphers_chacha_js.shogun-core.js.map +1 -0
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_curve_js-node_modules_noble_curves_esm_-1ce4ed.shogun-core.js +1651 -0
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_curve_js-node_modules_noble_curves_esm_-1ce4ed.shogun-core.js.map +1 -0
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_edwards_js-node_modules_noble_curves_es-a82056.shogun-core.js +825 -0
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_edwards_js-node_modules_noble_curves_es-a82056.shogun-core.js.map +1 -0
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed25519_js.shogun-core.js +508 -0
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed25519_js.shogun-core.js.map +1 -0
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed448_js.shogun-core.js +747 -0
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed448_js.shogun-core.js.map +1 -0
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_nist_js.shogun-core.js +1608 -0
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_nist_js.shogun-core.js.map +1 -0
- package/dist/browser/defaultVendors-node_modules_noble_post-quantum_ml-dsa_js.shogun-core.js +2117 -0
- package/dist/browser/defaultVendors-node_modules_noble_post-quantum_ml-dsa_js.shogun-core.js.map +1 -0
- package/dist/browser/defaultVendors-node_modules_openpgp_dist_openpgp_min_mjs.shogun-core.js +86 -0
- package/dist/browser/defaultVendors-node_modules_openpgp_dist_openpgp_min_mjs.shogun-core.js.map +1 -0
- package/dist/browser/node_modules_hpke_ml-kem_esm_mod_js.shogun-core.js +539 -0
- package/dist/browser/node_modules_hpke_ml-kem_esm_mod_js.shogun-core.js.map +1 -0
- package/dist/browser/shogun-core.js +160386 -0
- package/dist/browser/shogun-core.js.map +1 -0
- package/dist/config/simplified-config.js +236 -0
- package/dist/core.js +329 -0
- package/dist/crypto/asymmetric.js +99 -0
- package/dist/crypto/double-ratchet.js +370 -0
- package/dist/crypto/file-encryption.js +213 -0
- package/dist/crypto/hashing.js +87 -0
- package/dist/crypto/index.js +34 -0
- package/dist/crypto/mls-codec.js +202 -0
- package/dist/crypto/mls.js +550 -0
- package/dist/crypto/pgp.js +390 -0
- package/dist/crypto/random-generation.js +341 -0
- package/dist/crypto/sframe.js +350 -0
- package/dist/crypto/signal-protocol.js +376 -0
- package/dist/crypto/symmetric.js +91 -0
- package/dist/crypto/types.js +2 -0
- package/dist/crypto/utils.js +140 -0
- package/dist/examples/auth-test.js +253 -0
- package/dist/examples/crypto-identity-example.js +151 -0
- package/dist/examples/crypto-working-test.js +83 -0
- package/dist/examples/double-ratchet-test.js +155 -0
- package/dist/examples/mls-advanced-example.js +294 -0
- package/dist/examples/mls-sframe-test.js +304 -0
- package/dist/examples/pgp-example.js +200 -0
- package/dist/examples/quick-auth-test.js +61 -0
- package/dist/examples/random-generation-test.js +151 -0
- package/dist/examples/signal-protocol-test.js +38 -0
- package/dist/examples/simple-api-test.js +114 -0
- package/dist/examples/simple-crypto-identity-example.js +84 -0
- package/dist/examples/timeout-test.js +227 -0
- package/dist/examples/zkproof-credentials-example.js +212 -0
- package/dist/examples/zkproof-example.js +201 -0
- package/dist/gundb/api.js +435 -0
- package/dist/gundb/crypto.js +283 -0
- package/dist/gundb/db.js +1946 -0
- package/dist/gundb/derive.js +232 -0
- package/dist/gundb/errors.js +76 -0
- package/dist/gundb/index.js +22 -0
- package/dist/gundb/rxjs.js +447 -0
- package/dist/gundb/types.js +5 -0
- package/dist/index.js +58 -0
- package/dist/interfaces/common.js +2 -0
- package/dist/interfaces/events.js +40 -0
- package/dist/interfaces/plugin.js +2 -0
- package/dist/interfaces/shogun.js +37 -0
- package/dist/managers/AuthManager.js +226 -0
- package/dist/managers/CoreInitializer.js +228 -0
- package/dist/managers/CryptoIdentityManager.js +366 -0
- package/dist/managers/EventManager.js +70 -0
- package/dist/managers/PluginManager.js +299 -0
- package/dist/plugins/base.js +50 -0
- package/dist/plugins/index.js +32 -0
- package/dist/plugins/nostr/index.js +20 -0
- package/dist/plugins/nostr/nostrConnector.js +419 -0
- package/dist/plugins/nostr/nostrConnectorPlugin.js +453 -0
- package/dist/plugins/nostr/nostrSigner.js +319 -0
- package/dist/plugins/nostr/types.js +2 -0
- package/dist/plugins/smartwallet/index.js +18 -0
- package/dist/plugins/smartwallet/smartWalletPlugin.js +511 -0
- package/dist/plugins/smartwallet/types.js +2 -0
- package/dist/plugins/web3/index.js +20 -0
- package/dist/plugins/web3/types.js +2 -0
- package/dist/plugins/web3/web3Connector.js +533 -0
- package/dist/plugins/web3/web3ConnectorPlugin.js +455 -0
- package/dist/plugins/web3/web3Signer.js +314 -0
- package/dist/plugins/webauthn/index.js +19 -0
- package/dist/plugins/webauthn/types.js +14 -0
- package/dist/plugins/webauthn/webauthn.js +496 -0
- package/dist/plugins/webauthn/webauthnPlugin.js +489 -0
- package/dist/plugins/webauthn/webauthnSigner.js +310 -0
- package/dist/plugins/zkproof/index.js +53 -0
- package/dist/plugins/zkproof/types.js +2 -0
- package/dist/plugins/zkproof/zkCredentials.js +213 -0
- package/dist/plugins/zkproof/zkProofConnector.js +198 -0
- package/dist/plugins/zkproof/zkProofPlugin.js +272 -0
- package/dist/storage/storage.js +145 -0
- package/dist/types/config/simplified-config.d.ts +114 -0
- package/dist/types/core.d.ts +305 -0
- package/dist/types/crypto/asymmetric.d.ts +6 -0
- package/dist/types/crypto/double-ratchet.d.ts +22 -0
- package/dist/types/crypto/file-encryption.d.ts +19 -0
- package/dist/types/crypto/hashing.d.ts +9 -0
- package/dist/types/crypto/index.d.ts +13 -0
- package/dist/types/crypto/mls-codec.d.ts +39 -0
- package/dist/types/crypto/mls.d.ts +130 -0
- package/dist/types/crypto/pgp.d.ts +95 -0
- package/dist/types/crypto/random-generation.d.ts +35 -0
- package/dist/types/crypto/sframe.d.ts +102 -0
- package/dist/types/crypto/signal-protocol.d.ts +26 -0
- package/dist/types/crypto/symmetric.d.ts +9 -0
- package/dist/types/crypto/types.d.ts +144 -0
- package/dist/types/crypto/utils.d.ts +22 -0
- package/dist/types/examples/auth-test.d.ts +8 -0
- package/dist/types/examples/crypto-identity-example.d.ts +5 -0
- package/dist/types/examples/crypto-working-test.d.ts +1 -0
- package/dist/types/examples/double-ratchet-test.d.ts +1 -0
- package/dist/types/examples/mls-advanced-example.d.ts +53 -0
- package/dist/types/examples/mls-sframe-test.d.ts +1 -0
- package/dist/types/examples/pgp-example.d.ts +75 -0
- package/dist/types/examples/quick-auth-test.d.ts +8 -0
- package/dist/types/examples/random-generation-test.d.ts +1 -0
- package/dist/types/examples/signal-protocol-test.d.ts +1 -0
- package/dist/types/examples/simple-api-test.d.ts +10 -0
- package/dist/types/examples/simple-crypto-identity-example.d.ts +6 -0
- package/dist/types/examples/timeout-test.d.ts +8 -0
- package/dist/types/examples/zkproof-credentials-example.d.ts +12 -0
- package/dist/types/examples/zkproof-example.d.ts +11 -0
- package/dist/types/gundb/api.d.ts +185 -0
- package/dist/types/gundb/crypto.d.ts +95 -0
- package/dist/types/gundb/db.d.ts +397 -0
- package/dist/types/gundb/derive.d.ts +21 -0
- package/dist/types/gundb/errors.d.ts +42 -0
- package/dist/types/gundb/index.d.ts +3 -0
- package/dist/types/gundb/rxjs.d.ts +110 -0
- package/dist/types/gundb/types.d.ts +255 -0
- package/dist/types/index.d.ts +16 -0
- package/dist/types/interfaces/common.d.ts +85 -0
- package/dist/types/interfaces/events.d.ts +131 -0
- package/dist/types/interfaces/plugin.d.ts +162 -0
- package/dist/types/interfaces/shogun.d.ts +208 -0
- package/dist/types/managers/AuthManager.d.ts +72 -0
- package/dist/types/managers/CoreInitializer.d.ts +40 -0
- package/dist/types/managers/CryptoIdentityManager.d.ts +102 -0
- package/dist/types/managers/EventManager.d.ts +49 -0
- package/dist/types/managers/PluginManager.d.ts +145 -0
- package/dist/types/plugins/base.d.ts +35 -0
- package/dist/types/plugins/index.d.ts +18 -0
- package/dist/types/plugins/nostr/index.d.ts +4 -0
- package/dist/types/plugins/nostr/nostrConnector.d.ts +119 -0
- package/dist/types/plugins/nostr/nostrConnectorPlugin.d.ts +163 -0
- package/dist/types/plugins/nostr/nostrSigner.d.ts +105 -0
- package/dist/types/plugins/nostr/types.d.ts +122 -0
- package/dist/types/plugins/smartwallet/index.d.ts +2 -0
- package/dist/types/plugins/smartwallet/smartWalletPlugin.d.ts +67 -0
- package/dist/types/plugins/smartwallet/types.d.ts +80 -0
- package/dist/types/plugins/web3/index.d.ts +4 -0
- package/dist/types/plugins/web3/types.d.ts +107 -0
- package/dist/types/plugins/web3/web3Connector.d.ts +129 -0
- package/dist/types/plugins/web3/web3ConnectorPlugin.d.ts +160 -0
- package/dist/types/plugins/web3/web3Signer.d.ts +114 -0
- package/dist/types/plugins/webauthn/index.d.ts +3 -0
- package/dist/types/plugins/webauthn/types.d.ts +183 -0
- package/dist/types/plugins/webauthn/webauthn.d.ts +129 -0
- package/dist/types/plugins/webauthn/webauthnPlugin.d.ts +179 -0
- package/dist/types/plugins/webauthn/webauthnSigner.d.ts +91 -0
- package/dist/types/plugins/zkproof/index.d.ts +48 -0
- package/dist/types/plugins/zkproof/types.d.ts +123 -0
- package/dist/types/plugins/zkproof/zkCredentials.d.ts +112 -0
- package/dist/types/plugins/zkproof/zkProofConnector.d.ts +46 -0
- package/dist/types/plugins/zkproof/zkProofPlugin.d.ts +76 -0
- package/dist/types/storage/storage.d.ts +51 -0
- package/dist/types/utils/errorHandler.d.ts +119 -0
- package/dist/types/utils/eventEmitter.d.ts +39 -0
- package/dist/types/utils/seedPhrase.d.ts +50 -0
- package/dist/types/utils/validation.d.ts +27 -0
- package/dist/utils/errorHandler.js +246 -0
- package/dist/utils/eventEmitter.js +79 -0
- package/dist/utils/seedPhrase.js +97 -0
- package/dist/utils/validation.js +81 -0
- 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;
|