@moon-x/core 0.3.0 → 0.5.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 (44) hide show
  1. package/README.md +1 -1
  2. package/dist/{chunk-CDT4MC7S.mjs → chunk-I56GRKAG.mjs} +19 -39
  3. package/dist/{chunk-VVL65GIB.mjs → chunk-JU5MWLXH.mjs} +14 -0
  4. package/dist/index.d.mts +2 -3
  5. package/dist/index.d.ts +2 -3
  6. package/dist/index.js +14 -0
  7. package/dist/index.mjs +1 -1
  8. package/dist/{interfaces-Bm7fGOAI.d.ts → interfaces-1vfik3Ef.d.ts} +24 -1
  9. package/dist/{interfaces-CYtJHALV.d.mts → interfaces-BdIeMGGD.d.mts} +24 -1
  10. package/dist/lib/index.d.mts +33 -3
  11. package/dist/lib/index.d.ts +33 -3
  12. package/dist/lib/index.js +23 -47
  13. package/dist/lib/index.mjs +7 -15
  14. package/dist/passkey-cache-WnDFQ-v4.d.mts +26 -0
  15. package/dist/passkey-cache-WnDFQ-v4.d.ts +26 -0
  16. package/dist/{post-message-CmgAfkOS.d.mts → post-message-Z6cLf0mS.d.mts} +3 -0
  17. package/dist/{post-message-CmgAfkOS.d.ts → post-message-Z6cLf0mS.d.ts} +3 -0
  18. package/dist/react/ethereum.d.mts +0 -1
  19. package/dist/react/ethereum.d.ts +0 -1
  20. package/dist/react/index.d.mts +41 -3
  21. package/dist/react/index.d.ts +41 -3
  22. package/dist/react/index.js +138 -12
  23. package/dist/react/index.mjs +137 -12
  24. package/dist/react/solana.d.mts +0 -1
  25. package/dist/react/solana.d.ts +0 -1
  26. package/dist/sdk/index.d.mts +87 -16
  27. package/dist/sdk/index.d.ts +87 -16
  28. package/dist/sdk/index.js +456 -102
  29. package/dist/sdk/index.mjs +440 -80
  30. package/dist/types/index.d.mts +135 -12
  31. package/dist/types/index.d.ts +135 -12
  32. package/dist/utils/index.d.mts +1 -1
  33. package/dist/utils/index.d.ts +1 -1
  34. package/dist/utils/index.js +14 -0
  35. package/dist/utils/index.mjs +1 -1
  36. package/dist/web/index.d.mts +2 -2
  37. package/dist/web/index.d.ts +2 -2
  38. package/dist/web/index.js +29 -0
  39. package/dist/web/index.mjs +30 -1
  40. package/package.json +3 -1
  41. package/dist/chain-C9dvKXUY.d.mts +0 -48
  42. package/dist/chain-C9dvKXUY.d.ts +0 -48
  43. package/dist/passkey-cache-B9PT3AWX.d.mts +0 -47
  44. package/dist/passkey-cache-B9PT3AWX.d.ts +0 -47
