shogun-core 5.2.0 → 5.2.2

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 (186) hide show
  1. package/README.md +145 -1143
  2. package/dist/browser/defaultVendors-node_modules_hpke_chacha20poly1305_esm_mod_js.shogun-core.js +1220 -0
  3. package/dist/browser/defaultVendors-node_modules_hpke_chacha20poly1305_esm_mod_js.shogun-core.js.map +1 -0
  4. package/dist/browser/defaultVendors-node_modules_hpke_hybridkem-x-wing_esm_mod_js.shogun-core.js +844 -0
  5. package/dist/browser/defaultVendors-node_modules_hpke_hybridkem-x-wing_esm_mod_js.shogun-core.js.map +1 -0
  6. package/dist/browser/defaultVendors-node_modules_mlkem_esm_mod_js.shogun-core.js +2335 -0
  7. package/dist/browser/defaultVendors-node_modules_mlkem_esm_mod_js.shogun-core.js.map +1 -0
  8. package/dist/browser/defaultVendors-node_modules_noble_ciphers_chacha_js.shogun-core.js +999 -0
  9. package/dist/browser/defaultVendors-node_modules_noble_ciphers_chacha_js.shogun-core.js.map +1 -0
  10. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_curve_js-node_modules_noble_curves_esm_-1ce4ed.shogun-core.js +1651 -0
  11. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_curve_js-node_modules_noble_curves_esm_-1ce4ed.shogun-core.js.map +1 -0
  12. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_edwards_js-node_modules_noble_curves_es-a82056.shogun-core.js +825 -0
  13. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_edwards_js-node_modules_noble_curves_es-a82056.shogun-core.js.map +1 -0
  14. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed25519_js.shogun-core.js +508 -0
  15. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed25519_js.shogun-core.js.map +1 -0
  16. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed448_js.shogun-core.js +747 -0
  17. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed448_js.shogun-core.js.map +1 -0
  18. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_nist_js.shogun-core.js +1608 -0
  19. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_nist_js.shogun-core.js.map +1 -0
  20. package/dist/browser/defaultVendors-node_modules_noble_post-quantum_ml-dsa_js.shogun-core.js +2117 -0
  21. package/dist/browser/defaultVendors-node_modules_noble_post-quantum_ml-dsa_js.shogun-core.js.map +1 -0
  22. package/dist/browser/defaultVendors-node_modules_openpgp_dist_openpgp_min_mjs.shogun-core.js +86 -0
  23. package/dist/browser/defaultVendors-node_modules_openpgp_dist_openpgp_min_mjs.shogun-core.js.map +1 -0
  24. package/dist/browser/node_modules_hpke_ml-kem_esm_mod_js.shogun-core.js +539 -0
  25. package/dist/browser/node_modules_hpke_ml-kem_esm_mod_js.shogun-core.js.map +1 -0
  26. package/dist/browser/shogun-core.js +160386 -0
  27. package/dist/browser/shogun-core.js.map +1 -0
  28. package/dist/config/simplified-config.js +236 -0
  29. package/dist/core.js +329 -0
  30. package/dist/crypto/asymmetric.js +99 -0
  31. package/dist/crypto/double-ratchet.js +370 -0
  32. package/dist/crypto/file-encryption.js +213 -0
  33. package/dist/crypto/hashing.js +87 -0
  34. package/dist/crypto/index.js +34 -0
  35. package/dist/crypto/mls-codec.js +202 -0
  36. package/dist/crypto/mls.js +550 -0
  37. package/dist/crypto/pgp.js +390 -0
  38. package/dist/crypto/random-generation.js +341 -0
  39. package/dist/crypto/sframe.js +350 -0
  40. package/dist/crypto/signal-protocol.js +376 -0
  41. package/dist/crypto/symmetric.js +91 -0
  42. package/dist/crypto/types.js +2 -0
  43. package/dist/crypto/utils.js +140 -0
  44. package/dist/examples/auth-test.js +253 -0
  45. package/dist/examples/crypto-identity-example.js +151 -0
  46. package/dist/examples/crypto-working-test.js +83 -0
  47. package/dist/examples/double-ratchet-test.js +155 -0
  48. package/dist/examples/mls-advanced-example.js +294 -0
  49. package/dist/examples/mls-sframe-test.js +304 -0
  50. package/dist/examples/pgp-example.js +200 -0
  51. package/dist/examples/quick-auth-test.js +61 -0
  52. package/dist/examples/random-generation-test.js +151 -0
  53. package/dist/examples/signal-protocol-test.js +38 -0
  54. package/dist/examples/simple-api-test.js +114 -0
  55. package/dist/examples/simple-crypto-identity-example.js +84 -0
  56. package/dist/examples/timeout-test.js +227 -0
  57. package/dist/examples/zkproof-credentials-example.js +212 -0
  58. package/dist/examples/zkproof-example.js +201 -0
  59. package/dist/gundb/api.js +435 -0
  60. package/dist/gundb/crypto.js +283 -0
  61. package/dist/gundb/db.js +1946 -0
  62. package/dist/gundb/derive.js +232 -0
  63. package/dist/gundb/errors.js +76 -0
  64. package/dist/gundb/index.js +22 -0
  65. package/dist/gundb/rxjs.js +447 -0
  66. package/dist/gundb/types.js +5 -0
  67. package/dist/index.js +58 -0
  68. package/dist/interfaces/common.js +2 -0
  69. package/dist/interfaces/events.js +40 -0
  70. package/dist/interfaces/plugin.js +2 -0
  71. package/dist/interfaces/shogun.js +37 -0
  72. package/dist/managers/AuthManager.js +226 -0
  73. package/dist/managers/CoreInitializer.js +228 -0
  74. package/dist/managers/CryptoIdentityManager.js +366 -0
  75. package/dist/managers/EventManager.js +70 -0
  76. package/dist/managers/PluginManager.js +299 -0
  77. package/dist/plugins/base.js +50 -0
  78. package/dist/plugins/index.js +32 -0
  79. package/dist/plugins/nostr/index.js +20 -0
  80. package/dist/plugins/nostr/nostrConnector.js +419 -0
  81. package/dist/plugins/nostr/nostrConnectorPlugin.js +453 -0
  82. package/dist/plugins/nostr/nostrSigner.js +319 -0
  83. package/dist/plugins/nostr/types.js +2 -0
  84. package/dist/plugins/smartwallet/index.js +18 -0
  85. package/dist/plugins/smartwallet/smartWalletPlugin.js +511 -0
  86. package/dist/plugins/smartwallet/types.js +2 -0
  87. package/dist/plugins/web3/index.js +20 -0
  88. package/dist/plugins/web3/types.js +2 -0
  89. package/dist/plugins/web3/web3Connector.js +533 -0
  90. package/dist/plugins/web3/web3ConnectorPlugin.js +455 -0
  91. package/dist/plugins/web3/web3Signer.js +314 -0
  92. package/dist/plugins/webauthn/index.js +19 -0
  93. package/dist/plugins/webauthn/types.js +14 -0
  94. package/dist/plugins/webauthn/webauthn.js +496 -0
  95. package/dist/plugins/webauthn/webauthnPlugin.js +489 -0
  96. package/dist/plugins/webauthn/webauthnSigner.js +310 -0
  97. package/dist/plugins/zkproof/index.js +53 -0
  98. package/dist/plugins/zkproof/types.js +2 -0
  99. package/dist/plugins/zkproof/zkCredentials.js +213 -0
  100. package/dist/plugins/zkproof/zkProofConnector.js +198 -0
  101. package/dist/plugins/zkproof/zkProofPlugin.js +272 -0
  102. package/dist/storage/storage.js +145 -0
  103. package/dist/types/config/simplified-config.d.ts +114 -0
  104. package/dist/types/core.d.ts +305 -0
  105. package/dist/types/crypto/asymmetric.d.ts +6 -0
  106. package/dist/types/crypto/double-ratchet.d.ts +22 -0
  107. package/dist/types/crypto/file-encryption.d.ts +19 -0
  108. package/dist/types/crypto/hashing.d.ts +9 -0
  109. package/dist/types/crypto/index.d.ts +13 -0
  110. package/dist/types/crypto/mls-codec.d.ts +39 -0
  111. package/dist/types/crypto/mls.d.ts +130 -0
  112. package/dist/types/crypto/pgp.d.ts +95 -0
  113. package/dist/types/crypto/random-generation.d.ts +35 -0
  114. package/dist/types/crypto/sframe.d.ts +102 -0
  115. package/dist/types/crypto/signal-protocol.d.ts +26 -0
  116. package/dist/types/crypto/symmetric.d.ts +9 -0
  117. package/dist/types/crypto/types.d.ts +144 -0
  118. package/dist/types/crypto/utils.d.ts +22 -0
  119. package/dist/types/examples/auth-test.d.ts +8 -0
  120. package/dist/types/examples/crypto-identity-example.d.ts +5 -0
  121. package/dist/types/examples/crypto-working-test.d.ts +1 -0
  122. package/dist/types/examples/double-ratchet-test.d.ts +1 -0
  123. package/dist/types/examples/mls-advanced-example.d.ts +53 -0
  124. package/dist/types/examples/mls-sframe-test.d.ts +1 -0
  125. package/dist/types/examples/pgp-example.d.ts +75 -0
  126. package/dist/types/examples/quick-auth-test.d.ts +8 -0
  127. package/dist/types/examples/random-generation-test.d.ts +1 -0
  128. package/dist/types/examples/signal-protocol-test.d.ts +1 -0
  129. package/dist/types/examples/simple-api-test.d.ts +10 -0
  130. package/dist/types/examples/simple-crypto-identity-example.d.ts +6 -0
  131. package/dist/types/examples/timeout-test.d.ts +8 -0
  132. package/dist/types/examples/zkproof-credentials-example.d.ts +12 -0
  133. package/dist/types/examples/zkproof-example.d.ts +11 -0
  134. package/dist/types/gundb/api.d.ts +185 -0
  135. package/dist/types/gundb/crypto.d.ts +95 -0
  136. package/dist/types/gundb/db.d.ts +397 -0
  137. package/dist/types/gundb/derive.d.ts +21 -0
  138. package/dist/types/gundb/errors.d.ts +42 -0
  139. package/dist/types/gundb/index.d.ts +3 -0
  140. package/dist/types/gundb/rxjs.d.ts +110 -0
  141. package/dist/types/gundb/types.d.ts +255 -0
  142. package/dist/types/index.d.ts +16 -0
  143. package/dist/types/interfaces/common.d.ts +85 -0
  144. package/dist/types/interfaces/events.d.ts +131 -0
  145. package/dist/types/interfaces/plugin.d.ts +162 -0
  146. package/dist/types/interfaces/shogun.d.ts +208 -0
  147. package/dist/types/managers/AuthManager.d.ts +72 -0
  148. package/dist/types/managers/CoreInitializer.d.ts +40 -0
  149. package/dist/types/managers/CryptoIdentityManager.d.ts +102 -0
  150. package/dist/types/managers/EventManager.d.ts +49 -0
  151. package/dist/types/managers/PluginManager.d.ts +145 -0
  152. package/dist/types/plugins/base.d.ts +35 -0
  153. package/dist/types/plugins/index.d.ts +18 -0
  154. package/dist/types/plugins/nostr/index.d.ts +4 -0
  155. package/dist/types/plugins/nostr/nostrConnector.d.ts +119 -0
  156. package/dist/types/plugins/nostr/nostrConnectorPlugin.d.ts +163 -0
  157. package/dist/types/plugins/nostr/nostrSigner.d.ts +105 -0
  158. package/dist/types/plugins/nostr/types.d.ts +122 -0
  159. package/dist/types/plugins/smartwallet/index.d.ts +2 -0
  160. package/dist/types/plugins/smartwallet/smartWalletPlugin.d.ts +67 -0
  161. package/dist/types/plugins/smartwallet/types.d.ts +80 -0
  162. package/dist/types/plugins/web3/index.d.ts +4 -0
  163. package/dist/types/plugins/web3/types.d.ts +107 -0
  164. package/dist/types/plugins/web3/web3Connector.d.ts +129 -0
  165. package/dist/types/plugins/web3/web3ConnectorPlugin.d.ts +160 -0
  166. package/dist/types/plugins/web3/web3Signer.d.ts +114 -0
  167. package/dist/types/plugins/webauthn/index.d.ts +3 -0
  168. package/dist/types/plugins/webauthn/types.d.ts +183 -0
  169. package/dist/types/plugins/webauthn/webauthn.d.ts +129 -0
  170. package/dist/types/plugins/webauthn/webauthnPlugin.d.ts +179 -0
  171. package/dist/types/plugins/webauthn/webauthnSigner.d.ts +91 -0
  172. package/dist/types/plugins/zkproof/index.d.ts +48 -0
  173. package/dist/types/plugins/zkproof/types.d.ts +123 -0
  174. package/dist/types/plugins/zkproof/zkCredentials.d.ts +112 -0
  175. package/dist/types/plugins/zkproof/zkProofConnector.d.ts +46 -0
  176. package/dist/types/plugins/zkproof/zkProofPlugin.d.ts +76 -0
  177. package/dist/types/storage/storage.d.ts +51 -0
  178. package/dist/types/utils/errorHandler.d.ts +119 -0
  179. package/dist/types/utils/eventEmitter.d.ts +39 -0
  180. package/dist/types/utils/seedPhrase.d.ts +50 -0
  181. package/dist/types/utils/validation.d.ts +27 -0
  182. package/dist/utils/errorHandler.js +246 -0
  183. package/dist/utils/eventEmitter.js +79 -0
  184. package/dist/utils/seedPhrase.js +97 -0
  185. package/dist/utils/validation.js +81 -0
  186. package/package.json +10 -57
