shogun-core 6.2.3 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed448_js.shogun-core.js +93 -341
  2. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed448_js.shogun-core.js.map +1 -1
  3. package/dist/browser/shogun-core.js +138850 -146638
  4. package/dist/browser/shogun-core.js.map +1 -1
  5. package/dist/{core.js → src/core.js} +167 -107
  6. package/dist/src/crypto/asymmetric.js +168 -0
  7. package/dist/src/crypto/double-ratchet.js +908 -0
  8. package/dist/src/crypto/file-encryption.js +352 -0
  9. package/dist/src/crypto/hashing.js +160 -0
  10. package/dist/src/crypto/index.js +18 -0
  11. package/dist/{crypto → src/crypto}/mls-codec.js +24 -34
  12. package/dist/src/crypto/mls.js +734 -0
  13. package/dist/src/crypto/pgp.js +619 -0
  14. package/dist/{crypto → src/crypto}/random-generation.js +125 -103
  15. package/dist/src/crypto/sframe.js +466 -0
  16. package/dist/src/crypto/signal-protocol.js +943 -0
  17. package/dist/src/crypto/symmetric.js +165 -0
  18. package/dist/src/crypto/utils.js +220 -0
  19. package/dist/src/examples/auth-test.js +535 -0
  20. package/dist/src/examples/crypto-identity-example.js +294 -0
  21. package/dist/src/examples/crypto-working-test.js +149 -0
  22. package/dist/src/examples/double-ratchet-test.js +240 -0
  23. package/dist/src/examples/mls-3-member-test.js +183 -0
  24. package/dist/src/examples/mls-multi-member.js +439 -0
  25. package/dist/src/examples/mls-sframe-test.js +491 -0
  26. package/dist/src/examples/mls-simple-test.js +122 -0
  27. package/dist/src/examples/pgp-example.js +354 -0
  28. package/dist/src/examples/random-generation-test.js +191 -0
  29. package/dist/src/examples/shogun-core-example.js +204 -0
  30. package/dist/src/examples/signal-protocol-test.js +82 -0
  31. package/dist/src/examples/zkproof-credentials-example.js +357 -0
  32. package/dist/src/examples/zkproof-example.js +357 -0
  33. package/dist/src/gundb/crypto.js +420 -0
  34. package/dist/src/gundb/db.js +728 -0
  35. package/dist/src/gundb/derive.js +327 -0
  36. package/dist/src/gundb/errors.js +115 -0
  37. package/dist/src/gundb/gun-es.js +8 -0
  38. package/dist/src/gundb/index.js +5 -0
  39. package/dist/{gundb → src/gundb}/rxjs.js +147 -111
  40. package/dist/{gundb → src/gundb}/types.js +1 -2
  41. package/dist/src/index.js +19 -0
  42. package/dist/src/interfaces/events.js +57 -0
  43. package/dist/{interfaces → src/interfaces}/shogun.js +4 -7
  44. package/dist/src/managers/AuthManager.js +301 -0
  45. package/dist/src/managers/CoreInitializer.js +304 -0
  46. package/dist/src/managers/CryptoIdentityManager.js +230 -0
  47. package/dist/{managers → src/managers}/EventManager.js +19 -21
  48. package/dist/{managers → src/managers}/PluginManager.js +123 -89
  49. package/dist/src/plugins/base.js +90 -0
  50. package/dist/src/plugins/index.js +17 -0
  51. package/dist/src/plugins/nostr/index.js +4 -0
  52. package/dist/src/plugins/nostr/nostrConnector.js +539 -0
  53. package/dist/src/plugins/nostr/nostrConnectorPlugin.js +663 -0
  54. package/dist/src/plugins/nostr/nostrSigner.js +414 -0
  55. package/dist/src/plugins/smartwallet/index.js +2 -0
  56. package/dist/src/plugins/smartwallet/smartWalletPlugin.js +824 -0
  57. package/dist/src/plugins/web3/index.js +4 -0
  58. package/dist/src/plugins/web3/types.js +1 -0
  59. package/dist/src/plugins/web3/web3Connector.js +738 -0
  60. package/dist/src/plugins/web3/web3ConnectorPlugin.js +639 -0
  61. package/dist/src/plugins/web3/web3Signer.js +432 -0
  62. package/dist/src/plugins/webauthn/index.js +3 -0
  63. package/dist/{plugins → src/plugins}/webauthn/types.js +2 -5
  64. package/dist/src/plugins/webauthn/webauthn.js +647 -0
  65. package/dist/src/plugins/webauthn/webauthnPlugin.js +689 -0
  66. package/dist/src/plugins/webauthn/webauthnSigner.js +419 -0
  67. package/dist/{plugins → src/plugins}/zkproof/index.js +3 -10
  68. package/dist/src/plugins/zkproof/types.js +1 -0
  69. package/dist/src/plugins/zkproof/zkCredentials.js +287 -0
  70. package/dist/src/plugins/zkproof/zkProofConnector.js +267 -0
  71. package/dist/src/plugins/zkproof/zkProofPlugin.js +405 -0
  72. package/dist/src/storage/storage.js +189 -0
  73. package/dist/src/utils/errorHandler.js +339 -0
  74. package/dist/{utils → src/utils}/eventEmitter.js +26 -26
  75. package/dist/{utils → src/utils}/seedPhrase.js +23 -32
  76. package/dist/{utils → src/utils}/validation.js +14 -21
  77. package/dist/tsconfig.tsbuildinfo +1 -0
  78. package/dist/types/{crypto → src/crypto}/double-ratchet.d.ts +1 -1
  79. package/dist/types/{crypto → src/crypto}/signal-protocol.d.ts +25 -0
  80. package/dist/types/{crypto → src/crypto}/types.d.ts +3 -1
  81. package/dist/types/src/examples/crypto-working-test.d.ts +1 -0
  82. package/dist/types/src/examples/double-ratchet-test.d.ts +1 -0
  83. package/dist/types/src/examples/mls-sframe-test.d.ts +1 -0
  84. package/dist/types/src/examples/random-generation-test.d.ts +1 -0
  85. package/dist/types/src/examples/signal-protocol-test.d.ts +1 -0
  86. package/dist/types/{gundb → src/gundb}/db.d.ts +14 -1
  87. package/dist/types/src/gundb/gun-es.d.ts +8 -0
  88. package/dist/types/src/gundb/min.d.ts +3 -0
  89. package/dist/types/{index.d.ts → src/index.d.ts} +1 -0
  90. package/package.json +14 -11
  91. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_curve_js-node_modules_noble_curves_esm_-1ce4ed.shogun-core.js +0 -1651
  92. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_curve_js-node_modules_noble_curves_esm_-1ce4ed.shogun-core.js.map +0 -1
  93. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_nist_js.shogun-core.js +0 -1608
  94. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_nist_js.shogun-core.js.map +0 -1
  95. package/dist/crypto/asymmetric.js +0 -99
  96. package/dist/crypto/double-ratchet.js +0 -370
  97. package/dist/crypto/file-encryption.js +0 -213
  98. package/dist/crypto/hashing.js +0 -87
  99. package/dist/crypto/index.js +0 -34
  100. package/dist/crypto/mls.js +0 -569
  101. package/dist/crypto/pgp.js +0 -390
  102. package/dist/crypto/sframe.js +0 -352
  103. package/dist/crypto/signal-protocol.js +0 -456
  104. package/dist/crypto/symmetric.js +0 -91
  105. package/dist/crypto/types.js +0 -2
  106. package/dist/crypto/utils.js +0 -140
  107. package/dist/examples/auth-test.js +0 -453
  108. package/dist/examples/crypto-identity-example.js +0 -196
  109. package/dist/examples/crypto-working-test.js +0 -83
  110. package/dist/examples/double-ratchet-test.js +0 -155
  111. package/dist/examples/mls-3-member-test.js +0 -97
  112. package/dist/examples/mls-multi-member.js +0 -153
  113. package/dist/examples/mls-sframe-test.js +0 -307
  114. package/dist/examples/mls-simple-test.js +0 -58
  115. package/dist/examples/pgp-example.js +0 -200
  116. package/dist/examples/random-generation-test.js +0 -151
  117. package/dist/examples/shogun-core-example.js +0 -150
  118. package/dist/examples/signal-protocol-test.js +0 -38
  119. package/dist/examples/zkproof-credentials-example.js +0 -217
  120. package/dist/examples/zkproof-example.js +0 -242
  121. package/dist/gundb/crypto.js +0 -306
  122. package/dist/gundb/db.js +0 -485
  123. package/dist/gundb/derive.js +0 -232
  124. package/dist/gundb/errors.js +0 -76
  125. package/dist/gundb/gun-es.js +0 -12
  126. package/dist/gundb/index.js +0 -21
  127. package/dist/gundb/min.js +0 -10
  128. package/dist/index.esm.js +0 -22
  129. package/dist/index.js +0 -47
  130. package/dist/interfaces/common.js +0 -2
  131. package/dist/interfaces/events.js +0 -40
  132. package/dist/interfaces/plugin.js +0 -2
  133. package/dist/managers/AuthManager.js +0 -226
  134. package/dist/managers/CoreInitializer.js +0 -250
  135. package/dist/managers/CryptoIdentityManager.js +0 -138
  136. package/dist/plugins/base.js +0 -50
  137. package/dist/plugins/index.js +0 -32
  138. package/dist/plugins/nostr/index.js +0 -20
  139. package/dist/plugins/nostr/nostrConnector.js +0 -419
  140. package/dist/plugins/nostr/nostrConnectorPlugin.js +0 -453
  141. package/dist/plugins/nostr/nostrSigner.js +0 -319
  142. package/dist/plugins/nostr/types.js +0 -2
  143. package/dist/plugins/smartwallet/index.js +0 -18
  144. package/dist/plugins/smartwallet/smartWalletPlugin.js +0 -511
  145. package/dist/plugins/smartwallet/types.js +0 -2
  146. package/dist/plugins/web3/index.js +0 -20
  147. package/dist/plugins/web3/types.js +0 -2
  148. package/dist/plugins/web3/web3Connector.js +0 -533
  149. package/dist/plugins/web3/web3ConnectorPlugin.js +0 -455
  150. package/dist/plugins/web3/web3Signer.js +0 -314
  151. package/dist/plugins/webauthn/index.js +0 -19
  152. package/dist/plugins/webauthn/webauthn.js +0 -496
  153. package/dist/plugins/webauthn/webauthnPlugin.js +0 -490
  154. package/dist/plugins/webauthn/webauthnSigner.js +0 -310
  155. package/dist/plugins/zkproof/types.js +0 -2
  156. package/dist/plugins/zkproof/zkCredentials.js +0 -216
  157. package/dist/plugins/zkproof/zkProofConnector.js +0 -198
  158. package/dist/plugins/zkproof/zkProofPlugin.js +0 -272
  159. package/dist/storage/storage.js +0 -145
  160. package/dist/types/gundb/gun-es.d.ts +0 -8
  161. package/dist/utils/errorHandler.js +0 -246
  162. /package/dist/{types/examples/crypto-working-test.d.ts → src/crypto/types.js} +0 -0
  163. /package/dist/{types/gundb/min.d.ts → src/gundb/min.js} +0 -0
  164. /package/dist/{types/examples/double-ratchet-test.d.ts → src/interfaces/common.js} +0 -0
  165. /package/dist/{types/examples/mls-sframe-test.d.ts → src/interfaces/plugin.js} +0 -0
  166. /package/dist/{types/examples/random-generation-test.d.ts → src/plugins/nostr/types.js} +0 -0
  167. /package/dist/{types/examples/signal-protocol-test.d.ts → src/plugins/smartwallet/types.js} +0 -0
  168. /package/dist/types/{core.d.ts → src/core.d.ts} +0 -0
  169. /package/dist/types/{crypto → src/crypto}/asymmetric.d.ts +0 -0
  170. /package/dist/types/{crypto → src/crypto}/file-encryption.d.ts +0 -0
  171. /package/dist/types/{crypto → src/crypto}/hashing.d.ts +0 -0
  172. /package/dist/types/{crypto → src/crypto}/index.d.ts +0 -0
  173. /package/dist/types/{crypto → src/crypto}/mls-codec.d.ts +0 -0
  174. /package/dist/types/{crypto → src/crypto}/mls.d.ts +0 -0
  175. /package/dist/types/{crypto → src/crypto}/pgp.d.ts +0 -0
  176. /package/dist/types/{crypto → src/crypto}/random-generation.d.ts +0 -0
  177. /package/dist/types/{crypto → src/crypto}/sframe.d.ts +0 -0
  178. /package/dist/types/{crypto → src/crypto}/symmetric.d.ts +0 -0
  179. /package/dist/types/{crypto → src/crypto}/utils.d.ts +0 -0
  180. /package/dist/types/{examples → src/examples}/auth-test.d.ts +0 -0
  181. /package/dist/types/{examples → src/examples}/crypto-identity-example.d.ts +0 -0
  182. /package/dist/types/{examples → src/examples}/mls-3-member-test.d.ts +0 -0
  183. /package/dist/types/{examples → src/examples}/mls-multi-member.d.ts +0 -0
  184. /package/dist/types/{examples → src/examples}/mls-simple-test.d.ts +0 -0
  185. /package/dist/types/{examples → src/examples}/pgp-example.d.ts +0 -0
  186. /package/dist/types/{examples → src/examples}/shogun-core-example.d.ts +0 -0
  187. /package/dist/types/{examples → src/examples}/zkproof-credentials-example.d.ts +0 -0
  188. /package/dist/types/{examples → src/examples}/zkproof-example.d.ts +0 -0
  189. /package/dist/types/{gundb → src/gundb}/crypto.d.ts +0 -0
  190. /package/dist/types/{gundb → src/gundb}/derive.d.ts +0 -0
  191. /package/dist/types/{gundb → src/gundb}/errors.d.ts +0 -0
  192. /package/dist/types/{gundb → src/gundb}/index.d.ts +0 -0
  193. /package/dist/types/{gundb → src/gundb}/rxjs.d.ts +0 -0
  194. /package/dist/types/{gundb → src/gundb}/types.d.ts +0 -0
  195. /package/dist/types/{interfaces → src/interfaces}/common.d.ts +0 -0
  196. /package/dist/types/{interfaces → src/interfaces}/events.d.ts +0 -0
  197. /package/dist/types/{interfaces → src/interfaces}/plugin.d.ts +0 -0
  198. /package/dist/types/{interfaces → src/interfaces}/shogun.d.ts +0 -0
  199. /package/dist/types/{managers → src/managers}/AuthManager.d.ts +0 -0
  200. /package/dist/types/{managers → src/managers}/CoreInitializer.d.ts +0 -0
  201. /package/dist/types/{managers → src/managers}/CryptoIdentityManager.d.ts +0 -0
  202. /package/dist/types/{managers → src/managers}/EventManager.d.ts +0 -0
  203. /package/dist/types/{managers → src/managers}/PluginManager.d.ts +0 -0
  204. /package/dist/types/{plugins → src/plugins}/base.d.ts +0 -0
  205. /package/dist/types/{plugins → src/plugins}/index.d.ts +0 -0
  206. /package/dist/types/{plugins → src/plugins}/nostr/index.d.ts +0 -0
  207. /package/dist/types/{plugins → src/plugins}/nostr/nostrConnector.d.ts +0 -0
  208. /package/dist/types/{plugins → src/plugins}/nostr/nostrConnectorPlugin.d.ts +0 -0
  209. /package/dist/types/{plugins → src/plugins}/nostr/nostrSigner.d.ts +0 -0
  210. /package/dist/types/{plugins → src/plugins}/nostr/types.d.ts +0 -0
  211. /package/dist/types/{plugins → src/plugins}/smartwallet/index.d.ts +0 -0
  212. /package/dist/types/{plugins → src/plugins}/smartwallet/smartWalletPlugin.d.ts +0 -0
  213. /package/dist/types/{plugins → src/plugins}/smartwallet/types.d.ts +0 -0
  214. /package/dist/types/{plugins → src/plugins}/web3/index.d.ts +0 -0
  215. /package/dist/types/{plugins → src/plugins}/web3/types.d.ts +0 -0
  216. /package/dist/types/{plugins → src/plugins}/web3/web3Connector.d.ts +0 -0
  217. /package/dist/types/{plugins → src/plugins}/web3/web3ConnectorPlugin.d.ts +0 -0
  218. /package/dist/types/{plugins → src/plugins}/web3/web3Signer.d.ts +0 -0
  219. /package/dist/types/{plugins → src/plugins}/webauthn/index.d.ts +0 -0
  220. /package/dist/types/{plugins → src/plugins}/webauthn/types.d.ts +0 -0
  221. /package/dist/types/{plugins → src/plugins}/webauthn/webauthn.d.ts +0 -0
  222. /package/dist/types/{plugins → src/plugins}/webauthn/webauthnPlugin.d.ts +0 -0
  223. /package/dist/types/{plugins → src/plugins}/webauthn/webauthnSigner.d.ts +0 -0
  224. /package/dist/types/{plugins → src/plugins}/zkproof/index.d.ts +0 -0
  225. /package/dist/types/{plugins → src/plugins}/zkproof/types.d.ts +0 -0
  226. /package/dist/types/{plugins → src/plugins}/zkproof/zkCredentials.d.ts +0 -0
  227. /package/dist/types/{plugins → src/plugins}/zkproof/zkProofConnector.d.ts +0 -0
  228. /package/dist/types/{plugins → src/plugins}/zkproof/zkProofPlugin.d.ts +0 -0
  229. /package/dist/types/{storage → src/storage}/storage.d.ts +0 -0
  230. /package/dist/types/{utils → src/utils}/errorHandler.d.ts +0 -0
  231. /package/dist/types/{utils → src/utils}/eventEmitter.d.ts +0 -0
  232. /package/dist/types/{utils → src/utils}/seedPhrase.d.ts +0 -0
  233. /package/dist/types/{utils → src/utils}/validation.d.ts +0 -0
