@dexterai/vault 0.1.0 → 0.1.2

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.
package/README.md CHANGED
@@ -1,11 +1,35 @@
1
- # @dexterai/vault
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/Dexter-DAO/dexter-vault-sdk/main/assets/dexter-wordmark.svg" alt="Dexter" width="360">
3
+ </p>
2
4
 
3
- The canonical off-chain mirror of the dexter-vault Solana Anchor program.
5
+ <h1 align="center">@dexterai/vault</h1>
4
6
 
5
- This package owns every TypeScript file in the Dexter codebase that
6
- produces bytes the on-chain program will verify. If you are about to
7
- hand-roll an instruction builder, a precompile message, a Swig role list,
8
- or a vault account decoder, stop and import from here instead.
7
+ <p align="center">
8
+ <strong>The off-chain mirror of the dexter-vault Anchor program. Byte-precise instruction builders, message encoders, account decoders, and signer abstractions for the unruggable passkey vault.</strong>
9
+ </p>
10
+
11
+ <p align="center">
12
+ <a href="https://www.npmjs.com/package/@dexterai/vault"><img src="https://img.shields.io/npm/v/@dexterai/vault.svg" alt="npm"></a>
13
+ <a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%3E=18-brightgreen.svg" alt="Node"></a>
14
+ <a href="https://github.com/Dexter-DAO/dexter-vault-sdk"><img src="https://img.shields.io/badge/program-Hg3wRayd…2fhc-blueviolet" alt="Vault program"></a>
15
+ <a href="https://solscan.io/tx/4VLDNUDtY8Q3ucwFyuCEz7BsBFqYzUo2ANQv4KU2TDnrUEcn9tS7KmyqHGkZjM6AqEf9uZuS1W5CTQ1RKL47QU89"><img src="https://img.shields.io/badge/first_settle-on_mainnet-success" alt="First mainnet settle"></a>
16
+ </p>
17
+
18
+ <p align="center">
19
+ <a href="https://dexter.cash"><strong>See it on dexter.cash →</strong></a>
20
+ </p>
21
+
22
+ ---
23
+
24
+ ## What is `@dexterai/vault`?
25
+
26
+ The `dexter-vault` Solana program is a non-custodial passkey-rooted vault: WebAuthn signs every spend, a programmatic Swig role makes the unruggable streaming channel possible, and the entire spend path goes through the vault program — no master key, no escrow, no trust.
27
+
28
+ This package is the TypeScript that talks to it. Every byte the on-chain program checks — instruction discriminators, the 180-byte session-registration message, the 128-byte revocation message, the 44-byte voucher payload, the vault account layout — lives here, in exactly one file each. Three repos used to hand-roll these primitives and one of them missed a role; that bug is now structurally impossible.
29
+
30
+ If you are about to hand-roll a vault instruction builder, a precompile message, a Swig role list, or a vault account decoder, **stop and import from here instead**.
31
+
32
+ ---
9
33
 
10
34
  ## Install
11
35
 
@@ -13,49 +37,216 @@ or a vault account decoder, stop and import from here instead.
13
37
  npm install @dexterai/vault
