@1claw/cli 0.60.0 → 0.61.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 +12 -0
- package/dist/src/commands/pay/challenge.d.ts +20 -0
- package/dist/src/commands/pay/challenge.d.ts.map +1 -0
- package/dist/src/commands/pay/challenge.js +26 -0
- package/dist/src/commands/pay/challenge.js.map +1 -0
- package/dist/src/commands/pay/expiry.d.ts +17 -0
- package/dist/src/commands/pay/expiry.d.ts.map +1 -0
- package/dist/src/commands/pay/expiry.js +26 -0
- package/dist/src/commands/pay/expiry.js.map +1 -0
- package/dist/src/commands/pay/index.d.ts +3 -0
- package/dist/src/commands/pay/index.d.ts.map +1 -0
- package/dist/src/commands/pay/index.js +155 -0
- package/dist/src/commands/pay/index.js.map +1 -0
- package/dist/src/commands/pay/signer.d.ts +97 -0
- package/dist/src/commands/pay/signer.d.ts.map +1 -0
- package/dist/src/commands/pay/signer.js +97 -0
- package/dist/src/commands/pay/signer.js.map +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -774,6 +774,18 @@ Manage platform apps for developers building multi-tenant applications on top of
|
|
|
774
774
|
1claw platform app-stats <app-id> # Connection/bootstrap/grant statistics
|
|
775
775
|
1claw platform marketplace # Browse the public platform marketplace
|
|
776
776
|
|
|
777
|
+
# Pay an x402 paywall. The vault decides what may be signed; this holds the
|
|
778
|
+
# connection and nothing else.
|
|
779
|
+
1claw pay --agent <id> https://api.example.com/premium # passkey per payment
|
|
780
|
+
1claw pay --agent <id> --mode session https://api.example.com/premium # one touch, a capped window
|
|
781
|
+
|
|
782
|
+
# Enable it first (human only) — pay is off until someone turns it on:
|
|
783
|
+
# PATCH /v1/agents/{id}/pay/settings {"pay_enabled":true,"pay_max_usd":"1.00"}
|
|
784
|
+
# and the agent needs an Ethereum signing key funded with USDC on Base.
|
|
785
|
+
#
|
|
786
|
+
# Try it without spending anything — examples/x402-pay-cli has a mock paywall:
|
|
787
|
+
# node paywall.mjs & ONECLAW_PAY_DEV=1 1claw pay --agent any http://localhost:4022/premium
|
|
788
|
+
|
|
777
789
|
# Fleets — every agent one template provisioned, as one cohort.
|
|
778
790
|
# Each of these acts on all of them at once, so the mutating ones confirm
|
|
779
791
|
# first and print how many agents they are about to touch.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fetching a resource and capturing a 402 exactly as served.
|
|
3
|
+
*
|
|
4
|
+
* The raw bytes matter. The vault computes the digest a person authorizes from
|
|
5
|
+
* this preimage, so anything reinterpreted here — re-encoded JSON, a header
|
|
6
|
+
* parsed into fields — would fall outside what they approved.
|
|
7
|
+
*/
|
|
8
|
+
export interface FetchOutcome {
|
|
9
|
+
status: number;
|
|
10
|
+
/** Present only on a 402. The challenge, byte-for-byte, base64. */
|
|
11
|
+
challengeB64?: string;
|
|
12
|
+
bodyText: string;
|
|
13
|
+
headers: Headers;
|
|
14
|
+
}
|
|
15
|
+
export declare function fetchResource(url: string, opts: {
|
|
16
|
+
method: string;
|
|
17
|
+
body?: string;
|
|
18
|
+
paymentHeader?: string;
|
|
19
|
+
}): Promise<FetchOutcome>;
|
|
20
|
+
//# sourceMappingURL=challenge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"challenge.d.ts","sourceRoot":"","sources":["../../../../src/commands/pay/challenge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAsB,aAAa,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAChE,OAAO,CAAC,YAAY,CAAC,CA2BvB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export async function fetchResource(url, opts) {
|
|
2
|
+
const headers = {};
|
|
3
|
+
if (opts.body)
|
|
4
|
+
headers["Content-Type"] = "application/json";
|
|
5
|
+
if (opts.paymentHeader)
|
|
6
|
+
headers["X-PAYMENT"] = opts.paymentHeader;
|
|
7
|
+
const res = await fetch(url, {
|
|
8
|
+
method: opts.method,
|
|
9
|
+
headers,
|
|
10
|
+
// Buffered by the caller and replayed verbatim on the paid retry (D8).
|
|
11
|
+
body: opts.body,
|
|
12
|
+
});
|
|
13
|
+
const buf = new Uint8Array(await res.arrayBuffer());
|
|
14
|
+
const bodyText = new TextDecoder().decode(buf);
|
|
15
|
+
if (res.status !== 402) {
|
|
16
|
+
return { status: res.status, bodyText, headers: res.headers };
|
|
17
|
+
}
|
|
18
|
+
// x402 v2 carries the challenge in a header; v1 in the body. Whichever the
|
|
19
|
+
// origin used is what gets sent on, unmodified.
|
|
20
|
+
const headerChallenge = res.headers.get("payment-required");
|
|
21
|
+
const challengeB64 = headerChallenge
|
|
22
|
+
? headerChallenge.trim()
|
|
23
|
+
: Buffer.from(buf).toString("base64");
|
|
24
|
+
return { status: 402, challengeB64, bodyText, headers: res.headers };
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=challenge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"challenge.js","sourceRoot":"","sources":["../../../../src/commands/pay/challenge.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,KAAK,UAAU,aAAa,CAC/B,GAAW,EACX,IAA+D;IAE/D,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;IAC5D,IAAI,IAAI,CAAC,aAAa;QAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;IAElE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QACzB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO;QACP,uEAAuE;QACvE,IAAI,EAAE,IAAI,CAAC,IAAI;KAClB,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE/C,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACrB,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IAClE,CAAC;IAED,2EAA2E;IAC3E,gDAAgD;IAChD,MAAM,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,eAAe;QAChC,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE;QACxB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE1C,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Paywall challenge windows, and how many times to chase one.
|
|
3
|
+
*
|
|
4
|
+
* A challenge that expires cannot be re-prepared from the bytes already held:
|
|
5
|
+
* the same expired window comes back, and many challenges carry a single-use
|
|
6
|
+
* nonce. The only way forward is to fetch the resource again for a fresh 402
|
|
7
|
+
* (D6).
|
|
8
|
+
*
|
|
9
|
+
* Capped at two full cycles. A paywall with a ten-second window will always
|
|
10
|
+
* expire while a person reads the authorize page, and retrying forever turns
|
|
11
|
+
* that into an endless prompt rather than an error anyone can act on.
|
|
12
|
+
*/
|
|
13
|
+
export declare const MAX_REFETCH_CYCLES = 2;
|
|
14
|
+
export declare function challengeExpiredMessage(cycles: number): string;
|
|
15
|
+
/** True when the vault told us the challenge expired rather than something else. */
|
|
16
|
+
export declare function isChallengeExpired(err: unknown): boolean;
|
|
17
|
+
//# sourceMappingURL=expiry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expiry.d.ts","sourceRoot":"","sources":["../../../../src/commands/pay/expiry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQ9D;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGxD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Paywall challenge windows, and how many times to chase one.
|
|
3
|
+
*
|
|
4
|
+
* A challenge that expires cannot be re-prepared from the bytes already held:
|
|
5
|
+
* the same expired window comes back, and many challenges carry a single-use
|
|
6
|
+
* nonce. The only way forward is to fetch the resource again for a fresh 402
|
|
7
|
+
* (D6).
|
|
8
|
+
*
|
|
9
|
+
* Capped at two full cycles. A paywall with a ten-second window will always
|
|
10
|
+
* expire while a person reads the authorize page, and retrying forever turns
|
|
11
|
+
* that into an endless prompt rather than an error anyone can act on.
|
|
12
|
+
*/
|
|
13
|
+
export const MAX_REFETCH_CYCLES = 2;
|
|
14
|
+
export function challengeExpiredMessage(cycles) {
|
|
15
|
+
return (`The paywall's challenge window closed ${cycles} times before the payment ` +
|
|
16
|
+
`could be authorized.\n` +
|
|
17
|
+
`Its window is likely too short for a per-payment approval. Try again, or ` +
|
|
18
|
+
`use a spending grant (--mode session) so payments inside the window need ` +
|
|
19
|
+
`no prompt.`);
|
|
20
|
+
}
|
|
21
|
+
/** True when the vault told us the challenge expired rather than something else. */
|
|
22
|
+
export function isChallengeExpired(err) {
|
|
23
|
+
const e = err;
|
|
24
|
+
return e?.status === 409 || /ChallengeExpired/i.test(e?.message ?? "");
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=expiry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expiry.js","sourceRoot":"","sources":["../../../../src/commands/pay/expiry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC,MAAM,UAAU,uBAAuB,CAAC,MAAc;IAClD,OAAO,CACH,yCAAyC,MAAM,4BAA4B;QAC3E,wBAAwB;QACxB,2EAA2E;QAC3E,2EAA2E;QAC3E,YAAY,CACf,CAAC;AACN,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC3C,MAAM,CAAC,GAAG,GAA4C,CAAC;IACvD,OAAO,CAAC,EAAE,MAAM,KAAK,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;AAC3E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/pay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwHpC,eAAO,MAAM,UAAU,SAuFjB,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import open from "open";
|
|
5
|
+
import ora from "ora";
|
|
6
|
+
import { handleError, requireToken } from "../../middleware.js";
|
|
7
|
+
import { fetchResource } from "./challenge.js";
|
|
8
|
+
import { MAX_REFETCH_CYCLES, challengeExpiredMessage, isChallengeExpired, } from "./expiry.js";
|
|
9
|
+
import { isDevSigner, resolveSigner, } from "./signer.js";
|
|
10
|
+
function authorizeUrl(sessionId) {
|
|
11
|
+
const base = process.env.ONECLAW_DASHBOARD_URL?.replace(/\/$/, "") ??
|
|
12
|
+
"https://1claw.co";
|
|
13
|
+
return `${base}/cli/pay-authorize?session=${sessionId}`;
|
|
14
|
+
}
|
|
15
|
+
function describeQuote(q) {
|
|
16
|
+
const amount = q.amount_usd ? `$${q.amount_usd}` : "unknown amount";
|
|
17
|
+
const to = typeof q.pay_to === "string" ? q.pay_to : "?";
|
|
18
|
+
const short = to.length > 12 ? `${to.slice(0, 6)}…${to.slice(-4)}` : to;
|
|
19
|
+
return `${amount} ${q.asset ?? ""} → ${short}`.replace(/\s+/g, " ").trim();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* One attempt: prepare, get whatever authorization is required, sign.
|
|
23
|
+
*
|
|
24
|
+
* Returns null when the paywall's challenge expired, which the caller answers by
|
|
25
|
+
* fetching the resource again rather than retrying this (D6).
|
|
26
|
+
*/
|
|
27
|
+
async function authorizeAndSign(signer, agentId, challengeB64, method, url, mode, idempotencyKey) {
|
|
28
|
+
let prepared;
|
|
29
|
+
try {
|
|
30
|
+
prepared = await signer.prepare(agentId, {
|
|
31
|
+
challenge_b64: challengeB64,
|
|
32
|
+
method,
|
|
33
|
+
resource_url: url,
|
|
34
|
+
idempotency_key: idempotencyKey,
|
|
35
|
+
mode,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
if (isChallengeExpired(err))
|
|
40
|
+
return null;
|
|
41
|
+
throw err;
|
|
42
|
+
}
|
|
43
|
+
console.log(chalk.dim(` 402 │ ${describeQuote(prepared.quote)}`));
|
|
44
|
+
if (prepared.authorization.startsWith("deny:")) {
|
|
45
|
+
throw new Error(`The vault refused this payment — ${prepared.authorization.slice(5).trim()}`);
|
|
46
|
+
}
|
|
47
|
+
if (prepared.short_window) {
|
|
48
|
+
console.log(chalk.yellow(" ⚠ This paywall's window is under 30s and may close while you authorize."));
|
|
49
|
+
}
|
|
50
|
+
if (prepared.authorization === "require_grant") {
|
|
51
|
+
throw new Error("This payment needs a spending grant. Create one with:\n" +
|
|
52
|
+
` 1claw pay grant --agent ${agentId} --cap 5.00 --ttl 15m`);
|
|
53
|
+
}
|
|
54
|
+
if (prepared.authorization === "require_passkey") {
|
|
55
|
+
const url = authorizeUrl(prepared.session_id);
|
|
56
|
+
console.log(` Authorize: ${chalk.cyan(url)}`);
|
|
57
|
+
try {
|
|
58
|
+
await open(url);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
/* headless: the printed URL is the fallback */
|
|
62
|
+
}
|
|
63
|
+
const spinner = ora("Waiting for you to authorize…").start();
|
|
64
|
+
// Bounded by the session, not by a number picked here — the vault
|
|
65
|
+
// already decided how long this payment may stay pending.
|
|
66
|
+
const deadline = new Date(prepared.expires_at).getTime();
|
|
67
|
+
const ok = await signer.waitForAuthorization(prepared.session_id, deadline);
|
|
68
|
+
if (!ok) {
|
|
69
|
+
spinner.fail("Not authorized.");
|
|
70
|
+
throw new Error("The payment was not authorized before the session expired.");
|
|
71
|
+
}
|
|
72
|
+
spinner.succeed("Authorized");
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
const signed = await signer.sign(agentId, {
|
|
76
|
+
session_id: prepared.session_id,
|
|
77
|
+
mode,
|
|
78
|
+
});
|
|
79
|
+
return {
|
|
80
|
+
header: signed.payment_header,
|
|
81
|
+
paymentId: signed.payment_id,
|
|
82
|
+
amount: signed.amount_usd,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
if (isChallengeExpired(err))
|
|
87
|
+
return null;
|
|
88
|
+
throw err;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export const payCommand = new Command("pay")
|
|
92
|
+
.description("Pay for an x402-gated resource")
|
|
93
|
+
.argument("<url>", "the resource to fetch")
|
|
94
|
+
.requiredOption("--agent <id>", "agent whose key signs the payment")
|
|
95
|
+
.option("--method <verb>", "HTTP method", "GET")
|
|
96
|
+
.option("--body <json>", "request body (buffered and replayed on the paid retry)")
|
|
97
|
+
.option("--mode <mode>", "strict | session | auto — a request; the vault decides what is permitted", "strict")
|
|
98
|
+
.action(async (url, opts) => {
|
|
99
|
+
try {
|
|
100
|
+
const signer = resolveSigner();
|
|
101
|
+
// The dev signer never calls the vault, so it needs no session.
|
|
102
|
+
// Everything else does, and finding that out before fetching a
|
|
103
|
+
// paywall is kinder than finding out after.
|
|
104
|
+
if (!isDevSigner(signer))
|
|
105
|
+
requireToken();
|
|
106
|
+
// One key for the whole attempt, including refetch cycles: a crash
|
|
107
|
+
// mid-sign must not become a second payment for the same resource.
|
|
108
|
+
const idempotencyKey = randomUUID();
|
|
109
|
+
let paid = null;
|
|
110
|
+
let cycles = 0;
|
|
111
|
+
while (cycles <= MAX_REFETCH_CYCLES) {
|
|
112
|
+
const first = await fetchResource(url, {
|
|
113
|
+
method: opts.method,
|
|
114
|
+
body: opts.body,
|
|
115
|
+
});
|
|
116
|
+
if (first.status !== 402) {
|
|
117
|
+
// Nothing to pay for. Say so rather than inventing a payment.
|
|
118
|
+
console.log(chalk.dim(` ${first.status} │ no payment required`));
|
|
119
|
+
process.stdout.write(first.bodyText);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
paid = await authorizeAndSign(signer, opts.agent, first.challengeB64, opts.method, url, opts.mode, idempotencyKey);
|
|
123
|
+
if (paid)
|
|
124
|
+
break;
|
|
125
|
+
cycles += 1;
|
|
126
|
+
if (cycles > MAX_REFETCH_CYCLES)
|
|
127
|
+
break;
|
|
128
|
+
console.log(chalk.yellow(` Challenge expired — fetching a fresh one (${cycles}/${MAX_REFETCH_CYCLES})`));
|
|
129
|
+
}
|
|
130
|
+
if (!paid)
|
|
131
|
+
throw new Error(challengeExpiredMessage(MAX_REFETCH_CYCLES));
|
|
132
|
+
console.log(chalk.dim(` signed │ $${paid.amount}`));
|
|
133
|
+
const retry = await fetchResource(url, {
|
|
134
|
+
method: opts.method,
|
|
135
|
+
body: opts.body,
|
|
136
|
+
paymentHeader: paid.header,
|
|
137
|
+
});
|
|
138
|
+
// Advisory only. It moves the audit trail; it never returns limit
|
|
139
|
+
// headroom, so there is nothing to gain by shading it.
|
|
140
|
+
await signer
|
|
141
|
+
.reportResult(opts.agent, paid.paymentId, {
|
|
142
|
+
http_status: retry.status,
|
|
143
|
+
settled: retry.status < 400,
|
|
144
|
+
})
|
|
145
|
+
.catch(() => {
|
|
146
|
+
/* reporting is best-effort by design */
|
|
147
|
+
});
|
|
148
|
+
console.log(chalk.dim(` ${retry.status} │ paid`));
|
|
149
|
+
process.stdout.write(retry.bodyText);
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
handleError(err);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/pay/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Everything the pay command needs from the vault, behind one interface.
|
|
3
|
+
*
|
|
4
|
+
* The seam exists so the flow can be exercised without a funded agent and a
|
|
5
|
+
* live paywall — CI needs to know the refetch loop and the retry semantics are
|
|
6
|
+
* right, and neither of those is about signing. The production path is always
|
|
7
|
+
* Vault-backed; the dev signer never produces anything a paywall would accept.
|
|
8
|
+
*/
|
|
9
|
+
export interface PrepareResult {
|
|
10
|
+
session_id: string;
|
|
11
|
+
payment_digest: string;
|
|
12
|
+
sign_idempotency_key: string;
|
|
13
|
+
quote: Record<string, unknown>;
|
|
14
|
+
valid_before: string | null;
|
|
15
|
+
expires_at: string;
|
|
16
|
+
authorization: string;
|
|
17
|
+
short_window: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface SignResult {
|
|
20
|
+
payment_id: string;
|
|
21
|
+
payment_header: string;
|
|
22
|
+
amount_usd: string;
|
|
23
|
+
pay_to: string;
|
|
24
|
+
grant_id: string | null;
|
|
25
|
+
}
|
|
26
|
+
export interface PaySigner {
|
|
27
|
+
prepare(agentId: string, body: {
|
|
28
|
+
challenge_b64: string;
|
|
29
|
+
method: string;
|
|
30
|
+
resource_url: string;
|
|
31
|
+
idempotency_key?: string;
|
|
32
|
+
mode?: string;
|
|
33
|
+
}): Promise<PrepareResult>;
|
|
34
|
+
sign(agentId: string, body: {
|
|
35
|
+
session_id: string;
|
|
36
|
+
mode?: string;
|
|
37
|
+
grant_id?: string;
|
|
38
|
+
}): Promise<SignResult>;
|
|
39
|
+
/** Poll a session until a human has authorized it, or the deadline passes. */
|
|
40
|
+
waitForAuthorization(sessionId: string, deadlineMs: number): Promise<boolean>;
|
|
41
|
+
reportResult(agentId: string, paymentId: string, body: {
|
|
42
|
+
http_status?: number;
|
|
43
|
+
settled?: boolean;
|
|
44
|
+
error?: string | null;
|
|
45
|
+
}): Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
export declare class VaultPaySigner implements PaySigner {
|
|
48
|
+
prepare(agentId: string, body: Parameters<PaySigner["prepare"]>[1]): Promise<PrepareResult>;
|
|
49
|
+
sign(agentId: string, body: Parameters<PaySigner["sign"]>[1]): Promise<SignResult>;
|
|
50
|
+
waitForAuthorization(sessionId: string, deadlineMs: number): Promise<boolean>;
|
|
51
|
+
reportResult(agentId: string, paymentId: string, body: Parameters<PaySigner["reportResult"]>[2]): Promise<void>;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A signer for tests. Produces a syntactically shaped header that no paywall
|
|
55
|
+
* will honour, which is the point: it exercises the flow without ever being
|
|
56
|
+
* mistakable for a real payment.
|
|
57
|
+
*
|
|
58
|
+
* Only reachable with ONECLAW_PAY_DEV=1.
|
|
59
|
+
*/
|
|
60
|
+
export declare class DevPaySigner implements PaySigner {
|
|
61
|
+
private counter;
|
|
62
|
+
/**
|
|
63
|
+
* Simulate a paywall whose challenge window keeps closing.
|
|
64
|
+
*
|
|
65
|
+
* The refetch cap is a real behaviour with a real failure mode — an endless
|
|
66
|
+
* authorize prompt — and it cannot be exercised against a signer that always
|
|
67
|
+
* succeeds. ONECLAW_PAY_DEV_EXPIRE=n makes the first n prepares expire.
|
|
68
|
+
*/
|
|
69
|
+
private expiriesLeft;
|
|
70
|
+
prepare(_agentId: string, body: Parameters<PaySigner["prepare"]>[1]): Promise<{
|
|
71
|
+
session_id: string;
|
|
72
|
+
payment_digest: string;
|
|
73
|
+
sign_idempotency_key: string;
|
|
74
|
+
quote: {
|
|
75
|
+
amount_usd: string;
|
|
76
|
+
pay_to: string;
|
|
77
|
+
resource_url: string;
|
|
78
|
+
};
|
|
79
|
+
valid_before: string;
|
|
80
|
+
expires_at: string;
|
|
81
|
+
authorization: string;
|
|
82
|
+
short_window: boolean;
|
|
83
|
+
}>;
|
|
84
|
+
sign(_agentId: string, body: Parameters<PaySigner["sign"]>[1]): Promise<{
|
|
85
|
+
payment_id: string;
|
|
86
|
+
payment_header: string;
|
|
87
|
+
amount_usd: string;
|
|
88
|
+
pay_to: string;
|
|
89
|
+
grant_id: null;
|
|
90
|
+
}>;
|
|
91
|
+
waitForAuthorization(): Promise<boolean>;
|
|
92
|
+
reportResult(): Promise<void>;
|
|
93
|
+
}
|
|
94
|
+
export declare function resolveSigner(): PaySigner;
|
|
95
|
+
/** Whether this signer talks to the vault at all. */
|
|
96
|
+
export declare function isDevSigner(s: PaySigner): boolean;
|
|
97
|
+
//# sourceMappingURL=signer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../../../src/commands/pay/signer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { api } from "../../client.js";
|
|
2
|
+
export class VaultPaySigner {
|
|
3
|
+
async prepare(agentId, body) {
|
|
4
|
+
return api(`/agents/${agentId}/pay/prepare`, {
|
|
5
|
+
method: "POST",
|
|
6
|
+
body,
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
async sign(agentId, body) {
|
|
10
|
+
return api(`/agents/${agentId}/pay/sign`, {
|
|
11
|
+
method: "POST",
|
|
12
|
+
body,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
async waitForAuthorization(sessionId, deadlineMs) {
|
|
16
|
+
// Fixed 2s cadence: the poll draws on the auth rate limiter, and a
|
|
17
|
+
// tighter loop drains a shared bucket for every other suite and session
|
|
18
|
+
// on the same address.
|
|
19
|
+
while (Date.now() < deadlineMs) {
|
|
20
|
+
const s = await api(`/pay-sessions/${sessionId}`);
|
|
21
|
+
if (s.status === "authorized")
|
|
22
|
+
return true;
|
|
23
|
+
if (s.status === "expired" || s.status === "failed")
|
|
24
|
+
return false;
|
|
25
|
+
await new Promise((r) => setTimeout(r, 2000));
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
async reportResult(agentId, paymentId, body) {
|
|
30
|
+
await api(`/agents/${agentId}/pay/${paymentId}/result`, {
|
|
31
|
+
method: "POST",
|
|
32
|
+
body,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* A signer for tests. Produces a syntactically shaped header that no paywall
|
|
38
|
+
* will honour, which is the point: it exercises the flow without ever being
|
|
39
|
+
* mistakable for a real payment.
|
|
40
|
+
*
|
|
41
|
+
* Only reachable with ONECLAW_PAY_DEV=1.
|
|
42
|
+
*/
|
|
43
|
+
export class DevPaySigner {
|
|
44
|
+
counter = 0;
|
|
45
|
+
/**
|
|
46
|
+
* Simulate a paywall whose challenge window keeps closing.
|
|
47
|
+
*
|
|
48
|
+
* The refetch cap is a real behaviour with a real failure mode — an endless
|
|
49
|
+
* authorize prompt — and it cannot be exercised against a signer that always
|
|
50
|
+
* succeeds. ONECLAW_PAY_DEV_EXPIRE=n makes the first n prepares expire.
|
|
51
|
+
*/
|
|
52
|
+
expiriesLeft = Number(process.env.ONECLAW_PAY_DEV_EXPIRE ?? 0);
|
|
53
|
+
async prepare(_agentId, body) {
|
|
54
|
+
if (this.expiriesLeft > 0) {
|
|
55
|
+
this.expiriesLeft -= 1;
|
|
56
|
+
const err = new Error("ChallengeExpired: re-fetch the resource");
|
|
57
|
+
err.status = 409;
|
|
58
|
+
throw err;
|
|
59
|
+
}
|
|
60
|
+
this.counter += 1;
|
|
61
|
+
return {
|
|
62
|
+
session_id: `dev-session-${this.counter}`,
|
|
63
|
+
payment_digest: "0".repeat(64),
|
|
64
|
+
sign_idempotency_key: body.idempotency_key ?? `dev-idem-${this.counter}`,
|
|
65
|
+
quote: { amount_usd: "0.001", pay_to: "0xDEV", resource_url: body.resource_url },
|
|
66
|
+
valid_before: new Date(Date.now() + 60_000).toISOString(),
|
|
67
|
+
expires_at: new Date(Date.now() + 900_000).toISOString(),
|
|
68
|
+
authorization: "allow",
|
|
69
|
+
short_window: false,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
async sign(_agentId, body) {
|
|
73
|
+
return {
|
|
74
|
+
payment_id: body.session_id,
|
|
75
|
+
payment_header: "dev-not-a-real-payment",
|
|
76
|
+
amount_usd: "0.001",
|
|
77
|
+
pay_to: "0xDEV",
|
|
78
|
+
grant_id: null,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
async waitForAuthorization() {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
async reportResult() {
|
|
85
|
+
/* nothing to record */
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export function resolveSigner() {
|
|
89
|
+
return process.env.ONECLAW_PAY_DEV === "1"
|
|
90
|
+
? new DevPaySigner()
|
|
91
|
+
: new VaultPaySigner();
|
|
92
|
+
}
|
|
93
|
+
/** Whether this signer talks to the vault at all. */
|
|
94
|
+
export function isDevSigner(s) {
|
|
95
|
+
return s instanceof DevPaySigner;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=signer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../../../../src/commands/pay/signer.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2EpC,wBAAgB,aAAa,IAAI,OAAO,CAyHvC"}
|
package/dist/src/index.js
CHANGED
|
@@ -11,6 +11,7 @@ import { secretCommand } from "./commands/secret.js";
|
|
|
11
11
|
import { envCommand } from "./commands/env.js";
|
|
12
12
|
import { agentCommand } from "./commands/agent.js";
|
|
13
13
|
import { cardCommand } from "./commands/card.js";
|
|
14
|
+
import { payCommand } from "./commands/pay/index.js";
|
|
14
15
|
import { policyCommand } from "./commands/policy.js";
|
|
15
16
|
import { shareCommand } from "./commands/share.js";
|
|
16
17
|
import { billingCommand } from "./commands/billing.js";
|
|
@@ -82,6 +83,7 @@ export function createProgram() {
|
|
|
82
83
|
program.addCommand(envCommand);
|
|
83
84
|
program.addCommand(agentCommand);
|
|
84
85
|
program.addCommand(cardCommand);
|
|
86
|
+
program.addCommand(payCommand);
|
|
85
87
|
program.addCommand(policyCommand);
|
|
86
88
|
// Sharing
|
|
87
89
|
program.addCommand(shareCommand);
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|