@@ -0,0 +1,414 @@
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 { NostrConnector } from "./nostrConnector.js";
38
+ import derive from "../../gundb/derive.js";
39
+ import { ethers } from "ethers";
40
+ /**
41
+ * Nostr Signer - Provides oneshot signing functionality
42
+ * Similar to webauthn.js but for Nostr/Bitcoin wallets
43
+ * CONSISTENT with normal Nostr approach
44
+ */
45
+ var NostrSigner = /** @class */ (function () {
46
+ function NostrSigner(nostrConnector) {
47
+ this.credentials = new Map();
48
+ this.MESSAGE_TO_SIGN = "I Love Shogun!"; // Same as normal approach
49
+ this.nostrConnector = nostrConnector || new NostrConnector();
50
+ }
51
+ /**
52
+ * Creates a new Nostr signing credential
53
+ * CONSISTENT with normal Nostr approach
54
+ */
55
+ NostrSigner.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, 3, , 4]);
62
+ validAddress = this.validateAddress(address);
63
+ return [4 /*yield*/, this.generateDeterministicSignature(validAddress)];
64
+ case 1:
65
+ signature = _a.sent();
66
+ username = "".concat(validAddress.toLowerCase());
67
+ return [4 /*yield*/, this.generatePassword(signature)];
68
+ case 2:
69
+ password = _a.sent();
70
+ signingCredential = {
71
+ address: validAddress,
72
+ signature: signature,
73
+ message: this.MESSAGE_TO_SIGN,
74
+ username: username,
75
+ password: password,
76
+ };
77
+ // Store credential for later use
78
+ this.credentials.set(validAddress.toLowerCase(), signingCredential);
79
+ return [2 /*return*/, signingCredential];
80
+ case 3:
81
+ error_1 = _a.sent();
82
+ console.error("Error creating Nostr signing credential:", error_1);
83
+ throw new Error("Failed to create Nostr signing credential: ".concat(error_1.message));
84
+ case 4: return [2 /*return*/];
85
+ }
86
+ });
87
+ });
88
+ };
89
+ /**
90
+ * Validates address using the same logic as NostrConnector
91
+ */
92
+ NostrSigner.prototype.validateAddress = function (address) {
93
+ if (!address) {
94
+ throw new Error("Address not provided");
95
+ }
96
+ try {
97
+ var normalizedAddress = String(address).trim();
98
+ // Basic validation for Bitcoin addresses and Nostr pubkeys (same as normal approach)
99
+ if (!/^(npub1|[0-9a-f]{64}|bc1|[13])[a-zA-HJ-NP-Z0-9]{25,59}$/.test(normalizedAddress)) {
100
+ // More lenient validation for Nostr addresses
101
+ if (normalizedAddress.length < 10) {
102
+ throw new Error("Invalid Nostr/Bitcoin address format");
103
+ }
104
+ }
105
+ return normalizedAddress;
106
+ }
107
+ catch (error) {
108
+ throw new Error("Invalid Nostr/Bitcoin address provided");
109
+ }
110
+ };
111
+ /**
112
+ * Generate deterministic signature using the SAME approach as NostrConnector
113
+ */
114
+ NostrSigner.prototype.generateDeterministicSignature = function (address) {
115
+ return __awaiter(this, void 0, void 0, function () {
116
+ var baseString, hash, runningValue, i, charCode, deterministicSignature;
117
+ return __generator(this, function (_a) {
118
+ baseString = "".concat(address, "_").concat(this.MESSAGE_TO_SIGN, "_shogun_deterministic");
119
+ hash = "";
120
+ runningValue = 0;
121
+ for (i = 0; i < baseString.length; i++) {
122
+ charCode = baseString.charCodeAt(i);
123
+ runningValue = (runningValue * 31 + charCode) & 0xffffffff;
124
+ if (i % 4 === 3) {
125
+ hash += runningValue.toString(16).padStart(8, "0");
126
+ }
127
+ }
128
+ // Ensure we have exactly 128 characters (64 bytes in hex)
129
+ while (hash.length < 128) {
130
+ runningValue = (runningValue * 31 + hash.length) & 0xffffffff;
131
+ hash += runningValue.toString(16).padStart(8, "0");
132
+ }
133
+ deterministicSignature = hash.substring(0, 128);
134
+ // Double-check that it's a valid hex string
135
+ deterministicSignature = deterministicSignature
136
+ .toLowerCase()
137
+ .replace(/[^0-9a-f]/g, "0");
138
+ // Ensure it's exactly 128 characters
139
+ if (deterministicSignature.length < 128) {
140
+ deterministicSignature = deterministicSignature.padEnd(128, "0");
141
+ }
142
+ else if (deterministicSignature.length > 128) {
143
+ deterministicSignature = deterministicSignature.substring(0, 128);
144
+ }
145
+ return [2 /*return*/, deterministicSignature];
146
+ });
147
+ });
148
+ };
149
+ /**
150
+ * Generate password using the SAME approach as NostrConnector
151
+ */
152
+ NostrSigner.prototype.generatePassword = function (signature) {
153
+ return __awaiter(this, void 0, void 0, function () {
154
+ var normalizedSig, passwordHash;
155
+ return __generator(this, function (_a) {
156
+ if (!signature) {
157
+ throw new Error("Invalid signature");
158
+ }
159
+ try {
160
+ normalizedSig = signature.toLowerCase().replace(/[^a-f0-9]/g, "");
161
+ passwordHash = ethers.sha256(ethers.toUtf8Bytes(normalizedSig));
162
+ return [2 /*return*/, passwordHash];
163
+ }
164
+ catch (error) {
165
+ console.error("Error generating password:", error);
166
+ throw new Error("Failed to generate password from signature");
167
+ }
168
+ return [2 /*return*/];
169
+ });
170
+ });
171
+ };
172
+ /**
173
+ * Creates an authenticator function compatible with SEA.sign
174
+ * This is the key function that makes it work like webauthn.js but for Nostr
175
+ */
176
+ NostrSigner.prototype.createAuthenticator = function (address) {
177
+ var _this = this;
178
+ var credential = this.credentials.get(address.toLowerCase());
179
+ if (!credential) {
180
+ throw new Error("Credential for address ".concat(address, " not found"));
181
+ }
182
+ return function (data) { return __awaiter(_this, void 0, void 0, function () {
183
+ var dataToSign, signature, error_2;
184
+ return __generator(this, function (_a) {
185
+ switch (_a.label) {
186
+ case 0:
187
+ _a.trys.push([0, 2, , 3]);
188
+ dataToSign = JSON.stringify(data);
189
+ return [4 /*yield*/, this.signData(dataToSign, credential)];
190
+ case 1:
191
+ signature = _a.sent();
192
+ return [2 /*return*/, signature];
193
+ case 2:
194
+ error_2 = _a.sent();
195
+ console.error("Nostr authentication error:", error_2);
196
+ throw error_2;
197
+ case 3: return [2 /*return*/];
198
+ }
199
+ });
200
+ }); };
201
+ };
202
+ /**
203
+ * Sign data using the credential
204
+ */
205
+ NostrSigner.prototype.signData = function (data, credential) {
206
+ return __awaiter(this, void 0, void 0, function () {
207
+ var signatureBase;
208
+ return __generator(this, function (_a) {
209
+ signatureBase = "".concat(credential.signature, "_").concat(data);
210
+ return [2 /*return*/, this.generateDeterministicSignature(signatureBase)];
211
+ });
212
+ });
213
+ };
214
+ /**
215
+ * Creates a derived key pair from Nostr credential
216
+ * CONSISTENT with normal approach: uses password as seed
217
+ */
218
+ NostrSigner.prototype.createDerivedKeyPair = function (address, extra) {
219
+ return __awaiter(this, void 0, void 0, function () {
220
+ var credential, derivedKeys, error_3;
221
+ return __generator(this, function (_a) {
222
+ switch (_a.label) {
223
+ case 0:
224
+ credential = this.credentials.get(address.toLowerCase());
225
+ if (!credential) {
226
+ throw new Error("Credential for address ".concat(address, " not found"));
227
+ }
228
+ _a.label = 1;
229
+ case 1:
230
+ _a.trys.push([1, 3, , 4]);
231
+ return [4 /*yield*/, derive(credential.password, // This is the key consistency point!
232
+ extra, { includeP256: true })];
233
+ case 2:
234
+ derivedKeys = _a.sent();
235
+ return [2 /*return*/, {
236
+ pub: derivedKeys.pub,
237
+ priv: derivedKeys.priv,
238
+ epub: derivedKeys.epub,
239
+ epriv: derivedKeys.epriv,
240
+ }];
241
+ case 3:
242
+ error_3 = _a.sent();
243
+ console.error("Error deriving keys from Nostr credential:", error_3);
244
+ throw error_3;
245
+ case 4: return [2 /*return*/];
246
+ }
247
+ });
248
+ });
249
+ };
250
+ /**
251
+ * Creates a Gun user from Nostr credential
252
+ * This ensures the SAME user is created as with normal approach
253
+ * FIX: Use derived pair instead of username/password for GunDB auth
254
+ */
255
+ NostrSigner.prototype.createGunUser = function (address, gunInstance) {
256
+ return __awaiter(this, void 0, void 0, function () {
257
+ var credential, derivedPair_1, error_4;
258
+ var _this = this;
259
+ return __generator(this, function (_a) {
260
+ switch (_a.label) {
261
+ case 0:
262
+ credential = this.credentials.get(address.toLowerCase());
263
+ if (!credential) {
264
+ throw new Error("Credential for address ".concat(address, " not found"));
265
+ }
266
+ _a.label = 1;
267
+ case 1:
268
+ _a.trys.push([1, 3, , 4]);
269
+ return [4 /*yield*/, this.createDerivedKeyPair(address)];
270
+ case 2:
271
+ derivedPair_1 = _a.sent();
272
+ return [2 /*return*/, new Promise(function (resolve) {
273
+ // Use the derived pair directly for GunDB auth
274
+ gunInstance.user().create(derivedPair_1, function (ack) {
275
+ if (ack.err) {
276
+ // Try to login if user already exists
277
+ gunInstance.user().auth(derivedPair_1, function (authAck) {
278
+ if (authAck.err) {
279
+ resolve({ success: false, error: authAck.err });
280
+ }
281
+ else {
282
+ var userPub = authAck.pub;
283
+ // Update credential with Gun user pub
284
+ credential.gunUserPub = userPub;
285
+ _this.credentials.set(address.toLowerCase(), credential);
286
+ resolve({ success: true, userPub: userPub });
287
+ }
288
+ });
289
+ }
290
+ else {
291
+ // User created, now login
292
+ gunInstance.user().auth(derivedPair_1, function (authAck) {
293
+ if (authAck.err) {
294
+ resolve({ success: false, error: authAck.err });
295
+ }
296
+ else {
297
+ var userPub = authAck.pub;
298
+ // Update credential with Gun user pub
299
+ credential.gunUserPub = userPub;
300
+ _this.credentials.set(address.toLowerCase(), credential);
301
+ resolve({ success: true, userPub: userPub });
302
+ }
303
+ });
304
+ }
305
+ });
306
+ })];
307
+ case 3:
308
+ error_4 = _a.sent();
309
+ console.error("Error creating Gun user:", error_4);
310
+ return [2 /*return*/, { success: false, error: error_4.message }];
311
+ case 4: return [2 /*return*/];
312
+ }
313
+ });
314
+ });
315
+ };
316
+ /**
317
+ * Signs data using Nostr + derived keys
318
+ * This provides a hybrid approach: Nostr for user verification + derived keys for actual signing
319
+ * CONSISTENT with normal approach
320
+ */
321
+ NostrSigner.prototype.signWithDerivedKeys = function (data, address, extra) {
322
+ return __awaiter(this, void 0, void 0, function () {
323
+ var authenticator, keyPair, message, signature, seaSignature, error_5;
324
+ return __generator(this, function (_a) {
325
+ switch (_a.label) {
326
+ case 0:
327
+ _a.trys.push([0, 4, , 5]);
328
+ authenticator = this.createAuthenticator(address);
329
+ return [4 /*yield*/, authenticator(data)];
330
+ case 1:
331
+ _a.sent(); // This verifies the user
332
+ return [4 /*yield*/, this.createDerivedKeyPair(address, extra)];
333
+ case 2:
334
+ keyPair = _a.sent();
335
+ message = JSON.stringify(data);
336
+ return [4 /*yield*/, this.generateDeterministicSignature("".concat(keyPair.priv, "_").concat(message))];
337
+ case 3:
338
+ signature = _a.sent();
339
+ seaSignature = {
340
+ m: message,
341
+ s: signature,
342
+ };
343
+ return [2 /*return*/, "SEA" + JSON.stringify(seaSignature)];
344
+ case 4:
345
+ error_5 = _a.sent();
346
+ console.error("Error signing with derived keys:", error_5);
347
+ throw error_5;
348
+ case 5: return [2 /*return*/];
349
+ }
350
+ });
351
+ });
352
+ };
353
+ /**
354
+ * Get the Gun user public key for a credential
355
+ * This allows checking if the same user would be created
356
+ */
357
+ NostrSigner.prototype.getGunUserPub = function (address) {
358
+ var credential = this.credentials.get(address.toLowerCase());
359
+ return credential === null || credential === void 0 ? void 0 : credential.gunUserPub;
360
+ };
361
+ /**
362
+ * Get the password (for consistency checking)
363
+ */
364
+ NostrSigner.prototype.getPassword = function (address) {
365
+ var credential = this.credentials.get(address.toLowerCase());
366
+ return credential === null || credential === void 0 ? void 0 : credential.password;
367
+ };
368
+ /**
369
+ * Check if this credential would create the same Gun user as normal approach
370
+ */
371
+ NostrSigner.prototype.verifyConsistency = function (address, expectedUserPub) {
372
+ return __awaiter(this, void 0, void 0, function () {
373
+ var credential, derivedKeys;
374
+ return __generator(this, function (_a) {
375
+ switch (_a.label) {
376
+ case 0:
377
+ credential = this.credentials.get(address.toLowerCase());
378
+ if (!credential) {
379
+ return [2 /*return*/, { consistent: false }];
380
+ }
381
+ return [4 /*yield*/, this.createDerivedKeyPair(address)];
382
+ case 1:
383
+ derivedKeys = _a.sent();
384
+ return [2 /*return*/, {
385
+ consistent: expectedUserPub ? derivedKeys.pub === expectedUserPub : true,
386
+ actualUserPub: derivedKeys.pub,
387
+ expectedUserPub: expectedUserPub,
388
+ }];
389
+ }
390
+ });
391
+ });
392
+ };
393
+ /**
394
+ * Get credential by address
395
+ */
396
+ NostrSigner.prototype.getCredential = function (address) {
397
+ return this.credentials.get(address.toLowerCase());
398
+ };
399
+ /**
400
+ * List all stored credentials
401
+ */
402
+ NostrSigner.prototype.listCredentials = function () {
403
+ return Array.from(this.credentials.values());
404
+ };
405
+ /**
406
+ * Remove a credential
407
+ */
408
+ NostrSigner.prototype.removeCredential = function (address) {
409
+ return this.credentials.delete(address.toLowerCase());
410
+ };
411
+ return NostrSigner;
412
+ }());
413
+ export { NostrSigner };
414
+ export default NostrSigner;
@@ -0,0 +1,2 @@
1
+ export * from "./smartWalletPlugin.js";
2
+ export * from "./types.js";