@dexterai/connect 0.11.0 → 0.12.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.
@@ -322,6 +322,20 @@ function createPasskeySigner(vault, apiBase, opts = {}) {
322
322
  });
323
323
  }
324
324
 
325
+ // src/identity.ts
326
+ function presentOrNull(value) {
327
+ return value && value.length > 0 ? value : null;
328
+ }
329
+ function resolveIdentity(input) {
330
+ const userHandle = presentOrNull(input.userHandle);
331
+ const accountToken = presentOrNull(input.accountToken);
332
+ const hasPasskeyVault = userHandle !== null;
333
+ const hasAccount = accountToken !== null;
334
+ const hasWallet = hasPasskeyVault || hasAccount;
335
+ const kind = hasPasskeyVault ? "passkey-vault" : hasAccount ? "account" : "none";
336
+ return { kind, userHandle, accountToken, hasPasskeyVault, hasAccount, hasWallet };
337
+ }
338
+
325
339
  // src/walletStore.ts
326
340
  var ACTIVE_HANDLE_KEY = "dexter:passkey:userHandle";
327
341
  var ROSTER_KEY = "dexter:passkey:wallets";
@@ -518,6 +532,7 @@ export {
518
532
  passkeyLogin,
519
533
  createAnonServerPolicy,
520
534
  createPasskeySigner,
535
+ resolveIdentity,
521
536
  getActiveHandle,
522
537
  setActiveHandle,
523
538
  getCredentialId,
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { D as DexterConnectConfig, C as CeremonyPhase, S as SignInResult, a as ConnectVault } from './signals-B7GXneoj.js';
2
- export { A as ACTIVE_WALLET_STORAGE_KEY, b as ConnectError, P as PasskeyLoginTokens, c as PasskeySignalSupport, d as StoredWallet, e as ejectActiveWallet, f as forgetWallet, g as getActiveHandle, h as getCredentialId, l as listWallets, p as passkeySignalSupport, i as prunePasskey, r as renamePasskey, s as setActiveHandle, j as subscribeWallet, k as switchWallet, m as syncAcceptedPasskeys } from './signals-B7GXneoj.js';
1
+ import { D as DexterConnectConfig, C as CeremonyPhase, S as SignInResult, a as ConnectVault } from './signals-DM7IQdq6.js';
2
+ export { A as ACTIVE_WALLET_STORAGE_KEY, b as ConnectError, I as IdentityInput, c as IdentityKind, P as PasskeyLoginTokens, d as PasskeySignalSupport, R as ResolvedIdentity, e as StoredWallet, f as ejectActiveWallet, g as forgetWallet, h as getActiveHandle, i as getCredentialId, l as listWallets, p as passkeySignalSupport, j as prunePasskey, r as renamePasskey, k as resolveIdentity, s as setActiveHandle, m as subscribeWallet, n as switchWallet, o as syncAcceptedPasskeys } from './signals-DM7IQdq6.js';
3
3
  import { DexterApiBrowserPasskeySigner } from '@dexterai/vault/signers/browser';
4
4
 
5
5
  /**
package/dist/index.js CHANGED
@@ -16,12 +16,13 @@ import {
16
16
  passkeySignalSupport,
17
17
  prunePasskey,
18
18
  renamePasskey,
19
+ resolveIdentity,
19
20
  setActiveHandle,
20
21
  shouldUsePopup,
21
22
  subscribe,
22
23
  switchWallet,
23
24
  syncAcceptedPasskeys
24
- } from "./chunk-YCA2UT4N.js";
25
+ } from "./chunk-6NIGGPVI.js";
25
26
 
26
27
  // src/enroll.ts
27
28
  var DEFAULT_API_BASE = "https://api.dexter.cash";
@@ -175,6 +176,7 @@ export {
175
176
  passkeySignalSupport,
176
177
  prunePasskey,
177
178
  renamePasskey,
179
+ resolveIdentity,
178
180
  setActiveHandle,
179
181
  subscribe as subscribeWallet,
180
182
  switchWallet,
package/dist/react.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { DexterApiBrowserPasskeySigner } from '@dexterai/vault/signers/browser';
2
- import { C as CeremonyPhase, S as SignInResult, P as PasskeyLoginTokens, a as ConnectVault, b as ConnectError, d as StoredWallet, c as PasskeySignalSupport } from './signals-B7GXneoj.js';
2
+ import { C as CeremonyPhase, S as SignInResult, P as PasskeyLoginTokens, a as ConnectVault, b as ConnectError, e as StoredWallet, d as PasskeySignalSupport, R as ResolvedIdentity } from './signals-DM7IQdq6.js';
3
3
  import { ReactElement, ReactNode } from 'react';
4
4
 
5
5
  type ConnectStatus = 'idle' | 'pending' | 'done' | 'error';
@@ -124,4 +124,11 @@ interface UseDexterWallet {
124
124
  }
125
125
  declare function useDexterWallet(): UseDexterWallet;
126
126
 
127
- export { type ConnectStatus, DexterButton, type DexterButtonProps, DexterMark, SignInWithDexter, type SignInWithDexterProps, type UseDexterWallet, type UseSignInWithDexter, type UseSignInWithDexterConfig, useDexterWallet, useSignInWithDexter };
127
+ interface UseIdentityConfig {
128
+ /** The account session token (e.g. a Supabase access_token), or null when the
129
+ * user has no account session. The SDK is auth-agnostic — pass your own. */
130
+ accountToken: string | null;
131
+ }
132
+ declare function useIdentity({ accountToken }: UseIdentityConfig): ResolvedIdentity;
133
+
134
+ export { type ConnectStatus, DexterButton, type DexterButtonProps, DexterMark, SignInWithDexter, type SignInWithDexterProps, type UseDexterWallet, type UseIdentityConfig, type UseSignInWithDexter, type UseSignInWithDexterConfig, useDexterWallet, useIdentity, useSignInWithDexter };
package/dist/react.js CHANGED
@@ -10,10 +10,11 @@ import {
10
10
  passkeySignalSupport,
11
11
  prunePasskey,
12
12
  renamePasskey,
13
+ resolveIdentity,
13
14
  setActiveHandle,
14
15
  subscribe,
15
16
  switchWallet
16
- } from "./chunk-YCA2UT4N.js";
17
+ } from "./chunk-6NIGGPVI.js";
17
18
 
