shogun-core 5.2.0 → 5.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/dist/browser/defaultVendors-node_modules_hpke_chacha20poly1305_esm_mod_js.shogun-core.js +1220 -0
  2. package/dist/browser/defaultVendors-node_modules_hpke_chacha20poly1305_esm_mod_js.shogun-core.js.map +1 -0
  3. package/dist/browser/defaultVendors-node_modules_hpke_hybridkem-x-wing_esm_mod_js.shogun-core.js +844 -0
  4. package/dist/browser/defaultVendors-node_modules_hpke_hybridkem-x-wing_esm_mod_js.shogun-core.js.map +1 -0
  5. package/dist/browser/defaultVendors-node_modules_mlkem_esm_mod_js.shogun-core.js +2335 -0
  6. package/dist/browser/defaultVendors-node_modules_mlkem_esm_mod_js.shogun-core.js.map +1 -0
  7. package/dist/browser/defaultVendors-node_modules_noble_ciphers_chacha_js.shogun-core.js +999 -0
  8. package/dist/browser/defaultVendors-node_modules_noble_ciphers_chacha_js.shogun-core.js.map +1 -0
  9. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_curve_js-node_modules_noble_curves_esm_-1ce4ed.shogun-core.js +1651 -0
  10. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_curve_js-node_modules_noble_curves_esm_-1ce4ed.shogun-core.js.map +1 -0
  11. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_edwards_js-node_modules_noble_curves_es-a82056.shogun-core.js +825 -0
  12. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_edwards_js-node_modules_noble_curves_es-a82056.shogun-core.js.map +1 -0
  13. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed25519_js.shogun-core.js +508 -0
  14. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed25519_js.shogun-core.js.map +1 -0
  15. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed448_js.shogun-core.js +747 -0
  16. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed448_js.shogun-core.js.map +1 -0
  17. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_nist_js.shogun-core.js +1608 -0
  18. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_nist_js.shogun-core.js.map +1 -0
  19. package/dist/browser/defaultVendors-node_modules_noble_post-quantum_ml-dsa_js.shogun-core.js +2117 -0
  20. package/dist/browser/defaultVendors-node_modules_noble_post-quantum_ml-dsa_js.shogun-core.js.map +1 -0
  21. package/dist/browser/defaultVendors-node_modules_openpgp_dist_openpgp_min_mjs.shogun-core.js +86 -0
  22. package/dist/browser/defaultVendors-node_modules_openpgp_dist_openpgp_min_mjs.shogun-core.js.map +1 -0
  23. package/dist/browser/node_modules_hpke_ml-kem_esm_mod_js.shogun-core.js +539 -0
  24. package/dist/browser/node_modules_hpke_ml-kem_esm_mod_js.shogun-core.js.map +1 -0
  25. package/dist/browser/shogun-core.js +160386 -0
  26. package/dist/browser/shogun-core.js.map +1 -0
  27. package/dist/config/simplified-config.js +236 -0
  28. package/dist/core.js +329 -0
  29. package/dist/crypto/asymmetric.js +99 -0
  30. package/dist/crypto/double-ratchet.js +370 -0
  31. package/dist/crypto/file-encryption.js +213 -0
  32. package/dist/crypto/hashing.js +87 -0
  33. package/dist/crypto/index.js +34 -0
  34. package/dist/crypto/mls-codec.js +202 -0
  35. package/dist/crypto/mls.js +550 -0
  36. package/dist/crypto/pgp.js +390 -0
  37. package/dist/crypto/random-generation.js +341 -0
  38. package/dist/crypto/sframe.js +350 -0
  39. package/dist/crypto/signal-protocol.js +376 -0
  40. package/dist/crypto/symmetric.js +91 -0
  41. package/dist/crypto/types.js +2 -0
  42. package/dist/crypto/utils.js +140 -0
  43. package/dist/examples/auth-test.js +253 -0
  44. package/dist/examples/crypto-identity-example.js +151 -0
  45. package/dist/examples/crypto-working-test.js +83 -0
  46. package/dist/examples/double-ratchet-test.js +155 -0
  47. package/dist/examples/mls-advanced-example.js +294 -0
  48. package/dist/examples/mls-sframe-test.js +304 -0
  49. package/dist/examples/pgp-example.js +200 -0
  50. package/dist/examples/quick-auth-test.js +61 -0
  51. package/dist/examples/random-generation-test.js +151 -0
  52. package/dist/examples/signal-protocol-test.js +38 -0
  53. package/dist/examples/simple-api-test.js +114 -0
  54. package/dist/examples/simple-crypto-identity-example.js +84 -0
  55. package/dist/examples/timeout-test.js +227 -0
  56. package/dist/examples/zkproof-credentials-example.js +212 -0
  57. package/dist/examples/zkproof-example.js +201 -0
  58. package/dist/gundb/api.js +435 -0
  59. package/dist/gundb/crypto.js +283 -0
  60. package/dist/gundb/db.js +1946 -0
  61. package/dist/gundb/derive.js +232 -0
  62. package/dist/gundb/errors.js +76 -0
  63. package/dist/gundb/index.js +22 -0
  64. package/dist/gundb/rxjs.js +447 -0
  65. package/dist/gundb/types.js +5 -0
  66. package/dist/index.js +58 -0
  67. package/dist/interfaces/common.js +2 -0
  68. package/dist/interfaces/events.js +40 -0
  69. package/dist/interfaces/plugin.js +2 -0
  70. package/dist/interfaces/shogun.js +37 -0
  71. package/dist/managers/AuthManager.js +226 -0
  72. package/dist/managers/CoreInitializer.js +228 -0
  73. package/dist/managers/CryptoIdentityManager.js +366 -0
  74. package/dist/managers/EventManager.js +70 -0
  75. package/dist/managers/PluginManager.js +299 -0
  76. package/dist/plugins/base.js +50 -0
  77. package/dist/plugins/index.js +32 -0
  78. package/dist/plugins/nostr/index.js +20 -0
  79. package/dist/plugins/nostr/nostrConnector.js +419 -0
  80. package/dist/plugins/nostr/nostrConnectorPlugin.js +453 -0
  81. package/dist/plugins/nostr/nostrSigner.js +319 -0
  82. package/dist/plugins/nostr/types.js +2 -0
  83. package/dist/plugins/smartwallet/index.js +18 -0
  84. package/dist/plugins/smartwallet/smartWalletPlugin.js +511 -0
  85. package/dist/plugins/smartwallet/types.js +2 -0
  86. package/dist/plugins/web3/index.js +20 -0
  87. package/dist/plugins/web3/types.js +2 -0
  88. package/dist/plugins/web3/web3Connector.js +533 -0
  89. package/dist/plugins/web3/web3ConnectorPlugin.js +455 -0
  90. package/dist/plugins/web3/web3Signer.js +314 -0
  91. package/dist/plugins/webauthn/index.js +19 -0
  92. package/dist/plugins/webauthn/types.js +14 -0
  93. package/dist/plugins/webauthn/webauthn.js +496 -0
  94. package/dist/plugins/webauthn/webauthnPlugin.js +489 -0
  95. package/dist/plugins/webauthn/webauthnSigner.js +310 -0
  96. package/dist/plugins/zkproof/index.js +53 -0
  97. package/dist/plugins/zkproof/types.js +2 -0
  98. package/dist/plugins/zkproof/zkCredentials.js +213 -0
  99. package/dist/plugins/zkproof/zkProofConnector.js +198 -0
  100. package/dist/plugins/zkproof/zkProofPlugin.js +272 -0
  101. package/dist/storage/storage.js +145 -0
  102. package/dist/types/config/simplified-config.d.ts +114 -0
  103. package/dist/types/core.d.ts +305 -0
  104. package/dist/types/crypto/asymmetric.d.ts +6 -0
  105. package/dist/types/crypto/double-ratchet.d.ts +22 -0
  106. package/dist/types/crypto/file-encryption.d.ts +19 -0
  107. package/dist/types/crypto/hashing.d.ts +9 -0
  108. package/dist/types/crypto/index.d.ts +13 -0
  109. package/dist/types/crypto/mls-codec.d.ts +39 -0
  110. package/dist/types/crypto/mls.d.ts +130 -0
  111. package/dist/types/crypto/pgp.d.ts +95 -0
  112. package/dist/types/crypto/random-generation.d.ts +35 -0
  113. package/dist/types/crypto/sframe.d.ts +102 -0
  114. package/dist/types/crypto/signal-protocol.d.ts +26 -0
  115. package/dist/types/crypto/symmetric.d.ts +9 -0
  116. package/dist/types/crypto/types.d.ts +144 -0
  117. package/dist/types/crypto/utils.d.ts +22 -0
  118. package/dist/types/examples/auth-test.d.ts +8 -0
  119. package/dist/types/examples/crypto-identity-example.d.ts +5 -0
  120. package/dist/types/examples/crypto-working-test.d.ts +1 -0
  121. package/dist/types/examples/double-ratchet-test.d.ts +1 -0
  122. package/dist/types/examples/mls-advanced-example.d.ts +53 -0
  123. package/dist/types/examples/mls-sframe-test.d.ts +1 -0
  124. package/dist/types/examples/pgp-example.d.ts +75 -0
  125. package/dist/types/examples/quick-auth-test.d.ts +8 -0
  126. package/dist/types/examples/random-generation-test.d.ts +1 -0
  127. package/dist/types/examples/signal-protocol-test.d.ts +1 -0
  128. package/dist/types/examples/simple-api-test.d.ts +10 -0
  129. package/dist/types/examples/simple-crypto-identity-example.d.ts +6 -0
  130. package/dist/types/examples/timeout-test.d.ts +8 -0
  131. package/dist/types/examples/zkproof-credentials-example.d.ts +12 -0
  132. package/dist/types/examples/zkproof-example.d.ts +11 -0
  133. package/dist/types/gundb/api.d.ts +185 -0
  134. package/dist/types/gundb/crypto.d.ts +95 -0
  135. package/dist/types/gundb/db.d.ts +397 -0
  136. package/dist/types/gundb/derive.d.ts +21 -0
  137. package/dist/types/gundb/errors.d.ts +42 -0
  138. package/dist/types/gundb/index.d.ts +3 -0
  139. package/dist/types/gundb/rxjs.d.ts +110 -0
  140. package/dist/types/gundb/types.d.ts +255 -0
  141. package/dist/types/index.d.ts +16 -0
  142. package/dist/types/interfaces/common.d.ts +85 -0
  143. package/dist/types/interfaces/events.d.ts +131 -0
  144. package/dist/types/interfaces/plugin.d.ts +162 -0
  145. package/dist/types/interfaces/shogun.d.ts +208 -0
  146. package/dist/types/managers/AuthManager.d.ts +72 -0
  147. package/dist/types/managers/CoreInitializer.d.ts +40 -0
  148. package/dist/types/managers/CryptoIdentityManager.d.ts +102 -0
  149. package/dist/types/managers/EventManager.d.ts +49 -0
  150. package/dist/types/managers/PluginManager.d.ts +145 -0
  151. package/dist/types/plugins/base.d.ts +35 -0
  152. package/dist/types/plugins/index.d.ts +18 -0
  153. package/dist/types/plugins/nostr/index.d.ts +4 -0
  154. package/dist/types/plugins/nostr/nostrConnector.d.ts +119 -0
  155. package/dist/types/plugins/nostr/nostrConnectorPlugin.d.ts +163 -0
  156. package/dist/types/plugins/nostr/nostrSigner.d.ts +105 -0
  157. package/dist/types/plugins/nostr/types.d.ts +122 -0
  158. package/dist/types/plugins/smartwallet/index.d.ts +2 -0
  159. package/dist/types/plugins/smartwallet/smartWalletPlugin.d.ts +67 -0
  160. package/dist/types/plugins/smartwallet/types.d.ts +80 -0
  161. package/dist/types/plugins/web3/index.d.ts +4 -0
  162. package/dist/types/plugins/web3/types.d.ts +107 -0
  163. package/dist/types/plugins/web3/web3Connector.d.ts +129 -0
  164. package/dist/types/plugins/web3/web3ConnectorPlugin.d.ts +160 -0
  165. package/dist/types/plugins/web3/web3Signer.d.ts +114 -0
  166. package/dist/types/plugins/webauthn/index.d.ts +3 -0
  167. package/dist/types/plugins/webauthn/types.d.ts +183 -0
  168. package/dist/types/plugins/webauthn/webauthn.d.ts +129 -0
  169. package/dist/types/plugins/webauthn/webauthnPlugin.d.ts +179 -0
  170. package/dist/types/plugins/webauthn/webauthnSigner.d.ts +91 -0
  171. package/dist/types/plugins/zkproof/index.d.ts +48 -0
  172. package/dist/types/plugins/zkproof/types.d.ts +123 -0
  173. package/dist/types/plugins/zkproof/zkCredentials.d.ts +112 -0
  174. package/dist/types/plugins/zkproof/zkProofConnector.d.ts +46 -0
  175. package/dist/types/plugins/zkproof/zkProofPlugin.d.ts +76 -0
  176. package/dist/types/storage/storage.d.ts +51 -0
  177. package/dist/types/utils/errorHandler.d.ts +119 -0
  178. package/dist/types/utils/eventEmitter.d.ts +39 -0
  179. package/dist/types/utils/seedPhrase.d.ts +50 -0
  180. package/dist/types/utils/validation.d.ts +27 -0
  181. package/dist/utils/errorHandler.js +246 -0
  182. package/dist/utils/eventEmitter.js +79 -0
  183. package/dist/utils/seedPhrase.js +97 -0
  184. package/dist/utils/validation.js +81 -0
  185. package/package.json +10 -1
