@daski/pay 0.3.0 → 0.4.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.
- 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 +2 -2
- package/dist/commands/signPayment.d.ts.map +1 -1
- package/dist/commands/signPayment.js +10 -5
- 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/gateway/client.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
11
11
|
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
12
12
|
import { CliError } from "../cli/errors.js";
|
|
13
|
+
import { NOT_DEPLOYED_REMEDIATION } from "../signers/contract.js";
|
|
13
14
|
import { CLI_VERSION } from "../version.js";
|
|
14
15
|
export class GatewayClient {
|
|
15
16
|
gatewayUrl;
|
|
@@ -110,20 +111,18 @@ export class GatewayClient {
|
|
|
110
111
|
return undefined;
|
|
111
112
|
}
|
|
112
113
|
/**
|
|
113
|
-
* The x402 challenge in a tool result.
|
|
114
|
-
* transport's `_meta["x402/payment-required"]
|
|
115
|
-
* which nests the challenge under `paymentRequired` beside its
|
|
116
|
-
*
|
|
114
|
+
* The x402 challenge in a tool result. Two places, in order: the x402 MCP
|
|
115
|
+
* transport's `_meta["x402/payment-required"]`, and the prepare tool's
|
|
116
|
+
* body, which nests the challenge under `paymentRequired` beside its
|
|
117
|
+
* `preflight`. A bare PaymentRequired body is not a challenge this CLI
|
|
118
|
+
* reads: only the prepare tool issues challenges.
|
|
117
119
|
*/
|
|
118
120
|
static challenge(result) {
|
|
119
121
|
const fromMeta = result._meta?.["x402/payment-required"];
|
|
120
122
|
if (isChallenge(fromMeta))
|
|
121
123
|
return fromMeta;
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
if (isChallenge(nested))
|
|
125
|
-
return nested;
|
|
126
|
-
return isChallenge(body) ? body : undefined;
|
|
124
|
+
const nested = GatewayClient.json(result)?.paymentRequired;
|
|
125
|
+
return isChallenge(nested) ? nested : undefined;
|
|
127
126
|
}
|
|
128
127
|
/** The prepare tool's `preflight` block, when the result carries one. */
|
|
129
128
|
static preflight(result) {
|
|
@@ -181,6 +180,22 @@ export function unreadableResultError(toolName, result, options = {}) {
|
|
|
181
180
|
details: { tool: toolName, gateway: describeResult(result) },
|
|
182
181
|
});
|
|
183
182
|
}
|
|
183
|
+
/**
|
|
184
|
+
* A gateway that does not advertise a tool every purchase or order read goes
|
|
185
|
+
* through. This release negotiates nothing: the prepare tool issues every
|
|
186
|
+
* challenge and grant-read serves every read, so their absence is not a
|
|
187
|
+
* gateway to read around but one this CLI does not support.
|
|
188
|
+
*/
|
|
189
|
+
export function gatewayUnsupported(gatewayUrl, tool) {
|
|
190
|
+
return new CliError({
|
|
191
|
+
code: "DASKI_GATEWAY_UNSUPPORTED",
|
|
192
|
+
message: `The gateway at ${gatewayUrl} does not advertise ${tool}, which this release requires; ` +
|
|
193
|
+
"it is not a gateway this @daski/pay supports.",
|
|
194
|
+
remediation: "Nothing was signed. Run daski doctor --json, which lists what the gateway advertises, and " +
|
|
195
|
+
"use the @daski/pay release the gateway pins, or point the profile's gatewayUrl at a current " +
|
|
196
|
+
"Daski gateway.",
|
|
197
|
+
});
|
|
198
|
+
}
|
|
184
199
|
/**
|
|
185
200
|
* One read-only MCP round trip for `doctor`: list the tools, then read a
|
|
186
201
|
* payload through a read-only tool with this client's own parser. A gateway
|
|
@@ -215,40 +230,6 @@ export async function probeGatewayProtocol(target) {
|
|
|
215
230
|
await target.close().catch(() => undefined);
|
|
216
231
|
}
|
|
217
232
|
}
|
|
218
|
-
/**
|
|
219
|
-
* Reads the gateway's pinned buyer CLI. Gateways before 2026-09-04 publish no
|
|
220
|
-
* `buyerCli`; that reads as `null`, never as an error, because the pin is
|
|
221
|
-
* advisory to the gateway's own operation and the doctor must not block on a
|
|
222
|
-
* field the gateway does not have.
|
|
223
|
-
*/
|
|
224
|
-
export async function pinnedBuyerCli(gatewayUrl, timeoutMs = 10_000) {
|
|
225
|
-
const controller = new AbortController();
|
|
226
|
-
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
227
|
-
try {
|
|
228
|
-
const response = await fetch(`${gatewayUrl.replace(/\/$/, "")}/.well-known/mcp.json`, {
|
|
229
|
-
signal: controller.signal,
|
|
230
|
-
});
|
|
231
|
-
if (!response.ok)
|
|
232
|
-
return null;
|
|
233
|
-
const body = await response.json();
|
|
234
|
-
const pin = body.buyerCli;
|
|
235
|
-
if (!pin || typeof pin !== "object")
|
|
236
|
-
return null;
|
|
237
|
-
if (typeof pin.package !== "string" || typeof pin.version !== "string")
|
|
238
|
-
return null;
|
|
239
|
-
return {
|
|
240
|
-
package: pin.package,
|
|
241
|
-
version: pin.version,
|
|
242
|
-
install: typeof pin.install === "string" ? pin.install : undefined,
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
catch {
|
|
246
|
-
return null;
|
|
247
|
-
}
|
|
248
|
-
finally {
|
|
249
|
-
clearTimeout(timer);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
233
|
/**
|
|
253
234
|
* Compares two `major.minor.patch` versions. Returns a negative number when
|
|
254
235
|
* `installed` is older than `pinned`, zero when equal, positive when newer,
|
|
@@ -288,4 +269,42 @@ export async function readiness(gatewayUrl, timeoutMs = 10_000) {
|
|
|
288
269
|
clearTimeout(timer);
|
|
289
270
|
}
|
|
290
271
|
}
|
|
272
|
+
/** Gateway refusals after which the same request may simply be retried. */
|
|
273
|
+
export function isRetryableGatewayCode(code) {
|
|
274
|
+
return code === "SIGNATURE_VERIFICATION_UNAVAILABLE" || code === "SIGNATURE_VERIFICATION_BUSY" ||
|
|
275
|
+
code === "CONFIRMATION_SUBMISSION_PENDING";
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Remediations for gateway refusals whose next step is a flag of this CLI.
|
|
279
|
+
* The gateway's own `next_action` speaks in tool terms; these speak in
|
|
280
|
+
* command terms, and win when the code is one the CLI knows how to act on.
|
|
281
|
+
*/
|
|
282
|
+
export function gatewayRefusalRemediation(code, body) {
|
|
283
|
+
switch (code) {
|
|
284
|
+
case "CONFIRMATION_SPONSORED_REQUIRES_EOA":
|
|
285
|
+
return "This signer's signatures verify as a contract account, so Daski cannot sponsor " +
|
|
286
|
+
"its attestation. Re-run with --submission direct and submit the printed call with the " +
|
|
287
|
+
"wallet's own tool, then record it with --tx <hash>.";
|
|
288
|
+
case "CONFIRMATION_SPONSORSHIP_LIMIT":
|
|
289
|
+
return body?.chainEligible === true
|
|
290
|
+
? "Daski's sponsorship allowance for this order is used up, but the chain still accepts " +
|
|
291
|
+
"a submission. If the wallet can send transactions, re-run with --submission direct " +
|
|
292
|
+
"and submit the printed call with the wallet's own tool."
|
|
293
|
+
: "Daski's sponsorship allowance for this order is used up and the chain accepts no " +
|
|
294
|
+
"further submission for it.";
|
|
295
|
+
case "SIGNATURE_COUNTERFACTUAL_REJECTED":
|
|
296
|
+
return `The signer's wallet is not deployed, so its signature was refused. ${NOT_DEPLOYED_REMEDIATION}`;
|
|
297
|
+
case "SIGNATURE_VERIFICATION_UNAVAILABLE":
|
|
298
|
+
return "The gateway could not reach the chain to verify the signature. Nothing was " +
|
|
299
|
+
"consumed; retry the same command in a moment.";
|
|
300
|
+
case "SIGNATURE_VERIFICATION_BUSY":
|
|
301
|
+
return "The gateway is verifying too many contract-account signatures right now. Nothing " +
|
|
302
|
+
"was consumed; retry the same command in a moment.";
|
|
303
|
+
case "CONFIRMATION_SUBMISSION_LIMIT":
|
|
304
|
+
return "This order has used its three confirmation submissions. The current confirmation " +
|
|
305
|
+
"can still be revoked with --revoke; no further confirmation can be submitted.";
|
|
306
|
+
default:
|
|
307
|
+
return undefined;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
291
310
|
//# sourceMappingURL=client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/gateway/client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/gateway/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { type OrderAction, type SignerAdapter } from "@daski/x402-scheme";
|
|
9
9
|
import type { Address } from "viem";
|
|
10
|
-
import {
|
|
10
|
+
import { CliError } from "../cli/errors.js";
|
|
11
|
+
import { GatewayClient, type McpToolResult } from "./client.js";
|
|
11
12
|
export interface LifecycleCallOptions {
|
|
12
13
|
client: GatewayClient;
|
|
13
14
|
signer: SignerAdapter;
|
|
@@ -42,4 +43,6 @@ export interface WalletQueryOptions {
|
|
|
42
43
|
* wallet challenge must not smuggle a provider binding past a read.
|
|
43
44
|
*/
|
|
44
45
|
export declare function callWalletQuery(options: WalletQueryOptions): Promise<Record<string, unknown>>;
|
|
46
|
+
/** The gateway's answer to a lifecycle or read call, as an operator-facing error. */
|
|
47
|
+
export declare function lifecycleFailure(toolName: string, result: McpToolResult): CliError;
|
|
45
48
|
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/gateway/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/gateway/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAEL,aAAa,EAIb,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiClC;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA2BlC;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,QAAQ,CAoBlF"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { orderActionTypedData, validateOrderActionChallenge, validateWalletActionChallenge, walletActionTypedData, } from "@daski/x402-scheme";
|
|
9
9
|
import { CliError } from "../cli/errors.js";
|
|
10
|
-
import { describeResult, GatewayClient, unreadableResultError, } from "./client.js";
|
|
10
|
+
import { describeResult, GatewayClient, gatewayRefusalRemediation, isRetryableGatewayCode, unreadableResultError, } from "./client.js";
|
|
11
11
|
/**
|
|
12
12
|
* Runs one authorized lifecycle call. Two gateway calls: the challenge, then
|
|
13
13
|
* the authorized retry.
|
|
@@ -79,7 +79,8 @@ export async function callWalletQuery(options) {
|
|
|
79
79
|
throw lifecycleFailure(toolName, authorized);
|
|
80
80
|
return body;
|
|
81
81
|
}
|
|
82
|
-
|
|
82
|
+
/** The gateway's answer to a lifecycle or read call, as an operator-facing error. */
|
|
83
|
+
export function lifecycleFailure(toolName, result) {
|
|
83
84
|
// No payload in a success answer is a shape disagreement, not a refusal.
|
|
84
85
|
if (GatewayClient.unreadable(result))
|
|
85
86
|
return unreadableResultError(toolName, result);
|
|
@@ -91,10 +92,14 @@ function lifecycleFailure(toolName, result) {
|
|
|
91
92
|
return new CliError({
|
|
92
93
|
code,
|
|
93
94
|
message,
|
|
94
|
-
remediation: typeof body?.next_action === "string"
|
|
95
|
+
remediation: gatewayRefusalRemediation(code, body) ?? (typeof body?.next_action === "string"
|
|
95
96
|
? body.next_action
|
|
96
|
-
: `Run \`daski order status <handle>\` to see the order's current state
|
|
97
|
-
details: {
|
|
97
|
+
: `Run \`daski order status <handle>\` to see the order's current state.`),
|
|
98
|
+
details: {
|
|
99
|
+
tool: toolName,
|
|
100
|
+
gateway: body ?? describeResult(result),
|
|
101
|
+
...(isRetryableGatewayCode(code) ? { retryable: true } : {}),
|
|
102
|
+
},
|
|
98
103
|
});
|
|
99
104
|
}
|
|
100
105
|
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/gateway/lifecycle.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/gateway/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,6BAA6B,EAC7B,qBAAqB,GAGtB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EACL,cAAc,EACd,aAAa,EACb,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,GAEtB,MAAM,aAAa,CAAC;AAerB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,OAA6B;IAE7B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC3D,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;IAClF,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC1D,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,gBAAgB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACpD,CAAC;IACD,2EAA2E;IAC3E,sCAAsC;IACtC,IAAI,aAAa,CAAC,qBAAqB,KAAK,IAAI,EAAE,CAAC;QACjD,IAAI,eAAe,CAAC,OAAO;YAAE,MAAM,gBAAgB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAC/E,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,SAAS,GAAG,4BAA4B,CAAC,aAAa,CAAC,SAAS,EAAE;QACtE,WAAW;QACX,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,OAAO;QACP,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;KAChF,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,aAAa,CAClD,oBAAoB,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,CACrE,CAAC;IACF,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE;QACjD,WAAW;QACX,OAAO;QACP,aAAa,EAAE,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE;KAC3C,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,IAAI;QAAE,MAAM,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC9E,OAAO,IAAI,CAAC;AACd,CAAC;AAeD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAA2B;IAE3B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACrD,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC/E,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC1D,IAAI,CAAC,aAAa;QAAE,MAAM,gBAAgB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACtE,IAAI,aAAa,CAAC,qBAAqB,KAAK,IAAI,EAAE,CAAC;QACjD,IAAI,eAAe,CAAC,OAAO;YAAE,MAAM,gBAAgB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAC/E,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,SAAS,GAAG,6BAA6B,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE;QACxF,KAAK;QACL,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,OAAO,CAAC,UAAU;QAC5B,OAAO;QACP,sBAAsB,EAAE,KAAK;QAC7B,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;KAChF,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC;IACvF,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE;QACjD,KAAK;QACL,GAAG,OAAO;QACV,aAAa,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE;KACzD,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,IAAI;QAAE,MAAM,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC9E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,MAAqB;IACtE,yEAAyE;IACzE,IAAI,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrF,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,6BAA6B,CAAC;IACxF,MAAM,OAAO,GAAG,OAAO,IAAI,EAAE,OAAO,KAAK,QAAQ;QAC/C,CAAC,CAAC,IAAI,CAAC,OAAO;QACd,CAAC,CAAC,GAAG,QAAQ,+BAA+B,CAAC;IAC/C,OAAO,IAAI,QAAQ,CAAC;QAClB,IAAI;QACJ,OAAO;QACP,WAAW,EAAE,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,WAAW,KAAK,QAAQ;YAC1F,CAAC,CAAC,IAAI,CAAC,WAAW;YAClB,CAAC,CAAC,uEAAuE,CAAC;QAC5E,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAI,IAAI,cAAc,CAAC,MAAM,CAAC;YACvC,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7D;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The gateway's `/.well-known/mcp.json`, read once per command.
|
|
3
|
+
*
|
|
4
|
+
* It carries the buyer CLI pin, the confirmation signing pins (chain, EAS,
|
|
5
|
+
* schema, reputation storage), which payer account types the gateway
|
|
6
|
+
* verifies, which confirmation modes it offers, and which vendor signer CLIs
|
|
7
|
+
* it pins. Each block is validated on its own; a block that is missing or
|
|
8
|
+
* malformed reads as `null`, so a caller decides for itself whether that is
|
|
9
|
+
* fatal for what it is about to do.
|
|
10
|
+
*/
|
|
11
|
+
import { type Address, type Hex } from "viem";
|
|
12
|
+
import { CliError } from "../cli/errors.js";
|
|
13
|
+
/** The buyer CLI release a gateway pins. */
|
|
14
|
+
export interface PinnedBuyerCli {
|
|
15
|
+
package: string;
|
|
16
|
+
version: string;
|
|
17
|
+
install?: string | undefined;
|
|
18
|
+
}
|
|
19
|
+
export interface ConfirmationSigningPins {
|
|
20
|
+
chainId: number;
|
|
21
|
+
eas: Address;
|
|
22
|
+
schemaUid: Hex;
|
|
23
|
+
reputationStorage: Address;
|
|
24
|
+
}
|
|
25
|
+
export interface PayerAccounts {
|
|
26
|
+
types: string[];
|
|
27
|
+
counterfactual: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface ConfirmationModes {
|
|
30
|
+
modes: string[];
|
|
31
|
+
sponsoredRequires: string;
|
|
32
|
+
attestationCap: number;
|
|
33
|
+
revocationAfterCap: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface SignerCliPin {
|
|
36
|
+
package: string;
|
|
37
|
+
version: string;
|
|
38
|
+
repository?: string | undefined;
|
|
39
|
+
}
|
|
40
|
+
export interface GatewayMetadata {
|
|
41
|
+
buyerCli: PinnedBuyerCli | null;
|
|
42
|
+
confirmationSigning: ConfirmationSigningPins | null;
|
|
43
|
+
payerAccounts: PayerAccounts | null;
|
|
44
|
+
confirmation: ConfirmationModes | null;
|
|
45
|
+
signerClis: Record<string, SignerCliPin> | null;
|
|
46
|
+
}
|
|
47
|
+
/** Parses a well-known document. Exported so fixtures can be checked without a server. */
|
|
48
|
+
export declare function parseGatewayMetadata(body: unknown): GatewayMetadata;
|
|
49
|
+
/** The gateway's EAS pin does not match the profile's; confirmations are refused until it does. */
|
|
50
|
+
export declare function easAddressMismatch(gatewayEas: Address, profileEas: Address, chainId: number): CliError;
|
|
51
|
+
/** The document carries no usable `confirmationSigning` block; no delivery confirmation can be prepared. */
|
|
52
|
+
export declare function confirmationPinsMissing(gatewayUrl: string): CliError;
|
|
53
|
+
/** The document carries no usable `payerAccounts` block; the gateway does not say which account types it verifies. */
|
|
54
|
+
export declare function payerAccountsMissing(gatewayUrl: string): CliError;
|
|
55
|
+
/**
|
|
56
|
+
* Reads and parses the gateway's well-known document. A transport failure or
|
|
57
|
+
* a non-JSON answer is `DASKI_GATEWAY_METADATA_UNAVAILABLE`, retryable.
|
|
58
|
+
*/
|
|
59
|
+
export declare function readGatewayMetadata(gatewayUrl: string, timeoutMs?: number): Promise<GatewayMetadata>;
|
|
60
|
+
/**
|
|
61
|
+
* The buyer CLI release a gateway pins, or `null` when the document or the
|
|
62
|
+
* field is absent. The pin is advisory to the gateway's own operation, so a
|
|
63
|
+
* gateway without it must not block `doctor`.
|
|
64
|
+
*/
|
|
65
|
+
export declare function pinnedBuyerCli(gatewayUrl: string, timeoutMs?: number): Promise<PinnedBuyerCli | null>;
|
|
66
|
+
//# sourceMappingURL=metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/gateway/metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAc,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,4CAA4C;AAC5C,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,GAAG,CAAC;IACf,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,mBAAmB,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACpD,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,YAAY,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC;CACjD;AA6DD,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,CASnE;AAED,mGAAmG;AACnG,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAWtG;AAED,4GAA4G;AAC5G,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,CAUpE;AAED,sHAAsH;AACtH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,CAUjE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,CAgB1G;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,SAAS,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAM3G"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The gateway's `/.well-known/mcp.json`, read once per command.
|
|
3
|
+
*
|
|
4
|
+
* It carries the buyer CLI pin, the confirmation signing pins (chain, EAS,
|
|
5
|
+
* schema, reputation storage), which payer account types the gateway
|
|
6
|
+
* verifies, which confirmation modes it offers, and which vendor signer CLIs
|
|
7
|
+
* it pins. Each block is validated on its own; a block that is missing or
|
|
8
|
+
* malformed reads as `null`, so a caller decides for itself whether that is
|
|
9
|
+
* fatal for what it is about to do.
|
|
10
|
+
*/
|
|
11
|
+
import { getAddress } from "viem";
|
|
12
|
+
import { CliError } from "../cli/errors.js";
|
|
13
|
+
function isRecord(value) {
|
|
14
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
15
|
+
}
|
|
16
|
+
function readBuyerCli(value) {
|
|
17
|
+
if (!isRecord(value) || typeof value.package !== "string" || typeof value.version !== "string")
|
|
18
|
+
return null;
|
|
19
|
+
return {
|
|
20
|
+
package: value.package,
|
|
21
|
+
version: value.version,
|
|
22
|
+
install: typeof value.install === "string" ? value.install : undefined,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function readConfirmationSigning(value) {
|
|
26
|
+
if (!isRecord(value))
|
|
27
|
+
return null;
|
|
28
|
+
const { chainId, eas, schemaUid, reputationStorage } = value;
|
|
29
|
+
if (!Number.isSafeInteger(chainId) || typeof eas !== "string" || typeof reputationStorage !== "string" ||
|
|
30
|
+
typeof schemaUid !== "string" || !/^0x[0-9a-fA-F]{64}$/.test(schemaUid))
|
|
31
|
+
return null;
|
|
32
|
+
try {
|
|
33
|
+
return {
|
|
34
|
+
chainId: chainId,
|
|
35
|
+
eas: getAddress(eas),
|
|
36
|
+
schemaUid: schemaUid.toLowerCase(),
|
|
37
|
+
reputationStorage: getAddress(reputationStorage),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function readPayerAccounts(value) {
|
|
45
|
+
if (!isRecord(value) || !Array.isArray(value.types) || !value.types.every((t) => typeof t === "string"))
|
|
46
|
+
return null;
|
|
47
|
+
return { types: value.types, counterfactual: value.counterfactual === true };
|
|
48
|
+
}
|
|
49
|
+
function readConfirmation(value) {
|
|
50
|
+
if (!isRecord(value) || !Array.isArray(value.modes) || !value.modes.every((m) => typeof m === "string"))
|
|
51
|
+
return null;
|
|
52
|
+
return {
|
|
53
|
+
modes: value.modes,
|
|
54
|
+
sponsoredRequires: typeof value.sponsoredRequires === "string" ? value.sponsoredRequires : "eoa",
|
|
55
|
+
attestationCap: Number.isSafeInteger(value.attestationCap) ? value.attestationCap : 3,
|
|
56
|
+
revocationAfterCap: value.revocationAfterCap === true,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function readSignerClis(value) {
|
|
60
|
+
if (!isRecord(value))
|
|
61
|
+
return null;
|
|
62
|
+
const pins = {};
|
|
63
|
+
for (const [name, pin] of Object.entries(value)) {
|
|
64
|
+
if (!isRecord(pin) || typeof pin.package !== "string" || typeof pin.version !== "string")
|
|
65
|
+
continue;
|
|
66
|
+
pins[name] = {
|
|
67
|
+
package: pin.package,
|
|
68
|
+
version: pin.version,
|
|
69
|
+
repository: typeof pin.repository === "string" ? pin.repository : undefined,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
return pins;
|
|
73
|
+
}
|
|
74
|
+
/** Parses a well-known document. Exported so fixtures can be checked without a server. */
|
|
75
|
+
export function parseGatewayMetadata(body) {
|
|
76
|
+
const document = isRecord(body) ? body : {};
|
|
77
|
+
return {
|
|
78
|
+
buyerCli: readBuyerCli(document.buyerCli),
|
|
79
|
+
confirmationSigning: readConfirmationSigning(document.confirmationSigning),
|
|
80
|
+
payerAccounts: readPayerAccounts(document.payerAccounts),
|
|
81
|
+
confirmation: readConfirmation(document.confirmation),
|
|
82
|
+
signerClis: readSignerClis(document.signerClis),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/** The gateway's EAS pin does not match the profile's; confirmations are refused until it does. */
|
|
86
|
+
export function easAddressMismatch(gatewayEas, profileEas, chainId) {
|
|
87
|
+
return new CliError({
|
|
88
|
+
code: "DASKI_EAS_ADDRESS_MISMATCH",
|
|
89
|
+
message: `The gateway pins EAS ${gatewayEas} for delivery confirmations; this profile pins ` +
|
|
90
|
+
`${profileEas} for chain ${chainId}.`,
|
|
91
|
+
remediation: "Confirm with the gateway operator that its confirmationSigning.eas is the canonical EAS " +
|
|
92
|
+
`for chain ${chainId}; if it is, set easAddress in the profile to match. No confirmation is ` +
|
|
93
|
+
"prepared or signed while they disagree.",
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/** The document carries no usable `confirmationSigning` block; no delivery confirmation can be prepared. */
|
|
97
|
+
export function confirmationPinsMissing(gatewayUrl) {
|
|
98
|
+
return new CliError({
|
|
99
|
+
code: "DASKI_GATEWAY_CONFIRMATION_PINS_MISSING",
|
|
100
|
+
message: `The gateway at ${gatewayUrl} publishes no usable confirmationSigning block (chainId, eas, ` +
|
|
101
|
+
"schemaUid, reputationStorage) in /.well-known/mcp.json, so delivery confirmations are refused.",
|
|
102
|
+
remediation: "Purchases are unaffected. Ask the gateway operator to publish confirmationSigning, then re-run; " +
|
|
103
|
+
"no confirmation is prepared or signed until the pins are readable.",
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/** The document carries no usable `payerAccounts` block; the gateway does not say which account types it verifies. */
|
|
107
|
+
export function payerAccountsMissing(gatewayUrl) {
|
|
108
|
+
return new CliError({
|
|
109
|
+
code: "DASKI_GATEWAY_PAYER_ACCOUNTS_MISSING",
|
|
110
|
+
message: `The gateway at ${gatewayUrl} publishes no usable payerAccounts block in /.well-known/mcp.json, ` +
|
|
111
|
+
"so it does not state which payer account types it verifies.",
|
|
112
|
+
remediation: "A plain wallet can buy; a contract wallet is refused (DASKI_GATEWAY_EOA_ONLY) until the gateway " +
|
|
113
|
+
"lists contract under payerAccounts.types. Ask the gateway operator to publish payerAccounts, then re-run.",
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Reads and parses the gateway's well-known document. A transport failure or
|
|
118
|
+
* a non-JSON answer is `DASKI_GATEWAY_METADATA_UNAVAILABLE`, retryable.
|
|
119
|
+
*/
|
|
120
|
+
export async function readGatewayMetadata(gatewayUrl, timeoutMs = 10_000) {
|
|
121
|
+
const url = `${gatewayUrl.replace(/\/$/, "")}/.well-known/mcp.json`;
|
|
122
|
+
let body;
|
|
123
|
+
try {
|
|
124
|
+
const response = await fetch(url, { signal: AbortSignal.timeout(timeoutMs) });
|
|
125
|
+
if (!response.ok)
|
|
126
|
+
throw new Error(`HTTP ${response.status}`);
|
|
127
|
+
body = await response.json();
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
throw new CliError({
|
|
131
|
+
code: "DASKI_GATEWAY_METADATA_UNAVAILABLE",
|
|
132
|
+
message: `Could not read ${url}: ${error.message}`,
|
|
133
|
+
remediation: "Check connectivity to the gateway, then re-run. Nothing was signed.",
|
|
134
|
+
details: { retryable: true },
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
return parseGatewayMetadata(body);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* The buyer CLI release a gateway pins, or `null` when the document or the
|
|
141
|
+
* field is absent. The pin is advisory to the gateway's own operation, so a
|
|
142
|
+
* gateway without it must not block `doctor`.
|
|
143
|
+
*/
|
|
144
|
+
export async function pinnedBuyerCli(gatewayUrl, timeoutMs = 10_000) {
|
|
145
|
+
try {
|
|
146
|
+
return (await readGatewayMetadata(gatewayUrl, timeoutMs)).buyerCli;
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/gateway/metadata.ts"],"names":[],"mappings":"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"}
|