@moon-x/core 0.2.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 (55) hide show
  1. package/README.md +39 -0
  2. package/dist/chain-C9dvKXUY.d.mts +48 -0
  3. package/dist/chain-C9dvKXUY.d.ts +48 -0
  4. package/dist/chunk-264CEGDS.mjs +46 -0
  5. package/dist/chunk-CDT4MC7S.mjs +1532 -0
  6. package/dist/chunk-CMYR6AOY.mjs +0 -0
  7. package/dist/chunk-GQKIA37O.mjs +20 -0
  8. package/dist/chunk-IMLBIIJ4.mjs +36 -0
  9. package/dist/chunk-MOREUKOG.mjs +18 -0
  10. package/dist/chunk-SOKLPX7V.mjs +270 -0
  11. package/dist/index.d.mts +4 -0
  12. package/dist/index.d.ts +4 -0
  13. package/dist/index.js +402 -0
  14. package/dist/index.mjs +33 -0
  15. package/dist/interfaces-9k0eKCc4.d.ts +120 -0
  16. package/dist/interfaces-fNhwnCeY.d.mts +120 -0
  17. package/dist/lib/index.d.mts +410 -0
  18. package/dist/lib/index.d.ts +410 -0
  19. package/dist/lib/index.js +1622 -0
  20. package/dist/lib/index.mjs +89 -0
  21. package/dist/passkey-cache-B9PT3AWX.d.mts +47 -0
  22. package/dist/passkey-cache-B9PT3AWX.d.ts +47 -0
  23. package/dist/passkey-metadata-QqFF2SWQ.d.mts +25 -0
  24. package/dist/passkey-metadata-QqFF2SWQ.d.ts +25 -0
  25. package/dist/post-message-C_99BCBh.d.mts +70 -0
  26. package/dist/post-message-C_99BCBh.d.ts +70 -0
  27. package/dist/react/ethereum.d.mts +26 -0
  28. package/dist/react/ethereum.d.ts +26 -0
  29. package/dist/react/ethereum.js +99 -0
  30. package/dist/react/ethereum.mjs +56 -0
  31. package/dist/react/index.d.mts +182 -0
  32. package/dist/react/index.d.ts +182 -0
  33. package/dist/react/index.js +586 -0
  34. package/dist/react/index.mjs +328 -0
  35. package/dist/react/solana.d.mts +17 -0
  36. package/dist/react/solana.d.ts +17 -0
  37. package/dist/react/solana.js +75 -0
  38. package/dist/react/solana.mjs +35 -0
  39. package/dist/sdk/index.d.mts +126 -0
  40. package/dist/sdk/index.d.ts +126 -0
  41. package/dist/sdk/index.js +864 -0
  42. package/dist/sdk/index.mjs +579 -0
  43. package/dist/types/index.d.mts +1190 -0
  44. package/dist/types/index.d.ts +1190 -0
  45. package/dist/types/index.js +64 -0
  46. package/dist/types/index.mjs +10 -0
  47. package/dist/utils/index.d.mts +11 -0
  48. package/dist/utils/index.d.ts +11 -0
  49. package/dist/utils/index.js +365 -0
  50. package/dist/utils/index.mjs +25 -0
  51. package/dist/web/index.d.mts +20 -0
  52. package/dist/web/index.d.ts +20 -0
  53. package/dist/web/index.js +470 -0
  54. package/dist/web/index.mjs +155 -0
  55. package/package.json +111 -0