18
19
  // src/useSignInWithDexter.ts
19
20
  import { useCallback, useEffect, useMemo, useState } from "react";
@@ -321,10 +322,24 @@ function useDexterWallet() {
321
322
  rename
322
323
  };
323
324
  }
325
+
326
+ // src/useIdentity.ts
327
+ import { useMemo as useMemo2 } from "react";
328
+ function useIdentity({ accountToken }) {
329
+ const { activeHandle } = useDexterWallet();
330
+ return useMemo2(
331
+ () => resolveIdentity({
332
+ accountToken: accountToken ?? null,
333
+ userHandle: activeHandle ?? null
334
+ }),
335
+ [accountToken, activeHandle]
336
+ );
337
+ }
324
338
  export {
325
339
  DexterButton,
326
340
  DexterMark,
327
341
  SignInWithDexter,
328
342
  useDexterWallet,
343
+ useIdentity,
329
344
  useSignInWithDexter
330
345
  };
@@ -60,6 +60,29 @@ declare class ConnectError extends Error {
60
60
  constructor(code: string, message?: string);
61
61
  }
62
62
 
63
+ type IdentityKind = 'passkey-vault' | 'account' | 'none';
64
+ interface IdentityInput {
65
+ /** An account session token (e.g. Supabase access_token) when present, else null. */
66
+ accountToken: string | null;
67
+ /** The passkey-vault user handle (the connect wallet store), else null. */
68
+ userHandle: string | null;
69
+ }
70
+ interface ResolvedIdentity {
71
+ /** The primary identity axis, passkey-vault-first. */
72
+ kind: IdentityKind;
73
+ /** Passkey-vault identity (FIRST-CLASS): the wallet handle, or null. */
74
+ userHandle: string | null;
75
+ /** Account identity (secondary/legacy axis): bearer for account-scoped fetches, or null. */
76
+ accountToken: string | null;
77
+ /** A passkey vault is present on this device. */
78
+ hasPasskeyVault: boolean;
79
+ /** An account session is present. */
80
+ hasAccount: boolean;
81
+ /** Any identity at all — drives "show the wallet" vs "Sign in with Dexter". */
82
+ hasWallet: boolean;
83
+ }
84
+ declare function resolveIdentity(input: IdentityInput): ResolvedIdentity;
85
+
63
86
  /** A wallet this browser knows about. `handle` is the identity; the rest is UX. */
64
87
  interface StoredWallet {
65
88
  /** base64url 16-byte user handle — the vault identity. */
@@ -157,4 +180,4 @@ declare function syncAcceptedPasskeys(args: {
157
180
  rpId?: string;
158
181
  }): Promise<boolean>;
159
182
 
160
- export { ACTIVE_WALLET_STORAGE_KEY as A, type CeremonyPhase as C, type DexterConnectConfig as D, type PasskeyLoginTokens as P, type SignInResult as S, type ConnectVault as a, ConnectError as b, type PasskeySignalSupport as c, type StoredWallet as d, ejectActiveWallet as e, forgetWallet as f, getActiveHandle as g, getCredentialId as h, prunePasskey as i, subscribe as j, switchWallet as k, listWallets as l, syncAcceptedPasskeys as m, passkeySignalSupport as p, renamePasskey as r, setActiveHandle as s };
183
+ export { ACTIVE_WALLET_STORAGE_KEY as A, type CeremonyPhase as C, type DexterConnectConfig as D, type IdentityInput as I, type PasskeyLoginTokens as P, type ResolvedIdentity as R, type SignInResult as S, type ConnectVault as a, ConnectError as b, type IdentityKind as c, type PasskeySignalSupport as d, type StoredWallet as e, ejectActiveWallet as f, forgetWallet as g, getActiveHandle as h, getCredentialId as i, prunePasskey as j, resolveIdentity as k, listWallets as l, subscribe as m, switchWallet as n, syncAcceptedPasskeys as o, passkeySignalSupport as p, renamePasskey as r, setActiveHandle as s };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dexterai/connect",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "description": "Sign in with Dexter — passkey connector. Composes @dexterai/vault.",
5
5
  "type": "module",
6
6
  "exports": {