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.
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed448_js.shogun-core.js +93 -341
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed448_js.shogun-core.js.map +1 -1
- package/dist/browser/shogun-core.js +138850 -146638
- package/dist/browser/shogun-core.js.map +1 -1
- package/dist/{core.js → src/core.js} +167 -107
- package/dist/src/crypto/asymmetric.js +168 -0
- package/dist/src/crypto/double-ratchet.js +908 -0
- package/dist/src/crypto/file-encryption.js +352 -0
- package/dist/src/crypto/hashing.js +160 -0
- package/dist/src/crypto/index.js +18 -0
- package/dist/{crypto → src/crypto}/mls-codec.js +24 -34
- package/dist/src/crypto/mls.js +734 -0
- package/dist/src/crypto/pgp.js +619 -0
- package/dist/{crypto → src/crypto}/random-generation.js +125 -103
- package/dist/src/crypto/sframe.js +466 -0
- package/dist/src/crypto/signal-protocol.js +943 -0
- package/dist/src/crypto/symmetric.js +165 -0
- package/dist/src/crypto/utils.js +220 -0
- package/dist/src/examples/auth-test.js +535 -0
- package/dist/src/examples/crypto-identity-example.js +294 -0
- package/dist/src/examples/crypto-working-test.js +149 -0
- package/dist/src/examples/double-ratchet-test.js +240 -0
- package/dist/src/examples/mls-3-member-test.js +183 -0
- package/dist/src/examples/mls-multi-member.js +439 -0
- package/dist/src/examples/mls-sframe-test.js +491 -0
- package/dist/src/examples/mls-simple-test.js +122 -0
- package/dist/src/examples/pgp-example.js +354 -0
- package/dist/src/examples/random-generation-test.js +191 -0
- package/dist/src/examples/shogun-core-example.js +204 -0
- package/dist/src/examples/signal-protocol-test.js +82 -0
- package/dist/src/examples/zkproof-credentials-example.js +357 -0
- package/dist/src/examples/zkproof-example.js +357 -0
- package/dist/src/gundb/crypto.js +420 -0
- package/dist/src/gundb/db.js +728 -0
- package/dist/src/gundb/derive.js +327 -0
- package/dist/src/gundb/errors.js +115 -0
- package/dist/src/gundb/gun-es.js +8 -0
- package/dist/src/gundb/index.js +5 -0
- package/dist/{gundb → src/gundb}/rxjs.js +147 -111
- package/dist/{gundb → src/gundb}/types.js +1 -2
- package/dist/src/index.js +19 -0
- package/dist/src/interfaces/events.js +57 -0
- package/dist/{interfaces → src/interfaces}/shogun.js +4 -7
- package/dist/src/managers/AuthManager.js +301 -0
- package/dist/src/managers/CoreInitializer.js +304 -0
- package/dist/src/managers/CryptoIdentityManager.js +230 -0
- package/dist/{managers → src/managers}/EventManager.js +19 -21
- package/dist/{managers → src/managers}/PluginManager.js +123 -89
- package/dist/src/plugins/base.js +90 -0
- package/dist/src/plugins/index.js +17 -0
- package/dist/src/plugins/nostr/index.js +4 -0
- package/dist/src/plugins/nostr/nostrConnector.js +539 -0
- package/dist/src/plugins/nostr/nostrConnectorPlugin.js +663 -0
- package/dist/src/plugins/nostr/nostrSigner.js +414 -0
- package/dist/src/plugins/smartwallet/index.js +2 -0
- package/dist/src/plugins/smartwallet/smartWalletPlugin.js +824 -0
- package/dist/src/plugins/web3/index.js +4 -0
- package/dist/src/plugins/web3/types.js +1 -0
- package/dist/src/plugins/web3/web3Connector.js +738 -0
- package/dist/src/plugins/web3/web3ConnectorPlugin.js +639 -0
- package/dist/src/plugins/web3/web3Signer.js +432 -0
- package/dist/src/plugins/webauthn/index.js +3 -0
- package/dist/{plugins → src/plugins}/webauthn/types.js +2 -5
- package/dist/src/plugins/webauthn/webauthn.js +647 -0
- package/dist/src/plugins/webauthn/webauthnPlugin.js +689 -0
- package/dist/src/plugins/webauthn/webauthnSigner.js +419 -0
- package/dist/{plugins → src/plugins}/zkproof/index.js +3 -10
- package/dist/src/plugins/zkproof/types.js +1 -0
- package/dist/src/plugins/zkproof/zkCredentials.js +287 -0
- package/dist/src/plugins/zkproof/zkProofConnector.js +267 -0
- package/dist/src/plugins/zkproof/zkProofPlugin.js +405 -0
- package/dist/src/storage/storage.js +189 -0
- package/dist/src/utils/errorHandler.js +339 -0
- package/dist/{utils → src/utils}/eventEmitter.js +26 -26
- package/dist/{utils → src/utils}/seedPhrase.js +23 -32
- package/dist/{utils → src/utils}/validation.js +14 -21
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/{crypto → src/crypto}/double-ratchet.d.ts +1 -1
- package/dist/types/{crypto → src/crypto}/signal-protocol.d.ts +25 -0
- package/dist/types/{crypto → src/crypto}/types.d.ts +3 -1
- package/dist/types/src/examples/crypto-working-test.d.ts +1 -0
- package/dist/types/src/examples/double-ratchet-test.d.ts +1 -0
- package/dist/types/src/examples/mls-sframe-test.d.ts +1 -0
- package/dist/types/src/examples/random-generation-test.d.ts +1 -0
- package/dist/types/src/examples/signal-protocol-test.d.ts +1 -0
- package/dist/types/{gundb → src/gundb}/db.d.ts +14 -1
- package/dist/types/src/gundb/gun-es.d.ts +8 -0
- package/dist/types/src/gundb/min.d.ts +3 -0
- package/dist/types/{index.d.ts → src/index.d.ts} +1 -0
- package/package.json +14 -11
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_curve_js-node_modules_noble_curves_esm_-1ce4ed.shogun-core.js +0 -1651
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_curve_js-node_modules_noble_curves_esm_-1ce4ed.shogun-core.js.map +0 -1
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_nist_js.shogun-core.js +0 -1608
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_nist_js.shogun-core.js.map +0 -1
- package/dist/crypto/asymmetric.js +0 -99
- package/dist/crypto/double-ratchet.js +0 -370
- package/dist/crypto/file-encryption.js +0 -213
- package/dist/crypto/hashing.js +0 -87
- package/dist/crypto/index.js +0 -34
- package/dist/crypto/mls.js +0 -569
- package/dist/crypto/pgp.js +0 -390
- package/dist/crypto/sframe.js +0 -352
- package/dist/crypto/signal-protocol.js +0 -456
- package/dist/crypto/symmetric.js +0 -91
- package/dist/crypto/types.js +0 -2
- package/dist/crypto/utils.js +0 -140
- package/dist/examples/auth-test.js +0 -453
- package/dist/examples/crypto-identity-example.js +0 -196
- package/dist/examples/crypto-working-test.js +0 -83
- package/dist/examples/double-ratchet-test.js +0 -155
- package/dist/examples/mls-3-member-test.js +0 -97
- package/dist/examples/mls-multi-member.js +0 -153
- package/dist/examples/mls-sframe-test.js +0 -307
- package/dist/examples/mls-simple-test.js +0 -58
- package/dist/examples/pgp-example.js +0 -200
- package/dist/examples/random-generation-test.js +0 -151
- package/dist/examples/shogun-core-example.js +0 -150
- package/dist/examples/signal-protocol-test.js +0 -38
- package/dist/examples/zkproof-credentials-example.js +0 -217
- package/dist/examples/zkproof-example.js +0 -242
- package/dist/gundb/crypto.js +0 -306
- package/dist/gundb/db.js +0 -485
- package/dist/gundb/derive.js +0 -232
- package/dist/gundb/errors.js +0 -76
- package/dist/gundb/gun-es.js +0 -12
- package/dist/gundb/index.js +0 -21
- package/dist/gundb/min.js +0 -10
- package/dist/index.esm.js +0 -22
- package/dist/index.js +0 -47
- package/dist/interfaces/common.js +0 -2
- package/dist/interfaces/events.js +0 -40
- package/dist/interfaces/plugin.js +0 -2
- package/dist/managers/AuthManager.js +0 -226
- package/dist/managers/CoreInitializer.js +0 -250
- package/dist/managers/CryptoIdentityManager.js +0 -138
- package/dist/plugins/base.js +0 -50
- package/dist/plugins/index.js +0 -32
- package/dist/plugins/nostr/index.js +0 -20
- package/dist/plugins/nostr/nostrConnector.js +0 -419
- package/dist/plugins/nostr/nostrConnectorPlugin.js +0 -453
- package/dist/plugins/nostr/nostrSigner.js +0 -319
- package/dist/plugins/nostr/types.js +0 -2
- package/dist/plugins/smartwallet/index.js +0 -18
- package/dist/plugins/smartwallet/smartWalletPlugin.js +0 -511
- package/dist/plugins/smartwallet/types.js +0 -2
- package/dist/plugins/web3/index.js +0 -20
- package/dist/plugins/web3/types.js +0 -2
- package/dist/plugins/web3/web3Connector.js +0 -533
- package/dist/plugins/web3/web3ConnectorPlugin.js +0 -455
- package/dist/plugins/web3/web3Signer.js +0 -314
- package/dist/plugins/webauthn/index.js +0 -19
- package/dist/plugins/webauthn/webauthn.js +0 -496
- package/dist/plugins/webauthn/webauthnPlugin.js +0 -490
- package/dist/plugins/webauthn/webauthnSigner.js +0 -310
- package/dist/plugins/zkproof/types.js +0 -2
- package/dist/plugins/zkproof/zkCredentials.js +0 -216
- package/dist/plugins/zkproof/zkProofConnector.js +0 -198
- package/dist/plugins/zkproof/zkProofPlugin.js +0 -272
- package/dist/storage/storage.js +0 -145
- package/dist/types/gundb/gun-es.d.ts +0 -8
- package/dist/utils/errorHandler.js +0 -246
- /package/dist/{types/examples/crypto-working-test.d.ts → src/crypto/types.js} +0 -0
- /package/dist/{types/gundb/min.d.ts → src/gundb/min.js} +0 -0
- /package/dist/{types/examples/double-ratchet-test.d.ts → src/interfaces/common.js} +0 -0
- /package/dist/{types/examples/mls-sframe-test.d.ts → src/interfaces/plugin.js} +0 -0
- /package/dist/{types/examples/random-generation-test.d.ts → src/plugins/nostr/types.js} +0 -0
- /package/dist/{types/examples/signal-protocol-test.d.ts → src/plugins/smartwallet/types.js} +0 -0
- /package/dist/types/{core.d.ts → src/core.d.ts} +0 -0
- /package/dist/types/{crypto → src/crypto}/asymmetric.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/file-encryption.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/hashing.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/index.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/mls-codec.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/mls.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/pgp.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/random-generation.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/sframe.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/symmetric.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/utils.d.ts +0 -0
- /package/dist/types/{examples → src/examples}/auth-test.d.ts +0 -0
- /package/dist/types/{examples → src/examples}/crypto-identity-example.d.ts +0 -0
- /package/dist/types/{examples → src/examples}/mls-3-member-test.d.ts +0 -0
- /package/dist/types/{examples → src/examples}/mls-multi-member.d.ts +0 -0
- /package/dist/types/{examples → src/examples}/mls-simple-test.d.ts +0 -0
- /package/dist/types/{examples → src/examples}/pgp-example.d.ts +0 -0
- /package/dist/types/{examples → src/examples}/shogun-core-example.d.ts +0 -0
- /package/dist/types/{examples → src/examples}/zkproof-credentials-example.d.ts +0 -0
- /package/dist/types/{examples → src/examples}/zkproof-example.d.ts +0 -0
- /package/dist/types/{gundb → src/gundb}/crypto.d.ts +0 -0
- /package/dist/types/{gundb → src/gundb}/derive.d.ts +0 -0
- /package/dist/types/{gundb → src/gundb}/errors.d.ts +0 -0
- /package/dist/types/{gundb → src/gundb}/index.d.ts +0 -0
- /package/dist/types/{gundb → src/gundb}/rxjs.d.ts +0 -0
- /package/dist/types/{gundb → src/gundb}/types.d.ts +0 -0
- /package/dist/types/{interfaces → src/interfaces}/common.d.ts +0 -0
- /package/dist/types/{interfaces → src/interfaces}/events.d.ts +0 -0
- /package/dist/types/{interfaces → src/interfaces}/plugin.d.ts +0 -0
- /package/dist/types/{interfaces → src/interfaces}/shogun.d.ts +0 -0
- /package/dist/types/{managers → src/managers}/AuthManager.d.ts +0 -0
- /package/dist/types/{managers → src/managers}/CoreInitializer.d.ts +0 -0
- /package/dist/types/{managers → src/managers}/CryptoIdentityManager.d.ts +0 -0
- /package/dist/types/{managers → src/managers}/EventManager.d.ts +0 -0
- /package/dist/types/{managers → src/managers}/PluginManager.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/base.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/index.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/nostr/index.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/nostr/nostrConnector.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/nostr/nostrConnectorPlugin.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/nostr/nostrSigner.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/nostr/types.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/smartwallet/index.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/smartwallet/smartWalletPlugin.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/smartwallet/types.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/web3/index.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/web3/types.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/web3/web3Connector.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/web3/web3ConnectorPlugin.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/web3/web3Signer.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/webauthn/index.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/webauthn/types.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/webauthn/webauthn.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/webauthn/webauthnPlugin.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/webauthn/webauthnSigner.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/zkproof/index.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/zkproof/types.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/zkproof/zkCredentials.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/zkproof/zkProofConnector.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/zkproof/zkProofPlugin.d.ts +0 -0
- /package/dist/types/{storage → src/storage}/storage.d.ts +0 -0
- /package/dist/types/{utils → src/utils}/errorHandler.d.ts +0 -0
- /package/dist/types/{utils → src/utils}/eventEmitter.d.ts +0 -0
- /package/dist/types/{utils → src/utils}/seedPhrase.d.ts +0 -0
- /package/dist/types/{utils → src/utils}/validation.d.ts +0 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zero-Knowledge Proof Authentication Example
|
|
3
|
+
*
|
|
4
|
+
* This example demonstrates how to use the ZK-Proof plugin with Shogun Core
|
|
5
|
+
* for privacy-preserving authentication using Semaphore protocol.
|
|
6
|
+
*/
|
|
7
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
17
|
+
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);
|
|
18
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
19
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
20
|
+
function step(op) {
|
|
21
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
22
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
23
|
+
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;
|
|
24
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
25
|
+
switch (op[0]) {
|
|
26
|
+
case 0: case 1: t = op; break;
|
|
27
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
28
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
29
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
30
|
+
default:
|
|
31
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
32
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
33
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
34
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
35
|
+
if (t[2]) _.ops.pop();
|
|
36
|
+
_.trys.pop(); continue;
|
|
37
|
+
}
|
|
38
|
+
op = body.call(thisArg, _);
|
|
39
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
40
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
import { Gun } from "../index.js";
|
|
44
|
+
import { ShogunCore } from "../core.js";
|
|
45
|
+
// Example 1: Basic ZK-Proof signup and login
|
|
46
|
+
function basicExample() {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
48
|
+
var gunInstance, shogun, zkPlugin, signupResult, savedTrapdoor, loginResult;
|
|
49
|
+
var _a, _b;
|
|
50
|
+
return __generator(this, function (_c) {
|
|
51
|
+
switch (_c.label) {
|
|
52
|
+
case 0:
|
|
53
|
+
console.log("=== Basic ZK-Proof Authentication Example ===\n");
|
|
54
|
+
gunInstance = Gun({
|
|
55
|
+
peers: [
|
|
56
|
+
"https://g3ru5bwxmezpuu3ktnoclbpiw4.srv.us/gun",
|
|
57
|
+
"https://5eh4twk2f62autunsje4panime.srv.us/gun",
|
|
58
|
+
],
|
|
59
|
+
radisk: false,
|
|
60
|
+
localStorage: false, // Enable for testing - allows offline operations
|
|
61
|
+
// Reduce log noise from SEA verification errors (these are expected when checking invalid credentials)
|
|
62
|
+
log: function () { }, // Disable Gun.js console logging to reduce noise
|
|
63
|
+
});
|
|
64
|
+
shogun = new ShogunCore({
|
|
65
|
+
gunInstance: gunInstance,
|
|
66
|
+
zkproof: {
|
|
67
|
+
enabled: true,
|
|
68
|
+
defaultGroupId: "my-app-users",
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
// Wait for plugin initialization
|
|
72
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 100); })];
|
|
73
|
+
case 1:
|
|
74
|
+
// Wait for plugin initialization
|
|
75
|
+
_c.sent();
|
|
76
|
+
zkPlugin = shogun.getPlugin("zkproof");
|
|
77
|
+
if (!zkPlugin) {
|
|
78
|
+
console.error("ZK-Proof plugin not available");
|
|
79
|
+
return [2 /*return*/];
|
|
80
|
+
}
|
|
81
|
+
// SIGN UP - Generate new anonymous identity
|
|
82
|
+
console.log("1. Creating new ZK identity...");
|
|
83
|
+
return [4 /*yield*/, zkPlugin.signUp()];
|
|
84
|
+
case 2:
|
|
85
|
+
signupResult = _c.sent();
|
|
86
|
+
if (!signupResult.success) return [3 /*break*/, 4];
|
|
87
|
+
console.log("✅ Signup successful!");
|
|
88
|
+
console.log(" Username (commitment): ".concat(signupResult.username));
|
|
89
|
+
console.log(" User Public Key: ".concat((_a = signupResult.userPub) === null || _a === void 0 ? void 0 : _a.slice(0, 16), "..."));
|
|
90
|
+
console.log("\n⚠️ CRITICAL: Save this trapdoor for account recovery:");
|
|
91
|
+
console.log(" Trapdoor: ".concat(signupResult.seedPhrase, "\n"));
|
|
92
|
+
savedTrapdoor = signupResult.seedPhrase;
|
|
93
|
+
// Logout
|
|
94
|
+
shogun.logout();
|
|
95
|
+
console.log("2. Logged out\n");
|
|
96
|
+
// LOGIN - Authenticate with trapdoor
|
|
97
|
+
console.log("3. Logging in with trapdoor...");
|
|
98
|
+
return [4 /*yield*/, zkPlugin.login(savedTrapdoor)];
|
|
99
|
+
case 3:
|
|
100
|
+
loginResult = _c.sent();
|
|
101
|
+
if (loginResult.success) {
|
|
102
|
+
console.log("✅ Login successful!");
|
|
103
|
+
console.log(" Username: ".concat(loginResult.username));
|
|
104
|
+
console.log(" User Public Key: ".concat((_b = loginResult.userPub) === null || _b === void 0 ? void 0 : _b.slice(0, 16), "..."));
|
|
105
|
+
console.log(" Auth Method: ".concat(loginResult.authMethod));
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
console.error("❌ Login failed:", loginResult.error);
|
|
109
|
+
}
|
|
110
|
+
return [3 /*break*/, 5];
|
|
111
|
+
case 4:
|
|
112
|
+
console.error("❌ Signup failed:", signupResult.error);
|
|
113
|
+
_c.label = 5;
|
|
114
|
+
case 5: return [2 /*return*/];
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
// Example 2: Deterministic identity generation
|
|
120
|
+
function deterministicExample() {
|
|
121
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
122
|
+
var gunInstance, shogun, zkPlugin, seed, signupResult, identity2;
|
|
123
|
+
var _a;
|
|
124
|
+
return __generator(this, function (_b) {
|
|
125
|
+
switch (_b.label) {
|
|
126
|
+
case 0:
|
|
127
|
+
console.log("\n=== Deterministic ZK Identity Example ===\n");
|
|
128
|
+
gunInstance = Gun({
|
|
129
|
+
peers: [
|
|
130
|
+
"https://lindanode.scobrudot.dev/gun",
|
|
131
|
+
"https://shogunnode.scobrudot.dev/gun",
|
|
132
|
+
],
|
|
133
|
+
radisk: false,
|
|
134
|
+
localStorage: false, // Enable for testing - allows offline operations
|
|
135
|
+
// Reduce log noise from SEA verification errors (these are expected when checking invalid credentials)
|
|
136
|
+
log: function () { }, // Disable Gun.js console logging to reduce noise
|
|
137
|
+
});
|
|
138
|
+
shogun = new ShogunCore({
|
|
139
|
+
gunInstance: gunInstance,
|
|
140
|
+
zkproof: {
|
|
141
|
+
enabled: true,
|
|
142
|
+
deterministic: true,
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
// Wait for plugin initialization
|
|
146
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 100); })];
|
|
147
|
+
case 1:
|
|
148
|
+
// Wait for plugin initialization
|
|
149
|
+
_b.sent();
|
|
150
|
+
zkPlugin = shogun.getPlugin("zkproof");
|
|
151
|
+
if (!zkPlugin) {
|
|
152
|
+
console.error("ZK-Proof plugin not available");
|
|
153
|
+
return [2 /*return*/];
|
|
154
|
+
}
|
|
155
|
+
seed = "my-secret-seed-phrase-12345";
|
|
156
|
+
console.log("1. Creating identity from seed...");
|
|
157
|
+
return [4 /*yield*/, zkPlugin.signUp(seed)];
|
|
158
|
+
case 2:
|
|
159
|
+
signupResult = _b.sent();
|
|
160
|
+
if (!signupResult.success) return [3 /*break*/, 4];
|
|
161
|
+
console.log("✅ Identity created from seed");
|
|
162
|
+
console.log(" Commitment: ".concat(signupResult.username));
|
|
163
|
+
return [4 /*yield*/, zkPlugin.generateIdentity(seed)];
|
|
164
|
+
case 3:
|
|
165
|
+
identity2 = _b.sent();
|
|
166
|
+
console.log("\n2. Regenerating from same seed...");
|
|
167
|
+
console.log(" Same commitment? ".concat(identity2.commitment === ((_a = signupResult.username) === null || _a === void 0 ? void 0 : _a.replace("zk_", ""))));
|
|
168
|
+
_b.label = 4;
|
|
169
|
+
case 4: return [2 /*return*/];
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
// Example 3: Generate and verify ZK proofs
|
|
175
|
+
function proofExample() {
|
|
176
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
177
|
+
var gunInstance, shogun, zkPlugin, identity, proof, verificationResult;
|
|
178
|
+
return __generator(this, function (_a) {
|
|
179
|
+
switch (_a.label) {
|
|
180
|
+
case 0:
|
|
181
|
+
console.log("\n=== ZK Proof Generation & Verification Example ===\n");
|
|
182
|
+
gunInstance = Gun({
|
|
183
|
+
peers: [
|
|
184
|
+
"https://lindanode.scobrudot.dev/gun",
|
|
185
|
+
"https://shogunnode.scobrudot.dev/gun",
|
|
186
|
+
],
|
|
187
|
+
radisk: false,
|
|
188
|
+
localStorage: false, // Enable for testing - allows offline operations
|
|
189
|
+
// Reduce log noise from SEA verification errors (these are expected when checking invalid credentials)
|
|
190
|
+
log: function () { }, // Disable Gun.js console logging to reduce noise
|
|
191
|
+
});
|
|
192
|
+
shogun = new ShogunCore({
|
|
193
|
+
gunInstance: gunInstance,
|
|
194
|
+
zkproof: {
|
|
195
|
+
enabled: true,
|
|
196
|
+
defaultGroupId: "proof-demo-group",
|
|
197
|
+
},
|
|
198
|
+
});
|
|
199
|
+
// Wait for plugin initialization
|
|
200
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 100); })];
|
|
201
|
+
case 1:
|
|
202
|
+
// Wait for plugin initialization
|
|
203
|
+
_a.sent();
|
|
204
|
+
zkPlugin = shogun.getPlugin("zkproof");
|
|
205
|
+
if (!zkPlugin) {
|
|
206
|
+
console.error("ZK-Proof plugin not available");
|
|
207
|
+
return [2 /*return*/];
|
|
208
|
+
}
|
|
209
|
+
// Create identity
|
|
210
|
+
console.log("1. Generating identity...");
|
|
211
|
+
return [4 /*yield*/, zkPlugin.generateIdentity()];
|
|
212
|
+
case 2:
|
|
213
|
+
identity = _a.sent();
|
|
214
|
+
console.log(" Commitment: ".concat(identity.commitment.slice(0, 16), "..."));
|
|
215
|
+
// Add to group
|
|
216
|
+
console.log("\n2. Adding to group...");
|
|
217
|
+
zkPlugin.addToGroup(identity.commitment, "proof-demo-group");
|
|
218
|
+
// Generate proof of membership
|
|
219
|
+
console.log("\n3. Generating ZK proof...");
|
|
220
|
+
return [4 /*yield*/, zkPlugin.generateProof(identity, {
|
|
221
|
+
groupId: "proof-demo-group",
|
|
222
|
+
message: "I am a member of this group",
|
|
223
|
+
scope: "membership-verification",
|
|
224
|
+
})];
|
|
225
|
+
case 3:
|
|
226
|
+
proof = _a.sent();
|
|
227
|
+
console.log(" Proof generated!");
|
|
228
|
+
console.log(" Merkle root: ".concat(proof.merkleTreeRoot.slice(0, 16), "..."));
|
|
229
|
+
console.log(" Nullifier hash: ".concat(proof.nullifierHash.slice(0, 16), "..."));
|
|
230
|
+
// Verify the proof
|
|
231
|
+
console.log("\n4. Verifying proof...");
|
|
232
|
+
return [4 /*yield*/, zkPlugin.verifyProof(proof)];
|
|
233
|
+
case 4:
|
|
234
|
+
verificationResult = _a.sent();
|
|
235
|
+
if (verificationResult.verified) {
|
|
236
|
+
console.log("✅ Proof verified successfully!");
|
|
237
|
+
console.log(" User proved group membership without revealing identity");
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
console.error("❌ Proof verification failed");
|
|
241
|
+
}
|
|
242
|
+
return [2 /*return*/];
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
// Example 4: Multi-device scenario
|
|
248
|
+
function multiDeviceExample() {
|
|
249
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
250
|
+
var gunInstance1, shogun1, zkPlugin1, signupResult, trapdoor, gunInstance2, shogun2, zkPlugin2, loginResult;
|
|
251
|
+
return __generator(this, function (_a) {
|
|
252
|
+
switch (_a.label) {
|
|
253
|
+
case 0:
|
|
254
|
+
console.log("\n=== Multi-Device ZK Authentication Example ===\n");
|
|
255
|
+
// Device 1: Create account
|
|
256
|
+
console.log("📱 DEVICE 1: Creating account...");
|
|
257
|
+
gunInstance1 = Gun({
|
|
258
|
+
peers: [
|
|
259
|
+
"https://lindanode.scobrudot.dev/gun",
|
|
260
|
+
"https://shogunnode.scobrudot.dev/gun",
|
|
261
|
+
],
|
|
262
|
+
radisk: false,
|
|
263
|
+
localStorage: false, // Enable for testing - allows offline operations
|
|
264
|
+
// Reduce log noise from SEA verification errors (these are expected when checking invalid credentials)
|
|
265
|
+
log: function () { }, // Disable Gun.js console logging to reduce noise
|
|
266
|
+
});
|
|
267
|
+
shogun1 = new ShogunCore({
|
|
268
|
+
gunInstance: gunInstance1,
|
|
269
|
+
zkproof: { enabled: true },
|
|
270
|
+
});
|
|
271
|
+
// Wait for plugin initialization
|
|
272
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 100); })];
|
|
273
|
+
case 1:
|
|
274
|
+
// Wait for plugin initialization
|
|
275
|
+
_a.sent();
|
|
276
|
+
zkPlugin1 = shogun1.getPlugin("zkproof");
|
|
277
|
+
return [4 /*yield*/, zkPlugin1.signUp()];
|
|
278
|
+
case 2:
|
|
279
|
+
signupResult = _a.sent();
|
|
280
|
+
console.log("✅ Account created on Device 1");
|
|
281
|
+
console.log(" Commitment: ".concat(signupResult.username));
|
|
282
|
+
trapdoor = signupResult.seedPhrase;
|
|
283
|
+
console.log("\n\uD83D\uDCDD User writes down trapdoor: ".concat(trapdoor.slice(0, 20), "..."));
|
|
284
|
+
// Device 2: Import account
|
|
285
|
+
console.log("\n💻 DEVICE 2: Importing account with trapdoor...");
|
|
286
|
+
gunInstance2 = Gun({
|
|
287
|
+
peers: [
|
|
288
|
+
"https://lindanode.scobrudot.dev/gun",
|
|
289
|
+
"https://shogunnode.scobrudot.dev/gun",
|
|
290
|
+
],
|
|
291
|
+
radisk: false,
|
|
292
|
+
localStorage: false, // Enable for testing - allows offline operations
|
|
293
|
+
// Reduce log noise from SEA verification errors (these are expected when checking invalid credentials)
|
|
294
|
+
log: function () { }, // Disable Gun.js console logging to reduce noise
|
|
295
|
+
});
|
|
296
|
+
shogun2 = new ShogunCore({
|
|
297
|
+
gunInstance: gunInstance2,
|
|
298
|
+
zkproof: { enabled: true },
|
|
299
|
+
});
|
|
300
|
+
// Wait for plugin initialization
|
|
301
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 100); })];
|
|
302
|
+
case 3:
|
|
303
|
+
// Wait for plugin initialization
|
|
304
|
+
_a.sent();
|
|
305
|
+
zkPlugin2 = shogun2.getPlugin("zkproof");
|
|
306
|
+
return [4 /*yield*/, zkPlugin2.login(trapdoor)];
|
|
307
|
+
case 4:
|
|
308
|
+
loginResult = _a.sent();
|
|
309
|
+
if (loginResult.success) {
|
|
310
|
+
console.log("✅ Successfully logged in on Device 2");
|
|
311
|
+
console.log(" Same user: ".concat(loginResult.username === signupResult.username));
|
|
312
|
+
console.log("\n🎉 Multi-device authentication working!");
|
|
313
|
+
}
|
|
314
|
+
return [2 /*return*/];
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
// Run examples
|
|
320
|
+
function main() {
|
|
321
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
322
|
+
var error_1;
|
|
323
|
+
return __generator(this, function (_a) {
|
|
324
|
+
switch (_a.label) {
|
|
325
|
+
case 0:
|
|
326
|
+
_a.trys.push([0, 4, , 5]);
|
|
327
|
+
// Run all examples
|
|
328
|
+
return [4 /*yield*/, basicExample()];
|
|
329
|
+
case 1:
|
|
330
|
+
// Run all examples
|
|
331
|
+
_a.sent();
|
|
332
|
+
return [4 /*yield*/, deterministicExample()];
|
|
333
|
+
case 2:
|
|
334
|
+
_a.sent();
|
|
335
|
+
// await proofExample(); // Requires ZK circuit files - see README for setup
|
|
336
|
+
return [4 /*yield*/, multiDeviceExample()];
|
|
337
|
+
case 3:
|
|
338
|
+
// await proofExample(); // Requires ZK circuit files - see README for setup
|
|
339
|
+
_a.sent();
|
|
340
|
+
console.log("\n✨ All examples completed successfully!");
|
|
341
|
+
return [3 /*break*/, 5];
|
|
342
|
+
case 4:
|
|
343
|
+
error_1 = _a.sent();
|
|
344
|
+
console.error("\n❌ Error running examples:", error_1);
|
|
345
|
+
return [3 /*break*/, 5];
|
|
346
|
+
case 5:
|
|
347
|
+
process.exit(0);
|
|
348
|
+
return [2 /*return*/];
|
|
349
|
+
}
|
|
350
|
+
});
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
// Run if executed directly
|
|
354
|
+
if (require.main === module) {
|
|
355
|
+
main();
|
|
356
|
+
}
|
|
357
|
+
export { basicExample, deterministicExample, proofExample, multiDeviceExample };
|