@absol-labs/agent 0.12.0-rc.1 → 0.12.0-rc.3
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 +1 -1
- package/dist/cli/commands/claim.d.ts +41 -0
- package/dist/cli/commands/claim.d.ts.map +1 -1
- package/dist/cli/commands/claim.js +127 -28
- package/dist/cli/commands/claim.js.map +1 -1
- package/dist/cli/commands/pay.d.ts +15 -0
- package/dist/cli/commands/pay.d.ts.map +1 -1
- package/dist/cli/commands/pay.js +131 -7
- package/dist/cli/commands/pay.js.map +1 -1
- package/dist/cli/commands/reclaim.d.ts.map +1 -1
- package/dist/cli/commands/reclaim.js +20 -4
- package/dist/cli/commands/reclaim.js.map +1 -1
- package/dist/cli/commands/refund.d.ts +21 -1
- package/dist/cli/commands/refund.d.ts.map +1 -1
- package/dist/cli/commands/refund.js +323 -32
- package/dist/cli/commands/refund.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +11 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/watch.d.ts.map +1 -1
- package/dist/cli/commands/watch.js +2 -0
- package/dist/cli/commands/watch.js.map +1 -1
- package/dist/cli/context.d.ts +19 -0
- package/dist/cli/context.d.ts.map +1 -1
- package/dist/cli/deps.d.ts +20 -0
- package/dist/cli/deps.d.ts.map +1 -1
- package/dist/cli/deps.js +14 -0
- package/dist/cli/deps.js.map +1 -1
- package/dist/cli/progress.d.ts +13 -1
- package/dist/cli/progress.d.ts.map +1 -1
- package/dist/cli/progress.js +7 -1
- package/dist/cli/progress.js.map +1 -1
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +26 -14
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/status.d.ts +109 -0
- package/dist/cli/status.d.ts.map +1 -1
- package/dist/cli/status.js +335 -47
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/wallet.d.ts +1 -1
- package/dist/cli/wallet.d.ts.map +1 -1
- package/dist/cli/wallet.js +28 -4
- package/dist/cli/wallet.js.map +1 -1
- package/dist/gateway/http-server.d.ts +17 -0
- package/dist/gateway/http-server.d.ts.map +1 -1
- package/dist/gateway/http-server.js +76 -9
- package/dist/gateway/http-server.js.map +1 -1
- package/dist/gateway/x402-opener-mode.d.ts +39 -2
- package/dist/gateway/x402-opener-mode.d.ts.map +1 -1
- package/dist/gateway/x402-opener-mode.js +273 -43
- package/dist/gateway/x402-opener-mode.js.map +1 -1
- package/dist/mcp/server.d.ts +12 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +28 -9
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/x402-tools.d.ts +8 -3
- package/dist/mcp/x402-tools.d.ts.map +1 -1
- package/dist/mcp/x402-tools.js +126 -6
- package/dist/mcp/x402-tools.js.map +1 -1
- package/dist/sdk/client.d.ts +13 -0
- package/dist/sdk/client.d.ts.map +1 -1
- package/dist/sdk/client.js +15 -0
- package/dist/sdk/client.js.map +1 -1
- package/dist/x402-buyer/pay.d.ts +22 -0
- package/dist/x402-buyer/pay.d.ts.map +1 -1
- package/dist/x402-buyer/pay.js +33 -3
- package/dist/x402-buyer/pay.js.map +1 -1
- package/dist/x402-opener/block-floors.d.ts +35 -0
- package/dist/x402-opener/block-floors.d.ts.map +1 -0
- package/dist/x402-opener/block-floors.js +72 -0
- package/dist/x402-opener/block-floors.js.map +1 -0
- package/dist/x402-opener/facilitator-entry.js +4 -1
- package/dist/x402-opener/facilitator-entry.js.map +1 -1
- package/dist/x402-opener/facilitator-server.d.ts +29 -0
- package/dist/x402-opener/facilitator-server.d.ts.map +1 -1
- package/dist/x402-opener/facilitator-server.js +74 -1
- package/dist/x402-opener/facilitator-server.js.map +1 -1
- package/dist/x402-opener/index.d.ts +1 -0
- package/dist/x402-opener/index.d.ts.map +1 -1
- package/dist/x402-opener/index.js +1 -0
- package/dist/x402-opener/index.js.map +1 -1
- package/dist/x402-opener/refund-relay.d.ts +92 -5
- package/dist/x402-opener/refund-relay.d.ts.map +1 -1
- package/dist/x402-opener/refund-relay.js +482 -202
- package/dist/x402-opener/refund-relay.js.map +1 -1
- package/dist/x402-opener/scheme.d.ts +87 -0
- package/dist/x402-opener/scheme.d.ts.map +1 -1
- package/dist/x402-opener/scheme.js +340 -40
- package/dist/x402-opener/scheme.js.map +1 -1
- package/dist/x402-opener/terms.d.ts +61 -1
- package/dist/x402-opener/terms.d.ts.map +1 -1
- package/dist/x402-opener/terms.js +94 -2
- package/dist/x402-opener/terms.js.map +1 -1
- package/docs/cli.md +110 -11
- package/docs/mcp-reference.md +18 -2
- package/docs/quickstart.md +3 -3
- package/docs/x402.md +233 -36
- package/package.json +3 -3
- package/src/cli/commands/claim.ts +184 -33
- package/src/cli/commands/pay.ts +150 -8
- package/src/cli/commands/reclaim.ts +25 -5
- package/src/cli/commands/refund.ts +377 -38
- package/src/cli/commands/status.ts +11 -1
- package/src/cli/commands/watch.ts +4 -0
- package/src/cli/context.ts +16 -0
- package/src/cli/deps.ts +37 -0
- package/src/cli/progress.ts +21 -2
- package/src/cli/run.ts +26 -13
- package/src/cli/status.ts +468 -50
- package/src/cli/wallet.ts +44 -7
- package/src/gateway/http-server.ts +96 -8
- package/src/gateway/x402-opener-mode.ts +365 -43
- package/src/mcp/server.ts +43 -11
- package/src/mcp/x402-tools.ts +171 -7
- package/src/sdk/client.ts +25 -0
- package/src/x402-buyer/pay.ts +41 -3
- package/src/x402-opener/block-floors.ts +78 -0
- package/src/x402-opener/facilitator-entry.ts +4 -1
- package/src/x402-opener/facilitator-server.ts +108 -1
- package/src/x402-opener/index.ts +1 -0
- package/src/x402-opener/refund-relay.ts +609 -210
- package/src/x402-opener/scheme.ts +497 -41
- package/src/x402-opener/terms.ts +155 -2
|
@@ -27,6 +27,7 @@ export const reclaimCommand = {
|
|
|
27
27
|
signs: true,
|
|
28
28
|
async run(context) {
|
|
29
29
|
const { args, config, env, out, deps } = context;
|
|
30
|
+
const setActivity = (activity) => context.progress?.setActivity(activity);
|
|
30
31
|
const [streamIdArg] = args.positionals;
|
|
31
32
|
if (streamIdArg === undefined) {
|
|
32
33
|
throw usageError("metrik reclaim requires a <streamId>");
|
|
@@ -98,7 +99,9 @@ export const reclaimCommand = {
|
|
|
98
99
|
}
|
|
99
100
|
else {
|
|
100
101
|
out.note(`closed in ${closeResult.txHash} — waiting for it to land …`);
|
|
102
|
+
setActivity(`waiting for the RPC endpoint to show the close in ${closeResult.txHash}`);
|
|
101
103
|
await awaitClosed(read, streamId, deps.sleep, closeResult.txHash);
|
|
104
|
+
setActivity(null);
|
|
102
105
|
// A stream closed before any checkpoint covers its stop time is the
|
|
103
106
|
// ORDINARY outcome of a short trial run, not an exotic one — and it
|
|
104
107
|
// is the state `--close-first` leaves behind by construction. Say
|
|
@@ -122,7 +125,11 @@ export const reclaimCommand = {
|
|
|
122
125
|
sleep: deps.sleep,
|
|
123
126
|
isRetryable: async (error) => await isWaitingForCheckpoint(error, read, streamId, deps.nowSeconds()),
|
|
124
127
|
explainFailure: async (error) => await explainReclaimFailure(error, read, streamId, deps.nowSeconds()),
|
|
125
|
-
onRetry: (attempt, reason) =>
|
|
128
|
+
onRetry: (attempt, reason) => {
|
|
129
|
+
out.note(`reclaim blocked: no checkpoint covers the stream's stop time yet (attempt ${attempt}/${attempts}) — ${reason}`);
|
|
130
|
+
// The heartbeat must describe THIS wait, not guess at a slow RPC.
|
|
131
|
+
setActivity(`waiting for the oracle's next checkpoint (attempt ${attempt}/${attempts} was blocked; retrying every ${interval}s)`);
|
|
132
|
+
},
|
|
126
133
|
// "Retry later" is the wrong advice when the oracle is gone: every
|
|
127
134
|
// attempt this command makes needs a proof FROM that oracle. So the
|
|
128
135
|
// give-up message names the path that needs no proof, and says whether
|
|
@@ -132,11 +139,13 @@ export const reclaimCommand = {
|
|
|
132
139
|
// Read the settled figure back only once the node we are reading from has
|
|
133
140
|
// actually applied the reclaim. The public RPC is load-balanced, so an
|
|
134
141
|
// immediate read can land on a lagged node and report `settledCumulative: 0`
|
|
135
|
-
// for a stream that just settled a non-zero amount — printing
|
|
136
|
-
//
|
|
142
|
+
// for a stream that just settled a non-zero amount — printing an operator
|
|
143
|
+
// entitlement of 0 USDC when it was not zero. Poll for `reclaimed` (which the
|
|
137
144
|
// transaction we just landed sets) so the number beside it is from the same
|
|
138
145
|
// post-reclaim state. Bounded, and falls back to the last value read.
|
|
146
|
+
setActivity("waiting for the RPC endpoint to show the reclaim");
|
|
139
147
|
const stream = await readSettledStream(read, streamId, deps.sleep);
|
|
148
|
+
setActivity(null);
|
|
140
149
|
// The refund comes from the reclaim's own BuyerReclaimed event, never from
|
|
141
150
|
// a post-reclaim read: reclaim overwrites `deposit` with the operator's
|
|
142
151
|
// entitlement, so deposit − settled reads 0 after every reclaim.
|
|
@@ -171,7 +180,14 @@ export const reclaimCommand = {
|
|
|
171
180
|
...(stream === null
|
|
172
181
|
? []
|
|
173
182
|
: [
|
|
174
|
-
|
|
183
|
+
// No USDC moves to the operator at reclaim: reclaim fixes the
|
|
184
|
+
// operator's entitlement, the operator claims it later, and the
|
|
185
|
+
// protocol fee comes out at that claim. "Settled to operator"
|
|
186
|
+
// read as a payment that never happened.
|
|
187
|
+
[
|
|
188
|
+
"operator entitled",
|
|
189
|
+
`${formatUsdc(stream.settledCumulative)} (claims separately; fee taken at claim)`,
|
|
190
|
+
],
|
|
175
191
|
...(refunded === null
|
|
176
192
|
? []
|
|
177
193
|
: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reclaim.js","sourceRoot":"","sources":["../../../src/cli/commands/reclaim.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reclaim.js","sourceRoot":"","sources":["../../../src/cli/commands/reclaim.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,33 @@
|
|
|
1
|
-
import type { RefundClient } from "@absol-labs/sdk/x402";
|
|
1
|
+
import type { RefundClient, RefundStatus } from "@absol-labs/sdk/x402";
|
|
2
2
|
import type { CommandSpec } from "../context.js";
|
|
3
3
|
/** Environment fallback for `--refund-url`. */
|
|
4
4
|
export declare const REFUND_URL_ENV = "METRIK_AGENT_REFUND_URL";
|
|
5
5
|
export declare const refundCommand: CommandSpec;
|
|
6
|
+
/** `closed`, `expired` (Active on-chain but past expiresAt) or `active`. */
|
|
7
|
+
export declare function stateOf(status: RefundStatus): "active" | "expired" | "closed";
|
|
8
|
+
/** Why a recovery is over. */
|
|
9
|
+
export type FinishedReason = "reclaimed" | "nothing-to-reclaim";
|
|
10
|
+
/** Why a requested `--close` / `--reclaim` sent nothing. */
|
|
11
|
+
export type SkipReason = FinishedReason | "already-closed";
|
|
12
|
+
/**
|
|
13
|
+
* Whether the relay's status says nothing is left to recover. `reclaimed` is
|
|
14
|
+
* the chain's one-reclaim-per-stream flag; `next: none` with `reclaimable: 0`
|
|
15
|
+
* is the relay's "the verified delivery covers the whole deposit".
|
|
16
|
+
*/
|
|
17
|
+
export declare function finishedReason(status: RefundStatus): FinishedReason | null;
|
|
18
|
+
export declare function describeFinished(reason: FinishedReason): string;
|
|
6
19
|
/**
|
|
7
20
|
* Accepts the relay's full stream URL, a `{streamId}` template, or the relay's
|
|
8
21
|
* base origin (`https://relay.example` -> `https://relay.example/streams/<id>`).
|
|
9
22
|
*/
|
|
10
23
|
export declare function resolveRefundUrl(raw: string | undefined, streamId: `0x${string}`): string;
|
|
11
24
|
export declare function explainRefundFailure(error: unknown): unknown;
|
|
25
|
+
/**
|
|
26
|
+
* What to do after a relay refusal. The on-chain fallback is only offered
|
|
27
|
+
* where it can still recover something: never "close it (needs gas)" for a
|
|
28
|
+
* stream that is already closed, and never any recovery at all for one with
|
|
29
|
+
* nothing left in it.
|
|
30
|
+
*/
|
|
31
|
+
export declare function relayRefusalHint(code: string | undefined): string;
|
|
12
32
|
export type { RefundClient };
|
|
13
33
|
//# sourceMappingURL=refund.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refund.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/refund.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,
|
|
1
|
+
{"version":3,"file":"refund.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/refund.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAEZ,YAAY,EAEb,MAAM,sBAAsB,CAAC;AAe9B,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjE,+CAA+C;AAC/C,eAAO,MAAM,cAAc,4BAA4B,CAAC;AAcxD,eAAO,MAAM,aAAa,EAAE,WAmO3B,CAAC;AAmFF,4EAA4E;AAC5E,wBAAgB,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAY7E;AAMD,8BAA8B;AAC9B,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,oBAAoB,CAAC;AAChE,4DAA4D;AAC5D,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAE3D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,cAAc,GAAG,IAAI,CAM1E;AAiDD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAI/D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,QAAQ,EAAE,KAAK,MAAM,EAAE,GACtB,MAAM,CAmBR;AAUD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAqC5D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAajE;AAoFD,YAAY,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -4,11 +4,20 @@ import { formatUsdc } from "../amounts.js";
|
|
|
4
4
|
import { assertTestnetRpc, parseBytes32 } from "../config.js";
|
|
5
5
|
import { CliError, configError, usageError } from "../errors.js";
|
|
6
6
|
import { signRecoveryMandate } from "../mandate.js";
|
|
7
|
-
import { isPrivyWalletSource, resolveCliWallet } from "../wallet.js";
|
|
7
|
+
import { CDP_ENV_VARS, PRIVATE_KEY_ENV, isPrivyWalletSource, resolveCliWallet, } from "../wallet.js";
|
|
8
8
|
/** Environment fallback for `--refund-url`. */
|
|
9
9
|
export const REFUND_URL_ENV = "METRIK_AGENT_REFUND_URL";
|
|
10
10
|
const DEFAULT_ATTEMPTS = 5;
|
|
11
11
|
const DEFAULT_MAX_WAIT_SECONDS = 60;
|
|
12
|
+
/**
|
|
13
|
+
* After a close/reclaim, how many times the summary re-reads the relay until
|
|
14
|
+
* it reflects the transaction just mined (a load-balanced RPC behind the relay
|
|
15
|
+
* can answer from a node that has not seen it yet), and how long it waits
|
|
16
|
+
* between reads. Bounded: past it the summary is derived from the verified
|
|
17
|
+
* receipts instead.
|
|
18
|
+
*/
|
|
19
|
+
const POST_ACTION_READS = 6;
|
|
20
|
+
const POST_ACTION_INTERVAL_MS = 1_500;
|
|
12
21
|
export const refundCommand = {
|
|
13
22
|
name: "refund",
|
|
14
23
|
summary: "Recover the unearned part of an x402 payment through the gasless refund relay",
|
|
@@ -19,6 +28,12 @@ export const refundCommand = {
|
|
|
19
28
|
// permissionless and always pays `payerOf(streamId)`.
|
|
20
29
|
signs: false,
|
|
21
30
|
requiresKey: false,
|
|
31
|
+
walletHelp: {
|
|
32
|
+
tag: "[--close needs the payer's key]",
|
|
33
|
+
text: "Broadcasts nothing itself: the seller's refund relay broadcasts and pays the gas. Status and --reclaim need no wallet. " +
|
|
34
|
+
"--close signs the payer's off-chain EIP-712 Close message, so it needs the key that paid (no ETH or USDC needed) in the environment: " +
|
|
35
|
+
`${PRIVATE_KEY_ENV} or ${CDP_ENV_VARS.join(" + ")}. A Privy wallet cannot sign the Close.`,
|
|
36
|
+
},
|
|
22
37
|
async run(context) {
|
|
23
38
|
const { args, config, env, out, deps } = context;
|
|
24
39
|
if (deps.x402 === undefined) {
|
|
@@ -30,6 +45,13 @@ export const refundCommand = {
|
|
|
30
45
|
throw usageError("metrik refund requires a <streamId>");
|
|
31
46
|
}
|
|
32
47
|
const streamId = parseBytes32(streamIdArg, "<streamId>");
|
|
48
|
+
if (/^0x0{64}$/i.test(streamId)) {
|
|
49
|
+
// Stream id 0 = an upfront-only payment (`metrik pay` printed no stream):
|
|
50
|
+
// nothing was escrowed. A FINISHED state, not a failure — and nothing is
|
|
51
|
+
// read, requested, signed or sent for it.
|
|
52
|
+
reportNothingToRefund(context, streamId);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
33
55
|
const refundUrl = resolveRefundUrl(stringFlag(args, "refund-url") ?? env[REFUND_URL_ENV], streamId);
|
|
34
56
|
const doClose = booleanFlag(args, "close");
|
|
35
57
|
const doReclaim = booleanFlag(args, "reclaim");
|
|
@@ -54,41 +76,109 @@ export const refundCommand = {
|
|
|
54
76
|
maxDelayMs: maxWait * 1_000,
|
|
55
77
|
});
|
|
56
78
|
let closeResult = null;
|
|
79
|
+
let closeSkipped = null;
|
|
80
|
+
// Set when the relay itself says there is nothing left: the stream was
|
|
81
|
+
// already reclaimed, or the verified delivery covers the whole deposit.
|
|
82
|
+
// Those are FINISHED recoveries, not failures — a second
|
|
83
|
+
// `--close --reclaim` on a done stream must exit 0 and must never point
|
|
84
|
+
// the payer at a gas-spending on-chain recovery that cannot recover a cent.
|
|
85
|
+
let finishedByRelay = null;
|
|
57
86
|
if (doClose) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
87
|
+
// Ask first: a stream that is already closed (or already finished) needs
|
|
88
|
+
// no Close, so there is nothing to sign and no wallet is needed.
|
|
89
|
+
const before = await relay(() => refunds.status());
|
|
90
|
+
const finishedBefore = finishedReason(before);
|
|
91
|
+
if (finishedBefore !== null || before.status === "closed") {
|
|
92
|
+
closeSkipped = finishedBefore ?? "already-closed";
|
|
93
|
+
finishedByRelay = finishedBefore;
|
|
94
|
+
out.note(finishedBefore === null
|
|
95
|
+
? "stream is already closed — no Close to sign."
|
|
96
|
+
: `stream is already closed and ${finishedBefore === "reclaimed" ? "reclaimed" : "has nothing left to reclaim"} — no Close to sign.`);
|
|
65
97
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const decision = await verifyMandateOwnerSignature(mandate);
|
|
72
|
-
if (!decision.allowed) {
|
|
73
|
-
throw new CliError(`mandate denied: ${decision.reason}`, {
|
|
74
|
-
exitCode: 3,
|
|
98
|
+
else {
|
|
99
|
+
const wallet = await resolveCliWallet(env, {
|
|
100
|
+
purpose: "payer-close",
|
|
101
|
+
note: out.note,
|
|
102
|
+
rpcUrl: config.rpcUrl,
|
|
75
103
|
});
|
|
104
|
+
if (isPrivyWalletSource(wallet.source)) {
|
|
105
|
+
throw configError("metrik refund --close cannot sign with a Privy wallet", "the payer signs the opener's EIP-712 Close, which the Privy broker's typed-data policy does not allow. Use the key that paid.");
|
|
106
|
+
}
|
|
107
|
+
// Buyer recovery: authorized on the mandate OWNER's signature alone,
|
|
108
|
+
// like `metrik close` — never on caps or expiry, so nothing can strand
|
|
109
|
+
// the payer's own money. The SDK then refuses a signer that is not
|
|
110
|
+
// `payerOf(streamId)` before anything is signed for the relay.
|
|
111
|
+
const mandate = await signRecoveryMandate(wallet.account, config.chainId);
|
|
112
|
+
const decision = await verifyMandateOwnerSignature(mandate);
|
|
113
|
+
if (!decision.allowed) {
|
|
114
|
+
throw new CliError(`mandate denied: ${decision.reason}`, {
|
|
115
|
+
exitCode: 3,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
try {
|
|
119
|
+
closeResult = await relay(() => refunds.close({
|
|
120
|
+
signer: wallet.account,
|
|
121
|
+
}));
|
|
122
|
+
out.note(`close relayed in ${closeResult.transaction}${closeResult.verified ? " (receipt verified on-chain)" : ""}`);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
// The status read above said "active", but the stream closed in the
|
|
126
|
+
// meantime (it reached expiresAt, or another close landed): the
|
|
127
|
+
// state the payer asked for. Anything else is a real failure.
|
|
128
|
+
if (relayCode(error) !== "already-closed")
|
|
129
|
+
throw error;
|
|
130
|
+
closeSkipped = "already-closed";
|
|
131
|
+
out.note("stream was already closed — no Close was needed.");
|
|
132
|
+
}
|
|
76
133
|
}
|
|
77
|
-
closeResult = await relay(() => refunds.close({
|
|
78
|
-
signer: wallet.account,
|
|
79
|
-
}));
|
|
80
|
-
out.note(`close relayed in ${closeResult.transaction}${closeResult.verified ? " (receipt verified on-chain)" : ""}`);
|
|
81
134
|
}
|
|
82
135
|
let reclaimResult = null;
|
|
136
|
+
let reclaimSkipped = null;
|
|
83
137
|
if (doReclaim) {
|
|
84
|
-
|
|
138
|
+
if (finishedByRelay !== null) {
|
|
139
|
+
reclaimSkipped = finishedByRelay;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
context.progress?.setActivity(`waiting on the refund relay's reclaim (it retries up to ${attempts} time${attempts === 1 ? "" : "s"} while the settlement window is open, at most ${maxWait}s per wait)`);
|
|
143
|
+
try {
|
|
144
|
+
reclaimResult = await relay(() => refunds.reclaim());
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
const finished = finishedFromRelayCode(relayCode(error));
|
|
148
|
+
if (finished === null)
|
|
149
|
+
throw error;
|
|
150
|
+
reclaimSkipped = finished;
|
|
151
|
+
finishedByRelay = finished;
|
|
152
|
+
}
|
|
153
|
+
finally {
|
|
154
|
+
context.progress?.setActivity(null);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
85
157
|
}
|
|
86
|
-
|
|
158
|
+
// The summary describes the state AFTER what this run did: re-read until
|
|
159
|
+
// the relay reflects the close/reclaim just mined (bounded), else derive
|
|
160
|
+
// it from the verified receipts. Never the pre-action state.
|
|
161
|
+
const status = await statusAfterActions(refunds, {
|
|
162
|
+
closed: closeResult !== null,
|
|
163
|
+
reclaim: reclaimResult,
|
|
164
|
+
payer: stream.payer ?? null,
|
|
165
|
+
opener,
|
|
166
|
+
streamId,
|
|
167
|
+
sleep: deps.sleep,
|
|
168
|
+
});
|
|
169
|
+
// A reclaim THIS run performed is reported as a reclaim, not as "already
|
|
170
|
+
// finished".
|
|
171
|
+
const finished = reclaimResult === null
|
|
172
|
+
? (finishedReason(status) ?? finishedByRelay)
|
|
173
|
+
: null;
|
|
87
174
|
out.result({
|
|
88
175
|
streamId,
|
|
89
176
|
opener,
|
|
90
177
|
payer: status.payer,
|
|
178
|
+
// The escrow's own on-chain status, verbatim.
|
|
91
179
|
status: status.status,
|
|
180
|
+
// What it means now: an Active stream past expiresAt is "expired".
|
|
181
|
+
state: stateOf(status),
|
|
92
182
|
reclaimed: status.reclaimed,
|
|
93
183
|
reclaimable: status.reclaimable,
|
|
94
184
|
next: status.next,
|
|
@@ -105,14 +195,164 @@ export const refundCommand = {
|
|
|
105
195
|
amount: reclaimResult.amount,
|
|
106
196
|
verified: reclaimResult.verified,
|
|
107
197
|
},
|
|
198
|
+
// Why a requested `--close` / `--reclaim` sent nothing (null when it was
|
|
199
|
+
// sent, or not requested).
|
|
200
|
+
closeSkipped,
|
|
201
|
+
reclaimSkipped,
|
|
202
|
+
// True when the recovery is over: nothing is left for the payer to get
|
|
203
|
+
// back (already reclaimed, or the verified delivery covers the deposit).
|
|
204
|
+
finished: finished !== null,
|
|
205
|
+
finishedReason: finished,
|
|
206
|
+
nothingToRecover: finished !== null,
|
|
108
207
|
refundIsAutomatic: false,
|
|
109
208
|
});
|
|
110
209
|
out.print(`x402 stream ${streamId}`);
|
|
111
|
-
out.table(statusRows(status, closeResult, reclaimResult));
|
|
210
|
+
out.table(statusRows(status, closeResult, reclaimResult, closeSkipped, finished));
|
|
112
211
|
out.print("");
|
|
113
|
-
out.print(
|
|
212
|
+
out.print(reclaimResult !== null
|
|
213
|
+
? describeReclaimed(reclaimResult)
|
|
214
|
+
: finished === null
|
|
215
|
+
? nextStep(status, streamId, refundUrl)
|
|
216
|
+
: describeFinished(finished));
|
|
114
217
|
},
|
|
115
218
|
};
|
|
219
|
+
/**
|
|
220
|
+
* The relay's view of a stream AFTER this run's actions. Reads until it
|
|
221
|
+
* reflects them (closed after a close, reclaimed after a reclaim), bounded;
|
|
222
|
+
* if the relay still lags, the state those verified transactions imply is
|
|
223
|
+
* reported instead, marked as derived. With no action, one plain read.
|
|
224
|
+
*/
|
|
225
|
+
async function statusAfterActions(refunds, done) {
|
|
226
|
+
const reclaimed = done.reclaim !== null;
|
|
227
|
+
if (!done.closed && !reclaimed)
|
|
228
|
+
return await relay(() => refunds.status());
|
|
229
|
+
const reflects = (status) => (!done.closed || status.status === "closed" || status.reclaimed) &&
|
|
230
|
+
(!reclaimed || status.reclaimed);
|
|
231
|
+
let last = null;
|
|
232
|
+
for (let attempt = 1; attempt <= POST_ACTION_READS; attempt++) {
|
|
233
|
+
try {
|
|
234
|
+
const status = await refunds.status();
|
|
235
|
+
if (reflects(status))
|
|
236
|
+
return status;
|
|
237
|
+
last = status;
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
// A lagging relay (503 chain-lagging, a stale not-found, a blip): the
|
|
241
|
+
// transactions already happened, so keep going and derive if need be.
|
|
242
|
+
}
|
|
243
|
+
if (attempt < POST_ACTION_READS)
|
|
244
|
+
await done.sleep(POST_ACTION_INTERVAL_MS);
|
|
245
|
+
}
|
|
246
|
+
return derivedStatus(last, done);
|
|
247
|
+
}
|
|
248
|
+
/** The state this run's verified close/reclaim imply, when the relay lags. */
|
|
249
|
+
function derivedStatus(last, done) {
|
|
250
|
+
const reclaimed = done.reclaim !== null;
|
|
251
|
+
const note = "derived from this run's transaction receipts; the refund relay had not caught up with them yet";
|
|
252
|
+
return {
|
|
253
|
+
streamId: done.streamId,
|
|
254
|
+
chainId: last?.chainId ?? 0,
|
|
255
|
+
opener: last?.opener ?? done.opener,
|
|
256
|
+
payer: last?.payer ?? done.payer ?? done.opener,
|
|
257
|
+
status: "closed",
|
|
258
|
+
reclaimed: reclaimed || (last?.reclaimed ?? false),
|
|
259
|
+
chainTime: last?.chainTime ?? null,
|
|
260
|
+
reclaimable: null,
|
|
261
|
+
// Both legs this run verified are on-chain facts: the stream is closed.
|
|
262
|
+
state: "closed",
|
|
263
|
+
onChainStatus: "closed",
|
|
264
|
+
maxRefund: last?.maxRefund ?? null,
|
|
265
|
+
maxRefundMeaning: last?.maxRefundMeaning ?? null,
|
|
266
|
+
reclaimableMeaning: last?.reclaimableMeaning ?? null,
|
|
267
|
+
next: reclaimed
|
|
268
|
+
? {
|
|
269
|
+
action: "none",
|
|
270
|
+
message: "Reclaimed: the unearned remainder was returned to the payer. Nothing further to do.",
|
|
271
|
+
}
|
|
272
|
+
: {
|
|
273
|
+
action: "reclaim",
|
|
274
|
+
message: "Closed. Reclaim the unearned remainder once a checkpoint covering the close is posted (usually within a minute).",
|
|
275
|
+
},
|
|
276
|
+
raw: { derived: true, note },
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
/** `closed`, `expired` (Active on-chain but past expiresAt) or `active`. */
|
|
280
|
+
export function stateOf(status) {
|
|
281
|
+
if (status.status === "closed" || status.reclaimed)
|
|
282
|
+
return "closed";
|
|
283
|
+
const raw = status.raw;
|
|
284
|
+
if (raw.state === "expired")
|
|
285
|
+
return "expired";
|
|
286
|
+
if (typeof raw.expiresAt === "number" &&
|
|
287
|
+
status.chainTime !== null &&
|
|
288
|
+
status.chainTime >= raw.expiresAt) {
|
|
289
|
+
return "expired";
|
|
290
|
+
}
|
|
291
|
+
return "active";
|
|
292
|
+
}
|
|
293
|
+
function describeReclaimed(result) {
|
|
294
|
+
return `Reclaimed: ${result.amount === null ? "the unearned remainder" : formatUsdc(result.amount)} was returned to the payer${result.verified ? " (receipt verified on-chain)" : ""}. Nothing further to do for this stream.`;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Whether the relay's status says nothing is left to recover. `reclaimed` is
|
|
298
|
+
* the chain's one-reclaim-per-stream flag; `next: none` with `reclaimable: 0`
|
|
299
|
+
* is the relay's "the verified delivery covers the whole deposit".
|
|
300
|
+
*/
|
|
301
|
+
export function finishedReason(status) {
|
|
302
|
+
if (status.reclaimed)
|
|
303
|
+
return "reclaimed";
|
|
304
|
+
if (status.next.action === "none" && status.reclaimable === 0n) {
|
|
305
|
+
return "nothing-to-reclaim";
|
|
306
|
+
}
|
|
307
|
+
return null;
|
|
308
|
+
}
|
|
309
|
+
/** The relay's 409 codes that mean "finished", not "failed". */
|
|
310
|
+
function finishedFromRelayCode(code) {
|
|
311
|
+
if (code === "already-reclaimed")
|
|
312
|
+
return "reclaimed";
|
|
313
|
+
if (code === "nothing-to-reclaim")
|
|
314
|
+
return "nothing-to-reclaim";
|
|
315
|
+
return null;
|
|
316
|
+
}
|
|
317
|
+
function relayCode(error) {
|
|
318
|
+
for (let current = error, depth = 0; depth < 4; depth++) {
|
|
319
|
+
if (!(current instanceof Error))
|
|
320
|
+
return null;
|
|
321
|
+
const code = current.code;
|
|
322
|
+
if (current.name === "RefundRelayError" && typeof code === "string") {
|
|
323
|
+
return code;
|
|
324
|
+
}
|
|
325
|
+
current = current.cause;
|
|
326
|
+
}
|
|
327
|
+
return null;
|
|
328
|
+
}
|
|
329
|
+
/** The `metrik refund` answer for an upfront-only payment (exit 0). */
|
|
330
|
+
function reportNothingToRefund(context, streamId) {
|
|
331
|
+
context.out.result({
|
|
332
|
+
streamId,
|
|
333
|
+
opener: null,
|
|
334
|
+
payer: null,
|
|
335
|
+
status: null,
|
|
336
|
+
reclaimed: false,
|
|
337
|
+
reclaimable: null,
|
|
338
|
+
next: { action: "none" },
|
|
339
|
+
close: null,
|
|
340
|
+
reclaim: null,
|
|
341
|
+
closeSkipped: null,
|
|
342
|
+
reclaimSkipped: null,
|
|
343
|
+
finished: true,
|
|
344
|
+
finishedReason: "upfront-only",
|
|
345
|
+
nothingToRecover: true,
|
|
346
|
+
nothingToRefund: true,
|
|
347
|
+
refundIsAutomatic: false,
|
|
348
|
+
});
|
|
349
|
+
context.out.print("Nothing to refund: this was an upfront-only payment. The whole price was a non-refundable per-call charge paid to the seller at settlement, no escrow stream was opened, and the payment is final. Nothing was requested, signed or sent.");
|
|
350
|
+
}
|
|
351
|
+
export function describeFinished(reason) {
|
|
352
|
+
return reason === "reclaimed"
|
|
353
|
+
? "Already finished: the stream is closed and was already reclaimed — the unearned remainder went to the payer. Nothing left to recover."
|
|
354
|
+
: "Already finished: nothing to recover — the verified delivery covers the whole deposit, so none of it is unearned.";
|
|
355
|
+
}
|
|
116
356
|
/**
|
|
117
357
|
* Accepts the relay's full stream URL, a `{streamId}` template, or the relay's
|
|
118
358
|
* base origin (`https://relay.example` -> `https://relay.example/streams/<id>`).
|
|
@@ -148,6 +388,12 @@ export function explainRefundFailure(error) {
|
|
|
148
388
|
if (!(error instanceof Error))
|
|
149
389
|
return error;
|
|
150
390
|
switch (error.name) {
|
|
391
|
+
case "NothingToRefundError":
|
|
392
|
+
return new CliError(error.message, {
|
|
393
|
+
exitCode: 3,
|
|
394
|
+
hint: "this is an upfront-only payment (stream id 0): nothing was escrowed and there is nothing to refund. Run `metrik refund 0x0000…0000` to confirm; it exits 0.",
|
|
395
|
+
cause: error,
|
|
396
|
+
});
|
|
151
397
|
case "RefundNotReadyError": {
|
|
152
398
|
const retryAt = error.retryAt;
|
|
153
399
|
return new CliError(error.message, {
|
|
@@ -158,12 +404,14 @@ export function explainRefundFailure(error) {
|
|
|
158
404
|
cause: error,
|
|
159
405
|
});
|
|
160
406
|
}
|
|
161
|
-
case "RefundRelayError":
|
|
407
|
+
case "RefundRelayError": {
|
|
408
|
+
const code = error.code;
|
|
162
409
|
return new CliError(error.message, {
|
|
163
410
|
exitCode: 3,
|
|
164
|
-
hint:
|
|
411
|
+
hint: relayRefusalHint(code),
|
|
165
412
|
cause: error,
|
|
166
413
|
});
|
|
414
|
+
}
|
|
167
415
|
case "NotStreamPayerError":
|
|
168
416
|
return new CliError(error.message, {
|
|
169
417
|
exitCode: 3,
|
|
@@ -174,20 +422,59 @@ export function explainRefundFailure(error) {
|
|
|
174
422
|
return error;
|
|
175
423
|
}
|
|
176
424
|
}
|
|
177
|
-
|
|
425
|
+
/**
|
|
426
|
+
* What to do after a relay refusal. The on-chain fallback is only offered
|
|
427
|
+
* where it can still recover something: never "close it (needs gas)" for a
|
|
428
|
+
* stream that is already closed, and never any recovery at all for one with
|
|
429
|
+
* nothing left in it.
|
|
430
|
+
*/
|
|
431
|
+
export function relayRefusalHint(code) {
|
|
432
|
+
const label = `relay refusal${code === undefined ? "" : ` (${code})`}`;
|
|
433
|
+
switch (code) {
|
|
434
|
+
case "already-reclaimed":
|
|
435
|
+
case "nothing-to-reclaim":
|
|
436
|
+
return `${label}. Nothing is left to recover for this stream, on-chain or through the relay.`;
|
|
437
|
+
case "already-closed":
|
|
438
|
+
return `${label}. The stream is already closed, so no close is needed: reclaim the unearned remainder with --reclaim (no wallet, no gas), or \`metrik reclaim\` (anyone).`;
|
|
439
|
+
case "not-closable":
|
|
440
|
+
return `${label}. The relay's next step is not a close (the stream may have reached expiresAt by itself): run without --close to see the next step.`;
|
|
441
|
+
default:
|
|
442
|
+
return `${label}. The payer can always recover on-chain without the relay: \`metrik close\` (as the payer, needs gas) and \`metrik reclaim\` (anyone).`;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
function statusRows(status, closeResult, reclaimResult, closeSkipped, finished) {
|
|
446
|
+
const state = stateOf(status);
|
|
447
|
+
const derived = status.raw.derived === true;
|
|
178
448
|
const rows = [
|
|
179
449
|
[
|
|
180
450
|
"status",
|
|
181
|
-
status.reclaimed
|
|
451
|
+
(status.reclaimed
|
|
452
|
+
? `${state} (reclaimed)`
|
|
453
|
+
: state === status.status
|
|
454
|
+
? state
|
|
455
|
+
: `${state} (on-chain: ${status.status}; past expiresAt, accrues nothing more)`) +
|
|
456
|
+
(derived
|
|
457
|
+
? " — from this run's receipts; the relay is still catching up"
|
|
458
|
+
: ""),
|
|
182
459
|
],
|
|
460
|
+
...(finished === null
|
|
461
|
+
? []
|
|
462
|
+
: [["recovery", "finished — nothing to recover"]]),
|
|
183
463
|
["payer", status.payer],
|
|
184
464
|
["opener", status.opener],
|
|
185
465
|
[
|
|
186
|
-
"reclaimable",
|
|
187
|
-
|
|
466
|
+
"reclaimable now",
|
|
467
|
+
reclaimResult !== null || status.reclaimed
|
|
468
|
+
? "- (already reclaimed)"
|
|
469
|
+
: status.reclaimable === null
|
|
470
|
+
? "-"
|
|
471
|
+
: formatUsdc(status.reclaimable),
|
|
188
472
|
],
|
|
189
|
-
["next", status.next.action],
|
|
473
|
+
["next", reclaimResult !== null ? "none" : status.next.action],
|
|
190
474
|
];
|
|
475
|
+
if (closeResult === null && closeSkipped !== null) {
|
|
476
|
+
rows.push(["close", "skipped — already closed"]);
|
|
477
|
+
}
|
|
191
478
|
if (closeResult !== null) {
|
|
192
479
|
rows.push([
|
|
193
480
|
"close tx",
|
|
@@ -212,6 +499,10 @@ function nextStep(status, streamId, refundUrl) {
|
|
|
212
499
|
const base = `metrik refund ${streamId} --refund-url ${refundUrl}`;
|
|
213
500
|
switch (status.next.action) {
|
|
214
501
|
case "close":
|
|
502
|
+
if (status.status === "closed") {
|
|
503
|
+
// Never "still running" for a stream the chain shows closed.
|
|
504
|
+
return `Refunds are NOT automatic. The stream is closed: reclaim the unearned remainder with ${base} --reclaim`;
|
|
505
|
+
}
|
|
215
506
|
return `Refunds are NOT automatic. The stream is still running: stop it with ${base} --close --reclaim`;
|
|
216
507
|
case "reclaim":
|
|
217
508
|
return `Refunds are NOT automatic. Reclaim the unearned remainder with ${base} --reclaim`;
|