@@ -0,0 +1,314 @@
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.Web3Signer = void 0;
7
+ const web3Connector_1 = require("./web3Connector");
8
+ const ethers_1 = require("ethers");
9
+ const derive_1 = __importDefault(require("../../gundb/derive"));
10
+ /**
11
+ * Web3 Signer - Provides oneshot signing functionality
12
+ * Similar to webauthn.js but for Web3/MetaMask
13
+ * CONSISTENT with normal Web3 approach
14
+ */
15
+ class Web3Signer {
16
+ constructor(web3Connector) {
17
+ this.credentials = new Map();
18
+ this.MESSAGE_TO_SIGN = "I Love Shogun!"; // Same as normal approach
19
+ this.web3Connector = web3Connector || new web3Connector_1.Web3Connector();
20
+ }
21
+ /**
22
+ * Creates a new Web3 signing credential
23
+ * CONSISTENT with normal Web3 approach
24
+ */
25
+ async createSigningCredential(address) {
26
+ try {
27
+ // Validate address
28
+ const validAddress = ethers_1.ethers.getAddress(address.toLowerCase());
29
+ // Request signature using the same approach as normal Web3
30
+ const signature = await this.requestSignature(validAddress);
31
+ // Generate credentials using the SAME logic as normal approach
32
+ const username = `${validAddress.toLowerCase()}`;
33
+ // FIX: Use only address for password generation to ensure consistency
34
+ // The signature changes each time, causing different passwords for same user
35
+ const password = ethers_1.ethers.keccak256(ethers_1.ethers.toUtf8Bytes(`${validAddress.toLowerCase()}:shogun-web3`));
36
+ const signingCredential = {
37
+ address: validAddress,
38
+ signature,
39
+ message: this.MESSAGE_TO_SIGN,
40
+ username,
41
+ password, // This ensures consistency with normal approach
42
+ };
43
+ // Store credential for later use
44
+ this.credentials.set(validAddress.toLowerCase(), signingCredential);
45
+ return signingCredential;
46
+ }
47
+ catch (error) {
48
+ console.error("Error creating Web3 signing credential:", error);
49
+ throw new Error(`Failed to create Web3 signing credential: ${error.message}`);
50
+ }
51
+ }
52
+ /**
53
+ * Request signature from MetaMask
54
+ * Uses the same approach as normal Web3Connector
55
+ */
56
+ async requestSignature(address) {
57
+ try {
58
+ const signer = await this.web3Connector.getSigner();
59
+ const signerAddress = await signer.getAddress();
60
+ if (signerAddress.toLowerCase() !== address.toLowerCase()) {
61
+ throw new Error(`Signer address (${signerAddress}) does not match expected address (${address})`);
62
+ }
63
+ const signature = await signer.signMessage(this.MESSAGE_TO_SIGN);
64
+ return signature;
65
+ }
66
+ catch (error) {
67
+ console.error("Failed to request signature:", error);
68
+ throw error;
69
+ }
70
+ }
71
+ /**
72
+ * Creates an authenticator function compatible with SEA.sign
73
+ * This is the key function that makes it work like webauthn.js but for Web3
74
+ */
75
+ createAuthenticator(address) {
76
+ const credential = this.credentials.get(address.toLowerCase());
77
+ if (!credential) {
78
+ throw new Error(`Credential for address ${address} not found`);
79
+ }
80
+ return async (data) => {
81
+ try {
82
+ // Verify the user by requesting a new signature for the data
83
+ const signer = await this.web3Connector.getSigner();
84
+ const signerAddress = await signer.getAddress();
85
+ if (signerAddress.toLowerCase() !== address.toLowerCase()) {
86
+ throw new Error("Address mismatch during authentication");
87
+ }
88
+ // Sign the data
89
+ const dataToSign = JSON.stringify(data);
90
+ const signature = await signer.signMessage(dataToSign);
91
+ return signature;
92
+ }
93
+ catch (error) {
94
+ console.error("Web3 authentication error:", error);
95
+ throw error;
96
+ }
97
+ };
98
+ }
99
+ /**
100
+ * Creates a derived key pair from Web3 credential
101
+ * CONSISTENT with normal approach: uses password as seed
102
+ */
103
+ async createDerivedKeyPair(address, extra) {
104
+ // Use the deterministic approach instead of stored credentials
105
+ return this.createDerivedKeyPairFromAddress(address, extra);
106
+ }
107
+ /**
108
+ * Authenticate with existing pair (for login)
109
+ * This generates the deterministic pair from address and authenticates with GunDB
110
+ * GunDB will recognize the user because the pair is deterministic
111
+ */
112
+ async authenticateWithExistingPair(address, gunInstance) {
113
+ try {
114
+ console.log(`🔧 Web3Signer - authenticating with deterministic pair for address:`, address);
115
+ // Generate the deterministic pair directly from address (no need for stored credentials)
116
+ const derivedPair = await this.createDerivedKeyPairFromAddress(address);
117
+ console.log(`🔧 Web3Signer - deterministic pair created, attempting auth with GunDB`);
118
+ return new Promise((resolve) => {
119
+ // Authenticate directly with GunDB using the deterministic pair
120
+ gunInstance.user().auth(derivedPair, (authAck) => {
121
+ if (authAck.err) {
122
+ console.log(`🔧 Web3Signer - auth failed:`, authAck.err);
123
+ resolve({ success: false, error: authAck.err });
124
+ }
125
+ else {
126
+ const userPub = authAck.pub;
127
+ console.log(`🔧 Web3Signer - auth successful, userPub:`, userPub ? userPub.slice(0, 8) + "..." : "null");
128
+ resolve({ success: true, userPub });
129
+ }
130
+ });
131
+ });
132
+ }
133
+ catch (error) {
134
+ console.error("Error authenticating with deterministic pair:", error);
135
+ return { success: false, error: error.message };
136
+ }
137
+ }
138
+ /**
139
+ * Creates a derived key pair directly from address (deterministic)
140
+ * This ensures the same pair is generated every time for the same address
141
+ */
142
+ async createDerivedKeyPairFromAddress(address, extra) {
143
+ try {
144
+ // Generate deterministic password from address (same as createSigningCredential)
145
+ const validAddress = ethers_1.ethers.getAddress(address.toLowerCase());
146
+ const password = ethers_1.ethers.keccak256(ethers_1.ethers.toUtf8Bytes(`${validAddress.toLowerCase()}:shogun-web3`));
147
+ console.log(`🔧 Web3Signer - generating deterministic pair for address:`, validAddress);
148
+ // Use the same derive function as normal approach
149
+ const derivedKeys = await (0, derive_1.default)(password, // Deterministic password from address
150
+ extra, { includeP256: true });
151
+ return {
152
+ pub: derivedKeys.pub,
153
+ priv: derivedKeys.priv,
154
+ epub: derivedKeys.epub,
155
+ epriv: derivedKeys.epriv,
156
+ };
157
+ }
158
+ catch (error) {
159
+ console.error("Error creating derived key pair from address:", error);
160
+ throw error;
161
+ }
162
+ }
163
+ /**
164
+ * Creates a Gun user from Web3 credential
165
+ * This ensures the SAME user is created as with normal approach
166
+ * FIX: Use derived pair instead of username/password for GunDB auth
167
+ */
168
+ async createGunUser(address, gunInstance) {
169
+ try {
170
+ console.log(`🔧 Web3Signer - creating Gun user with deterministic pair for address:`, address);
171
+ // Generate the deterministic pair directly from address
172
+ const derivedPair = await this.createDerivedKeyPairFromAddress(address);
173
+ return new Promise((resolve) => {
174
+ // Use the derived pair directly for GunDB auth
175
+ gunInstance.user().create(derivedPair, (ack) => {
176
+ if (ack.err) {
177
+ console.log(`🔧 Web3Signer - user creation failed, trying auth:`, ack.err);
178
+ // Try to login if user already exists
179
+ gunInstance.user().auth(derivedPair, (authAck) => {
180
+ if (authAck.err) {
181
+ console.log(`🔧 Web3Signer - auth also failed:`, authAck.err);
182
+ resolve({ success: false, error: authAck.err });
183
+ }
184
+ else {
185
+ const userPub = authAck.pub;
186
+ console.log(`🔧 Web3Signer - auth successful, userPub:`, userPub ? userPub.slice(0, 8) + "..." : "null");
187
+ resolve({ success: true, userPub });
188
+ }
189
+ });
190
+ }
191
+ else {
192
+ console.log(`🔧 Web3Signer - user created successfully, now logging in`);
193
+ // User created, now login
194
+ gunInstance.user().auth(derivedPair, (authAck) => {
195
+ if (authAck.err) {
196
+ console.log(`🔧 Web3Signer - login after creation failed:`, authAck.err);
197
+ resolve({ success: false, error: authAck.err });
198
+ }
199
+ else {
200
+ const userPub = authAck.pub;
201
+ console.log(`🔧 Web3Signer - login successful, userPub:`, userPub ? userPub.slice(0, 8) + "..." : "null");
202
+ resolve({ success: true, userPub });
203
+ }
204
+ });
205
+ }
206
+ });
207
+ });
208
+ }
209
+ catch (error) {
210
+ console.error("Error creating Gun user:", error);
211
+ return { success: false, error: error.message };
212
+ }
213
+ }
214
+ /**
215
+ * Signs data using Web3 + derived keys
216
+ * This provides a hybrid approach: Web3 for user verification + derived keys for actual signing
217
+ * CONSISTENT with normal approach
218
+ */
219
+ async signWithDerivedKeys(data, address, extra) {
220
+ try {
221
+ // First, verify user with Web3
222
+ const authenticator = this.createAuthenticator(address);
223
+ await authenticator(data); // This verifies the user
224
+ // Then use derived keys for actual signing (CONSISTENT approach)
225
+ const keyPair = await this.createDerivedKeyPair(address, extra);
226
+ // Create signature using the same approach as SEA
227
+ const message = JSON.stringify(data);
228
+ const messageHash = ethers_1.ethers.keccak256(ethers_1.ethers.toUtf8Bytes(message));
229
+ // Use ethers for signing (compatible with SEA)
230
+ const wallet = new ethers_1.ethers.Wallet(keyPair.priv);
231
+ const signature = await wallet.signMessage(message);
232
+ // Format like SEA signature
233
+ const seaSignature = {
234
+ m: message,
235
+ s: signature,
236
+ };
237
+ return "SEA" + JSON.stringify(seaSignature);
238
+ }
239
+ catch (error) {
240
+ console.error("Error signing with derived keys:", error);
241
+ throw error;
242
+ }
243
+ }
244
+ /**
245
+ * Get the Gun user public key for a credential
246
+ * This allows checking if the same user would be created
247
+ */
248
+ async getGunUserPub(address) {
249
+ try {
250
+ // Generate the deterministic pair and return the public key
251
+ const derivedPair = await this.createDerivedKeyPairFromAddress(address);
252
+ return derivedPair.pub;
253
+ }
254
+ catch (error) {
255
+ console.error("Error getting Gun user pub:", error);
256
+ return undefined;
257
+ }
258
+ }
259
+ /**
260
+ * Get the password (for consistency checking)
261
+ */
262
+ getPassword(address) {
263
+ try {
264
+ // Generate deterministic password from address (same as createSigningCredential)
265
+ const validAddress = ethers_1.ethers.getAddress(address.toLowerCase());
266
+ const password = ethers_1.ethers.keccak256(ethers_1.ethers.toUtf8Bytes(`${validAddress.toLowerCase()}:shogun-web3`));
267
+ return password;
268
+ }
269
+ catch (error) {
270
+ console.error("Error getting password:", error);
271
+ return undefined;
272
+ }
273
+ }
274
+ /**
275
+ * Check if this credential would create the same Gun user as normal approach
276
+ */
277
+ async verifyConsistency(address, expectedUserPub) {
278
+ try {
279
+ // Generate the deterministic pair
280
+ const derivedKeys = await this.createDerivedKeyPairFromAddress(address);
281
+ return {
282
+ consistent: expectedUserPub
283
+ ? derivedKeys.pub === expectedUserPub
284
+ : true,
285
+ actualUserPub: derivedKeys.pub,
286
+ expectedUserPub,
287
+ };
288
+ }
289
+ catch (error) {
290
+ console.error("Error verifying consistency:", error);
291
+ return { consistent: false };
292
+ }
293
+ }
294
+ /**
295
+ * Get credential by address
296
+ */
297
+ getCredential(address) {
298
+ return this.credentials.get(address.toLowerCase());
299
+ }
300
+ /**
301
+ * List all stored credentials
302
+ */
303
+ listCredentials() {
304
+ return Array.from(this.credentials.values());
305
+ }
306
+ /**
307
+ * Remove a credential
308
+ */
309
+ removeCredential(address) {
310
+ return this.credentials.delete(address.toLowerCase());
311
+ }
312
+ }
313
+ exports.Web3Signer = Web3Signer;
314
+ exports.default = Web3Signer;
@@ -0,0 +1,19 @@
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("./webauthnPlugin"), exports);
18
+ __exportStar(require("./types"), exports);
19
+ __exportStar(require("./webauthn"), exports);
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebAuthnEventType = void 0;
4
+ /**
5
+ * WebAuthn event types
6
+ */
7
+ var WebAuthnEventType;
8
+ (function (WebAuthnEventType) {
9
+ WebAuthnEventType["DEVICE_REGISTERED"] = "deviceRegistered";
10
+ WebAuthnEventType["DEVICE_REMOVED"] = "deviceRemoved";
11
+ WebAuthnEventType["AUTHENTICATION_SUCCESS"] = "authenticationSuccess";
12
+ WebAuthnEventType["AUTHENTICATION_FAILED"] = "authenticationFailed";
13
+ WebAuthnEventType["ERROR"] = "error";
14
+ })(WebAuthnEventType || (exports.WebAuthnEventType = WebAuthnEventType = {}));