14
38
  ```
15
39
 
16
- ## Why this package exists
40
+ Compatible with `dexter-vault` program version 2 (12 Anchor discriminators including `prove_passkey`, `settle_tab_voucher`, and the session-key register/revoke pair).
41
+
42
+ ---
43
+
44
+ ## Quick start
45
+
46
+ ### Build the canonical 4-role Swig (server-side enrollment)
47
+
48
+ ```typescript
49
+ import { buildSwigCreationBundle } from '@dexterai/vault/instructions';
50
+ import { Transaction } from '@solana/web3.js';
51
+
52
+ // Fee-payer-signed; this bundle creates the Swig and registers all four roles
53
+ // in one transaction (CreateV1 with role 0 bootstrap + role 1/2/3 chained).
54
+ const bundle = await buildSwigCreationBundle({
55
+ feePayer: feePayerKeypair.publicKey.toBase58(),
56
+ dexterMasterPubkey: sessionMaster.publicKey.toBase58(),
57
+ identitySeed: userHandleBytes, // per-user, stable, ≤32 bytes
58
+ hmacKey: serverSecret.subarray(0, 32), // 32-byte HMAC key
59
+ });
60
+
61
+ // `bundle.instructions` is the atomic create+grant×3 sequence.
62
+ // `bundle.swigAddress` is the deterministic Swig PDA for this user.
63
+ const tx = new Transaction().add(...bundle.instructions);
64
+ ```
65
+
66
+ The 4-role design — role 0 bootstrap, role 1 `ProgramExec(finalize_withdrawal)`, role 2 session master, role 3 `ProgramExec(settle_tab_voucher)` — lives in exactly one function. Tests in this repo lock the role list against the on-chain Anchor discriminators.
67
+
68
+ ### Settle a Tab voucher on chain (facilitator-side)
69
+
70
+ ```typescript
71
+ import { buildSettleTabVoucherInstruction } from '@dexterai/vault/instructions';
72
+ import { buildEd25519VerifyInstruction } from '@dexterai/vault/precompile';
73
+ import { buildVoucherMessage } from '@dexterai/vault/messages';
74
+ import { readVaultFull } from '@dexterai/vault/reader';
75
+
76
+ const vaultState = await readVaultFull(connection, vaultPda);
77
+ const voucherMessage = buildVoucherMessage(channelId, cumulativeAmount, sequenceNumber);
78
+
79
+ const tx = new Transaction().add(
80
+ // Ed25519 precompile verifies the session key signed the voucher bytes.
81
+ buildEd25519VerifyInstruction(sessionPubkey, sessionSignature, voucherMessage),
82
+ // settle_tab_voucher consumes the verified voucher; Swig role 3 drives the SPL transfer.
83
+ buildSettleTabVoucherInstruction({
84
+ vaultPda,
85
+ swigAddress: new PublicKey(vaultState.swigAddress!),
86
+ dexterAuthority: sessionMaster.publicKey,
87
+ channelId,
88
+ cumulativeAmount,
89
+ sequenceNumber,
90
+ }),
91
+ );
92
+ ```
93
+
94
+ The first mainnet settle: [`4VLDNUDt…RKL47QU89`](https://solscan.io/tx/4VLDNUDtY8Q3ucwFyuCEz7BsBFqYzUo2ANQv4KU2TDnrUEcn9tS7KmyqHGkZjM6AqEf9uZuS1W5CTQ1RKL47QU89).
95
+
96
+ ### Read live vault state
97
+
98
+ ```typescript
99
+ import { readVaultOnchain, readVaultFull } from '@dexterai/vault/reader';
100
+
101
+ // Slim shape: { exists, pendingVoucherCount, pendingWithdrawal }.
102
+ const slim = await readVaultOnchain(connection, vaultPda);
103
+
104
+ // Full shape adds: { version, swigAddress, dexterAuthority, activeSession }.
105
+ const full = await readVaultFull(connection, vaultPda);
106
+ if (full.activeSession) {
107
+ console.log(`tab open: ${full.activeSession.spent} / ${full.activeSession.maxAmount}`);
108
+ }
109
+ ```
110
+
111
+ ### Derive the counterfactual Swig address
112
+
113
+ ```typescript
114
+ import { deriveCounterfactualAddresses } from '@dexterai/vault/counterfactual';
115
+
116
+ // Returns both the state PDA (program-owned) and the wallet-address PDA
117
+ // (system-owned, the asset holder). Useful for showing users a deposit
118
+ // address before the Swig is on chain.
119
+ const { swigStateAddress, swigWalletAddress } = await deriveCounterfactualAddresses({
120
+ identitySeed: userHandleBytes,
121
+ hmacKey: serverSecret.subarray(0, 32),
122
+ });
123
+ ```
17
124
 
18
- Three places used to hand-roll the same protocol. Drift was the default.
19
- This package is the structural fix: there is exactly one TypeScript file
20
- that knows how to build each instruction, encode each message, decode
21
- the vault account, and provision the canonical 4-role Swig.
125
+ ### Sign with an Ed25519 signer (server)
22
126
 
23
- ## Version coupling
127
+ ```typescript
128
+ import { NodeEd25519Signer } from '@dexterai/vault/signers/node';
24
129
 