@@ -0,0 +1,319 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.NostrSigner = void 0;
7
+ const nostrConnector_1 = require("./nostrConnector");
8
+ const derive_1 = __importDefault(require("../../gundb/derive"));
9
+ const ethers_1 = require("ethers");
10
+ /**
11
+ * Nostr Signer - Provides oneshot signing functionality
12
+ * Similar to webauthn.js but for Nostr/Bitcoin wallets
13
+ * CONSISTENT with normal Nostr approach
14
+ */
15
+ class NostrSigner {
16
+ constructor(nostrConnector) {
17
+ this.credentials = new Map();
18
+ this.MESSAGE_TO_SIGN = "I Love Shogun!"; // Same as normal approach
19
+ this.nostrConnector = nostrConnector || new nostrConnector_1.NostrConnector();
20
+ }
21
+ /**
22
+ * Creates a new Nostr signing credential
23
+ * CONSISTENT with normal Nostr approach
24
+ */
25
+ async createSigningCredential(address) {
26
+ try {
27
+ // Validate address (same validation as normal approach)
28
+ const validAddress = this.validateAddress(address);
29
+ // Generate signature using the SAME approach as normal Nostr
30
+ const signature = await this.generateDeterministicSignature(validAddress);
31
+ // Generate credentials using the SAME logic as normal approach
32
+ const username = `${validAddress.toLowerCase()}`;
33
+ const password = await this.generatePassword(signature);
34
+ const signingCredential = {
35
+ address: validAddress,
36
+ signature,
37
+ message: this.MESSAGE_TO_SIGN,
38
+ username,
39
+ password, // This ensures consistency with normal approach
40
+ };
41
+ // Store credential for later use
42
+ this.credentials.set(validAddress.toLowerCase(), signingCredential);
43
+ return signingCredential;
44
+ }
45
+ catch (error) {
46
+ console.error("Error creating Nostr signing credential:", error);
47
+ throw new Error(`Failed to create Nostr signing credential: ${error.message}`);
48
+ }
49
+ }
50
+ /**
51
+ * Validates address using the same logic as NostrConnector
52
+ */
53
+ validateAddress(address) {
54
+ if (!address) {
55
+ throw new Error("Address not provided");
56
+ }
57
+ try {
58
+ const normalizedAddress = String(address).trim();
59
+ // Basic validation for Bitcoin addresses and Nostr pubkeys (same as normal approach)
60
+ if (!/^(npub1|[0-9a-f]{64}|bc1|[13])[a-zA-HJ-NP-Z0-9]{25,59}$/.test(normalizedAddress)) {
61
+ // More lenient validation for Nostr addresses
62
+ if (normalizedAddress.length < 10) {
63
+ throw new Error("Invalid Nostr/Bitcoin address format");
64
+ }
65
+ }
66
+ return normalizedAddress;
67
+ }
68
+ catch (error) {
69
+ throw new Error("Invalid Nostr/Bitcoin address provided");
70
+ }
71
+ }
72
+ /**
73
+ * Generate deterministic signature using the SAME approach as NostrConnector
74
+ */
75
+ async generateDeterministicSignature(address) {
76
+ // Create a deterministic signature based on the address and a fixed message
77
+ // This ensures the same credentials are generated each time for the same address
78
+ // SAME LOGIC as NostrConnector.generateDeterministicSignature
79
+ const baseString = `${address}_${this.MESSAGE_TO_SIGN}_shogun_deterministic`;
80
+ // Simple hash function to create a deterministic signature
81
+ let hash = "";
82
+ let runningValue = 0;
83
+ for (let i = 0; i < baseString.length; i++) {
84
+ const charCode = baseString.charCodeAt(i);
85
+ runningValue = (runningValue * 31 + charCode) & 0xffffffff;
86
+ if (i % 4 === 3) {
87
+ hash += runningValue.toString(16).padStart(8, "0");
88
+ }
89
+ }
90
+ // Ensure we have exactly 128 characters (64 bytes in hex)
91
+ while (hash.length < 128) {
92
+ runningValue = (runningValue * 31 + hash.length) & 0xffffffff;
93
+ hash += runningValue.toString(16).padStart(8, "0");
94
+ }
95
+ // Ensure the result is exactly 128 characters and contains only valid hex characters
96
+ let deterministicSignature = hash.substring(0, 128);
97
+ // Double-check that it's a valid hex string
98
+ deterministicSignature = deterministicSignature
99
+ .toLowerCase()
100
+ .replace(/[^0-9a-f]/g, "0");
101
+ // Ensure it's exactly 128 characters
102
+ if (deterministicSignature.length < 128) {
103
+ deterministicSignature = deterministicSignature.padEnd(128, "0");
104
+ }
105
+ else if (deterministicSignature.length > 128) {
106
+ deterministicSignature = deterministicSignature.substring(0, 128);
107
+ }
108
+ return deterministicSignature;
109
+ }
110
+ /**
111
+ * Generate password using the SAME approach as NostrConnector
112
+ */
113
+ async generatePassword(signature) {
114
+ if (!signature) {
115
+ throw new Error("Invalid signature");
116
+ }
117
+ try {
118
+ // SAME LOGIC as NostrConnector.generatePassword
119
+ const normalizedSig = signature.toLowerCase().replace(/[^a-f0-9]/g, "");
120
+ const passwordHash = ethers_1.ethers.sha256(ethers_1.ethers.toUtf8Bytes(normalizedSig));
121
+ return passwordHash;
122
+ }
123
+ catch (error) {
124
+ console.error("Error generating password:", error);
125
+ throw new Error("Failed to generate password from signature");
126
+ }
127
+ }
128
+ /**
129
+ * Creates an authenticator function compatible with SEA.sign
130
+ * This is the key function that makes it work like webauthn.js but for Nostr
131
+ */
132
+ createAuthenticator(address) {
133
+ const credential = this.credentials.get(address.toLowerCase());
134
+ if (!credential) {
135
+ throw new Error(`Credential for address ${address} not found`);
136
+ }
137
+ return async (data) => {
138
+ try {
139
+ // Verify the user by requesting a new signature for the data
140
+ // In a real implementation, this would use the Nostr extension
141
+ const dataToSign = JSON.stringify(data);
142
+ // For now, create a deterministic signature based on the data and credential
143
+ const signature = await this.signData(dataToSign, credential);
144
+ return signature;
145
+ }
146
+ catch (error) {
147
+ console.error("Nostr authentication error:", error);
148
+ throw error;
149
+ }
150
+ };
151
+ }
152
+ /**
153
+ * Sign data using the credential
154
+ */
155
+ async signData(data, credential) {
156
+ // Create a deterministic signature for the data
157
+ const signatureBase = `${credential.signature}_${data}`;
158
+ return this.generateDeterministicSignature(signatureBase);
159
+ }
160
+ /**
161
+ * Creates a derived key pair from Nostr credential
162
+ * CONSISTENT with normal approach: uses password as seed
163
+ */
164
+ async createDerivedKeyPair(address, extra) {
165
+ const credential = this.credentials.get(address.toLowerCase());
166
+ if (!credential) {
167
+ throw new Error(`Credential for address ${address} not found`);
168
+ }
169
+ try {
170
+ // CONSISTENCY: Use the same approach as normal Nostr
171
+ // Use password as seed (same as normal approach)
172
+ const derivedKeys = await (0, derive_1.default)(credential.password, // This is the key consistency point!
173
+ extra, { includeP256: true });
174
+ return {
175
+ pub: derivedKeys.pub,
176
+ priv: derivedKeys.priv,
177
+ epub: derivedKeys.epub,
178
+ epriv: derivedKeys.epriv,
179
+ };
180
+ }
181
+ catch (error) {
182
+ console.error("Error deriving keys from Nostr credential:", error);
183
+ throw error;
184
+ }
185
+ }
186
+ /**
187
+ * Creates a Gun user from Nostr credential
188
+ * This ensures the SAME user is created as with normal approach
189
+ * FIX: Use derived pair instead of username/password for GunDB auth
190
+ */
191
+ async createGunUser(address, gunInstance) {
192
+ const credential = this.credentials.get(address.toLowerCase());
193
+ if (!credential) {
194
+ throw new Error(`Credential for address ${address} not found`);
195
+ }
196
+ try {
197
+ // FIX: Use derived pair for GunDB authentication instead of username/password
198
+ const derivedPair = await this.createDerivedKeyPair(address);
199
+ return new Promise((resolve) => {
200
+ // Use the derived pair directly for GunDB auth
201
+ gunInstance.user().create(derivedPair, (ack) => {
202
+ if (ack.err) {
203
+ // Try to login if user already exists
204
+ gunInstance.user().auth(derivedPair, (authAck) => {
205
+ if (authAck.err) {
206
+ resolve({ success: false, error: authAck.err });
207
+ }
208
+ else {
209
+ const userPub = authAck.pub;
210
+ // Update credential with Gun user pub
211
+ credential.gunUserPub = userPub;
212
+ this.credentials.set(address.toLowerCase(), credential);
213
+ resolve({ success: true, userPub });
214
+ }
215
+ });
216
+ }
217
+ else {
218
+ // User created, now login
219
+ gunInstance.user().auth(derivedPair, (authAck) => {
220
+ if (authAck.err) {
221
+ resolve({ success: false, error: authAck.err });
222
+ }
223
+ else {
224
+ const userPub = authAck.pub;
225
+ // Update credential with Gun user pub
226
+ credential.gunUserPub = userPub;
227
+ this.credentials.set(address.toLowerCase(), credential);
228
+ resolve({ success: true, userPub });
229
+ }
230
+ });
231
+ }
232
+ });
233
+ });
234
+ }
235
+ catch (error) {
236
+ console.error("Error creating Gun user:", error);
237
+ return { success: false, error: error.message };
238
+ }
239
+ }
240
+ /**
241
+ * Signs data using Nostr + derived keys
242
+ * This provides a hybrid approach: Nostr for user verification + derived keys for actual signing
243
+ * CONSISTENT with normal approach
244
+ */
245
+ async signWithDerivedKeys(data, address, extra) {
246
+ try {
247
+ // First, verify user with Nostr
248
+ const authenticator = this.createAuthenticator(address);
249
+ await authenticator(data); // This verifies the user
250
+ // Then use derived keys for actual signing (CONSISTENT approach)
251
+ const keyPair = await this.createDerivedKeyPair(address, extra);
252
+ // Create signature using the same approach as SEA
253
+ const message = JSON.stringify(data);
254
+ // Use a simple signing approach (in production, would use proper crypto)
255
+ const signature = await this.generateDeterministicSignature(`${keyPair.priv}_${message}`);
256
+ // Format like SEA signature
257
+ const seaSignature = {
258
+ m: message,
259
+ s: signature,
260
+ };
261
+ return "SEA" + JSON.stringify(seaSignature);
262
+ }
263
+ catch (error) {
264
+ console.error("Error signing with derived keys:", error);
265
+ throw error;
266
+ }
267
+ }
268
+ /**
269
+ * Get the Gun user public key for a credential
270
+ * This allows checking if the same user would be created
271
+ */
272
+ getGunUserPub(address) {
273
+ const credential = this.credentials.get(address.toLowerCase());
274
+ return credential?.gunUserPub;
275
+ }
276
+ /**
277
+ * Get the password (for consistency checking)
278
+ */
279
+ getPassword(address) {
280
+ const credential = this.credentials.get(address.toLowerCase());
281
+ return credential?.password;
282
+ }
283
+ /**
284
+ * Check if this credential would create the same Gun user as normal approach
285
+ */
286
+ async verifyConsistency(address, expectedUserPub) {
287
+ const credential = this.credentials.get(address.toLowerCase());
288
+ if (!credential) {
289
+ return { consistent: false };
290
+ }
291
+ // The derived keys should be the same as normal approach
292
+ const derivedKeys = await this.createDerivedKeyPair(address);
293
+ return {
294
+ consistent: expectedUserPub ? derivedKeys.pub === expectedUserPub : true,
295
+ actualUserPub: derivedKeys.pub,
296
+ expectedUserPub,
297
+ };
298
+ }
299
+ /**
300
+ * Get credential by address
301
+ */
302
+ getCredential(address) {
303
+ return this.credentials.get(address.toLowerCase());
304
+ }
305
+ /**
306
+ * List all stored credentials
307
+ */
308
+ listCredentials() {
309
+ return Array.from(this.credentials.values());
310
+ }
311
+ /**
312
+ * Remove a credential
313
+ */
314
+ removeCredential(address) {
315
+ return this.credentials.delete(address.toLowerCase());
316
+ }
317
+ }
318
+ exports.NostrSigner = NostrSigner;
319
+ exports.default = NostrSigner;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./smartWalletPlugin"), exports);
18
+ __exportStar(require("./types"), exports);