@dexterai/connect 0.22.1 → 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-
|
|
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-
|
|
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
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-
|
|
3
|
-
export { h as RecoverVault } from './signals-
|
|
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-
|
|
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
|
|
|
@@ -561,7 +564,7 @@ function AllowanceChips(props) {
|
|
|
561
564
|
// src/CreateWalletPanel.tsx
|
|
562
565
|
import { useEffect as useEffect7, useState as useState5 } from "react";
|
|
563
566
|
import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
564
|
-
var FINE_PRINT = "
|
|
567
|
+
var FINE_PRINT = "Agents can never spend past it, and you can revoke anytime.";
|
|
565
568
|
function CreateWalletPanel(props) {
|
|
566
569
|
const { onCreated, onError, apiBase, transport, showName = true, className } = props;
|
|
567
570
|
useEffect7(ensureConsentStyles, []);
|
|
@@ -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. */
|