shogun-core 6.2.4 → 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 +138979 -146789
- 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 -392
- 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,432 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
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);
|
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
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;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
import { Web3Connector } from "./web3Connector.js";
|
|
38
|
+
import { ethers } from "ethers";
|
|
39
|
+
import derive from "../../gundb/derive.js";
|
|
40
|
+
/**
|
|
41
|
+
* Web3 Signer - Provides oneshot signing functionality
|
|
42
|
+
* Similar to webauthn.js but for Web3/MetaMask
|
|
43
|
+
* CONSISTENT with normal Web3 approach
|
|
44
|
+
*/
|
|
45
|
+
var Web3Signer = /** @class */ (function () {
|
|
46
|
+
function Web3Signer(web3Connector) {
|
|
47
|
+
this.credentials = new Map();
|
|
48
|
+
this.MESSAGE_TO_SIGN = "I Love Shogun!"; // Same as normal approach
|
|
49
|
+
this.web3Connector = web3Connector || new Web3Connector();
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Creates a new Web3 signing credential
|
|
53
|
+
* CONSISTENT with normal Web3 approach
|
|
54
|
+
*/
|
|
55
|
+
Web3Signer.prototype.createSigningCredential = function (address) {
|
|
56
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
57
|
+
var validAddress, signature, username, password, signingCredential, error_1;
|
|
58
|
+
return __generator(this, function (_a) {
|
|
59
|
+
switch (_a.label) {
|
|
60
|
+
case 0:
|
|
61
|
+
_a.trys.push([0, 2, , 3]);
|
|
62
|
+
validAddress = ethers.getAddress(address.toLowerCase());
|
|
63
|
+
return [4 /*yield*/, this.requestSignature(validAddress)];
|
|
64
|
+
case 1:
|
|
65
|
+
signature = _a.sent();
|
|
66
|
+
username = "".concat(validAddress.toLowerCase());
|
|
67
|
+
password = ethers.keccak256(ethers.toUtf8Bytes("".concat(validAddress.toLowerCase(), ":shogun-web3")));
|
|
68
|
+
signingCredential = {
|
|
69
|
+
address: validAddress,
|
|
70
|
+
signature: signature,
|
|
71
|
+
message: this.MESSAGE_TO_SIGN,
|
|
72
|
+
username: username,
|
|
73
|
+
password: password,
|
|
74
|
+
};
|
|
75
|
+
// Store credential for later use
|
|
76
|
+
this.credentials.set(validAddress.toLowerCase(), signingCredential);
|
|
77
|
+
return [2 /*return*/, signingCredential];
|
|
78
|
+
case 2:
|
|
79
|
+
error_1 = _a.sent();
|
|
80
|
+
console.error("Error creating Web3 signing credential:", error_1);
|
|
81
|
+
throw new Error("Failed to create Web3 signing credential: ".concat(error_1.message));
|
|
82
|
+
case 3: return [2 /*return*/];
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Request signature from MetaMask
|
|
89
|
+
* Uses the same approach as normal Web3Connector
|
|
90
|
+
*/
|
|
91
|
+
Web3Signer.prototype.requestSignature = function (address) {
|
|
92
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
93
|
+
var signer, signerAddress, signature, error_2;
|
|
94
|
+
return __generator(this, function (_a) {
|
|
95
|
+
switch (_a.label) {
|
|
96
|
+
case 0:
|
|
97
|
+
_a.trys.push([0, 4, , 5]);
|
|
98
|
+
return [4 /*yield*/, this.web3Connector.getSigner()];
|
|
99
|
+
case 1:
|
|
100
|
+
signer = _a.sent();
|
|
101
|
+
return [4 /*yield*/, signer.getAddress()];
|
|
102
|
+
case 2:
|
|
103
|
+
signerAddress = _a.sent();
|
|
104
|
+
if (signerAddress.toLowerCase() !== address.toLowerCase()) {
|
|
105
|
+
throw new Error("Signer address (".concat(signerAddress, ") does not match expected address (").concat(address, ")"));
|
|
106
|
+
}
|
|
107
|
+
return [4 /*yield*/, signer.signMessage(this.MESSAGE_TO_SIGN)];
|
|
108
|
+
case 3:
|
|
109
|
+
signature = _a.sent();
|
|
110
|
+
return [2 /*return*/, signature];
|
|
111
|
+
case 4:
|
|
112
|
+
error_2 = _a.sent();
|
|
113
|
+
console.error("Failed to request signature:", error_2);
|
|
114
|
+
throw error_2;
|
|
115
|
+
case 5: return [2 /*return*/];
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Creates an authenticator function compatible with SEA.sign
|
|
122
|
+
* This is the key function that makes it work like webauthn.js but for Web3
|
|
123
|
+
*/
|
|
124
|
+
Web3Signer.prototype.createAuthenticator = function (address) {
|
|
125
|
+
var _this = this;
|
|
126
|
+
var credential = this.credentials.get(address.toLowerCase());
|
|
127
|
+
if (!credential) {
|
|
128
|
+
throw new Error("Credential for address ".concat(address, " not found"));
|
|
129
|
+
}
|
|
130
|
+
return function (data) { return __awaiter(_this, void 0, void 0, function () {
|
|
131
|
+
var signer, signerAddress, dataToSign, signature, error_3;
|
|
132
|
+
return __generator(this, function (_a) {
|
|
133
|
+
switch (_a.label) {
|
|
134
|
+
case 0:
|
|
135
|
+
_a.trys.push([0, 4, , 5]);
|
|
136
|
+
return [4 /*yield*/, this.web3Connector.getSigner()];
|
|
137
|
+
case 1:
|
|
138
|
+
signer = _a.sent();
|
|
139
|
+
return [4 /*yield*/, signer.getAddress()];
|
|
140
|
+
case 2:
|
|
141
|
+
signerAddress = _a.sent();
|
|
142
|
+
if (signerAddress.toLowerCase() !== address.toLowerCase()) {
|
|
143
|
+
throw new Error("Address mismatch during authentication");
|
|
144
|
+
}
|
|
145
|
+
dataToSign = JSON.stringify(data);
|
|
146
|
+
return [4 /*yield*/, signer.signMessage(dataToSign)];
|
|
147
|
+
case 3:
|
|
148
|
+
signature = _a.sent();
|
|
149
|
+
return [2 /*return*/, signature];
|
|
150
|
+
case 4:
|
|
151
|
+
error_3 = _a.sent();
|
|
152
|
+
console.error("Web3 authentication error:", error_3);
|
|
153
|
+
throw error_3;
|
|
154
|
+
case 5: return [2 /*return*/];
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}); };
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Creates a derived key pair from Web3 credential
|
|
161
|
+
* CONSISTENT with normal approach: uses password as seed
|
|
162
|
+
*/
|
|
163
|
+
Web3Signer.prototype.createDerivedKeyPair = function (address, extra) {
|
|
164
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
165
|
+
return __generator(this, function (_a) {
|
|
166
|
+
// Use the deterministic approach instead of stored credentials
|
|
167
|
+
return [2 /*return*/, this.createDerivedKeyPairFromAddress(address, extra)];
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
};
|
|
171
|
+
/**
|
|
172
|
+
* Authenticate with existing pair (for login)
|
|
173
|
+
* This generates the deterministic pair from address and authenticates with GunDB
|
|
174
|
+
* GunDB will recognize the user because the pair is deterministic
|
|
175
|
+
*/
|
|
176
|
+
Web3Signer.prototype.authenticateWithExistingPair = function (address, gunInstance) {
|
|
177
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
178
|
+
var derivedPair_1, error_4;
|
|
179
|
+
return __generator(this, function (_a) {
|
|
180
|
+
switch (_a.label) {
|
|
181
|
+
case 0:
|
|
182
|
+
_a.trys.push([0, 2, , 3]);
|
|
183
|
+
console.log("\uD83D\uDD27 Web3Signer - authenticating with deterministic pair for address:", address);
|
|
184
|
+
return [4 /*yield*/, this.createDerivedKeyPairFromAddress(address)];
|
|
185
|
+
case 1:
|
|
186
|
+
derivedPair_1 = _a.sent();
|
|
187
|
+
console.log("\uD83D\uDD27 Web3Signer - deterministic pair created, attempting auth with GunDB");
|
|
188
|
+
return [2 /*return*/, new Promise(function (resolve) {
|
|
189
|
+
// Authenticate directly with GunDB using the deterministic pair
|
|
190
|
+
gunInstance.user().auth(derivedPair_1, function (authAck) {
|
|
191
|
+
if (authAck.err) {
|
|
192
|
+
console.log("\uD83D\uDD27 Web3Signer - auth failed:", authAck.err);
|
|
193
|
+
resolve({ success: false, error: authAck.err });
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
var userPub = authAck.pub;
|
|
197
|
+
console.log("\uD83D\uDD27 Web3Signer - auth successful, userPub:", userPub ? userPub.slice(0, 8) + "..." : "null");
|
|
198
|
+
resolve({ success: true, userPub: userPub });
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
})];
|
|
202
|
+
case 2:
|
|
203
|
+
error_4 = _a.sent();
|
|
204
|
+
console.error("Error authenticating with deterministic pair:", error_4);
|
|
205
|
+
return [2 /*return*/, { success: false, error: error_4.message }];
|
|
206
|
+
case 3: return [2 /*return*/];
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
};
|
|
211
|
+
/**
|
|
212
|
+
* Creates a derived key pair directly from address (deterministic)
|
|
213
|
+
* This ensures the same pair is generated every time for the same address
|
|
214
|
+
*/
|
|
215
|
+
Web3Signer.prototype.createDerivedKeyPairFromAddress = function (address, extra) {
|
|
216
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
217
|
+
var validAddress, password, derivedKeys, error_5;
|
|
218
|
+
return __generator(this, function (_a) {
|
|
219
|
+
switch (_a.label) {
|
|
220
|
+
case 0:
|
|
221
|
+
_a.trys.push([0, 2, , 3]);
|
|
222
|
+
validAddress = ethers.getAddress(address.toLowerCase());
|
|
223
|
+
password = ethers.keccak256(ethers.toUtf8Bytes("".concat(validAddress.toLowerCase(), ":shogun-web3")));
|
|
224
|
+
console.log("\uD83D\uDD27 Web3Signer - generating deterministic pair for address:", validAddress);
|
|
225
|
+
return [4 /*yield*/, derive(password, // Deterministic password from address
|
|
226
|
+
extra, { includeP256: true })];
|
|
227
|
+
case 1:
|
|
228
|
+
derivedKeys = _a.sent();
|
|
229
|
+
return [2 /*return*/, {
|
|
230
|
+
pub: derivedKeys.pub,
|
|
231
|
+
priv: derivedKeys.priv,
|
|
232
|
+
epub: derivedKeys.epub,
|
|
233
|
+
epriv: derivedKeys.epriv,
|
|
234
|
+
}];
|
|
235
|
+
case 2:
|
|
236
|
+
error_5 = _a.sent();
|
|
237
|
+
console.error("Error creating derived key pair from address:", error_5);
|
|
238
|
+
throw error_5;
|
|
239
|
+
case 3: return [2 /*return*/];
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
};
|
|
244
|
+
/**
|
|
245
|
+
* Creates a Gun user from Web3 credential
|
|
246
|
+
* This ensures the SAME user is created as with normal approach
|
|
247
|
+
* FIX: Use derived pair instead of username/password for GunDB auth
|
|
248
|
+
*/
|
|
249
|
+
Web3Signer.prototype.createGunUser = function (address, gunInstance) {
|
|
250
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
251
|
+
var derivedPair_2, error_6;
|
|
252
|
+
return __generator(this, function (_a) {
|
|
253
|
+
switch (_a.label) {
|
|
254
|
+
case 0:
|
|
255
|
+
_a.trys.push([0, 2, , 3]);
|
|
256
|
+
console.log("\uD83D\uDD27 Web3Signer - creating Gun user with deterministic pair for address:", address);
|
|
257
|
+
return [4 /*yield*/, this.createDerivedKeyPairFromAddress(address)];
|
|
258
|
+
case 1:
|
|
259
|
+
derivedPair_2 = _a.sent();
|
|
260
|
+
return [2 /*return*/, new Promise(function (resolve) {
|
|
261
|
+
// Use the derived pair directly for GunDB auth
|
|
262
|
+
gunInstance.user().create(derivedPair_2, function (ack) {
|
|
263
|
+
if (ack.err) {
|
|
264
|
+
console.log("\uD83D\uDD27 Web3Signer - user creation failed, trying auth:", ack.err);
|
|
265
|
+
// Try to login if user already exists
|
|
266
|
+
gunInstance.user().auth(derivedPair_2, function (authAck) {
|
|
267
|
+
if (authAck.err) {
|
|
268
|
+
console.log("\uD83D\uDD27 Web3Signer - auth also failed:", authAck.err);
|
|
269
|
+
resolve({ success: false, error: authAck.err });
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
var userPub = authAck.pub;
|
|
273
|
+
console.log("\uD83D\uDD27 Web3Signer - auth successful, userPub:", userPub ? userPub.slice(0, 8) + "..." : "null");
|
|
274
|
+
resolve({ success: true, userPub: userPub });
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
console.log("\uD83D\uDD27 Web3Signer - user created successfully, now logging in");
|
|
280
|
+
// User created, now login
|
|
281
|
+
gunInstance.user().auth(derivedPair_2, function (authAck) {
|
|
282
|
+
if (authAck.err) {
|
|
283
|
+
console.log("\uD83D\uDD27 Web3Signer - login after creation failed:", authAck.err);
|
|
284
|
+
resolve({ success: false, error: authAck.err });
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
var userPub = authAck.pub;
|
|
288
|
+
console.log("\uD83D\uDD27 Web3Signer - login successful, userPub:", userPub ? userPub.slice(0, 8) + "..." : "null");
|
|
289
|
+
resolve({ success: true, userPub: userPub });
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
})];
|
|
295
|
+
case 2:
|
|
296
|
+
error_6 = _a.sent();
|
|
297
|
+
console.error("Error creating Gun user:", error_6);
|
|
298
|
+
return [2 /*return*/, { success: false, error: error_6.message }];
|
|
299
|
+
case 3: return [2 /*return*/];
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
});
|
|
303
|
+
};
|
|
304
|
+
/**
|
|
305
|
+
* Signs data using Web3 + derived keys
|
|
306
|
+
* This provides a hybrid approach: Web3 for user verification + derived keys for actual signing
|
|
307
|
+
* CONSISTENT with normal approach
|
|
308
|
+
*/
|
|
309
|
+
Web3Signer.prototype.signWithDerivedKeys = function (data, address, extra) {
|
|
310
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
311
|
+
var authenticator, keyPair, message, messageHash, wallet, signature, seaSignature, error_7;
|
|
312
|
+
return __generator(this, function (_a) {
|
|
313
|
+
switch (_a.label) {
|
|
314
|
+
case 0:
|
|
315
|
+
_a.trys.push([0, 4, , 5]);
|
|
316
|
+
authenticator = this.createAuthenticator(address);
|
|
317
|
+
return [4 /*yield*/, authenticator(data)];
|
|
318
|
+
case 1:
|
|
319
|
+
_a.sent(); // This verifies the user
|
|
320
|
+
return [4 /*yield*/, this.createDerivedKeyPair(address, extra)];
|
|
321
|
+
case 2:
|
|
322
|
+
keyPair = _a.sent();
|
|
323
|
+
message = JSON.stringify(data);
|
|
324
|
+
messageHash = ethers.keccak256(ethers.toUtf8Bytes(message));
|
|
325
|
+
wallet = new ethers.Wallet(keyPair.priv);
|
|
326
|
+
return [4 /*yield*/, wallet.signMessage(message)];
|
|
327
|
+
case 3:
|
|
328
|
+
signature = _a.sent();
|
|
329
|
+
seaSignature = {
|
|
330
|
+
m: message,
|
|
331
|
+
s: signature,
|
|
332
|
+
};
|
|
333
|
+
return [2 /*return*/, "SEA" + JSON.stringify(seaSignature)];
|
|
334
|
+
case 4:
|
|
335
|
+
error_7 = _a.sent();
|
|
336
|
+
console.error("Error signing with derived keys:", error_7);
|
|
337
|
+
throw error_7;
|
|
338
|
+
case 5: return [2 /*return*/];
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
};
|
|
343
|
+
/**
|
|
344
|
+
* Get the Gun user public key for a credential
|
|
345
|
+
* This allows checking if the same user would be created
|
|
346
|
+
*/
|
|
347
|
+
Web3Signer.prototype.getGunUserPub = function (address) {
|
|
348
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
349
|
+
var derivedPair, error_8;
|
|
350
|
+
return __generator(this, function (_a) {
|
|
351
|
+
switch (_a.label) {
|
|
352
|
+
case 0:
|
|
353
|
+
_a.trys.push([0, 2, , 3]);
|
|
354
|
+
return [4 /*yield*/, this.createDerivedKeyPairFromAddress(address)];
|
|
355
|
+
case 1:
|
|
356
|
+
derivedPair = _a.sent();
|
|
357
|
+
return [2 /*return*/, derivedPair.pub];
|
|
358
|
+
case 2:
|
|
359
|
+
error_8 = _a.sent();
|
|
360
|
+
console.error("Error getting Gun user pub:", error_8);
|
|
361
|
+
return [2 /*return*/, undefined];
|
|
362
|
+
case 3: return [2 /*return*/];
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
});
|
|
366
|
+
};
|
|
367
|
+
/**
|
|
368
|
+
* Get the password (for consistency checking)
|
|
369
|
+
*/
|
|
370
|
+
Web3Signer.prototype.getPassword = function (address) {
|
|
371
|
+
try {
|
|
372
|
+
// Generate deterministic password from address (same as createSigningCredential)
|
|
373
|
+
var validAddress = ethers.getAddress(address.toLowerCase());
|
|
374
|
+
var password = ethers.keccak256(ethers.toUtf8Bytes("".concat(validAddress.toLowerCase(), ":shogun-web3")));
|
|
375
|
+
return password;
|
|
376
|
+
}
|
|
377
|
+
catch (error) {
|
|
378
|
+
console.error("Error getting password:", error);
|
|
379
|
+
return undefined;
|
|
380
|
+
}
|
|
381
|
+
};
|
|
382
|
+
/**
|
|
383
|
+
* Check if this credential would create the same Gun user as normal approach
|
|
384
|
+
*/
|
|
385
|
+
Web3Signer.prototype.verifyConsistency = function (address, expectedUserPub) {
|
|
386
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
387
|
+
var derivedKeys, error_9;
|
|
388
|
+
return __generator(this, function (_a) {
|
|
389
|
+
switch (_a.label) {
|
|
390
|
+
case 0:
|
|
391
|
+
_a.trys.push([0, 2, , 3]);
|
|
392
|
+
return [4 /*yield*/, this.createDerivedKeyPairFromAddress(address)];
|
|
393
|
+
case 1:
|
|
394
|
+
derivedKeys = _a.sent();
|
|
395
|
+
return [2 /*return*/, {
|
|
396
|
+
consistent: expectedUserPub
|
|
397
|
+
? derivedKeys.pub === expectedUserPub
|
|
398
|
+
: true,
|
|
399
|
+
actualUserPub: derivedKeys.pub,
|
|
400
|
+
expectedUserPub: expectedUserPub,
|
|
401
|
+
}];
|
|
402
|
+
case 2:
|
|
403
|
+
error_9 = _a.sent();
|
|
404
|
+
console.error("Error verifying consistency:", error_9);
|
|
405
|
+
return [2 /*return*/, { consistent: false }];
|
|
406
|
+
case 3: return [2 /*return*/];
|
|
407
|
+
}
|
|
408
|
+
});
|
|
409
|
+
});
|
|
410
|
+
};
|
|
411
|
+
/**
|
|
412
|
+
* Get credential by address
|
|
413
|
+
*/
|
|
414
|
+
Web3Signer.prototype.getCredential = function (address) {
|
|
415
|
+
return this.credentials.get(address.toLowerCase());
|
|
416
|
+
};
|
|
417
|
+
/**
|
|
418
|
+
* List all stored credentials
|
|
419
|
+
*/
|
|
420
|
+
Web3Signer.prototype.listCredentials = function () {
|
|
421
|
+
return Array.from(this.credentials.values());
|
|
422
|
+
};
|
|
423
|
+
/**
|
|
424
|
+
* Remove a credential
|
|
425
|
+
*/
|
|
426
|
+
Web3Signer.prototype.removeCredential = function (address) {
|
|
427
|
+
return this.credentials.delete(address.toLowerCase());
|
|
428
|
+
};
|
|
429
|
+
return Web3Signer;
|
|
430
|
+
}());
|
|
431
|
+
export { Web3Signer };
|
|
432
|
+
export default Web3Signer;
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WebAuthnEventType = void 0;
|
|
4
1
|
/**
|
|
5
2
|
* WebAuthn event types
|
|
6
3
|
*/
|
|
7
|
-
var WebAuthnEventType;
|
|
4
|
+
export var WebAuthnEventType;
|
|
8
5
|
(function (WebAuthnEventType) {
|
|
9
6
|
WebAuthnEventType["DEVICE_REGISTERED"] = "deviceRegistered";
|
|
10
7
|
WebAuthnEventType["DEVICE_REMOVED"] = "deviceRemoved";
|
|
11
8
|
WebAuthnEventType["AUTHENTICATION_SUCCESS"] = "authenticationSuccess";
|
|
12
9
|
WebAuthnEventType["AUTHENTICATION_FAILED"] = "authenticationFailed";
|
|
13
10
|
WebAuthnEventType["ERROR"] = "error";
|
|
14
|
-
})(WebAuthnEventType || (
|
|
11
|
+
})(WebAuthnEventType || (WebAuthnEventType = {}));
|