@daski/pay 0.3.1 → 0.4.1
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 +18 -11
- package/dist/bin/daski.js +26 -11
- package/dist/bin/daski.js.map +1 -1
- package/dist/chain/reader.d.ts +92 -0
- package/dist/chain/reader.d.ts.map +1 -0
- package/dist/chain/reader.js +130 -0
- package/dist/chain/reader.js.map +1 -0
- package/dist/commands/approval.js +2 -2
- package/dist/commands/approval.js.map +1 -1
- package/dist/commands/buy.d.ts +0 -1
- package/dist/commands/buy.d.ts.map +1 -1
- package/dist/commands/buy.js +15 -22
- package/dist/commands/buy.js.map +1 -1
- package/dist/commands/confirmation.d.ts +322 -4
- package/dist/commands/confirmation.d.ts.map +1 -1
- package/dist/commands/confirmation.js +771 -60
- package/dist/commands/confirmation.js.map +1 -1
- package/dist/commands/doctor.d.ts +20 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +204 -59
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/order.d.ts +37 -6
- package/dist/commands/order.d.ts.map +1 -1
- package/dist/commands/order.js +181 -103
- package/dist/commands/order.js.map +1 -1
- package/dist/commands/signPayment.d.ts.map +1 -1
- package/dist/commands/signPayment.js +8 -3
- package/dist/commands/signPayment.js.map +1 -1
- package/dist/commands/wallet.d.ts +3 -0
- package/dist/commands/wallet.d.ts.map +1 -1
- package/dist/commands/wallet.js +72 -16
- package/dist/commands/wallet.js.map +1 -1
- package/dist/config.d.ts +10 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +41 -1
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +28 -3
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +72 -3
- package/dist/context.js.map +1 -1
- package/dist/gateway/client.d.ts +20 -17
- package/dist/gateway/client.d.ts.map +1 -1
- package/dist/gateway/client.js +62 -43
- package/dist/gateway/client.js.map +1 -1
- package/dist/gateway/lifecycle.d.ts +4 -1
- package/dist/gateway/lifecycle.d.ts.map +1 -1
- package/dist/gateway/lifecycle.js +10 -5
- package/dist/gateway/lifecycle.js.map +1 -1
- package/dist/gateway/metadata.d.ts +66 -0
- package/dist/gateway/metadata.d.ts.map +1 -0
- package/dist/gateway/metadata.js +152 -0
- package/dist/gateway/metadata.js.map +1 -0
- package/dist/gateway/purchase.d.ts +51 -67
- package/dist/gateway/purchase.d.ts.map +1 -1
- package/dist/gateway/purchase.js +153 -125
- package/dist/gateway/purchase.js.map +1 -1
- package/dist/host.d.ts +41 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +112 -0
- package/dist/host.js.map +1 -0
- package/dist/index.d.ts +12 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/signers/circleAgent.d.ts +37 -0
- package/dist/signers/circleAgent.d.ts.map +1 -0
- package/dist/signers/circleAgent.js +244 -0
- package/dist/signers/circleAgent.js.map +1 -0
- package/dist/signers/contract.d.ts +34 -0
- package/dist/signers/contract.d.ts.map +1 -0
- package/dist/signers/contract.js +47 -0
- package/dist/signers/contract.js.map +1 -0
- package/dist/signers/index.d.ts +16 -7
- package/dist/signers/index.d.ts.map +1 -1
- package/dist/signers/index.js +7 -3
- package/dist/signers/index.js.map +1 -1
- package/dist/signers/local.d.ts +5 -1
- package/dist/signers/local.d.ts.map +1 -1
- package/dist/signers/local.js +16 -3
- package/dist/signers/local.js.map +1 -1
- package/dist/signers/selfTest.d.ts +32 -12
- package/dist/signers/selfTest.d.ts.map +1 -1
- package/dist/signers/selfTest.js +85 -12
- package/dist/signers/selfTest.js.map +1 -1
- package/dist/signers/signature.d.ts +10 -0
- package/dist/signers/signature.d.ts.map +1 -0
- package/dist/signers/signature.js +11 -0
- package/dist/signers/signature.js.map +1 -0
- package/dist/store/keystore.d.ts +48 -6
- package/dist/store/keystore.d.ts.map +1 -1
- package/dist/store/keystore.js +414 -110
- package/dist/store/keystore.js.map +1 -1
- package/dist/store/lock.d.ts +59 -0
- package/dist/store/lock.d.ts.map +1 -0
- package/dist/store/lock.js +269 -0
- package/dist/store/lock.js.map +1 -0
- package/dist/store/orders.d.ts +49 -9
- package/dist/store/orders.d.ts.map +1 -1
- package/dist/store/orders.js +173 -37
- package/dist/store/orders.js.map +1 -1
- package/package.json +2 -2
package/dist/commands/wallet.js
CHANGED
|
@@ -1,17 +1,66 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* `daski wallet` — create a local key, or read the active payer.
|
|
3
|
+
*
|
|
4
|
+
* Creation is refused unless every fact lines up: the signer kind is `local`
|
|
5
|
+
* (hosted wallets are created with the vendor's tool), the host is not
|
|
6
|
+
* declared ephemeral, the key backend is one that holds a local key, the
|
|
7
|
+
* platform supports that backend, no key exists yet, and a human approved
|
|
8
|
+
* the step. Existing profile keys are never overwritten.
|
|
9
|
+
*/
|
|
2
10
|
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
|
|
3
11
|
import { getAddress } from "viem";
|
|
4
12
|
import { CliError } from "../cli/errors.js";
|
|
5
13
|
import { confirmPhrase, isInteractive } from "../cli/prompt.js";
|
|
6
|
-
import { loadConfig } from "../config.js";
|
|
14
|
+
import { loadConfig, SIGNER_KINDS } from "../config.js";
|
|
7
15
|
import { readBalances } from "../gateway/balance.js";
|
|
8
|
-
import {
|
|
16
|
+
import { HOSTED_BACKENDS, keyBackendFor, resolveHost, } from "../host.js";
|
|
9
17
|
import { createSigner } from "../signers/index.js";
|
|
18
|
+
import { localKeyStore } from "../signers/local.js";
|
|
19
|
+
import { hasKey, keychainUnsupportedOnLinux, localKeyRefusedOnHost, locateKey, storeKey, } from "../store/keystore.js";
|
|
20
|
+
const DOC = "https://github.com/daski-io/buyer/blob/main/docs/keys.md";
|
|
10
21
|
const CREATE_PHRASE = "create a new key";
|
|
22
|
+
function signerKindOf(options, configured) {
|
|
23
|
+
const kind = (options.signerOverride ?? configured);
|
|
24
|
+
if (!SIGNER_KINDS.includes(kind)) {
|
|
25
|
+
throw new CliError({
|
|
26
|
+
code: "DASKI_SIGNER_UNKNOWN",
|
|
27
|
+
message: `Unknown signer "${kind}".`,
|
|
28
|
+
remediation: `Use one of: ${SIGNER_KINDS.join(", ")}.`,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return kind;
|
|
32
|
+
}
|
|
11
33
|
export async function createWallet(options) {
|
|
12
34
|
const loaded = loadConfig(options.profile);
|
|
13
35
|
const profileName = loaded.profileName;
|
|
14
|
-
|
|
36
|
+
const host = options.host ?? resolveHost();
|
|
37
|
+
const signerKind = signerKindOf(options, loaded.profile.signer);
|
|
38
|
+
if (signerKind !== "local") {
|
|
39
|
+
throw new CliError({
|
|
40
|
+
code: "DASKI_WALLET_CREATE_LOCAL_ONLY",
|
|
41
|
+
message: `daski wallet create generates local keys only; the "${signerKind}" signer holds its ` +
|
|
42
|
+
"wallet with the vendor.",
|
|
43
|
+
remediation: `Set up the hosted wallet with the vendor's tool, then run daski doctor --json --signer ` +
|
|
44
|
+
`${signerKind}. To keep a local key instead, pass --signer local. See ${DOC}`,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
if (host.hostClass === "ephemeral") {
|
|
48
|
+
throw new CliError({
|
|
49
|
+
code: "DASKI_LOCAL_KEY_REFUSED_ON_HOST",
|
|
50
|
+
message: "This host is declared ephemeral (DASKI_HOST_CLASS=ephemeral); a local key created here " +
|
|
51
|
+
"would be lost with the host.",
|
|
52
|
+
remediation: "Use the Circle agent wallet: set DASKI_KEY_BACKEND=circle-agent, set the profile signer " +
|
|
53
|
+
"to circle-agent, and follow the gateway's setup skill. Only a durable machine " +
|
|
54
|
+
`(DASKI_HOST_CLASS=durable) may hold a local key. See ${DOC}`,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
const backend = keyBackendFor(host, "local");
|
|
58
|
+
if (HOSTED_BACKENDS.has(backend))
|
|
59
|
+
throw localKeyRefusedOnHost(profileName, backend);
|
|
60
|
+
if (backend === "keychain" && host.platform === "linux")
|
|
61
|
+
throw keychainUnsupportedOnLinux(profileName);
|
|
62
|
+
const store = localKeyStore(host);
|
|
63
|
+
if (await hasKey(profileName, store)) {
|
|
15
64
|
throw new CliError({
|
|
16
65
|
code: "DASKI_KEY_ALREADY_EXISTS",
|
|
17
66
|
message: `A signing key already exists for the "${profileName}" profile.`,
|
|
@@ -42,7 +91,7 @@ export async function createWallet(options) {
|
|
|
42
91
|
}
|
|
43
92
|
const privateKey = generatePrivateKey();
|
|
44
93
|
const account = privateKeyToAccount(privateKey);
|
|
45
|
-
const location = await storeKey(profileName, privateKey);
|
|
94
|
+
const location = await storeKey(profileName, privateKey, store);
|
|
46
95
|
// The address is public; the key is not, and does not appear here or anywhere.
|
|
47
96
|
return {
|
|
48
97
|
created: true,
|
|
@@ -50,34 +99,41 @@ export async function createWallet(options) {
|
|
|
50
99
|
address: account.address,
|
|
51
100
|
network: loaded.profile.network,
|
|
52
101
|
storedIn: location.description,
|
|
102
|
+
keyBackend: backend,
|
|
103
|
+
keyDurability: location.durability,
|
|
104
|
+
hostClass: host.hostClass,
|
|
53
105
|
keyMaterial: "never printed, never logged, never sent to the gateway",
|
|
54
106
|
};
|
|
55
107
|
}
|
|
56
|
-
|
|
108
|
+
async function activeSigner(options) {
|
|
57
109
|
const loaded = loadConfig(options.profile);
|
|
110
|
+
const host = options.host ?? resolveHost();
|
|
111
|
+
const kind = signerKindOf(options, loaded.profile.signer);
|
|
58
112
|
const signer = await createSigner({
|
|
59
|
-
kind
|
|
113
|
+
kind,
|
|
60
114
|
profile: loaded.profileName,
|
|
115
|
+
host,
|
|
116
|
+
chainId: loaded.profile.chainId,
|
|
61
117
|
cdpAccount: options.cdpAccount,
|
|
62
118
|
circleWallet: options.circleWallet,
|
|
63
119
|
});
|
|
64
|
-
const location = await locateKey(loaded.profileName);
|
|
120
|
+
const location = kind === "local" ? await locateKey(loaded.profileName, localKeyStore(host)) : undefined;
|
|
121
|
+
return { loaded, signer, location };
|
|
122
|
+
}
|
|
123
|
+
export async function walletAddress(options) {
|
|
124
|
+
const { loaded, signer, location } = await activeSigner(options);
|
|
65
125
|
return {
|
|
66
126
|
profile: loaded.profileName,
|
|
67
127
|
network: loaded.profile.network,
|
|
68
128
|
address: await signer.getAddress(),
|
|
69
129
|
signer: signer.describe().provider,
|
|
70
|
-
|
|
130
|
+
accountType: signer.describe().accountType,
|
|
131
|
+
keySource: location?.source ?? "none",
|
|
132
|
+
keyDurability: location?.durability ?? "none",
|
|
71
133
|
};
|
|
72
134
|
}
|
|
73
135
|
export async function walletBalance(options) {
|
|
74
|
-
const loaded =
|
|
75
|
-
const signer = await createSigner({
|
|
76
|
-
kind: options.signerOverride ?? loaded.profile.signer,
|
|
77
|
-
profile: loaded.profileName,
|
|
78
|
-
cdpAccount: options.cdpAccount,
|
|
79
|
-
circleWallet: options.circleWallet,
|
|
80
|
-
});
|
|
136
|
+
const { loaded, signer } = await activeSigner(options);
|
|
81
137
|
const address = getAddress(await signer.getAddress());
|
|
82
138
|
const balances = await readBalances({
|
|
83
139
|
rpcUrl: loaded.profile.rpcUrl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type Address } from "viem";
|
|
2
2
|
export type ProfileName = "sandbox" | "mainnet" | (string & {});
|
|
3
|
-
export type SignerKind = "local" | "cdp" | "circle";
|
|
3
|
+
export type SignerKind = "local" | "circle-agent" | "cdp" | "circle";
|
|
4
|
+
export declare const SIGNER_KINDS: readonly SignerKind[];
|
|
4
5
|
export interface ProfileConfig {
|
|
5
6
|
/** Gateway base URL; also the audience for lifecycle signatures. */
|
|
6
7
|
gatewayUrl: string;
|
|
@@ -9,8 +10,13 @@ export interface ProfileConfig {
|
|
|
9
10
|
chainId: number;
|
|
10
11
|
/** The only token this profile will ever sign a transfer of. */
|
|
11
12
|
usdcAddress: Address;
|
|
12
|
-
/** EVM RPC used for
|
|
13
|
+
/** EVM RPC used for reads only: balances, code, receipts, attestations. Never for sending. */
|
|
13
14
|
rpcUrl: string;
|
|
15
|
+
/**
|
|
16
|
+
* The EAS contract delivery confirmations are attested through. Pinned per
|
|
17
|
+
* profile; the gateway's `confirmationSigning.eas` must equal it.
|
|
18
|
+
*/
|
|
19
|
+
easAddress: Address;
|
|
14
20
|
/** Optional budget for a single purchase; null means no additional budget. */
|
|
15
21
|
maxPerOrderUsdc: string | null;
|
|
16
22
|
/** Optional budget across the profile's recorded authorizations. */
|
|
@@ -30,6 +36,8 @@ export interface DaskiConfig {
|
|
|
30
36
|
export declare const SANDBOX_USDC: `0x${string}`;
|
|
31
37
|
/** Base mainnet USDC, for the scaffolded-but-disabled profile. */
|
|
32
38
|
export declare const MAINNET_USDC: `0x${string}`;
|
|
39
|
+
/** The canonical EAS predeploy on Base and Base Sepolia. */
|
|
40
|
+
export declare const EAS_PREDEPLOY: `0x${string}`;
|
|
33
41
|
export declare const DEFAULT_CONFIG: DaskiConfig;
|
|
34
42
|
export interface LoadedConfig {
|
|
35
43
|
config: DaskiConfig;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AAIhD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAChE,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -4,11 +4,16 @@ import { mkdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
|
|
|
4
4
|
import { dirname } from "node:path";
|
|
5
5
|
import { getAddress } from "viem";
|
|
6
6
|
import { CliError } from "./cli/errors.js";
|
|
7
|
-
import { configPath, daskiHome } from "./paths.js";
|
|
7
|
+
import { configPath, daskiHome, keystorePath } from "./paths.js";
|
|
8
|
+
export const SIGNER_KINDS = ["local", "circle-agent", "cdp", "circle"];
|
|
8
9
|
/** Base Sepolia USDC — the canonical sandbox token, pinned. */
|
|
9
10
|
export const SANDBOX_USDC = getAddress("0x036CbD53842c5426634e7929541eC2318f3dCF7e");
|
|
10
11
|
/** Base mainnet USDC, for the scaffolded-but-disabled profile. */
|
|
11
12
|
export const MAINNET_USDC = getAddress("0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913");
|
|
13
|
+
/** The canonical EAS predeploy on Base and Base Sepolia. */
|
|
14
|
+
export const EAS_PREDEPLOY = getAddress("0x4200000000000000000000000000000000000021");
|
|
15
|
+
/** Chains whose profiles default `easAddress` to the predeploy. */
|
|
16
|
+
const EAS_PREDEPLOY_CHAINS = new Set([8453, 84532]);
|
|
12
17
|
export const DEFAULT_CONFIG = {
|
|
13
18
|
version: 2,
|
|
14
19
|
defaultProfile: "sandbox",
|
|
@@ -19,6 +24,7 @@ export const DEFAULT_CONFIG = {
|
|
|
19
24
|
chainId: 84532,
|
|
20
25
|
usdcAddress: SANDBOX_USDC,
|
|
21
26
|
rpcUrl: "https://sepolia.base.org",
|
|
27
|
+
easAddress: EAS_PREDEPLOY,
|
|
22
28
|
maxPerOrderUsdc: null,
|
|
23
29
|
sessionCapUsdc: null,
|
|
24
30
|
requireApprovalAboveUsdc: "0.00",
|
|
@@ -32,6 +38,7 @@ export const DEFAULT_CONFIG = {
|
|
|
32
38
|
chainId: 8453,
|
|
33
39
|
usdcAddress: MAINNET_USDC,
|
|
34
40
|
rpcUrl: "https://mainnet.base.org",
|
|
41
|
+
easAddress: EAS_PREDEPLOY,
|
|
35
42
|
maxPerOrderUsdc: null,
|
|
36
43
|
sessionCapUsdc: null,
|
|
37
44
|
requireApprovalAboveUsdc: "0.00",
|
|
@@ -120,6 +127,25 @@ export function permissionWarnings(path) {
|
|
|
120
127
|
// A missing target is not a permissions problem; other checks report it.
|
|
121
128
|
}
|
|
122
129
|
}
|
|
130
|
+
// The keystore's entries are encrypted, so another user reading the file
|
|
131
|
+
// gets ciphertext to attack offline rather than a key; still a posture worth
|
|
132
|
+
// naming, never a reason to block.
|
|
133
|
+
try {
|
|
134
|
+
const keystore = keystorePath();
|
|
135
|
+
const mode = statSync(keystore).mode;
|
|
136
|
+
if ((mode & 0o077) !== 0) {
|
|
137
|
+
warnings.push({
|
|
138
|
+
code: "DASKI_KEYSTORE_NOT_PRIVATE",
|
|
139
|
+
message: `The keystore file ${keystore} is readable or writable by other users ` +
|
|
140
|
+
`(mode ${(mode & 0o777).toString(8)}); its entries are encrypted, but the ciphertext should ` +
|
|
141
|
+
"not be exposed.",
|
|
142
|
+
remediation: `Run: chmod 600 ${keystore}`,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// No keystore file: nothing to check.
|
|
148
|
+
}
|
|
123
149
|
return warnings;
|
|
124
150
|
}
|
|
125
151
|
function assertProfileSane(name, profile, path) {
|
|
@@ -160,6 +186,20 @@ function assertProfileSane(name, profile, path) {
|
|
|
160
186
|
remediation: `Use an https:// gateway URL in ${path}. See ${DOC}`,
|
|
161
187
|
});
|
|
162
188
|
}
|
|
189
|
+
if (profile.easAddress === undefined && EAS_PREDEPLOY_CHAINS.has(profile.chainId)) {
|
|
190
|
+
profile.easAddress = EAS_PREDEPLOY;
|
|
191
|
+
}
|
|
192
|
+
try {
|
|
193
|
+
profile.easAddress = getAddress(profile.easAddress);
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
throw new CliError({
|
|
197
|
+
code: "DASKI_PROFILE_EAS_MALFORMED",
|
|
198
|
+
message: `Profile "${name}" has no usable easAddress: ${String(profile.easAddress)}`,
|
|
199
|
+
remediation: `Set easAddress to the EAS contract for chain ${profile.chainId} in ${path} ` +
|
|
200
|
+
`(Base and Base Sepolia default to ${EAS_PREDEPLOY}). See ${DOC}`,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
163
203
|
}
|
|
164
204
|
/** Apply a temporary budget within any existing configured budget. */
|
|
165
205
|
export function applyCapOverrides(profile, overrides) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;iFACiF;AACjF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAgB,MAAM,MAAM,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/context.d.ts
CHANGED
|
@@ -1,16 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The per-invocation context every command shares: profile,
|
|
3
|
-
* catalog, and the assembled PolicyConfig.
|
|
2
|
+
* The per-invocation context every command shares: profile, host, signer,
|
|
3
|
+
* gateway, catalog, chain reader, and the assembled PolicyConfig.
|
|
4
4
|
*
|
|
5
5
|
* The PolicyConfig is built here and nowhere else, so there is exactly one
|
|
6
6
|
* place where caps, pins and the session ledger are wired together — and one
|
|
7
7
|
* place to audit that none of them came from a challenge.
|
|
8
|
+
*
|
|
9
|
+
* A context bound to an order builds its signer lazily: a stored, unexpired
|
|
10
|
+
* read capability serves a read without the key store being opened at all,
|
|
11
|
+
* and the signer is constructed on the first signature. The order's recorded
|
|
12
|
+
* payer stands in for the address until then and is checked against the
|
|
13
|
+
* signer the moment it exists.
|
|
8
14
|
*/
|
|
9
15
|
import type { PolicyConfig, SignerAdapter } from "@daski/x402-scheme";
|
|
10
16
|
import { type Address } from "viem";
|
|
17
|
+
import { type ChainReader, type FinalityTag } from "./chain/reader.js";
|
|
11
18
|
import { type LoadedConfig, type ProfileConfig } from "./config.js";
|
|
12
19
|
import { Catalog } from "./gateway/catalog.js";
|
|
13
20
|
import { GatewayClient, type GatewayCallLog } from "./gateway/client.js";
|
|
21
|
+
import { type GatewayMetadata } from "./gateway/metadata.js";
|
|
22
|
+
import { type HostEnvironment } from "./host.js";
|
|
14
23
|
export interface ContextOptions {
|
|
15
24
|
profile?: string | undefined;
|
|
16
25
|
/** Lowering only; see §4.2. */
|
|
@@ -20,17 +29,33 @@ export interface ContextOptions {
|
|
|
20
29
|
cdpAccount?: string | undefined;
|
|
21
30
|
circleWallet?: string | undefined;
|
|
22
31
|
onCall?: ((entry: GatewayCallLog) => void) | undefined;
|
|
32
|
+
/** The resolved host; defaults to this process's environment and platform. */
|
|
33
|
+
host?: HostEnvironment | undefined;
|
|
34
|
+
/** A chain reader factory; defaults to the profile RPC. Injectable for tests. */
|
|
35
|
+
chain?: ((rpcUrl: string, finalityTag: FinalityTag) => ChainReader) | undefined;
|
|
36
|
+
/** A well-known document reader; defaults to fetching it. Injectable for tests. */
|
|
37
|
+
metadata?: ((gatewayUrl: string) => Promise<GatewayMetadata>) | undefined;
|
|
23
38
|
}
|
|
24
39
|
export interface CommandContext {
|
|
25
40
|
loaded: LoadedConfig;
|
|
26
41
|
profileName: string;
|
|
27
42
|
profile: ProfileConfig;
|
|
43
|
+
host: HostEnvironment;
|
|
28
44
|
client: GatewayClient;
|
|
29
45
|
catalog: Catalog;
|
|
30
46
|
signer: SignerAdapter;
|
|
31
47
|
payerAddress: Address;
|
|
32
48
|
policy: PolicyConfig;
|
|
49
|
+
chain: ChainReader;
|
|
50
|
+
/** The gateway's well-known document, read once. */
|
|
51
|
+
metadata(): Promise<GatewayMetadata>;
|
|
52
|
+
/** The real adapter, building it if the context is order-bound and it has not been needed yet. */
|
|
53
|
+
resolveSigner(): Promise<SignerAdapter>;
|
|
33
54
|
close(): Promise<void>;
|
|
34
55
|
}
|
|
35
|
-
|
|
56
|
+
/** Binds a context to an order: its payer is known before any signer exists. */
|
|
57
|
+
export interface OrderBinding {
|
|
58
|
+
expectedPayer: string;
|
|
59
|
+
}
|
|
60
|
+
export declare function createContext(options: ContextOptions, binding?: OrderBinding): Promise<CommandContext>;
|
|
36
61
|
//# sourceMappingURL=context.d.ts.map
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAoB,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAc,KAAK,OAAO,EAAY,MAAM,MAAM,CAAC;AAC1D,OAAO,EAAqC,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE1G,OAAO,EAAiC,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAI9D,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,+BAA+B;IAC/B,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACvD,8EAA8E;IAC9E,IAAI,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACnC,iFAAiF;IACjF,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,KAAK,WAAW,CAAC,GAAG,SAAS,CAAC;IAChF,mFAAmF;IACnF,QAAQ,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC,GAAG,SAAS,CAAC;CAC3E;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,WAAW,CAAC;IACnB,oDAAoD;IACpD,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IACrC,kGAAkG;IAClG,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,cAAc,CAAC,CA4EzB"}
|
package/dist/context.js
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { getAddress } from "viem";
|
|
2
|
+
import { createChainReader, finalityTagFor } from "./chain/reader.js";
|
|
3
|
+
import { CliError } from "./cli/errors.js";
|
|
2
4
|
import { applyCapOverrides, loadConfig } from "./config.js";
|
|
3
5
|
import { Catalog } from "./gateway/catalog.js";
|
|
4
6
|
import { GatewayClient } from "./gateway/client.js";
|
|
7
|
+
import { readGatewayMetadata } from "./gateway/metadata.js";
|
|
8
|
+
import { resolveHost } from "./host.js";
|
|
5
9
|
import { createSigner } from "./signers/index.js";
|
|
6
10
|
import { authorizedTotalAtomic, findByIntent, isUnspent } from "./store/orders.js";
|
|
7
|
-
export async function createContext(options) {
|
|
11
|
+
export async function createContext(options, binding) {
|
|
8
12
|
const loaded = loadConfig(options.profile);
|
|
13
|
+
const host = options.host ?? resolveHost();
|
|
9
14
|
const profile = applyCapOverrides(loaded.profile, {
|
|
10
15
|
maxPerOrderUsdc: options.maxPerOrderUsdc,
|
|
11
16
|
sessionCapUsdc: options.sessionCapUsdc,
|
|
@@ -15,13 +20,31 @@ export async function createContext(options) {
|
|
|
15
20
|
...(options.onCall ? { onCall: options.onCall } : {}),
|
|
16
21
|
});
|
|
17
22
|
const catalog = new Catalog(client);
|
|
18
|
-
const
|
|
23
|
+
const build = () => createSigner({
|
|
19
24
|
kind: options.signerOverride ?? profile.signer,
|
|
20
25
|
profile: loaded.profileName,
|
|
26
|
+
host,
|
|
27
|
+
chainId: profile.chainId,
|
|
21
28
|
cdpAccount: options.cdpAccount,
|
|
22
29
|
circleWallet: options.circleWallet,
|
|
23
30
|
});
|
|
24
|
-
|
|
31
|
+
let signer;
|
|
32
|
+
let payerAddress;
|
|
33
|
+
let resolveSigner;
|
|
34
|
+
if (binding) {
|
|
35
|
+
payerAddress = getAddress(binding.expectedPayer);
|
|
36
|
+
const lazy = lazySigner(build, payerAddress);
|
|
37
|
+
signer = lazy;
|
|
38
|
+
resolveSigner = lazy.resolve;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
const built = await build();
|
|
42
|
+
payerAddress = getAddress(await built.getAddress());
|
|
43
|
+
signer = built;
|
|
44
|
+
resolveSigner = async () => built;
|
|
45
|
+
}
|
|
46
|
+
const chain = (options.chain ?? createChainReader)(profile.rpcUrl, finalityTagFor(profile.chainId));
|
|
47
|
+
let metadata;
|
|
25
48
|
const policy = {
|
|
26
49
|
payerAddress,
|
|
27
50
|
chainId: profile.chainId,
|
|
@@ -43,12 +66,58 @@ export async function createContext(options) {
|
|
|
43
66
|
loaded,
|
|
44
67
|
profileName: loaded.profileName,
|
|
45
68
|
profile,
|
|
69
|
+
host,
|
|
46
70
|
client,
|
|
47
71
|
catalog,
|
|
48
72
|
signer,
|
|
49
73
|
payerAddress,
|
|
50
74
|
policy,
|
|
75
|
+
chain,
|
|
76
|
+
metadata: () => {
|
|
77
|
+
metadata ??= (options.metadata ?? readGatewayMetadata)(profile.gatewayUrl);
|
|
78
|
+
return metadata;
|
|
79
|
+
},
|
|
80
|
+
resolveSigner,
|
|
51
81
|
close: () => client.close(),
|
|
52
82
|
};
|
|
53
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* A signer that is built on first use and must report the payer the order
|
|
86
|
+
* was placed with. Its description is available only once it exists;
|
|
87
|
+
* commands that need the account type call `resolveSigner()` first.
|
|
88
|
+
*/
|
|
89
|
+
function lazySigner(build, expectedPayer) {
|
|
90
|
+
let pending;
|
|
91
|
+
let resolved;
|
|
92
|
+
const resolve = () => {
|
|
93
|
+
pending ??= build().then(async (adapter) => {
|
|
94
|
+
const actual = getAddress(await adapter.getAddress());
|
|
95
|
+
if (actual !== expectedPayer) {
|
|
96
|
+
throw new CliError({
|
|
97
|
+
code: "DASKI_ORDER_PAYER_MISMATCH",
|
|
98
|
+
message: `The active signer (${actual}) differs from this order's payer (${expectedPayer}).`,
|
|
99
|
+
remediation: "Select the profile or --signer that placed this order.",
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
resolved = adapter;
|
|
103
|
+
return adapter;
|
|
104
|
+
});
|
|
105
|
+
return pending;
|
|
106
|
+
};
|
|
107
|
+
return {
|
|
108
|
+
resolve,
|
|
109
|
+
getAddress: async () => (await resolve()).getAddress(),
|
|
110
|
+
signTypedData: async (payload) => (await resolve()).signTypedData(payload),
|
|
111
|
+
describe: () => {
|
|
112
|
+
if (!resolved) {
|
|
113
|
+
throw new CliError({
|
|
114
|
+
code: "DASKI_SIGNER_NOT_RESOLVED",
|
|
115
|
+
message: "The signer has not been built yet, so it cannot describe itself.",
|
|
116
|
+
remediation: "This is a defect in the calling command: it must resolve the signer first.",
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
return resolved.describe();
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
54
123
|
//# sourceMappingURL=context.js.map
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
package/dist/gateway/client.d.ts
CHANGED
|
@@ -78,10 +78,11 @@ export declare class GatewayClient {
|
|
|
78
78
|
*/
|
|
79
79
|
static json(result: McpToolResult): Record<string, unknown> | undefined;
|
|
80
80
|
/**
|
|
81
|
-
* The x402 challenge in a tool result.
|
|
82
|
-
* transport's `_meta["x402/payment-required"]
|
|
83
|
-
* which nests the challenge under `paymentRequired` beside its
|
|
84
|
-
*
|
|
81
|
+
* The x402 challenge in a tool result. Two places, in order: the x402 MCP
|
|
82
|
+
* transport's `_meta["x402/payment-required"]`, and the prepare tool's
|
|
83
|
+
* body, which nests the challenge under `paymentRequired` beside its
|
|
84
|
+
* `preflight`. A bare PaymentRequired body is not a challenge this CLI
|
|
85
|
+
* reads: only the prepare tool issues challenges.
|
|
85
86
|
*/
|
|
86
87
|
static challenge(result: McpToolResult): PaymentChallenge | undefined;
|
|
87
88
|
/** The prepare tool's `preflight` block, when the result carries one. */
|
|
@@ -105,6 +106,13 @@ export declare function describeResult(result: McpToolResult): Record<string, un
|
|
|
105
106
|
export declare function unreadableResultError(toolName: string, result: McpToolResult, options?: {
|
|
106
107
|
afterSubmit?: boolean | undefined;
|
|
107
108
|
}): CliError;
|
|
109
|
+
/**
|
|
110
|
+
* A gateway that does not advertise a tool every purchase or order read goes
|
|
111
|
+
* through. This release negotiates nothing: the prepare tool issues every
|
|
112
|
+
* challenge and grant-read serves every read, so their absence is not a
|
|
113
|
+
* gateway to read around but one this CLI does not support.
|
|
114
|
+
*/
|
|
115
|
+
export declare function gatewayUnsupported(gatewayUrl: string, tool: string): CliError;
|
|
108
116
|
export interface GatewayProtocolProbe {
|
|
109
117
|
reachable: boolean;
|
|
110
118
|
tools: string[];
|
|
@@ -126,19 +134,6 @@ export interface ProbeTarget {
|
|
|
126
134
|
* could not complete a single call.
|
|
127
135
|
*/
|
|
128
136
|
export declare function probeGatewayProtocol(target: ProbeTarget): Promise<GatewayProtocolProbe>;
|
|
129
|
-
/** The buyer CLI release a gateway pins, from its `/.well-known/mcp.json`. */
|
|
130
|
-
export interface PinnedBuyerCli {
|
|
131
|
-
package: string;
|
|
132
|
-
version: string;
|
|
133
|
-
install?: string | undefined;
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Reads the gateway's pinned buyer CLI. Gateways before 2026-09-04 publish no
|
|
137
|
-
* `buyerCli`; that reads as `null`, never as an error, because the pin is
|
|
138
|
-
* advisory to the gateway's own operation and the doctor must not block on a
|
|
139
|
-
* field the gateway does not have.
|
|
140
|
-
*/
|
|
141
|
-
export declare function pinnedBuyerCli(gatewayUrl: string, timeoutMs?: number): Promise<PinnedBuyerCli | null>;
|
|
142
137
|
/**
|
|
143
138
|
* Compares two `major.minor.patch` versions. Returns a negative number when
|
|
144
139
|
* `installed` is older than `pinned`, zero when equal, positive when newer,
|
|
@@ -153,4 +148,12 @@ export declare function readiness(gatewayUrl: string, timeoutMs?: number): Promi
|
|
|
153
148
|
version?: string | undefined;
|
|
154
149
|
error?: string | undefined;
|
|
155
150
|
}>;
|
|
151
|
+
/** Gateway refusals after which the same request may simply be retried. */
|
|
152
|
+
export declare function isRetryableGatewayCode(code: string | undefined): boolean;
|
|
153
|
+
/**
|
|
154
|
+
* Remediations for gateway refusals whose next step is a flag of this CLI.
|
|
155
|
+
* The gateway's own `next_action` speaks in tool terms; these speak in
|
|
156
|
+
* command terms, and win when the code is one the CLI knows how to act on.
|
|
157
|
+
*/
|
|
158
|
+
export declare function gatewayRefusalRemediation(code: string | undefined, body: Record<string, unknown> | undefined): string | undefined;
|
|
156
159
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/gateway/client.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/gateway/client.ts"],"names":[],"mappings":"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"}
|