@@ -31,6 +31,9 @@ declare const PostMessageMethod: {
31
31
  readonly SIGN_TYPED_DATA: "SIGN_TYPED_DATA";
32
32
  readonly SIGN_HASH: "SIGN_HASH";
33
33
  readonly SIGN_7702_AUTHORIZATION: "SIGN_7702_AUTHORIZATION";
34
+ readonly PROVISION_EPHEMERAL_SIGNER: "PROVISION_EPHEMERAL_SIGNER";
35
+ readonly LIST_EPHEMERAL_SIGNERS: "LIST_EPHEMERAL_SIGNERS";
36
+ readonly REVOKE_EPHEMERAL_SIGNER: "REVOKE_EPHEMERAL_SIGNER";
34
37
  readonly VERIFY_EMAIL_OTP: "VERIFY_EMAIL_OTP";
35
38
  readonly VERIFY_OAUTH: "VERIFY_OAUTH";
36
39
  readonly START_OAUTH: "START_OAUTH";
@@ -1,5 +1,4 @@
1
1
  import { EthereumGetBalanceParams, EthereumGetBalanceResult, EthereumSendTransactionParams, EthereumSendTransactionResult, EthereumSign7702AuthorizationParams, EthereumSign7702AuthorizationResult, EthereumSignHashParams, EthereumSignHashResult, EthereumSignMessageParams, EthereumSignMessageResult, EthereumSignTransactionParams, EthereumSignTransactionResult, EthereumSignTypedDataParams, EthereumSignTypedDataResult } from '../types/index.mjs';
2
- import '../chain-C9dvKXUY.mjs';
3
2
 
4
3
  declare const useSignMessage: () => {
5
4
  signMessage: (params: EthereumSignMessageParams) => Promise<EthereumSignMessageResult>;
@@ -1,5 +1,4 @@
1
1
  import { EthereumGetBalanceParams, EthereumGetBalanceResult, EthereumSendTransactionParams, EthereumSendTransactionResult, EthereumSign7702AuthorizationParams, EthereumSign7702AuthorizationResult, EthereumSignHashParams, EthereumSignHashResult, EthereumSignMessageParams, EthereumSignMessageResult, EthereumSignTransactionParams, EthereumSignTransactionResult, EthereumSignTypedDataParams, EthereumSignTypedDataResult } from '../types/index.js';
2
- import '../chain-C9dvKXUY.js';
3
2
 
4
3
  declare const useSignMessage: () => {
5
4
  signMessage: (params: EthereumSignMessageParams) => Promise<EthereumSignMessageResult>;
@@ -1,7 +1,6 @@
1
1
  import * as react from 'react';
2
- import { PublicWallet } from '../types/index.mjs';
2
+ import { PublicWallet, EphemeralSigner, ListEphemeralSignersResult, ProvisionEphemeralSignerParams, ProvisionEphemeralSignerResult, RevokeEphemeralSignerParams } from '../types/index.mjs';
3
3
  import { P as PasskeyMetadata } from '../passkey-metadata-QqFF2SWQ.mjs';
4
- import '../chain-C9dvKXUY.mjs';
5
4
 
6
5
  /**
7
6
  * The minimal SDK surface the shared hooks rely on. Both platform
@@ -37,6 +36,9 @@ interface MoonKeyHookSDK {
37
36
  logout: () => Promise<unknown>;
38
37
  getPasskeyStatus: () => Promise<unknown>;
39
38
  removePasskey: (credentialIdB64url: string) => Promise<unknown>;
39
+ provisionEphemeralSigner: (params: unknown) => Promise<unknown>;
40
+ listEphemeralSigners: () => Promise<unknown>;
41
+ revokeEphemeralSigner: (params: unknown) => Promise<unknown>;
40
42
  sendCode: (params: {
41
43
  email: string;
42
44
  disableSignup?: boolean;
@@ -139,6 +141,42 @@ declare const useImportKey: () => {
139
141
  }>;
140
142
  };
141
143
 
144
+ interface UseEphemeralSignerResult {
145
+ /** Active (non-revoked) ephemeral signers for the current user + app. */
146
+ signers: EphemeralSigner[];
147
+ /** True only on the very first load; false during background re-fetches. */
148
+ isLoading: boolean;
149
+ /** True during background re-fetches (e.g. after provision/revoke). */
150
+ isRefreshing: boolean;
151
+ /** Manual re-fetch. Usually unnecessary — provision/revoke trigger it automatically. */
152
+ refresh: () => Promise<ListEphemeralSignersResult>;
153
+ /**
154
+ * Provision a new ephemeral signer. Resolves to the full result
155
+ * (including the one-time api_priv hex). Triggers a list refresh on
156
+ * success.
157
+ */
158
+ provision: (params: ProvisionEphemeralSignerParams) => Promise<ProvisionEphemeralSignerResult>;
159
+ isProvisioning: boolean;
160
+ /**
161
+ * The most recent successful provision result. Stays populated so
162
+ * the caller can render the one-time priv-key surface until they
163
+ * call `reset()`.
164
+ */
165
+ lastProvisioned: ProvisionEphemeralSignerResult | null;
166
+ /**
167
+ * Soft-revoke an ephemeral signer (and forward the revoke to SES).
168
+ * Triggers a list refresh on success. Requires a fresh WebAuthn-bound
169
+ * presence token — the SDK handles the ceremony internally.
170
+ */
171
+ revoke: (params: RevokeEphemeralSignerParams) => Promise<void>;
172
+ isRevoking: boolean;
173
+ /** Most recent error across list/provision/revoke. Cleared by reset() or by the next successful op. */
174
+ error: string | null;
175
+ /** Clear `lastProvisioned` + `error`. Use after dismissing the success surface. */
176
+ reset: () => void;
177
+ }
178
+ declare const useEphemeralSigner: () => UseEphemeralSignerResult;
179
+
142
180
  interface PasskeyStatusEntry {
143
181
  id: string;
144
182
  credential_id: string;
@@ -180,4 +218,4 @@ interface UseRemovePasskeyResult {
180
218
  }
181
219
  declare const useRemovePasskey: () => UseRemovePasskeyResult;
182
220
 
183
- export { type LoginWithEmailState, type MoonKeyHookSDK, type PasskeyStatusEntry, type RegisterPasskeyResult, SDKProvider, type UseAddPasskeyResult, type UseLoginWithEmailCallbacks, type UsePasskeyStatusResult, type UseRemovePasskeyResult, useAddPasskey, useCreateWallet, useImportKey, useLoginWithEmail, useLogout, useMoonKeySDK, usePasskeyStatus, useRegisterPasskey, useRemovePasskey, useUser, useWallets };
221
+ export { type LoginWithEmailState, type MoonKeyHookSDK, type PasskeyStatusEntry, type RegisterPasskeyResult, SDKProvider, type UseAddPasskeyResult, type UseEphemeralSignerResult, type UseLoginWithEmailCallbacks, type UsePasskeyStatusResult, type UseRemovePasskeyResult, useAddPasskey, useCreateWallet, useEphemeralSigner, useImportKey, useLoginWithEmail, useLogout, useMoonKeySDK, usePasskeyStatus, useRegisterPasskey, useRemovePasskey, useUser, useWallets };
@@ -1,7 +1,6 @@
1
1
  import * as react from 'react';
2
- import { PublicWallet } from '../types/index.js';
2
+ import { PublicWallet, EphemeralSigner, ListEphemeralSignersResult, ProvisionEphemeralSignerParams, ProvisionEphemeralSignerResult, RevokeEphemeralSignerParams } from '../types/index.js';
3
3
  import { P as PasskeyMetadata } from '../passkey-metadata-QqFF2SWQ.js';
4
- import '../chain-C9dvKXUY.js';
5
4
 
6
5
  /**
7
6
  * The minimal SDK surface the shared hooks rely on. Both platform
@@ -37,6 +36,9 @@ interface MoonKeyHookSDK {
37
36
  logout: () => Promise<unknown>;
38
37
  getPasskeyStatus: () => Promise<unknown>;
39
38
  removePasskey: (credentialIdB64url: string) => Promise<unknown>;
39
+ provisionEphemeralSigner: (params: unknown) => Promise<unknown>;
40
+ listEphemeralSigners: () => Promise<unknown>;
41
+ revokeEphemeralSigner: (params: unknown) => Promise<unknown>;
40
42
  sendCode: (params: {
41
43
  email: string;
42
44
  disableSignup?: boolean;
@@ -139,6 +141,42 @@ declare const useImportKey: () => {
139
141
  }>;
140
142
  };
141
143
 
144
+ interface UseEphemeralSignerResult {
145
+ /** Active (non-revoked) ephemeral signers for the current user + app. */
146
+ signers: EphemeralSigner[];
147
+ /** True only on the very first load; false during background re-fetches. */
148
+ isLoading: boolean;
149
+ /** True during background re-fetches (e.g. after provision/revoke). */
150
+ isRefreshing: boolean;
151
+ /** Manual re-fetch. Usually unnecessary — provision/revoke trigger it automatically. */
152
+ refresh: () => Promise<ListEphemeralSignersResult>;
153
+ /**
154
+ * Provision a new ephemeral signer. Resolves to the full result
155
+ * (including the one-time api_priv hex). Triggers a list refresh on
156
+ * success.
157
+ */
158
+ provision: (params: ProvisionEphemeralSignerParams) => Promise<ProvisionEphemeralSignerResult>;
159
+ isProvisioning: boolean;
160
+ /**
161
+ * The most recent successful provision result. Stays populated so
162
+ * the caller can render the one-time priv-key surface until they
163
+ * call `reset()`.
164
+ */
165
+ lastProvisioned: ProvisionEphemeralSignerResult | null;
166
+ /**
167
+ * Soft-revoke an ephemeral signer (and forward the revoke to SES).
168
+ * Triggers a list refresh on success. Requires a fresh WebAuthn-bound
169
+ * presence token — the SDK handles the ceremony internally.
170
+ */
171
+ revoke: (params: RevokeEphemeralSignerParams) => Promise<void>;
172
+ isRevoking: boolean;
173
+ /** Most recent error across list/provision/revoke. Cleared by reset() or by the next successful op. */
174
+ error: string | null;
175
+ /** Clear `lastProvisioned` + `error`. Use after dismissing the success surface. */
176
+ reset: () => void;
177
+ }
178
+ declare const useEphemeralSigner: () => UseEphemeralSignerResult;
179
+
142
180
  interface PasskeyStatusEntry {
143
181
  id: string;
144
182
  credential_id: string;
@@ -180,4 +218,4 @@ interface UseRemovePasskeyResult {
180
218
  }
181
219
  declare const useRemovePasskey: () => UseRemovePasskeyResult;
182
220
 
183
- export { type LoginWithEmailState, type MoonKeyHookSDK, type PasskeyStatusEntry, type RegisterPasskeyResult, SDKProvider, type UseAddPasskeyResult, type UseLoginWithEmailCallbacks, type UsePasskeyStatusResult, type UseRemovePasskeyResult, useAddPasskey, useCreateWallet, useImportKey, useLoginWithEmail, useLogout, useMoonKeySDK, usePasskeyStatus, useRegisterPasskey, useRemovePasskey, useUser, useWallets };
221
+ export { type LoginWithEmailState, type MoonKeyHookSDK, type PasskeyStatusEntry, type RegisterPasskeyResult, SDKProvider, type UseAddPasskeyResult, type UseEphemeralSignerResult, type UseLoginWithEmailCallbacks, type UsePasskeyStatusResult, type UseRemovePasskeyResult, useAddPasskey, useCreateWallet, useEphemeralSigner, useImportKey, useLoginWithEmail, useLogout, useMoonKeySDK, usePasskeyStatus, useRegisterPasskey, useRemovePasskey, useUser, useWallets };
@@ -33,6 +33,7 @@ __export(react_exports, {
33
33
  SDKProvider: () => SDKProvider,
34
34
  useAddPasskey: () => useAddPasskey,
35
35
  useCreateWallet: () => useCreateWallet,
36
+ useEphemeralSigner: () => useEphemeralSigner,
36
37
  useImportKey: () => useImportKey,
37
38
  useLoginWithEmail: () => useLoginWithEmail,
38
39
  useLogout: () => useLogout,
@@ -221,6 +222,130 @@ var useImportKey = () => {
221
222
  };
222
223
  };
223
224
 
225
+ // src/react/use-ephemeral-signer.ts
226
+ var import_react7 = require("react");
227
+ var useEphemeralSigner = () => {
228
+ const sdk = useMoonKeySDK();
229
+ const [signers, setSigners] = (0, import_react7.useState)([]);
230
+ const [isLoading, setIsLoading] = (0, import_react7.useState)(true);
231
+ const [isRefreshing, setIsRefreshing] = (0, import_react7.useState)(false);
232
+ const [hasLoadedOnce, setHasLoadedOnce] = (0, import_react7.useState)(false);
233
+ const [isProvisioning, setIsProvisioning] = (0, import_react7.useState)(false);
234
+ const [lastProvisioned, setLastProvisioned] = (0, import_react7.useState)(null);
235
+ const [isRevoking, setIsRevoking] = (0, import_react7.useState)(false);
236
+ const [error, setError] = (0, import_react7.useState)(null);
237
+ const refreshInternal = (0, import_react7.useCallback)(
238
+ async (setErrorOnFailure) => {
239
+ if (!sdk.listEphemeralSigners) {
240
+ const msg = "listEphemeralSigners not available on this SDK";
241
+ if (setErrorOnFailure) setError(msg);
242
+ throw new Error(msg);
243
+ }
244
+ if (hasLoadedOnce) {
245
+ setIsRefreshing(true);
246
+ } else {
247
+ setIsLoading(true);
248
+ }
249
+ try {
250
+ const next = await sdk.listEphemeralSigners();
251
+ setSigners(next.signers ?? []);
252
+ setHasLoadedOnce(true);
253
+ return next;
254
+ } catch (err) {
255
+ if (setErrorOnFailure) {
256
+ const msg = err instanceof Error ? err.message : String(err);
257
+ setError(msg);
258
+ }
259
+ throw err;
260
+ } finally {
261
+ setIsLoading(false);
262
+ setIsRefreshing(false);
263
+ }
264
+ },
265
+ [sdk, hasLoadedOnce]
266
+ );
267
+ const refresh = (0, import_react7.useCallback)(async () => {
268
+ setError(null);
269
+ return refreshInternal(true);
270
+ }, [refreshInternal]);
271
+ const provision = (0, import_react7.useCallback)(
272
+ async (params) => {
273
+ if (!sdk.provisionEphemeralSigner) {
274
+ const msg = "provisionEphemeralSigner not available on this SDK";
275
+ setError(msg);
276
+ throw new Error(msg);
277
+ }
278
+ setIsProvisioning(true);
279
+ setError(null);
280
+ try {
281
+ const next = await sdk.provisionEphemeralSigner(
282
+ params
283
+ );
284
+ setLastProvisioned(next);
285
+ refreshInternal(false).catch(() => {
286
+ });
287
+ return next;
288
+ } catch (err) {
289
+ const msg = err instanceof Error ? err.message : String(err);
290
+ setError(msg);
291
+ throw err;
292
+ } finally {
293
+ setIsProvisioning(false);
294
+ }
295
+ },
296
+ [sdk, refreshInternal]
297
+ );
298
+ const revoke = (0, import_react7.useCallback)(
299
+ async (params) => {
300
+ if (!sdk.revokeEphemeralSigner) {
301
+ const msg = "revokeEphemeralSigner not available on this SDK";
302
+ setError(msg);
303
+ throw new Error(msg);
304
+ }
305
+ setIsRevoking(true);
306
+ setError(null);
307
+ try {
308
+ await sdk.revokeEphemeralSigner(params);
309
+ refreshInternal(false).catch(() => {
310
+ });
311
+ } catch (err) {
312
+ const msg = err instanceof Error ? err.message : String(err);
313
+ setError(msg);
314
+ throw err;
315
+ } finally {
316
+ setIsRevoking(false);
317
+ }
318
+ },
319
+ [sdk, refreshInternal]
320
+ );
321
+ const reset = (0, import_react7.useCallback)(() => {
322
+ setLastProvisioned(null);
323
+ setError(null);
324
+ }, []);
325
+ const didAutoFetchRef = (0, import_react7.useRef)(false);
326
+ (0, import_react7.useEffect)(() => {
327
+ if (didAutoFetchRef.current) return;
328
+ if (!sdk.ready) return;
329
+ if (!sdk.listEphemeralSigners) return;
330
+ didAutoFetchRef.current = true;
331
+ refresh().catch(() => {
332
+ });
333
+ }, [sdk.ready, sdk.listEphemeralSigners, refresh]);
334
+ return {
335
+ signers,
336
+ isLoading,
337
+ isRefreshing,
338
+ refresh,
339
+ provision,
340
+ isProvisioning,
341
+ lastProvisioned,
342
+ revoke,
343
+ isRevoking,
344
+ error,
345
+ reset
346
+ };
347
+ };
348
+
224
349
  // src/lib/auth/authentication-state.ts
225
350
  var AuthenticationState = class {
226
351
  constructor() {
@@ -428,7 +553,7 @@ var import_web3 = require("@solana/web3.js");
428
553
  var import_bn = __toESM(require("bn.js"));
429
554
 
430
555
  // src/react/use-passkey-status.ts
431
- var import_react7 = require("react");
556
+ var import_react8 = require("react");
432
557
  var sharedHasPasskey = null;
433
558
  var sharedPasskeys = [];
434
559
  var sharedLoading = false;
@@ -493,18 +618,18 @@ async function sharedRefresh(sdk) {
493
618
  }
494
619
  var usePasskeyStatus = () => {
495
620
  const sdk = useMoonKeySDK();
496
- const [, forceUpdate] = (0, import_react7.useReducer)((x) => x + 1, 0);
497
- (0, import_react7.useEffect)(() => {
621
+ const [, forceUpdate] = (0, import_react8.useReducer)((x) => x + 1, 0);
622
+ (0, import_react8.useEffect)(() => {
498
623
  const cb = () => forceUpdate();
499
624
  subscribers.add(cb);
500
625
  return () => {
501
626
  subscribers.delete(cb);
502
627
  };
503
628
  }, []);
504
- const refresh = (0, import_react7.useCallback)(async () => {
629
+ const refresh = (0, import_react8.useCallback)(async () => {
505
630
  return sharedRefresh(sdk);
506
631
  }, [sdk]);
507
- (0, import_react7.useEffect)(() => {
632
+ (0, import_react8.useEffect)(() => {
508
633
  if (!sdk?.getPasskeyStatus) return;
509
634
  if (sdk.ready && !sdk.isAuthenticated) {
510
635
  resetShared();
@@ -523,12 +648,12 @@ var usePasskeyStatus = () => {
523
648
  };
524
649
 
525
650
  // src/react/use-manage-passkeys.ts
526
- var import_react8 = require("react");
651
+ var import_react9 = require("react");
527
652
  var useAddPasskey = () => {
528
653
  const sdk = useMoonKeySDK();
529
- const [isAdding, setIsAdding] = (0, import_react8.useState)(false);
530
- const [error, setError] = (0, import_react8.useState)(null);
531
- const addPasskey = (0, import_react8.useCallback)(
654
+ const [isAdding, setIsAdding] = (0, import_react9.useState)(false);
655
+ const [error, setError] = (0, import_react9.useState)(null);
656
+ const addPasskey = (0, import_react9.useCallback)(
532
657
  async (params) => {
533
658
  if (!sdk?.addPasskey) throw new Error("SDK not ready");
534
659
  setIsAdding(true);
@@ -549,9 +674,9 @@ var useAddPasskey = () => {
549
674
  };
550
675
  var useRemovePasskey = () => {
551
676
  const sdk = useMoonKeySDK();
552
- const [isRemoving, setIsRemoving] = (0, import_react8.useState)(false);
553
- const [error, setError] = (0, import_react8.useState)(null);
554
- const removePasskey = (0, import_react8.useCallback)(
677
+ const [isRemoving, setIsRemoving] = (0, import_react9.useState)(false);
678
+ const [error, setError] = (0, import_react9.useState)(null);
679
+ const removePasskey = (0, import_react9.useCallback)(
555
680
  async (credentialIdB64url) => {
556
681
  if (!sdk?.removePasskey) throw new Error("SDK not ready");
557
682
  setIsRemoving(true);
@@ -575,6 +700,7 @@ var useRemovePasskey = () => {
575
700
  SDKProvider,
576
701
  useAddPasskey,
577
702
  useCreateWallet,
703
+ useEphemeralSigner,
578
704
  useImportKey,
579
705
  useLoginWithEmail,
580
706
  useLogout,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  formatPasskeyLabel,
3
3
  resolvePasskeyMetadata
4
- } from "../chunk-CDT4MC7S.mjs";
4
+ } from "../chunk-I56GRKAG.mjs";
5
5
  import "../chunk-GQKIA37O.mjs";
6
6
  import {
7
7
  SDKProvider,
@@ -170,8 +170,132 @@ var useImportKey = () => {
170
170
  };
171
171
  };
172
172
 
173
+ // src/react/use-ephemeral-signer.ts
174
+ import { useCallback as useCallback6, useEffect as useEffect3, useRef as useRef3, useState as useState5 } from "react";
175
+ var useEphemeralSigner = () => {
176
+ const sdk = useMoonKeySDK();
177
+ const [signers, setSigners] = useState5([]);
178
+ const [isLoading, setIsLoading] = useState5(true);
179
+ const [isRefreshing, setIsRefreshing] = useState5(false);
180
+ const [hasLoadedOnce, setHasLoadedOnce] = useState5(false);
181
+ const [isProvisioning, setIsProvisioning] = useState5(false);
182
+ const [lastProvisioned, setLastProvisioned] = useState5(null);
183
+ const [isRevoking, setIsRevoking] = useState5(false);
184
+ const [error, setError] = useState5(null);
185
+ const refreshInternal = useCallback6(
186
+ async (setErrorOnFailure) => {
187
+ if (!sdk.listEphemeralSigners) {
188
+ const msg = "listEphemeralSigners not available on this SDK";
189
+ if (setErrorOnFailure) setError(msg);
190
+ throw new Error(msg);
191
+ }
192
+ if (hasLoadedOnce) {
193
+ setIsRefreshing(true);
194
+ } else {
195
+ setIsLoading(true);
196
+ }
197
+ try {
198
+ const next = await sdk.listEphemeralSigners();
199
+ setSigners(next.signers ?? []);
200
+ setHasLoadedOnce(true);
201
+ return next;
202
+ } catch (err) {
203
+ if (setErrorOnFailure) {
204
+ const msg = err instanceof Error ? err.message : String(err);
205
+ setError(msg);
206
+ }
207
+ throw err;
208
+ } finally {
209
+ setIsLoading(false);
210
+ setIsRefreshing(false);
211
+ }
212
+ },
213
+ [sdk, hasLoadedOnce]
214
+ );
215
+ const refresh = useCallback6(async () => {
216
+ setError(null);
217
+ return refreshInternal(true);
218
+ }, [refreshInternal]);
219
+ const provision = useCallback6(
220
+ async (params) => {
221
+ if (!sdk.provisionEphemeralSigner) {
222
+ const msg = "provisionEphemeralSigner not available on this SDK";
223
+ setError(msg);
224
+ throw new Error(msg);
225
+ }
226
+ setIsProvisioning(true);
227
+ setError(null);
228
+ try {
229
+ const next = await sdk.provisionEphemeralSigner(
230
+ params
231
+ );
232
+ setLastProvisioned(next);
233
+ refreshInternal(false).catch(() => {
234
+ });
235
+ return next;
236
+ } catch (err) {
237
+ const msg = err instanceof Error ? err.message : String(err);
238
+ setError(msg);
239
+ throw err;
240
+ } finally {
241
+ setIsProvisioning(false);
242
+ }
243
+ },
244
+ [sdk, refreshInternal]
245
+ );
246
+ const revoke = useCallback6(
247
+ async (params) => {
248
+ if (!sdk.revokeEphemeralSigner) {
249
+ const msg = "revokeEphemeralSigner not available on this SDK";
250
+ setError(msg);
251
+ throw new Error(msg);
252
+ }
253
+ setIsRevoking(true);
254
+ setError(null);
255
+ try {
256
+ await sdk.revokeEphemeralSigner(params);
257
+ refreshInternal(false).catch(() => {
258
+ });
259
+ } catch (err) {
260
+ const msg = err instanceof Error ? err.message : String(err);
261
+ setError(msg);
262
+ throw err;
263
+ } finally {
264
+ setIsRevoking(false);
265
+ }
266
+ },
267
+ [sdk, refreshInternal]
268
+ );
269
+ const reset = useCallback6(() => {
270
+ setLastProvisioned(null);
271
+ setError(null);
272
+ }, []);
273
+ const didAutoFetchRef = useRef3(false);
274
+ useEffect3(() => {
275
+ if (didAutoFetchRef.current) return;
276
+ if (!sdk.ready) return;
277
+ if (!sdk.listEphemeralSigners) return;
278
+ didAutoFetchRef.current = true;
279
+ refresh().catch(() => {
280
+ });
281
+ }, [sdk.ready, sdk.listEphemeralSigners, refresh]);
282
+ return {
283
+ signers,
284
+ isLoading,
285
+ isRefreshing,
286
+ refresh,
287
+ provision,
288
+ isProvisioning,
289
+ lastProvisioned,
290
+ revoke,
291
+ isRevoking,
292
+ error,
293
+ reset
294
+ };
295
+ };
296
+
173
297
  // src/react/use-passkey-status.ts
174
- import { useCallback as useCallback6, useEffect as useEffect3, useReducer } from "react";
298
+ import { useCallback as useCallback7, useEffect as useEffect4, useReducer } from "react";
175
299
  var sharedHasPasskey = null;
176
300
  var sharedPasskeys = [];
177
301
  var sharedLoading = false;
@@ -237,17 +361,17 @@ async function sharedRefresh(sdk) {
237
361
  var usePasskeyStatus = () => {
238
362
  const sdk = useMoonKeySDK();
239
363
  const [, forceUpdate] = useReducer((x) => x + 1, 0);
240
- useEffect3(() => {
364
+ useEffect4(() => {
241
365
  const cb = () => forceUpdate();
242
366
  subscribers.add(cb);
243
367
  return () => {
244
368
  subscribers.delete(cb);
245
369
  };
246
370
  }, []);
247
- const refresh = useCallback6(async () => {
371
+ const refresh = useCallback7(async () => {
248
372
  return sharedRefresh(sdk);
249
373
  }, [sdk]);
250
- useEffect3(() => {
374
+ useEffect4(() => {
251
375
  if (!sdk?.getPasskeyStatus) return;
252
376
  if (sdk.ready && !sdk.isAuthenticated) {
253
377
  resetShared();
@@ -266,12 +390,12 @@ var usePasskeyStatus = () => {
266
390
  };
267
391
 
268
392
  // src/react/use-manage-passkeys.ts
269
- import { useCallback as useCallback7, useState as useState5 } from "react";
393
+ import { useCallback as useCallback8, useState as useState6 } from "react";
270
394
  var useAddPasskey = () => {
271
395
  const sdk = useMoonKeySDK();
272
- const [isAdding, setIsAdding] = useState5(false);
273
- const [error, setError] = useState5(null);
274
- const addPasskey = useCallback7(
396
+ const [isAdding, setIsAdding] = useState6(false);
397
+ const [error, setError] = useState6(null);
398
+ const addPasskey = useCallback8(
275
399
  async (params) => {
276
400
  if (!sdk?.addPasskey) throw new Error("SDK not ready");
277
401
  setIsAdding(true);
@@ -292,9 +416,9 @@ var useAddPasskey = () => {
292
416
  };
293
417
  var useRemovePasskey = () => {
294
418
  const sdk = useMoonKeySDK();
295
- const [isRemoving, setIsRemoving] = useState5(false);
296
- const [error, setError] = useState5(null);
297
- const removePasskey = useCallback7(
419
+ const [isRemoving, setIsRemoving] = useState6(false);
420
+ const [error, setError] = useState6(null);
421
+ const removePasskey = useCallback8(
298
422
  async (credentialIdB64url) => {
299
423
  if (!sdk?.removePasskey) throw new Error("SDK not ready");
300
424
  setIsRemoving(true);
@@ -317,6 +441,7 @@ export {
317
441
  SDKProvider,
318
442
  useAddPasskey,
319
443
  useCreateWallet,
444
+ useEphemeralSigner,
320
445
  useImportKey,
321
446
  useLoginWithEmail,
322
447
  useLogout,
@@ -1,5 +1,4 @@
1
1
  import { SolanaGetBalanceParams, SolanaGetBalanceResult, SolanaSendTransactionParams, SolanaSendTransactionResult, SolanaSignMessageParams, SolanaSignMessageResult, SolanaSignTransactionParams, SolanaSignTransactionResult } from '../types/index.mjs';
2
- import '../chain-C9dvKXUY.mjs';
3
2
 
4
3
  declare const useSignMessage: () => {
5
4
  signMessage: (params: SolanaSignMessageParams) => Promise<SolanaSignMessageResult>;
@@ -1,5 +1,4 @@
1
1
  import { SolanaGetBalanceParams, SolanaGetBalanceResult, SolanaSendTransactionParams, SolanaSendTransactionResult, SolanaSignMessageParams, SolanaSignMessageResult, SolanaSignTransactionParams, SolanaSignTransactionResult } from '../types/index.js';
2
- import '../chain-C9dvKXUY.js';
3
2
 
4
3
  declare const useSignMessage: () => {
5
4
  signMessage: (params: SolanaSignMessageParams) => Promise<SolanaSignMessageResult>;