@dexterai/connect 0.22.2 → 0.23.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.
@@ -350,7 +350,7 @@ async function passkeyLogin(config = {}, onPhase) {
350
350
  apiBase: config.apiBase
351
351
  });
352
352
  if (result2.vault) {
353
- setActiveHandle(result2.vault.userHandle, void 0, result2.vault.credentialId);
353
+ setActiveHandle(result2.vault.userHandle, result2.vault.walletLabel ?? void 0, result2.vault.credentialId);
354
354
  }
355
355
  return result2;
356
356
  }
@@ -370,7 +370,7 @@ async function passkeyLogin(config = {}, onPhase) {
370
370
  onPhase?.("verifying");
371
371
  const result = await submitLogin(apiBase, response);
372
372
  if (result.vault) {
373
- setActiveHandle(result.vault.userHandle, void 0, result.vault.credentialId);
373
+ setActiveHandle(result.vault.userHandle, result.vault.walletLabel ?? void 0, result.vault.credentialId);
374
374
  }
375
375
  return result;
376
376
  }
@@ -384,7 +384,7 @@ async function continueWithDexter(config = {}, onPhase) {
384
384
  if (result2.kind === "create") {
385
385
  setActiveHandle(result2.handle, config.name, result2.credentialId);
386
386
  } else if (result2.vault) {
387
- setActiveHandle(result2.vault.userHandle, void 0, result2.vault.credentialId);
387
+ setActiveHandle(result2.vault.userHandle, result2.vault.walletLabel ?? void 0, result2.vault.credentialId);
388
388
  }
389
389
  return result2;
390
390
  }