@@ -0,0 +1,586 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/react/index.ts
31
+ var react_exports = {};
32
+ __export(react_exports, {
33
+ SDKProvider: () => SDKProvider,
34
+ useAddPasskey: () => useAddPasskey,
35
+ useCreateWallet: () => useCreateWallet,
36
+ useImportKey: () => useImportKey,
37
+ useLoginWithEmail: () => useLoginWithEmail,
38
+ useLogout: () => useLogout,
39
+ useMoonKeySDK: () => useMoonKeySDK,
40
+ usePasskeyStatus: () => usePasskeyStatus,
41
+ useRegisterPasskey: () => useRegisterPasskey,
42
+ useRemovePasskey: () => useRemovePasskey,
43
+ useUser: () => useUser,
44
+ useWallets: () => useWallets
45
+ });
46
+ module.exports = __toCommonJS(react_exports);
47
+
48
+ // src/react/sdk-context.ts
49
+ var import_react = require("react");
50
+ var SDKContext = (0, import_react.createContext)(null);
51
+ var SDKProvider = SDKContext.Provider;
52
+ var useMoonKeySDK = () => {
53
+ const sdk = (0, import_react.useContext)(SDKContext);
54
+ if (!sdk) {
55
+ throw new Error(
56
+ "MoonKey hook called outside a <MoonKeyProvider> \u2014 wrap your app in the provider from @moon-x/react-sdk (web) or @moon-x/react-native-sdk (RN)."
57
+ );
58
+ }
59
+ return sdk;
60
+ };
61
+
62
+ // src/react/use-login-with-email.ts
63
+ var import_react2 = require("react");
64
+ var useLoginWithEmail = (callbacks) => {
65
+ const sdk = useMoonKeySDK();
66
+ const [state, setState] = (0, import_react2.useState)({ status: "idle" });
67
+ const callbacksRef = (0, import_react2.useRef)(callbacks);
68
+ (0, import_react2.useEffect)(() => {
69
+ callbacksRef.current = callbacks;
70
+ });
71
+ const sendCode = (0, import_react2.useCallback)(
72
+ async (params) => {
73
+ setState({ status: "sending" });
74
+ try {
75
+ await sdk.sendCode(params);
76
+ setState({ status: "awaiting-code", email: params.email });
77
+ } catch (e) {
78
+ const err = e instanceof Error ? e : new Error(String(e));
79
+ setState({ status: "error", error: err });
80
+ callbacksRef.current?.onError?.(err);
81
+ throw err;
82
+ }
83
+ },
84
+ [sdk]
85
+ );
86
+ const loginWithCode = (0, import_react2.useCallback)(
87
+ async (params) => {
88
+ setState({ status: "verifying" });
89
+ try {
90
+ await sdk.loginWithCode(params);
91
+ const user = await sdk.getCurrentSession?.();
92
+ setState({ status: "complete" });
93
+ callbacksRef.current?.onComplete?.(user);
94
+ } catch (e) {
95
+ const err = e instanceof Error ? e : new Error(String(e));
96
+ setState({ status: "error", error: err });
97
+ callbacksRef.current?.onError?.(err);
98
+ throw err;
99
+ }
100
+ },
101
+ [sdk]
102
+ );
103
+ const reset = (0, import_react2.useCallback)(() => setState({ status: "idle" }), []);
104
+ return { state, sendCode, loginWithCode, reset };
105
+ };
106
+
107
+ // src/react/use-register-passkey.ts
108
+ var import_react3 = require("react");
109
+ var useRegisterPasskey = () => {
110
+ const sdk = useMoonKeySDK();
111
+ const [isRegistering, setIsRegistering] = (0, import_react3.useState)(false);
112
+ const [error, setError] = (0, import_react3.useState)(null);
113
+ const registerPasskey = (0, import_react3.useCallback)(
114
+ async (params) => {
115
+ if (!sdk.registerPasskey) {
116
+ const msg = "registerPasskey not available on this SDK";
117
+ setError(msg);
118
+ throw new Error(msg);
119
+ }
120
+ setIsRegistering(true);
121
+ setError(null);
122
+ try {
123
+ const result = await sdk.registerPasskey(params);
124
+ return result;
125
+ } catch (err) {
126
+ const msg = err instanceof Error ? err.message : String(err);
127
+ setError(msg);
128
+ throw err;
129
+ } finally {
130
+ setIsRegistering(false);
131
+ }
132
+ },
133
+ [sdk]
134
+ );
135
+ return { registerPasskey, isRegistering, error };
136
+ };
137
+
138
+ // src/react/use-user.ts
139
+ var import_react4 = require("react");
140
+ var useUser = () => {
141
+ const sdk = useMoonKeySDK();
142
+ const [loading, setLoading] = (0, import_react4.useState)(false);
143
+ const refresh = (0, import_react4.useCallback)(async () => {
144
+ setLoading(true);
145
+ try {
146
+ if (sdk.refreshUser) {
147
+ await sdk.refreshUser();
148
+ } else {
149
+ await sdk.getUser();
150
+ }
151
+ } finally {
152
+ setLoading(false);
153
+ }
154
+ }, [sdk]);
155
+ return {
156
+ // `user` returned as `any` to preserve the loose typing both demos
157
+ // already rely on (`.email`, `.user_id`, `.first_name`, etc.). The
158
+ // concrete shape lives in the iframe-app — apps that want stricter
159
+ // types should narrow at the call site.
160
+ user: sdk.user ?? null,
161
+ loading,
162
+ refresh,
163
+ refreshUser: refresh
164
+ };
165
+ };
166
+
167
+ // src/react/use-wallets.ts
168
+ var import_react5 = require("react");
169
+ var useWallets = (walletType) => {
170
+ const sdk = useMoonKeySDK();
171
+ const sdkRef = (0, import_react5.useRef)(sdk);
172
+ sdkRef.current = sdk;
173
+ const [wallets, setWallets] = (0, import_react5.useState)([]);
174
+ const [loading, setLoading] = (0, import_react5.useState)(false);
175
+ const [error, setError] = (0, import_react5.useState)(null);
176
+ const isAuthenticated = !!sdk.isAuthenticated;
177
+ const refresh = (0, import_react5.useCallback)(async () => {
178
+ setLoading(true);
179
+ setError(null);
180
+ try {
181
+ const result = await sdkRef.current.getWallets(walletType);
182
+ setWallets(result.wallets || []);
183
+ } catch (e) {
184
+ setError(e instanceof Error ? e : new Error(String(e)));
185
+ } finally {
186
+ setLoading(false);
187
+ }
188
+ }, [walletType]);
189
+ (0, import_react5.useEffect)(() => {
190
+ if (!isAuthenticated) {
191
+ setWallets([]);
192
+ return;
193
+ }
194
+ refresh();
195
+ }, [isAuthenticated, refresh]);
196
+ return { wallets, loading, error, refresh, refetch: refresh };
197
+ };
198
+
199
+ // src/react/use-logout.ts
200
+ var import_react6 = require("react");
201
+ var useLogout = () => {
202
+ const sdk = useMoonKeySDK();
203
+ const logout = (0, import_react6.useCallback)(async () => sdk.logout(), [sdk]);
204
+ return { logout };
205
+ };
206
+
207
+ // src/react/use-create-wallet.ts
208
+ var useCreateWallet = () => {
209
+ const sdk = useMoonKeySDK();
210
+ return {
211
+ createWallet: (walletType, options) => sdk.createWallet(walletType, options)
212
+ };
213
+ };
214
+
215
+ // src/react/use-import-key.ts
216
+ var useImportKey = () => {
217
+ const sdk = useMoonKeySDK();
218
+ return {
219
+ importKey: (walletType, key) => sdk.importKey(walletType, key)
220
+ };
221
+ };
222
+
223
+ // src/lib/auth/authentication-state.ts
224
+ var AuthenticationState = class {
225
+ constructor() {
226
+ this.email = null;
227
+ }
228
+ setEmail(email) {
229
+ this.email = email;
230
+ }
231
+ getEmail() {
232
+ return this.email;
233
+ }
234
+ clearEmail() {
235
+ this.email = null;
236
+ }
237
+ clear() {
238
+ this.clearEmail();
239
+ }
240
+ };
241
+ var authState = new AuthenticationState();
242
+
243
+ // src/lib/passkey/passkey-aaguid-registry.json
244
+ var passkey_aaguid_registry_default = {
245
+ "a11a5faa-9f32-4b8c-8c5d-2f7d13e8c942": {
246
+ name: "AliasVault"
247
+ },
248
+ "ea9b8d66-4d01-1d21-3ce4-b6b48cb575d4": {
249
+ name: "Google Password Manager"
250
+ },
251
+ "adce0002-35bc-c60a-648b-0b25f1f05503": {
252
+ name: "Chrome on Mac"
253
+ },
254
+ "08987058-cadc-4b81-b6e1-30de50dcbe96": {
255
+ name: "Windows Hello"
256
+ },
257
+ "9ddd1817-af5a-4672-a2b9-3e3dd95000a9": {
258
+ name: "Windows Hello"
259
+ },
260
+ "6028b017-b1d4-4c02-b4b3-afcdafc96bb2": {
261
+ name: "Windows Hello"
262
+ },
263
+ "dd4ec289-e01d-41c9-bb89-70fa845d4bf2": {
264
+ name: "iCloud Keychain (Managed)"
265
+ },
266
+ "531126d6-e717-415c-9320-3d9aa6981239": {
267
+ name: "Dashlane"
268
+ },
269
+ "bada5566-a7aa-401f-bd96-45619a55120d": {
270
+ name: "1Password"
271
+ },
272
+ "b84e4048-15dc-4dd0-8640-f4f60813c8af": {
273
+ name: "NordPass"
274
+ },
275
+ "0ea242b4-43c4-4a1b-8b17-dd6d0b6baec6": {
276
+ name: "Keeper"
277
+ },
278
+ "891494da-2c90-4d31-a9cd-4eab0aed1309": {
279
+ name: "S\xE9same"
280
+ },
281
+ "f3809540-7f14-49c1-a8b3-8f813b225541": {
282
+ name: "Enpass"
283
+ },
284
+ "b5397666-4885-aa6b-cebf-e52262a439a2": {
285
+ name: "Chromium Browser"
286
+ },
287
+ "771b48fd-d3d4-4f74-9232-fc157ab0507a": {
288
+ name: "Edge on Mac"
289
+ },
290
+ "39a5647e-1853-446c-a1f6-a79bae9f5bc7": {
291
+ name: "IDmelon"
292
+ },
293
+ "d548826e-79b4-db40-a3d8-11116f7e8349": {
294
+ name: "Bitwarden"
295
+ },
296
+ "fbfc3007-154e-4ecc-8c0b-6e020557d7bd": {
297
+ name: "Apple Passwords"
298
+ },
299
+ "53414d53-554e-4700-0000-000000000000": {
300
+ name: "Samsung Pass"
301
+ },
302
+ "66a0ccb3-bd6a-191f-ee06-e375c50b9846": {
303
+ name: "Thales Bio iOS SDK"
304
+ },
305
+ "8836336a-f590-0921-301d-46427531eee6": {
306
+ name: "Thales Bio Android SDK"
307
+ },
308
+ "cd69adb5-3c7a-deb9-3177-6800ea6cb72a": {
309
+ name: "Thales PIN Android SDK"
310
+ },
311
+ "17290f1e-c212-34d0-1423-365d729f09d9": {
312
+ name: "Thales PIN iOS SDK"
313
+ },
314
+ "50726f74-6f6e-5061-7373-50726f746f6e": {
315
+ name: "Proton Pass"
316
+ },
317
+ "fdb141b2-5d84-443e-8a35-4698c205a502": {
318
+ name: "KeePassXC"
319
+ },
320
+ "eaecdef2-1c31-5634-8639-f1cbd9c00a08": {
321
+ name: "KeePassDX"
322
+ },
323
+ "cc45f64e-52a2-451b-831a-4edd8022a202": {
324
+ name: "ToothPic Passkey Provider"
325
+ },
326
+ "bfc748bb-3429-4faa-b9f9-7cfa9f3b76d0": {
327
+ name: "iPasswords"
328
+ },
329
+ "b35a26b2-8f6e-4697-ab1d-d44db4da28c6": {
330
+ name: "Zoho Vault"
331
+ },
332
+ "b78a0a55-6ef8-d246-a042-ba0f6d55050c": {
333
+ name: "LastPass"
334
+ },
335
+ "de503f9c-21a4-4f76-b4b7-558eb55c6f89": {
336
+ name: "Devolutions"
337
+ },
338
+ "22248c4c-7a12-46e2-9a41-44291b373a4d": {
339
+ name: "LogMeOnce"
340
+ },
341
+ "a10c6dd9-465e-4226-8198-c7c44b91c555": {
342
+ name: "Kaspersky Password Manager"
343
+ },
344
+ "d350af52-0351-4ba2-acd3-dfeeadc3f764": {
345
+ name: "pwSafe"
346
+ },
347
+ "d3452668-01fd-4c12-926c-83a4204853aa": {
348
+ name: "Microsoft Password Manager"
349
+ },
350
+ "6d212b28-a2c1-4638-b375-5932070f62e9": {
351
+ name: "initial"
352
+ },
353
+ "d49b2120-b865-4191-8cea-be84a52b0485": {
354
+ name: "Heimlane Vault"
355
+ },
356
+ "e8b7f4a2-c3d5-e6f7-890a-b1c2d3e4f567": {
357
+ name: "Sherlocked"
358
+ },
359
+ "d9be9d39-e6a6-4c28-a581-32b044d986e4": {
360
+ name: "Sticky Password Manager"
361
+ },
362
+ "70617373-7761-6c6c-6669-646f32303236": {
363
+ name: "Passwall"
364
+ },
365
+ "c9cadfc9-89a9-489e-a25a-c7e86a4d5f15": {
366
+ name: "Burp Suite Navigation Recorder"
367
+ }
368
+ };
369
+
370
+ // src/lib/passkey/passkey-metadata.ts
371
+ var aaguidRegistry = passkey_aaguid_registry_default;
372
+ var ZERO_AAGUID = "00000000-0000-0000-0000-000000000000";
373
+ function resolveProvider(aaguid, transports) {
374
+ if (!aaguid) return "Unknown authenticator";
375
+ const entry = aaguidRegistry[aaguid];
376
+ if (entry?.name) return entry.name;
377
+ if (aaguid === ZERO_AAGUID) {
378
+ if (transports.includes("internal")) return "iCloud Keychain";
379
+ return "Unknown authenticator";
380
+ }
381
+ return "Unknown authenticator";
382
+ }
383
+ function resolveFormFactor(transports) {
384
+ if (transports.includes("hybrid")) return "hybrid";
385
+ if (transports.includes("internal")) return "platform";
386
+ if (transports.includes("usb") || transports.includes("nfc") || transports.includes("ble")) {
387
+ return "roaming";
388
+ }
389
+ return "unknown";
390
+ }
391
+ function formatPasskeyLabel(input) {
392
+ if (input.nickname && input.nickname.trim()) return input.nickname.trim();
393
+ const transports = input.transports ?? [];
394
+ const providerName = resolveProvider(input.aaguid, transports);
395
+ if (providerName.includes(" on ")) return providerName;
396
+ if (input.registeredBrowser) {
397
+ return `${providerName} on ${input.registeredBrowser}`;
398
+ }
399
+ return providerName;
400
+ }
401
+ function resolvePasskeyMetadata(input) {
402
+ const transports = input.transports ?? [];
403
+ const providerName = resolveProvider(input.aaguid, transports);
404
+ return {
405
+ providerName,
406
+ formFactor: resolveFormFactor(transports),
407
+ isCloudSynced: !!input.backupState,
408
+ label: formatPasskeyLabel(input)
409
+ };
410
+ }
411
+
412
+ // src/lib/ethereum/chains.ts
413
+ var import_viem = require("viem");
414
+
415
+ // src/lib/ethereum/siwe.ts
416
+ var import_siwe = require("siwe");
417
+ var import_viem2 = require("viem");
418
+
419
+ // src/lib/ethereum/tx-prep.ts
420
+ var import_viem3 = require("viem");
421
+
422
+ // src/lib/solana/siws.ts
423
+ var nacl = __toESM(require("tweetnacl"));
424
+
425
+ // src/lib/solana/transaction-log-parser.ts
426
+ var import_web3 = require("@solana/web3.js");
427
+ var import_bn = __toESM(require("bn.js"));
428
+
429
+ // src/react/use-passkey-status.ts
430
+ var import_react7 = require("react");
431
+ var sharedHasPasskey = null;
432
+ var sharedPasskeys = [];
433
+ var sharedLoading = false;
434
+ var sharedError = null;
435
+ var sharedInflight = null;
436
+ var subscribers = /* @__PURE__ */ new Set();
437
+ function notifyAll() {
438
+ subscribers.forEach((cb) => {
439
+ try {
440
+ cb();
441
+ } catch {
442
+ }
443
+ });
444
+ }
445
+ function resetShared() {
446
+ sharedHasPasskey = null;
447
+ sharedPasskeys = [];
448
+ sharedLoading = false;
449
+ sharedError = null;
450
+ sharedInflight = null;
451
+ notifyAll();
452
+ }
453
+ async function sharedRefresh(sdk) {
454
+ if (!sdk?.getPasskeyStatus) return;
455
+ if (sharedInflight) return sharedInflight;
456
+ const run = (async () => {
457
+ sharedLoading = true;
458
+ sharedError = null;
459
+ notifyAll();
460
+ try {
461
+ const status = await sdk.getPasskeyStatus();
462
+ sharedHasPasskey = !!status.has_passkey;
463
+ sharedPasskeys = (status.passkeys || []).map((p) => {
464
+ const metadata = resolvePasskeyMetadata({
465
+ aaguid: p.aaguid,
466
+ transports: p.transports,
467
+ backupState: p.backup_state,
468
+ registeredBrowser: p.registered_browser,
469
+ registeredOS: p.registered_os
470
+ });
471
+ return {
472
+ ...p,
473
+ label: formatPasskeyLabel({
474
+ aaguid: p.aaguid,
475
+ transports: p.transports,
476
+ registeredBrowser: p.registered_browser,
477
+ registeredOS: p.registered_os
478
+ }),
479
+ metadata
480
+ };
481
+ });
482
+ } catch (e) {
483
+ sharedError = e instanceof Error ? e.message : "Failed to load status";
484
+ } finally {
485
+ sharedLoading = false;
486
+ sharedInflight = null;
487
+ notifyAll();
488
+ }
489
+ })();
490
+ sharedInflight = run;
491
+ return run;
492
+ }
493
+ var usePasskeyStatus = () => {
494
+ const sdk = useMoonKeySDK();
495
+ const [, forceUpdate] = (0, import_react7.useReducer)((x) => x + 1, 0);
496
+ (0, import_react7.useEffect)(() => {
497
+ const cb = () => forceUpdate();
498
+ subscribers.add(cb);
499
+ return () => {
500
+ subscribers.delete(cb);
501
+ };
502
+ }, []);
503
+ const refresh = (0, import_react7.useCallback)(async () => {
504
+ return sharedRefresh(sdk);
505
+ }, [sdk]);
506
+ (0, import_react7.useEffect)(() => {
507
+ if (!sdk?.getPasskeyStatus) return;
508
+ if (sdk.ready && !sdk.isAuthenticated) {
509
+ resetShared();
510
+ return;
511
+ }
512
+ if (!sdk.ready || !sdk.isAuthenticated) return;
513
+ sharedRefresh(sdk);
514
+ }, [sdk, sdk?.ready, sdk?.isAuthenticated]);
515
+ return {
516
+ hasPasskey: sharedHasPasskey,
517
+ passkeys: sharedPasskeys,
518
+ loading: sharedLoading,
519
+ error: sharedError,
520
+ refresh
521
+ };
522
+ };
523
+
524
+ // src/react/use-manage-passkeys.ts
525
+ var import_react8 = require("react");
526
+ var useAddPasskey = () => {
527
+ const sdk = useMoonKeySDK();
528
+ const [isAdding, setIsAdding] = (0, import_react8.useState)(false);
529
+ const [error, setError] = (0, import_react8.useState)(null);
530
+ const addPasskey = (0, import_react8.useCallback)(
531
+ async (params) => {
532
+ if (!sdk?.addPasskey) throw new Error("SDK not ready");
533
+ setIsAdding(true);
534
+ setError(null);
535
+ try {
536
+ return await sdk.addPasskey(params);
537
+ } catch (e) {
538
+ const msg = e instanceof Error ? e.message : "Failed to add passkey";
539
+ setError(msg);
540
+ throw e;
541
+ } finally {
542
+ setIsAdding(false);
543
+ }
544
+ },
545
+ [sdk]
546
+ );
547
+ return { addPasskey, isAdding, error };
548
+ };
549
+ var useRemovePasskey = () => {
550
+ const sdk = useMoonKeySDK();
551
+ const [isRemoving, setIsRemoving] = (0, import_react8.useState)(false);
552
+ const [error, setError] = (0, import_react8.useState)(null);
553
+ const removePasskey = (0, import_react8.useCallback)(
554
+ async (credentialIdB64url) => {
555
+ if (!sdk?.removePasskey) throw new Error("SDK not ready");
556
+ setIsRemoving(true);
557
+ setError(null);
558
+ try {
559
+ await sdk.removePasskey(credentialIdB64url);
560
+ } catch (e) {
561
+ const msg = e instanceof Error ? e.message : "Failed to remove passkey";
562
+ setError(msg);
563
+ throw e;
564
+ } finally {
565
+ setIsRemoving(false);
566
+ }
567
+ },
568
+ [sdk]
569
+ );
570
+ return { removePasskey, isRemoving, error };
571
+ };
572
+ // Annotate the CommonJS export names for ESM import in node:
573
+ 0 && (module.exports = {
574
+ SDKProvider,
575
+ useAddPasskey,
576
+ useCreateWallet,
577
+ useImportKey,
578
+ useLoginWithEmail,
579
+ useLogout,
580
+ useMoonKeySDK,
581
+ usePasskeyStatus,
582
+ useRegisterPasskey,
583
+ useRemovePasskey,
584
+ useUser,
585
+ useWallets
586
+ });