25
- `@dexterai/vault@0.1.x` is compatible with dexter-vault program version 2
26
- (10 vault instructions plus 2 session-key instructions
27
- (`register_session_key`/`revoke_session_key`) — 12 total Anchor
28
- discriminators; role 3 ProgramExec for `settle_tab_voucher`). Future
29
- program versions will bump the SDK major or have their delta documented
30
- in CHANGELOG.
130
+ const signer = new NodeEd25519Signer(secretKey); // 32-byte seed OR 64-byte secret key
131
+ const sig = await signer.sign(messageBytes); // 64-byte detached signature
132
+ ```
133
+
134
+ ---
31
135
 
32
136
  ## Subpath exports
33
137
 
34
- - `@dexterai/vault` types + counterfactual derivation
35
- - `@dexterai/vault/types` — `VaultState`, `ActiveSession`, `PendingWithdrawal`, `SessionKey`, `SessionScope`, `SignedVoucher`, `VoucherPayload`
36
- - `@dexterai/vault/constants` program IDs, USDC mint, all 12 discriminators
37
- - `@dexterai/vault/instructions` — every builder; the canonical `buildSwigCreationBundle`
38
- - `@dexterai/vault/messages` `sessionRegisterMessage` (180 bytes), `sessionRevokeMessage` (128 bytes), `voucherPayloadMessage` / `buildVoucherMessage` (44 bytes), `buildSetSwigOperationMessage`
39
- - `@dexterai/vault/reader` `readVaultOnchain` (slim), `readVaultFull` (with active session)
40
- - `@dexterai/vault/precompile` `buildSecp256r1VerifyInstruction`, `buildPrecompileMessage`, `buildEd25519VerifyInstruction`
41
- - `@dexterai/vault/signers` `Ed25519Signer`, `PasskeySigner` interfaces
42
- - `@dexterai/vault/signers/node` `NodeEd25519Signer` (tweetnacl-backed)
138
+ Each subpath is a tree-shakeable entry point. Pull only what you need.
139
+
140
+ | Subpath | Contents |
141
+ |---|---|
142
+ | `@dexterai/vault` | Re-exports `types` + `counterfactual` for convenience |
143
+ | `@dexterai/vault/types` | `VaultState`, `VaultStateFull`, `ActiveSession`, `PendingWithdrawal`, `SessionKey`, `SessionScope`, `SignedVoucher`, `VoucherPayload`, `AtomicAmount`, `HumanAmount`, `TabNetworkId` |
144
+ | `@dexterai/vault/constants` | `DEXTER_VAULT_PROGRAM_ID`, `SWIG_PROGRAM_ID`, `USDC_MAINNET`/`USDC_DEVNET`, all 12 `DISCRIMINATORS`, `OTS_SESSION_REGISTER_V1_DOMAIN`, `OTS_SESSION_REVOKE_V1_DOMAIN` |
145
+ | `@dexterai/vault/instructions` | Every builder: `buildInitializeVaultInstruction`, `buildSetSwigInstruction`, `buildRegisterSessionKeyInstruction`, `buildRevokeSessionKeyInstruction`, `buildSettleVoucherInstruction`, `buildSettleTabVoucherInstruction`, `buildRequestWithdrawalInstruction`, `buildFinalizeWithdrawalInstruction`, `buildForceReleaseInstruction`, `buildRotatePasskeyInstruction`, `buildRotateDexterAuthorityInstruction`, `buildProvePasskeyInstruction`, and the canonical `buildSwigCreationBundle` + `expectedSwigAddressFor` + `verifySwigIsOurs` |
146
+ | `@dexterai/vault/messages` | `sessionRegisterMessage` (180 bytes), `sessionRevokeMessage` (128 bytes), `voucherPayloadMessage` / `buildVoucherMessage` (44 bytes), `buildSetSwigOperationMessage` |
147
+ | `@dexterai/vault/reader` | `readVaultOnchain` (slim), `readVaultFull` (with active session) |
148
+ | `@dexterai/vault/precompile` | `buildSecp256r1VerifyInstruction`, `buildPrecompileMessage`, `buildEd25519VerifyInstruction` |
149
+ | `@dexterai/vault/counterfactual` | `deriveCounterfactualAddresses` |
150
+ | `@dexterai/vault/signers` | `Ed25519Signer`, `PasskeySigner` interfaces |
151
+ | `@dexterai/vault/signers/node` | `NodeEd25519Signer` (tweetnacl-backed) |
152
+
153
+ ---
43
154
 
44
- ## Known gaps (v0.1)
155
+ ## Why this package exists
156
+
157
+ Three places used to hand-roll the same protocol: `dexter-api/src/vault/`, `dexter-facilitator/src/vault/`, and `dexter-vault/tests/`. One of them added role 3 (`ProgramExec` for `settle_tab_voucher`); two didn't. The end-to-end Tab settle smoke kept failing with `Role not found for ID: 3` and it ate hours of debugging on 2026-06-02 before anyone noticed the drift.
45
158
 
46
- - **No `BrowserPasskeySigner`.** v0.1 ships the `PasskeySigner` interface
47
- but no implementation. dexter-fe continues to hand-roll WebAuthn until
48
- v0.2 (tracked as task #235). Lift target: `dexter-fe/app/lib/passkey.ts`
49
- + `dexter-fe/app/lib/passkey-anon.ts`. AAGUID/UA capture must survive
50
- the lift.
159
+ This package is the structural fix. The canonical 4-role Swig provisioner, every instruction builder, every byte-precise message encoder, the vault account decoder, the precompile helpers — they live in exactly one file each. Consumers (`dexter-api`, `dexter-facilitator`, `dexter-vault` tests, `@dexterai/x402/tab`) import from here. The drift bug class is gone.
160
+
161
+ ---
51
162
 
52
163
  ## Byte-parity guarantee
53
164
 
54
- `tests/byte-parity.test.ts` (added in v0.1 build, see Task 3 of the extract plan) snapshots:
55
- - All 12 instruction discriminators (10 vault + 2 session-key)
56
- - All 3 message layouts (180-byte registration, 128-byte revocation, 44-byte voucher)
57
- - The canonical vault account decode (v2 layout)
58
- - The counterfactual Swig derivation for a known seed
165
+ `tests/byte-parity.test.ts`, `tests/precompile.test.ts`, `tests/swigBundle.test.ts`, `tests/counterfactual.test.ts`, and `tests/reader.test.ts` together snapshot:
166
+
167
+ - All **12 instruction discriminators** (10 vault + 2 session-key) as exact byte arrays.
168
+ - All **3 message layouts** 180-byte session registration, 128-byte revocation, 44-byte voucher payload — byte-by-byte.
169
+ - Both **precompile builders** secp256r1 (SIMD-0075) and Ed25519 — including the 14-byte offsets table.
170
+ - The **vault account decoder** for every Anchor v2 layout combination (with/without pending withdrawal, with/without active session).
171
+ - The **`buildSwigCreationBundle` structural lock**: ≥4 instructions, idempotent for the same `(identitySeed, hmacKey)`, distinct outputs for different inputs, the `settle_tab_voucher` Swig exec marker bytes match the on-chain discriminator.
172
+ - The **counterfactual derivation** for a known seed.
173
+
174
+ If a future change drifts any of these by a single byte, the snapshot tests fail. The on-chain `dexter-vault` program is the ultimate referee, but these tests are the gate that catches the drift before it ships.
175
+
176
+ ```bash
177
+ npm test
178
+ ```
179
+
180
+ ---
181
+
182
+ ## Architecture
183
+
184
+ ```
185
+ ┌─────────────────────────────────┐
186
+ │ dexter-vault (Anchor program) │ ← source of truth
187
+ │ 12 discriminators, 3 layouts │
188
+ └────────────────┬────────────────┘
189
+ │ defines bytes
190
+
191
+ ┌─────────────────────────────────┐
192
+ │ @dexterai/vault (this package) │ ← off-chain mirror
193
+ │ byte-parity locked by tests │
194
+ └────────┬────┬──────────┬────────┘
195
+ │ │ │
196
+ ┌─────────────────┘ │ └──────────────────┐
197
+ ▼ ▼ ▼
198
+ ┌──────────────┐ ┌──────────────────┐ ┌───────────────────┐
199
+ │ dexter-api │ │ dexter-facilitator│ │ dexter-vault tests│
200
+ │ (DB + glue) │ │ (Tab settle path) │ │ (anchor smokes) │
201
+ └──────────────┘ └──────────────────┘ └───────────────────┘
202
+
203
+ ▲ ▲
204
+ │ │
205
+ └────────── @dexterai/x402/tab imports message ───────┘
206
+ helpers from @dexterai/vault; keeps
207
+ HTTP/SSE wrapping
208
+ ```
209
+
210
+ ---
211
+
212
+ ## Signer abstraction
213
+
214
+ The package defines two interfaces in `@dexterai/vault/signers`:
215
+
216
+ ```typescript
217
+ interface Ed25519Signer {
218
+ readonly publicKey: Uint8Array; // 32 bytes
219
+ sign(message: Uint8Array): Promise<Uint8Array>; // 64-byte signature
220
+ }
221
+
222
+ interface PasskeySigner {
223
+ readonly credentialId: Uint8Array;
224
+ sign(challenge: Uint8Array): Promise<{
225
+ signature: Uint8Array;
226
+ clientDataJSON: Uint8Array;
227
+ authenticatorData: Uint8Array;
228
+ }>;
229
+ }
230
+ ```
231
+
232
+ `NodeEd25519Signer` ships at `@dexterai/vault/signers/node`. `BrowserPasskeySigner` is the v0.2 work — lifted from `dexter-fe`'s existing WebAuthn ceremony, it unlocks browser-buyer flows on dexter.cash and anywhere else a user pays through their passkey vault.
233
+
234
+ ---
235
+
236
+ ## Versioning
237
+
238
+ `@dexterai/vault@0.1.x` is compatible with `dexter-vault` program version 2 (12 Anchor instructions; role 3 `ProgramExec` for `settle_tab_voucher` registered on every new Swig).
239
+
240
+ Future program versions will bump the SDK major or document the delta in the CHANGELOG. The byte-parity tests are the structural lock — any layout change requires an explicit snapshot update.
241
+
242
+ ---
243
+
244
+ ## License
245
+
246
+ MIT. © 2026 Dexter.
247
+
248
+ ---
59
249
 
60
- Any change to any of these requires an explicit snapshot update —
61
- flipping a byte by accident fails CI.
250
+ <p align="center">
251
+ Part of the <a href="https://github.com/Dexter-DAO">Dexter-DAO</a> open source family.
252
+ </p>
@@ -0,0 +1,30 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="720" height="200" viewBox="0 0 720 200" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Dexter wordmark">
3
+ <defs>
4
+ <linearGradient id="dexterGradient" x1="0%" y1="0%" x2="100%" y2="100%">
5
+ <stop offset="0%" stop-color="#d13f00" />
6
+ <stop offset="42%" stop-color="#ff6b00" />
7
+ <stop offset="100%" stop-color="#ffb42c" />
8
+ </linearGradient>
9
+ <filter id="dexterShadow" x="-20%" y="-20%" width="140%" height="160%" color-interpolation-filters="sRGB">
10
+ <feDropShadow dx="0" dy="14" stdDeviation="18" flood-color="#0c0503" flood-opacity="0.28" />
11
+ </filter>
12
+ <style><![CDATA[
13
+ @font-face {
14
+ font-family: 'DexterOrbitron';
15
+ font-style: normal;
16
+ font-weight: 800;
17
+ src: url(data:font/truetype;base64,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) format('truetype');
18
+ }
19
+ text {
20
+ font-family: 'DexterOrbitron', 'Orbitron', sans-serif;
21
+ font-weight: 800;
22
+ letter-spacing: 0.01em;
23
+ text-transform: uppercase;
24
+ }
25
+ ]]></style>
26
+ </defs>
27
+ <g filter="url(#dexterShadow)">
28
+ <text x="50%" y="62%" text-anchor="middle" dominant-baseline="middle" font-size="118" fill="url(#dexterGradient)">DEXTER</text>
29
+ </g>
30
+ </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dexterai/vault",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Canonical off-chain mirror of the dexter-vault Solana Anchor program — Solana instruction builders, byte-precise message encoders, account decoders, secp256r1/Ed25519 precompile helpers, counterfactual Swig derivation, and signer interfaces. The single source of truth for any TypeScript code that produces bytes the on-chain program will verify.",
5
5
  "author": "Dexter",
6
6
  "license": "MIT",
@@ -17,7 +17,7 @@
17
17
  "./signers": { "types": "./dist/signers/types.d.ts", "import": "./dist/signers/types.js", "require": "./dist/signers/types.cjs" },
18
18
  "./signers/node": { "types": "./dist/signers/node/index.d.ts", "import": "./dist/signers/node/index.js", "require": "./dist/signers/node/index.cjs" }
19
19
  },
20
- "files": ["dist", "README.md", "LICENSE"],
20
+ "files": ["dist", "README.md", "LICENSE", "assets"],
21
21
  "scripts": {
22
22
  "build": "tsup",
23
23
  "dev": "tsup --watch",