@@ -565,11 +565,12 @@ function presentOrNull(value) {
565
565
  function resolveIdentity(input) {
566
566
  const userHandle = presentOrNull(input.userHandle);
567
567
  const accountToken = presentOrNull(input.accountToken);
568
+ const walletLabel = userHandle ? presentOrNull(input.walletLabel ?? null) : null;
568
569
  const hasPasskeyVault = userHandle !== null;
569
570
  const hasAccount = accountToken !== null;
570
571
  const hasWallet = hasPasskeyVault || hasAccount;
571
572
  const kind = hasPasskeyVault ? "passkey-vault" : hasAccount ? "account" : "none";
572
- return { kind, userHandle, accountToken, hasPasskeyVault, hasAccount, hasWallet };
573
+ return { kind, userHandle, walletLabel, accountToken, hasPasskeyVault, hasAccount, hasWallet };
573
574
  }
574
575
 
575
576
  // src/recover.ts
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { S as SignInResult, C as CreateWalletResult, a as CreateWalletConfig, b as CeremonyPhase, D as DexterConnectConfig, c as ConnectVault, R as RecoverWalletConfig, d as RecoverOutcome, I as IdentityKind } from './signals-pjh3z6N8.js';
2
- export { A as ACTIVE_WALLET_STORAGE_KEY, e as ConnectError, f as IdentityInput, P as PasskeyLoginTokens, g as PasskeySignalSupport, h as RecoverVault, i as ResolvedIdentity, j as SESSION_TTL_30D, k as SpendPolicy, l as StoredWallet, m as authoredPolicy, n as createWallet, o as ejectActiveWallet, p as forgetWallet, q as getActiveHandle, r as getCredentialId, s as listWallets, t as passkeySignalSupport, u as prunePasskey, v as renamePasskey, w as resolveIdentity, x as setActiveHandle, y as subscribeWallet, z as switchWallet, B as syncAcceptedPasskeys, E as usdToAtomic } from './signals-pjh3z6N8.js';
1
+ import { S as SignInResult, C as CreateWalletResult, a as CreateWalletConfig, b as CeremonyPhase, D as DexterConnectConfig, c as ConnectVault, R as RecoverWalletConfig, d as RecoverOutcome, I as IdentityKind } from './signals-CQ5AEzXY.js';
2
+ export { A as ACTIVE_WALLET_STORAGE_KEY, e as ConnectError, f as IdentityInput, P as PasskeyLoginTokens, g as PasskeySignalSupport, h as RecoverVault, i as ResolvedIdentity, j as SESSION_TTL_30D, k as SpendPolicy, l as StoredWallet, m as authoredPolicy, n as createWallet, o as ejectActiveWallet, p as forgetWallet, q as getActiveHandle, r as getCredentialId, s as listWallets, t as passkeySignalSupport, u as prunePasskey, v as renamePasskey, w as resolveIdentity, x as setActiveHandle, y as subscribeWallet, z as switchWallet, B as syncAcceptedPasskeys, E as usdToAtomic } from './signals-CQ5AEzXY.js';
3
3
  import { DexterApiBrowserPasskeySigner } from '@dexterai/vault/signers/browser';
4
4
 
5
5
  /**
package/dist/index.js CHANGED
@@ -26,7 +26,7 @@ import {
26
26
  switchWallet,
27
27
  syncAcceptedPasskeys,
28
28
  usdToAtomic
29
- } from "./chunk-MOC5AVY7.js";
29
+ } from "./chunk-XTYNX5LX.js";
30
30
 
31
31
  // src/agentSpend.ts
32
32
  import { PublicKey } from "@solana/web3.js";
package/dist/react.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { DexterApiBrowserPasskeySigner } from '@dexterai/vault/signers/browser';
2
- import { b as CeremonyPhase, S as SignInResult, d as RecoverOutcome, P as PasskeyLoginTokens, c as ConnectVault, e as ConnectError, l as StoredWallet, g as PasskeySignalSupport, i as ResolvedIdentity, C as CreateWalletResult } from './signals-pjh3z6N8.js';
3
- export { h as RecoverVault } from './signals-pjh3z6N8.js';
2
+ import { b as CeremonyPhase, S as SignInResult, d as RecoverOutcome, P as PasskeyLoginTokens, c as ConnectVault, e as ConnectError, l as StoredWallet, g as PasskeySignalSupport, i as ResolvedIdentity, C as CreateWalletResult } from './signals-CQ5AEzXY.js';
3
+ export { h as RecoverVault } from './signals-CQ5AEzXY.js';
4
4
  import { ReactElement, ButtonHTMLAttributes, ReactNode } from 'react';
5
5
 
6
6
  type ConnectStatus = 'idle' | 'pending' | 'done' | 'error';
@@ -127,6 +127,10 @@ declare function DexterButton(props: DexterButtonProps): ReactElement;
127
127
  interface UseDexterWallet {
128
128
  /** Active wallet handle, or null if this browser has no active wallet. */
129
129
  activeHandle: string | null;
130
+ /** The active wallet's roster entry (handle + label + credentialId), or
131
+ * null. `activeWallet.label` is the wallet's human name — identity is
132
+ * first-class, so display surfaces read it here instead of re-fetching. */
133
+ activeWallet: StoredWallet | null;
130
134
  /** Known wallets on this browser, most-recently-used first. */
131
135
  wallets: StoredWallet[];
132
136
  /** What the WebAuthn Signal API supports in THIS browser (rename / prune). */
package/dist/react.js CHANGED
@@ -17,7 +17,7 @@ import {
17
17
  setActiveHandle,
18
18
  subscribe,
19
19
  switchWallet
20
- } from "./chunk-MOC5AVY7.js";
20
+ } from "./chunk-XTYNX5LX.js";
21
21
  import {
22
22
  DexterButton,
23
23
  DexterMark,
@@ -205,7 +205,7 @@ function SignInWithDexter(props) {
205
205
  if (!showConnectedChip) return null;
206
206
  return /* @__PURE__ */ jsxs("span", { className: cx("dx-chip", className), children: [
207
207
  /* @__PURE__ */ jsx("span", { className: "dx-chip__dot", "aria-hidden": true }),
208
- /* @__PURE__ */ jsx("span", { children: c.vaultAddress ? shortAddress(c.vaultAddress) : "Connected" }),
208
+ /* @__PURE__ */ jsx("span", { children: c.vault?.walletLabel ?? (c.vaultAddress ? shortAddress(c.vaultAddress) : "Connected") }),
209
209
  c.usdcBalance !== null && /* @__PURE__ */ jsxs("span", { className: "dx-chip__bal", children: [
210
210
  formatUsd(c.usdcBalance),
211
211
  " available"
@@ -258,6 +258,7 @@ function useDexterWallet() {
258
258
  }, []);
259
259
  return {
260
260
  activeHandle,
261
+ activeWallet: activeHandle ? wallets.find((w) => w.handle === activeHandle) ?? null : null,
261
262
  wallets,
262
263
  support,
263
264
  eject,
@@ -411,13 +412,15 @@ function DexterWalletMenu(props) {
411
412
  // src/useIdentity.ts
412
413
  import { useMemo as useMemo2 } from "react";
413
414
  function useIdentity({ accountToken }) {
414
- const { activeHandle } = useDexterWallet();
415
+ const { activeHandle, activeWallet } = useDexterWallet();
416
+ const walletLabel = activeWallet?.label ?? null;
415
417
  return useMemo2(
416
418
  () => resolveIdentity({
417
419
  accountToken: accountToken ?? null,
418
- userHandle: activeHandle ?? null
420
+ userHandle: activeHandle ?? null,
421
+ walletLabel
419
422
  }),
420
- [accountToken, activeHandle]
423
+ [accountToken, activeHandle, walletLabel]
421
424
  );
422
425
  }
423
426
 
@@ -25,6 +25,11 @@ interface ConnectVault {
25
25
  publicKey: string;
26
26
  userHandle: string;
27
27
  credentialId: string;
28
+ /** The wallet's cross-device display name (user-authored via rename), or
29
+ * null when never named. Identity is first-class: every sign-in carries
30
+ * the human name so no consumer ever falls back to a synthetic email.
31
+ * Optional for wire-compat with servers/popup pages predating 0.23. */
32
+ walletLabel?: string | null;
28
33
  }
29
34
  /** Result of a completed "Sign in with Dexter" ceremony. */
30
35
  interface SignInResult {
@@ -156,12 +161,19 @@ interface IdentityInput {
156
161
  accountToken: string | null;
157
162
  /** The passkey-vault user handle (the connect wallet store), else null. */
158
163
  userHandle: string | null;
164
+ /** The active wallet's display name from the connect wallet store (persisted
165
+ * at sign-in/recover/rename), else null. Browser-only input like the handle. */
166
+ walletLabel?: string | null;
159
167
  }
160
168
  interface ResolvedIdentity {
161
169
  /** The primary identity axis, passkey-vault-first. */
162
170
  kind: IdentityKind;
163
171
  /** Passkey-vault identity (FIRST-CLASS): the wallet handle, or null. */
164
172
  userHandle: string | null;
173
+ /** The wallet's human display name, or null when the wallet was never named
174
+ * (or no wallet is active). Display surfaces prefer this over any synthetic
175
+ * account identifier — a user should never be shown a generated email. */
176
+ walletLabel: string | null;
165
177
  /** Account identity (secondary/legacy axis): bearer for account-scoped fetches, or null. */
166
178
  accountToken: string | null;
167
179
  /** A passkey vault is present on this device. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dexterai/connect",
3
- "version": "0.22.2",
3
+ "version": "0.23.0",
4
4
  "description": "Sign in with Dexter — passkey connector. Composes @dexterai/vault.",
5
5
  "type": "module",
6
6
  "exports": {