@absol-labs/agent 0.10.0 → 0.12.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +106 -30
- package/dist/capability/invocation-capability.d.ts +20 -8
- package/dist/capability/invocation-capability.d.ts.map +1 -1
- package/dist/capability/invocation-capability.js.map +1 -1
- package/dist/capability/probe-capability.d.ts +225 -0
- package/dist/capability/probe-capability.d.ts.map +1 -0
- package/dist/capability/probe-capability.js +248 -0
- package/dist/capability/probe-capability.js.map +1 -0
- package/dist/cli/args.d.ts +11 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +23 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/claim.d.ts.map +1 -1
- package/dist/cli/commands/claim.js +21 -5
- package/dist/cli/commands/claim.js.map +1 -1
- package/dist/cli/commands/close.d.ts.map +1 -1
- package/dist/cli/commands/close.js +51 -7
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/invoke.d.ts +2 -0
- package/dist/cli/commands/invoke.d.ts.map +1 -1
- package/dist/cli/commands/invoke.js +3 -2
- package/dist/cli/commands/invoke.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +15 -2
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/open.d.ts.map +1 -1
- package/dist/cli/commands/open.js +121 -15
- package/dist/cli/commands/open.js.map +1 -1
- package/dist/cli/commands/pay.d.ts +19 -0
- package/dist/cli/commands/pay.d.ts.map +1 -0
- package/dist/cli/commands/pay.js +355 -0
- package/dist/cli/commands/pay.js.map +1 -0
- package/dist/cli/commands/reclaim-unverified.d.ts.map +1 -1
- package/dist/cli/commands/reclaim-unverified.js +15 -6
- package/dist/cli/commands/reclaim-unverified.js.map +1 -1
- package/dist/cli/commands/reclaim.d.ts +23 -2
- package/dist/cli/commands/reclaim.d.ts.map +1 -1
- package/dist/cli/commands/reclaim.js +200 -21
- package/dist/cli/commands/reclaim.js.map +1 -1
- package/dist/cli/commands/refund.d.ts +13 -0
- package/dist/cli/commands/refund.d.ts.map +1 -0
- package/dist/cli/commands/refund.js +224 -0
- package/dist/cli/commands/refund.js.map +1 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +10 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/streams.js +9 -13
- package/dist/cli/commands/streams.js.map +1 -1
- package/dist/cli/commands/watch.d.ts.map +1 -1
- package/dist/cli/commands/watch.js +2 -1
- package/dist/cli/commands/watch.js.map +1 -1
- package/dist/cli/config.d.ts +44 -26
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +88 -38
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/deps.d.ts +86 -7
- package/dist/cli/deps.d.ts.map +1 -1
- package/dist/cli/deps.js +102 -16
- package/dist/cli/deps.js.map +1 -1
- package/dist/cli/errors.d.ts.map +1 -1
- package/dist/cli/errors.js +21 -1
- package/dist/cli/errors.js.map +1 -1
- package/dist/cli/escape-hatch.d.ts +6 -4
- package/dist/cli/escape-hatch.d.ts.map +1 -1
- package/dist/cli/escape-hatch.js +6 -2
- package/dist/cli/escape-hatch.js.map +1 -1
- package/dist/cli/listings.d.ts +18 -0
- package/dist/cli/listings.d.ts.map +1 -1
- package/dist/cli/listings.js +22 -12
- package/dist/cli/listings.js.map +1 -1
- package/dist/cli/preflight.d.ts +20 -14
- package/dist/cli/preflight.d.ts.map +1 -1
- package/dist/cli/preflight.js +34 -20
- package/dist/cli/preflight.js.map +1 -1
- package/dist/cli/privy.d.ts +83 -0
- package/dist/cli/privy.d.ts.map +1 -0
- package/dist/cli/privy.js +232 -0
- package/dist/cli/privy.js.map +1 -0
- package/dist/cli/reclaimability.d.ts +82 -0
- package/dist/cli/reclaimability.d.ts.map +1 -0
- package/dist/cli/reclaimability.js +80 -0
- package/dist/cli/reclaimability.js.map +1 -0
- package/dist/cli/run.d.ts +2 -1
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +40 -11
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/scan-range.d.ts +2 -2
- package/dist/cli/scan-range.js +2 -2
- package/dist/cli/spend-policy.d.ts +60 -0
- package/dist/cli/spend-policy.d.ts.map +1 -0
- package/dist/cli/spend-policy.js +65 -0
- package/dist/cli/spend-policy.js.map +1 -0
- package/dist/cli/status.d.ts +3 -1
- package/dist/cli/status.d.ts.map +1 -1
- package/dist/cli/status.js +15 -3
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/wallet.d.ts +109 -40
- package/dist/cli/wallet.d.ts.map +1 -1
- package/dist/cli/wallet.js +109 -44
- package/dist/cli/wallet.js.map +1 -1
- package/dist/discovery/rate-band.d.ts +74 -0
- package/dist/discovery/rate-band.d.ts.map +1 -0
- package/dist/discovery/rate-band.js +114 -0
- package/dist/discovery/rate-band.js.map +1 -0
- package/dist/escrow-generation.d.ts +81 -0
- package/dist/escrow-generation.d.ts.map +1 -0
- package/dist/escrow-generation.js +76 -0
- package/dist/escrow-generation.js.map +1 -0
- package/dist/frameworks/agentkit.d.ts +8 -4
- package/dist/frameworks/agentkit.d.ts.map +1 -1
- package/dist/frameworks/agentkit.js +27 -10
- package/dist/frameworks/agentkit.js.map +1 -1
- package/dist/frameworks/eliza.d.ts +3 -3
- package/dist/frameworks/eliza.d.ts.map +1 -1
- package/dist/frameworks/eliza.js +15 -6
- package/dist/frameworks/eliza.js.map +1 -1
- package/dist/frameworks/langchain.d.ts.map +1 -1
- package/dist/frameworks/langchain.js +8 -0
- package/dist/frameworks/langchain.js.map +1 -1
- package/dist/gateway/caller-auth-gateway.d.ts +91 -4
- package/dist/gateway/caller-auth-gateway.d.ts.map +1 -1
- package/dist/gateway/caller-auth-gateway.js +184 -7
- package/dist/gateway/caller-auth-gateway.js.map +1 -1
- package/dist/gateway/http-server.d.ts +121 -1
- package/dist/gateway/http-server.d.ts.map +1 -1
- package/dist/gateway/http-server.js +474 -5
- package/dist/gateway/http-server.js.map +1 -1
- package/dist/gateway/probe-auth.d.ts +112 -0
- package/dist/gateway/probe-auth.d.ts.map +1 -0
- package/dist/gateway/probe-auth.js +127 -0
- package/dist/gateway/probe-auth.js.map +1 -0
- package/dist/gateway/signed-rate-bounds.d.ts +51 -0
- package/dist/gateway/signed-rate-bounds.d.ts.map +1 -0
- package/dist/gateway/signed-rate-bounds.js +94 -0
- package/dist/gateway/signed-rate-bounds.js.map +1 -0
- package/dist/gateway/x402-opener-mode.d.ts +215 -0
- package/dist/gateway/x402-opener-mode.d.ts.map +1 -0
- package/dist/gateway/x402-opener-mode.js +639 -0
- package/dist/gateway/x402-opener-mode.js.map +1 -0
- package/dist/index.d.ts +11 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -5
- package/dist/index.js.map +1 -1
- package/dist/mandates/env.d.ts +3 -2
- package/dist/mandates/env.d.ts.map +1 -1
- package/dist/mandates/env.js +3 -2
- package/dist/mandates/env.js.map +1 -1
- package/dist/mcp/server.d.ts +100 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +719 -39
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/service-invoker.d.ts +97 -0
- package/dist/mcp/service-invoker.d.ts.map +1 -0
- package/dist/mcp/service-invoker.js +167 -0
- package/dist/mcp/service-invoker.js.map +1 -0
- package/dist/mcp/x402-tools.d.ts +104 -0
- package/dist/mcp/x402-tools.d.ts.map +1 -0
- package/dist/mcp/x402-tools.js +434 -0
- package/dist/mcp/x402-tools.js.map +1 -0
- package/dist/network.d.ts +119 -0
- package/dist/network.d.ts.map +1 -0
- package/dist/network.js +199 -0
- package/dist/network.js.map +1 -0
- package/dist/sdk/invoke.d.ts +23 -4
- package/dist/sdk/invoke.d.ts.map +1 -1
- package/dist/sdk/invoke.js +71 -10
- package/dist/sdk/invoke.js.map +1 -1
- package/dist/wallet/autonomous-wallet-broker.d.ts +3 -0
- package/dist/wallet/autonomous-wallet-broker.d.ts.map +1 -1
- package/dist/wallet/autonomous-wallet-broker.js +27 -23
- package/dist/wallet/autonomous-wallet-broker.js.map +1 -1
- package/dist/wallet/autonomous-wallet-protocol.d.ts +8 -2
- package/dist/wallet/autonomous-wallet-protocol.d.ts.map +1 -1
- package/dist/wallet/autonomous-wallet-protocol.js +9 -2
- package/dist/wallet/autonomous-wallet-protocol.js.map +1 -1
- package/dist/wallet/autonomous-wallet.d.ts.map +1 -1
- package/dist/wallet/autonomous-wallet.js +3 -2
- package/dist/wallet/autonomous-wallet.js.map +1 -1
- package/dist/wallet/broker-escrows.d.ts +222 -0
- package/dist/wallet/broker-escrows.d.ts.map +1 -0
- package/dist/wallet/broker-escrows.js +36 -0
- package/dist/wallet/broker-escrows.js.map +1 -0
- package/dist/wallet/lifecycle.d.ts +21 -5
- package/dist/wallet/lifecycle.d.ts.map +1 -1
- package/dist/wallet/lifecycle.js +32 -12
- package/dist/wallet/lifecycle.js.map +1 -1
- package/dist/wallet/privy-broker-server.d.ts.map +1 -1
- package/dist/wallet/privy-broker-server.js +31 -26
- package/dist/wallet/privy-broker-server.js.map +1 -1
- package/dist/wallet/privy-session-broker.d.ts +14 -5
- package/dist/wallet/privy-session-broker.d.ts.map +1 -1
- package/dist/wallet/privy-session-broker.js +29 -17
- package/dist/wallet/privy-session-broker.js.map +1 -1
- package/dist/wallet/privy-session-provider.d.ts +3 -1
- package/dist/wallet/privy-session-provider.d.ts.map +1 -1
- package/dist/wallet/privy-session-provider.js +5 -3
- package/dist/wallet/privy-session-provider.js.map +1 -1
- package/dist/wallet/provider.d.ts.map +1 -1
- package/dist/wallet/provider.js +15 -8
- package/dist/wallet/provider.js.map +1 -1
- package/dist/x402/facilitator.d.ts +42 -17
- package/dist/x402/facilitator.d.ts.map +1 -1
- package/dist/x402/facilitator.js +49 -33
- package/dist/x402/facilitator.js.map +1 -1
- package/dist/x402-buyer/guarded-fetch.d.ts +51 -0
- package/dist/x402-buyer/guarded-fetch.d.ts.map +1 -0
- package/dist/x402-buyer/guarded-fetch.js +147 -0
- package/dist/x402-buyer/guarded-fetch.js.map +1 -0
- package/dist/x402-buyer/index.d.ts +10 -0
- package/dist/x402-buyer/index.d.ts.map +1 -0
- package/dist/x402-buyer/index.js +10 -0
- package/dist/x402-buyer/index.js.map +1 -0
- package/dist/x402-buyer/pay.d.ts +135 -0
- package/dist/x402-buyer/pay.d.ts.map +1 -0
- package/dist/x402-buyer/pay.js +336 -0
- package/dist/x402-buyer/pay.js.map +1 -0
- package/dist/x402-opener/abi.d.ts +684 -0
- package/dist/x402-opener/abi.d.ts.map +1 -0
- package/dist/x402-opener/abi.js +880 -0
- package/dist/x402-opener/abi.js.map +1 -0
- package/dist/x402-opener/facilitator-entry.d.ts +3 -0
- package/dist/x402-opener/facilitator-entry.d.ts.map +1 -0
- package/dist/x402-opener/facilitator-entry.js +37 -0
- package/dist/x402-opener/facilitator-entry.js.map +1 -0
- package/dist/x402-opener/facilitator-server.d.ts +180 -0
- package/dist/x402-opener/facilitator-server.d.ts.map +1 -0
- package/dist/x402-opener/facilitator-server.js +696 -0
- package/dist/x402-opener/facilitator-server.js.map +1 -0
- package/dist/x402-opener/index.d.ts +14 -0
- package/dist/x402-opener/index.d.ts.map +1 -0
- package/dist/x402-opener/index.js +14 -0
- package/dist/x402-opener/index.js.map +1 -0
- package/dist/x402-opener/listing-resolver.d.ts +55 -0
- package/dist/x402-opener/listing-resolver.d.ts.map +1 -0
- package/dist/x402-opener/listing-resolver.js +125 -0
- package/dist/x402-opener/listing-resolver.js.map +1 -0
- package/dist/x402-opener/refund-relay.d.ts +240 -0
- package/dist/x402-opener/refund-relay.d.ts.map +1 -0
- package/dist/x402-opener/refund-relay.js +1240 -0
- package/dist/x402-opener/refund-relay.js.map +1 -0
- package/dist/x402-opener/relayer-queue.d.ts +14 -0
- package/dist/x402-opener/relayer-queue.d.ts.map +1 -0
- package/dist/x402-opener/relayer-queue.js +18 -0
- package/dist/x402-opener/relayer-queue.js.map +1 -0
- package/dist/x402-opener/scheme.d.ts +217 -0
- package/dist/x402-opener/scheme.d.ts.map +1 -0
- package/dist/x402-opener/scheme.js +749 -0
- package/dist/x402-opener/scheme.js.map +1 -0
- package/dist/x402-opener/terms.d.ts +105 -0
- package/dist/x402-opener/terms.d.ts.map +1 -0
- package/dist/x402-opener/terms.js +212 -0
- package/dist/x402-opener/terms.js.map +1 -0
- package/dist/zktls/reclaim.d.ts +2 -2
- package/docs/agent-layer.md +13 -8
- package/docs/autonomous-privy-wallet.md +188 -0
- package/docs/cli.md +342 -53
- package/docs/langchain.md +5 -0
- package/docs/mcp-hosted.md +4 -3
- package/docs/mcp-reference.md +245 -0
- package/docs/probe-capability.md +191 -0
- package/docs/quickstart.md +54 -5
- package/docs/threat-model.md +24 -3
- package/docs/x402.md +681 -0
- package/package.json +19 -6
- package/src/capability/invocation-capability.ts +17 -1
- package/src/capability/probe-capability.ts +355 -0
- package/src/cli/args.ts +29 -0
- package/src/cli/commands/claim.ts +31 -5
- package/src/cli/commands/close.ts +56 -7
- package/src/cli/commands/invoke.ts +6 -2
- package/src/cli/commands/mcp.ts +18 -2
- package/src/cli/commands/open.ts +151 -14
- package/src/cli/commands/pay.ts +442 -0
- package/src/cli/commands/reclaim-unverified.ts +24 -6
- package/src/cli/commands/reclaim.ts +274 -19
- package/src/cli/commands/refund.ts +277 -0
- package/src/cli/commands/status.ts +17 -1
- package/src/cli/commands/streams.ts +11 -15
- package/src/cli/commands/watch.ts +7 -1
- package/src/cli/config.ts +139 -52
- package/src/cli/deps.ts +189 -25
- package/src/cli/errors.ts +24 -1
- package/src/cli/escape-hatch.ts +19 -5
- package/src/cli/listings.ts +43 -10
- package/src/cli/preflight.ts +36 -21
- package/src/cli/privy.ts +398 -0
- package/src/cli/reclaimability.ts +154 -0
- package/src/cli/run.ts +54 -11
- package/src/cli/scan-range.ts +2 -2
- package/src/cli/spend-policy.ts +139 -0
- package/src/cli/status.ts +14 -1
- package/src/cli/wallet.ts +189 -58
- package/src/discovery/rate-band.ts +172 -0
- package/src/escrow-generation.ts +135 -0
- package/src/frameworks/agentkit.ts +45 -11
- package/src/frameworks/eliza.ts +27 -5
- package/src/frameworks/langchain.ts +14 -0
- package/src/gateway/caller-auth-gateway.ts +336 -13
- package/src/gateway/http-server.ts +690 -7
- package/src/gateway/probe-auth.ts +191 -0
- package/src/gateway/signed-rate-bounds.ts +164 -0
- package/src/gateway/x402-opener-mode.ts +974 -0
- package/src/index.ts +112 -14
- package/src/mandates/env.ts +3 -2
- package/src/mcp/server.ts +973 -44
- package/src/mcp/service-invoker.ts +285 -0
- package/src/mcp/x402-tools.ts +621 -0
- package/src/network.ts +302 -0
- package/src/sdk/invoke.ts +96 -17
- package/src/wallet/autonomous-wallet-broker.ts +46 -20
- package/src/wallet/autonomous-wallet-protocol.ts +11 -2
- package/src/wallet/autonomous-wallet.ts +4 -2
- package/src/wallet/broker-escrows.ts +66 -0
- package/src/wallet/lifecycle.ts +53 -18
- package/src/wallet/privy-broker-server.ts +35 -25
- package/src/wallet/privy-session-broker.ts +58 -25
- package/src/wallet/privy-session-provider.ts +7 -3
- package/src/wallet/provider.ts +20 -15
- package/src/x402/facilitator.ts +85 -46
- package/src/x402-buyer/guarded-fetch.ts +213 -0
- package/src/x402-buyer/index.ts +9 -0
- package/src/x402-buyer/pay.ts +517 -0
- package/src/x402-opener/abi.ts +881 -0
- package/src/x402-opener/facilitator-entry.ts +45 -0
- package/src/x402-opener/facilitator-server.ts +1014 -0
- package/src/x402-opener/index.ts +13 -0
- package/src/x402-opener/listing-resolver.ts +202 -0
- package/src/x402-opener/refund-relay.ts +1743 -0
- package/src/x402-opener/relayer-queue.ts +18 -0
- package/src/x402-opener/scheme.ts +1133 -0
- package/src/x402-opener/terms.ts +300 -0
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import { getAddress, isAddress, isHex, recoverTypedDataAddress, } from "viem";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { hashInvocationPath, httpMethodSchema, normalizeInvocationPath, } from "./invocation-capability.js";
|
|
5
|
+
/**
|
|
6
|
+
* `ProbeCapability` — the ORACLE-signed EIP-712 credential that lets the
|
|
7
|
+
* neutral verifier exercise the PAID route of a `gated` listing.
|
|
8
|
+
*
|
|
9
|
+
* ## The gap this closes
|
|
10
|
+
*
|
|
11
|
+
* A gated listing's paid route requires an `InvocationCapability` signed by the
|
|
12
|
+
* stream's BUYER (see `./invocation-capability.ts`). The oracle is not a buyer
|
|
13
|
+
* and holds no buyer key, so before this type existed the oracle could only
|
|
14
|
+
* probe a gated service's HEALTH route. "The seller earns only for intervals
|
|
15
|
+
* that verified" therefore meant "the health endpoint answered" — not "the paid
|
|
16
|
+
* route delivered". This capability is the missing credential.
|
|
17
|
+
*
|
|
18
|
+
* ## Why this is not just "give the workers a credential"
|
|
19
|
+
*
|
|
20
|
+
* Three properties, all load-bearing:
|
|
21
|
+
*
|
|
22
|
+
* 1. **No shared secret.** Authority is an EIP-712 signature by an address in
|
|
23
|
+
* the escrow's `getOracleSigners()`. That list is PUBLICLY READABLE on-chain,
|
|
24
|
+
* so a third-party seller performs the identical check with no credential
|
|
25
|
+
* distribution, no registration, and nothing for either side to leak.
|
|
26
|
+
* 2. **No signing key leaves the coordinator.** The oracle coordinator mints one
|
|
27
|
+
* fresh capability per probe and hands the encoded header to the regional
|
|
28
|
+
* worker. A worker holds a bearer token for the coordinator and nothing else;
|
|
29
|
+
* compromising every worker yields no ability to mint a capability.
|
|
30
|
+
* 3. **Not stream-bound.** Deliberately carries NO `streamId` and NO `buyer`.
|
|
31
|
+
* That is what makes the same mechanism usable to probe a listing that has no
|
|
32
|
+
* stream at all — and it is also the structural guarantee that a probe can
|
|
33
|
+
* never consume a buyer's budget: there is no stream for it to be billed
|
|
34
|
+
* against. Accrual is only ever produced by an oracle checkpoint keyed to a
|
|
35
|
+
* stream; a gateway call produces none.
|
|
36
|
+
*
|
|
37
|
+
* ## What a probe is NOT
|
|
38
|
+
*
|
|
39
|
+
* A probe is verification, not delivery to a buyer. A gateway authorizing one
|
|
40
|
+
* MUST NOT meter it, settle any payment for it, or count it as a paid call.
|
|
41
|
+
* The reference gateway enforces this structurally (see
|
|
42
|
+
* `../gateway/caller-auth-gateway.ts`) and marks the upstream request with
|
|
43
|
+
* {@link PROBE_MARKER_HEADER_NAME} so a seller's own metering can exclude it.
|
|
44
|
+
*
|
|
45
|
+
* ## Honest note for third-party sellers
|
|
46
|
+
*
|
|
47
|
+
* This CHANGES what a seller's gateway must implement to get paid-route
|
|
48
|
+
* verification. A gated listing fronted by a gateway that has not adopted
|
|
49
|
+
* `ProbeCapability` stays HEALTH-ROUTE-ONLY, and the oracle reports it as
|
|
50
|
+
* unverifiable rather than passing. Adoption is the seller's choice; silence
|
|
51
|
+
* about it is not the oracle's.
|
|
52
|
+
*
|
|
53
|
+
* Kept LOCAL to `@absol-labs/agent` for the same reason as
|
|
54
|
+
* `InvocationCapability`: no contract parses it, so there is no on-chain byte
|
|
55
|
+
* compatibility requirement. Cross-repo compatibility with the oracle's minter
|
|
56
|
+
* is pinned by a shared digest test vector — see
|
|
57
|
+
* `test/probe-capability.test.ts` and the oracle's mirror of the same constant.
|
|
58
|
+
*/
|
|
59
|
+
const addressSchema = z
|
|
60
|
+
.string()
|
|
61
|
+
.refine((value) => isAddress(value), "must be an EVM address");
|
|
62
|
+
const bytes32Schema = z
|
|
63
|
+
.string()
|
|
64
|
+
.refine((value) => isHex(value, { strict: true }) && value.length === 66, "must be bytes32 hex");
|
|
65
|
+
const signatureSchema = z
|
|
66
|
+
.string()
|
|
67
|
+
.refine((value) => isHex(value, { strict: true }) && value.length === 132, "must be a 65-byte signature");
|
|
68
|
+
export const probeCapabilitySchema = z.object({
|
|
69
|
+
/**
|
|
70
|
+
* The service being probed. Must match the target gateway's configured
|
|
71
|
+
* `serviceRef`. There is deliberately no `streamId` field — see the class
|
|
72
|
+
* docs.
|
|
73
|
+
*/
|
|
74
|
+
serviceRef: bytes32Schema,
|
|
75
|
+
/**
|
|
76
|
+
* The minting oracle signer. Must equal the EIP-712 signer AND be a member of
|
|
77
|
+
* the escrow's on-chain `getOracleSigners()` set at verification time.
|
|
78
|
+
*/
|
|
79
|
+
oracle: addressSchema,
|
|
80
|
+
/** The single HTTP method this capability authorizes. */
|
|
81
|
+
method: httpMethodSchema,
|
|
82
|
+
/** `keccak256` of the exact request path this capability authorizes. */
|
|
83
|
+
pathHash: bytes32Schema,
|
|
84
|
+
/** Single-use anti-replay nonce. */
|
|
85
|
+
nonce: bytes32Schema,
|
|
86
|
+
/** Unix seconds after which the capability is no longer valid. */
|
|
87
|
+
expiry: z.number().int().positive(),
|
|
88
|
+
});
|
|
89
|
+
export const signedProbeCapabilitySchema = probeCapabilitySchema.extend({
|
|
90
|
+
signature: signatureSchema,
|
|
91
|
+
});
|
|
92
|
+
/**
|
|
93
|
+
* Distinct from `Metrik Invocation Capability`, so a buyer's invocation
|
|
94
|
+
* signature can never be replayed as a probe (or the reverse) even though both
|
|
95
|
+
* share a chainId and verifying contract.
|
|
96
|
+
*/
|
|
97
|
+
export const probeCapabilityDomainName = "Metrik Probe Capability";
|
|
98
|
+
export const probeCapabilityDomainVersion = "1";
|
|
99
|
+
export const probeCapabilityTypedData = {
|
|
100
|
+
ProbeCapability: [
|
|
101
|
+
{ name: "serviceRef", type: "bytes32" },
|
|
102
|
+
{ name: "oracle", type: "address" },
|
|
103
|
+
{ name: "method", type: "string" },
|
|
104
|
+
{ name: "pathHash", type: "bytes32" },
|
|
105
|
+
{ name: "nonce", type: "bytes32" },
|
|
106
|
+
{ name: "expiry", type: "uint64" },
|
|
107
|
+
],
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* Default lifetime of a freshly-minted probe capability, in seconds.
|
|
111
|
+
*
|
|
112
|
+
* Shorter than the ~15-22s checkpoint cadence would race a slow upstream; much
|
|
113
|
+
* longer would widen the window in which a captured capability is replayable
|
|
114
|
+
* against a gateway with no nonce cache. 30s is one to two probe intervals.
|
|
115
|
+
*/
|
|
116
|
+
export const DEFAULT_PROBE_CAPABILITY_TTL_SECONDS = 30;
|
|
117
|
+
/** Header a probe request carries the signed capability in. */
|
|
118
|
+
export const PROBE_CAPABILITY_HEADER_NAME = "x-metrik-probe-capability";
|
|
119
|
+
/**
|
|
120
|
+
* Header the gateway adds to the UPSTREAM request when it authorized a probe.
|
|
121
|
+
* Advisory: it exists so a seller's own metering/analytics can exclude
|
|
122
|
+
* verification traffic from billable usage.
|
|
123
|
+
*/
|
|
124
|
+
export const PROBE_MARKER_HEADER_NAME = "x-metrik-probe";
|
|
125
|
+
export function createProbeCapabilityEip712Domain(domain) {
|
|
126
|
+
return {
|
|
127
|
+
name: probeCapabilityDomainName,
|
|
128
|
+
version: probeCapabilityDomainVersion,
|
|
129
|
+
chainId: domain.chainId,
|
|
130
|
+
verifyingContract: getAddress(domain.verifyingContract),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* `keccak256` of the exact request path this capability authorizes. Shares the
|
|
135
|
+
* canonical form with `InvocationCapability` so both sides of a gateway hash
|
|
136
|
+
* paths identically.
|
|
137
|
+
*/
|
|
138
|
+
export function hashProbePath(path) {
|
|
139
|
+
return hashInvocationPath(path);
|
|
140
|
+
}
|
|
141
|
+
/** Re-exported for symmetry; identical canonicalization to the invocation path. */
|
|
142
|
+
export function normalizeProbePath(path) {
|
|
143
|
+
return normalizeInvocationPath(path);
|
|
144
|
+
}
|
|
145
|
+
function probeCapabilityMessage(capability) {
|
|
146
|
+
const parsed = probeCapabilitySchema.parse(capability);
|
|
147
|
+
return {
|
|
148
|
+
serviceRef: parsed.serviceRef,
|
|
149
|
+
oracle: getAddress(parsed.oracle),
|
|
150
|
+
method: parsed.method,
|
|
151
|
+
pathHash: parsed.pathHash,
|
|
152
|
+
nonce: parsed.nonce,
|
|
153
|
+
expiry: BigInt(parsed.expiry),
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
export function buildProbeCapabilityTypedData(capability, domain) {
|
|
157
|
+
return {
|
|
158
|
+
domain: createProbeCapabilityEip712Domain(domain),
|
|
159
|
+
types: probeCapabilityTypedData,
|
|
160
|
+
primaryType: "ProbeCapability",
|
|
161
|
+
message: probeCapabilityMessage(capability),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/** Signs a `ProbeCapability` with an oracle signer's own key. */
|
|
165
|
+
export async function signProbeCapability(capability, domain, account) {
|
|
166
|
+
const typedData = buildProbeCapabilityTypedData(capability, domain);
|
|
167
|
+
return account.signTypedData(typedData);
|
|
168
|
+
}
|
|
169
|
+
/** Recovers the EIP-712 signer of a probe capability. Throws on a malformed signature. */
|
|
170
|
+
export async function recoverProbeCapabilitySigner(capability, domain, signature) {
|
|
171
|
+
const typedData = buildProbeCapabilityTypedData(capability, domain);
|
|
172
|
+
return recoverTypedDataAddress({ ...typedData, signature });
|
|
173
|
+
}
|
|
174
|
+
/** Cryptographically random 32-byte single-use nonce. */
|
|
175
|
+
export function generateProbeNonce() {
|
|
176
|
+
return `0x${randomBytes(32).toString("hex")}`;
|
|
177
|
+
}
|
|
178
|
+
export class InvalidProbeCapabilityHeaderError extends Error {
|
|
179
|
+
constructor(message, options) {
|
|
180
|
+
super(message, options);
|
|
181
|
+
this.name = "InvalidProbeCapabilityHeaderError";
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/** Encodes a signed probe capability as an opaque, header-safe (base64url) string. */
|
|
185
|
+
export function encodeProbeCapabilityHeader(signed) {
|
|
186
|
+
const parsed = signedProbeCapabilitySchema.parse(signed);
|
|
187
|
+
const json = JSON.stringify({
|
|
188
|
+
serviceRef: parsed.serviceRef,
|
|
189
|
+
oracle: parsed.oracle,
|
|
190
|
+
method: parsed.method,
|
|
191
|
+
pathHash: parsed.pathHash,
|
|
192
|
+
nonce: parsed.nonce,
|
|
193
|
+
expiry: parsed.expiry,
|
|
194
|
+
signature: parsed.signature,
|
|
195
|
+
});
|
|
196
|
+
return Buffer.from(json, "utf8").toString("base64url");
|
|
197
|
+
}
|
|
198
|
+
/** Decodes and schema-validates a probe capability header. Fails closed on any malformation. */
|
|
199
|
+
export function decodeProbeCapabilityHeader(headerValue) {
|
|
200
|
+
let json;
|
|
201
|
+
try {
|
|
202
|
+
json = Buffer.from(headerValue, "base64url").toString("utf8");
|
|
203
|
+
}
|
|
204
|
+
catch (cause) {
|
|
205
|
+
throw new InvalidProbeCapabilityHeaderError("malformed base64 probe capability header", { cause });
|
|
206
|
+
}
|
|
207
|
+
let raw;
|
|
208
|
+
try {
|
|
209
|
+
raw = JSON.parse(json);
|
|
210
|
+
}
|
|
211
|
+
catch (cause) {
|
|
212
|
+
throw new InvalidProbeCapabilityHeaderError("malformed JSON probe capability header", { cause });
|
|
213
|
+
}
|
|
214
|
+
const result = signedProbeCapabilitySchema.safeParse(raw);
|
|
215
|
+
if (!result.success) {
|
|
216
|
+
throw new InvalidProbeCapabilityHeaderError(`invalid probe capability shape: ${result.error.message}`);
|
|
217
|
+
}
|
|
218
|
+
return result.data;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Mint one fresh, single-use, short-lived probe capability and return its
|
|
222
|
+
* encoded header value. Called once PER PROBE PER VANTAGE by the coordinator:
|
|
223
|
+
* the gateway's replay cache is single-use, so two vantages sharing one
|
|
224
|
+
* capability would see the second rejected as a replay.
|
|
225
|
+
*/
|
|
226
|
+
export async function mintProbeCapabilityHeader(options) {
|
|
227
|
+
const nowSeconds = (options.now ?? (() => Math.floor(Date.now() / 1000)))();
|
|
228
|
+
const ttl = options.ttlSeconds ?? DEFAULT_PROBE_CAPABILITY_TTL_SECONDS;
|
|
229
|
+
if (!Number.isInteger(ttl) || ttl <= 0) {
|
|
230
|
+
throw new Error("probe capability ttlSeconds must be a positive integer");
|
|
231
|
+
}
|
|
232
|
+
const capability = {
|
|
233
|
+
serviceRef: options.serviceRef,
|
|
234
|
+
oracle: getAddress(options.account.address),
|
|
235
|
+
method: options.method,
|
|
236
|
+
pathHash: hashProbePath(options.path),
|
|
237
|
+
nonce: (options.nonce ?? generateProbeNonce)(),
|
|
238
|
+
expiry: nowSeconds + ttl,
|
|
239
|
+
};
|
|
240
|
+
const signature = await signProbeCapability(capability, options.domain, options.account);
|
|
241
|
+
const signed = { ...capability, signature };
|
|
242
|
+
return {
|
|
243
|
+
headerName: PROBE_CAPABILITY_HEADER_NAME,
|
|
244
|
+
headerValue: encodeProbeCapabilityHeader(signed),
|
|
245
|
+
capability: signed,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=probe-capability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe-capability.js","sourceRoot":"","sources":["../../src/capability/probe-capability.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/args.d.ts
CHANGED
|
@@ -23,6 +23,17 @@ export declare function stringFlag(args: ParsedArgs, name: string): string | und
|
|
|
23
23
|
export declare function stringFlags(args: ParsedArgs, name: string): string[];
|
|
24
24
|
export declare function requiredStringFlag(args: ParsedArgs, name: string): string;
|
|
25
25
|
export declare function booleanFlag(args: ParsedArgs, name: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Commands whose `--json` may ALSO carry a value: a JSON request body, as in
|
|
28
|
+
* curl's `--json '<body>'`. For them a bare `--json` (or `--json=true`) still
|
|
29
|
+
* selects JSON output, and the two can be combined
|
|
30
|
+
* (`--json '{"a":1}' --json`). Every other command keeps `--json` boolean.
|
|
31
|
+
*/
|
|
32
|
+
export declare const JSON_BODY_COMMANDS: ReadonlySet<string>;
|
|
33
|
+
/** Whether `--json` OUTPUT was requested (see {@link JSON_BODY_COMMANDS}). */
|
|
34
|
+
export declare function jsonOutputRequested(args: ParsedArgs): boolean;
|
|
35
|
+
/** The `--json <body>` value(s) of a JSON-body command, if any. */
|
|
36
|
+
export declare function jsonBodyFlag(args: ParsedArgs): string | undefined;
|
|
26
37
|
export declare function integerFlag(args: ParsedArgs, name: string): number | undefined;
|
|
27
38
|
/**
|
|
28
39
|
* Rejects flags the command does not understand. A silently ignored `--budgt`
|
package/dist/cli/args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;CACpE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAiD7D;AAQD,mDAAmD;AACnD,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ7E;AAED,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAQpE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMzE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CASnE;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CAOpB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,IAAI,CAWN"}
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;CACpE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAiD7D;AAQD,mDAAmD;AACnD,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ7E;AAED,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAQpE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMzE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CASnE;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAoB,CAAC;AAExE,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAM7D;AAED,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CASjE;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CAOpB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,IAAI,CAWN"}
|
package/dist/cli/args.js
CHANGED
|
@@ -94,6 +94,29 @@ export function booleanFlag(args, name) {
|
|
|
94
94
|
return false;
|
|
95
95
|
throw usageError(`--${name} takes no value (got "${value}")`);
|
|
96
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Commands whose `--json` may ALSO carry a value: a JSON request body, as in
|
|
99
|
+
* curl's `--json '<body>'`. For them a bare `--json` (or `--json=true`) still
|
|
100
|
+
* selects JSON output, and the two can be combined
|
|
101
|
+
* (`--json '{"a":1}' --json`). Every other command keeps `--json` boolean.
|
|
102
|
+
*/
|
|
103
|
+
export const JSON_BODY_COMMANDS = new Set(["pay"]);
|
|
104
|
+
/** Whether `--json` OUTPUT was requested (see {@link JSON_BODY_COMMANDS}). */
|
|
105
|
+
export function jsonOutputRequested(args) {
|
|
106
|
+
if (args.command === null || !JSON_BODY_COMMANDS.has(args.command)) {
|
|
107
|
+
return booleanFlag(args, "json");
|
|
108
|
+
}
|
|
109
|
+
const values = args.flags.get("json") ?? [];
|
|
110
|
+
return values.some((value) => value === true || value === "true");
|
|
111
|
+
}
|
|
112
|
+
/** The `--json <body>` value(s) of a JSON-body command, if any. */
|
|
113
|
+
export function jsonBodyFlag(args) {
|
|
114
|
+
const values = (args.flags.get("json") ?? []).filter((value) => typeof value === "string" && value !== "true" && value !== "false");
|
|
115
|
+
if (values.length > 1) {
|
|
116
|
+
throw usageError("--json <body> may be given only once");
|
|
117
|
+
}
|
|
118
|
+
return values[0];
|
|
119
|
+
}
|
|
97
120
|
export function integerFlag(args, name) {
|
|
98
121
|
const raw = stringFlag(args, name);
|
|
99
122
|
if (raw === undefined)
|
package/dist/cli/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAqBzC,MAAM,UAAU,SAAS,CAAC,IAAuB;IAC/C,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgC,CAAC;IACtD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,KAAuB,EAAQ,EAAE;QAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,QAAQ,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;;YAChD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC;IACF,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAElC,IAAI,WAAW,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,WAAW,GAAG,IAAI,CAAC;YACnB,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACnC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACnC,SAAS;QACX,CAAC;QACD,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAE5B,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC3B,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC7B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACjB,KAAK,EAAE,CAAC;IACV,CAAC;IAED,MAAM,CAAC,OAAO,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,CAAC;IAC9C,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,KAAa;IACjD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,UAAU,CAAC,qBAAqB,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,UAAU,CAAC,IAAgB,EAAE,IAAY;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,UAAU,CAAC,KAAK,IAAI,mBAAmB,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,WAAW,CAAC,IAAgB,EAAE,IAAY;IACxD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,UAAU,CAAC,KAAK,IAAI,mBAAmB,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAgB,EAAE,IAAY;IAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACrC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,UAAU,CAAC,KAAK,IAAI,cAAc,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAgB,EAAE,IAAY;IACxD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACxC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,UAAU,CAAC,KAAK,IAAI,yBAAyB,KAAK,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,IAAgB,EAChB,IAAY;IAEZ,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,UAAU,CAAC,KAAK,IAAI,yCAAyC,GAAG,IAAI,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAgB,EAChB,KAAwB;IAExB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,UAAU,CACd,eAAe,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO;aACrD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;aAC1B,IAAI,CAAC,IAAI,CAAC,EAAE,EACf,gBAAgB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claim.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/claim.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claim.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/claim.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjE;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,EAAE,WAsG1B,CAAC"}
|
|
@@ -3,7 +3,8 @@ import { assertTestnetRpc, parseBytes32 } from "../config.js";
|
|
|
3
3
|
import { CliError, describeError, usageError } from "../errors.js";
|
|
4
4
|
import { signClaimMandate } from "../mandate.js";
|
|
5
5
|
import { assertCanPayGas } from "../preflight.js";
|
|
6
|
-
import {
|
|
6
|
+
import { writeClientOptions } from "../deps.js";
|
|
7
|
+
import { isPolicyEnforced, PRIVATE_KEY_ENV, resolveCliWallet, } from "../wallet.js";
|
|
7
8
|
/**
|
|
8
9
|
* The seller's side of the loop.
|
|
9
10
|
*
|
|
@@ -27,10 +28,22 @@ export const claimCommand = {
|
|
|
27
28
|
throw usageError("metrik claim requires a <streamId>");
|
|
28
29
|
}
|
|
29
30
|
const streamId = parseBytes32(streamIdArg, "<streamId>");
|
|
30
|
-
const
|
|
31
|
+
const wallet = await resolveCliWallet(env, {
|
|
32
|
+
note: out.note,
|
|
33
|
+
rpcUrl: config.rpcUrl,
|
|
34
|
+
});
|
|
35
|
+
const { account } = wallet;
|
|
36
|
+
if (isPolicyEnforced(wallet)) {
|
|
37
|
+
// Said plainly rather than discovered mid-command. `claim` is the
|
|
38
|
+
// OPERATOR's side, and a Privy broker policy allowlists the BUYER
|
|
39
|
+
// actions only (openStream, close, reclaim, reclaimUnverified, and a
|
|
40
|
+
// bounded USDC approval). That is a property of an operator using a
|
|
41
|
+
// buyer-scoped wallet, not a defect in this command.
|
|
42
|
+
out.note("warning: this wallet's broker policy allowlists buyer actions only, so it will refuse to sign an operator claim. Claim with the operator's own key.");
|
|
43
|
+
}
|
|
31
44
|
const read = deps.createReadClient(config);
|
|
32
45
|
await assertTestnetRpc(config, () => read.getChainId());
|
|
33
|
-
await assertCanPayGas(read, account.address);
|
|
46
|
+
await assertCanPayGas(read, account.address, config.network);
|
|
34
47
|
const stream = await read.getStreamV2(streamId);
|
|
35
48
|
if (stream.operator.toLowerCase() !== account.address.toLowerCase()) {
|
|
36
49
|
throw new CliError(`wallet ${account.address} is not the operator of this stream`, {
|
|
@@ -60,10 +73,13 @@ export const claimCommand = {
|
|
|
60
73
|
hint: `everything checkpointed so far has already been claimed. See where it stands: metrik status ${streamId}`,
|
|
61
74
|
});
|
|
62
75
|
}
|
|
63
|
-
const write = deps.createWriteClient(config, account);
|
|
76
|
+
const write = deps.createWriteClient(config, account, writeClientOptions(wallet));
|
|
64
77
|
const result = await write.claimStream({
|
|
65
78
|
streamId,
|
|
66
|
-
|
|
79
|
+
// `null` for a policy-enforced wallet — see `../spend-policy.ts`.
|
|
80
|
+
signedMandate: isPolicyEnforced(wallet)
|
|
81
|
+
? null
|
|
82
|
+
: await signClaimMandate(account, config.chainId),
|
|
67
83
|
spentSoFarUsdc: 0n,
|
|
68
84
|
nowSeconds: deps.nowSeconds(),
|
|
69
85
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claim.js","sourceRoot":"","sources":["../../../src/cli/commands/claim.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"claim.js","sourceRoot":"","sources":["../../../src/cli/commands/claim.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"close.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/close.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"close.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/close.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjE,eAAO,MAAM,YAAY,EAAE,WA6F1B,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { assertTestnetRpc, parseBytes32 } from "../config.js";
|
|
2
|
-
import { usageError } from "../errors.js";
|
|
2
|
+
import { CliError, usageError } from "../errors.js";
|
|
3
3
|
import { signRecoveryMandate } from "../mandate.js";
|
|
4
4
|
import { assertCanPayGas } from "../preflight.js";
|
|
5
|
-
import {
|
|
5
|
+
import { writeClientOptions } from "../deps.js";
|
|
6
|
+
import { isPolicyEnforced, resolveCliWallet } from "../wallet.js";
|
|
6
7
|
export const closeCommand = {
|
|
7
8
|
name: "close",
|
|
8
9
|
summary: "Stop the clock on a stream so the unspent budget can be reclaimed",
|
|
@@ -16,23 +17,66 @@ export const closeCommand = {
|
|
|
16
17
|
throw usageError("metrik close requires a <streamId>");
|
|
17
18
|
}
|
|
18
19
|
const streamId = parseBytes32(streamIdArg, "<streamId>");
|
|
19
|
-
const
|
|
20
|
+
const wallet = await resolveCliWallet(env, {
|
|
21
|
+
note: out.note,
|
|
22
|
+
rpcUrl: config.rpcUrl,
|
|
23
|
+
});
|
|
24
|
+
const { account } = wallet;
|
|
20
25
|
const read = deps.createReadClient(config);
|
|
21
26
|
await assertTestnetRpc(config, () => read.getChainId());
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
27
|
+
// An x402 opener stream is closed through the opener, by its PAYER. Say so
|
|
28
|
+
// up front: the escrow would answer anyone else with NotBuyer, and the SDK
|
|
29
|
+
// refuses a non-payer before anything is sent.
|
|
30
|
+
const stream = await read.getStreamV2(streamId).catch(() => null);
|
|
31
|
+
const opener = stream?.opener ?? null;
|
|
32
|
+
if (opener !== null && stream !== null) {
|
|
33
|
+
out.note(`x402 stream: closing through the opener ${opener}; only its payer ${stream.payer} may close it.`);
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
await assertCanPayGas(read, account.address, config.network);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
if (opener !== null && error instanceof CliError) {
|
|
40
|
+
throw new CliError(error.message, {
|
|
41
|
+
exitCode: error.exitCode,
|
|
42
|
+
hint: `${error.hint ?? ""} This stream was bought over x402: a payer with no gas can close it through the seller's refund relay instead — \`metrik refund ${streamId} --refund-url <url> --close\`.`.trim(),
|
|
43
|
+
cause: error,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
// A policy-enforced wallet signs no mandate of its own: this is a
|
|
49
|
+
// buyer-recovery action, the escrow gates it on the buyer address and the
|
|
50
|
+
// broker gates it again on `stream.buyer == wallet`. A locally self-signed
|
|
51
|
+
// placeholder would add nothing and the broker would refuse to sign it.
|
|
52
|
+
// See `../spend-policy.ts`.
|
|
53
|
+
const signedMandate = isPolicyEnforced(wallet)
|
|
54
|
+
? null
|
|
55
|
+
: await signRecoveryMandate(account, config.chainId);
|
|
56
|
+
const write = deps.createWriteClient(config, account, writeClientOptions(wallet));
|
|
25
57
|
const result = await write.closeStream({
|
|
26
58
|
streamId,
|
|
27
59
|
signedMandate,
|
|
28
60
|
spentSoFarUsdc: 0n,
|
|
29
61
|
nowSeconds: deps.nowSeconds(),
|
|
30
62
|
});
|
|
31
|
-
out.result({
|
|
63
|
+
out.result({
|
|
64
|
+
streamId,
|
|
65
|
+
txHash: result.txHash,
|
|
66
|
+
closed: true,
|
|
67
|
+
opener,
|
|
68
|
+
payer: stream?.payer ?? null,
|
|
69
|
+
});
|
|
32
70
|
out.print("Stream closed.");
|
|
33
71
|
out.table([
|
|
34
72
|
["streamId", streamId],
|
|
35
73
|
["tx", result.txHash],
|
|
74
|
+
...(opener === null
|
|
75
|
+
? []
|
|
76
|
+
: [
|
|
77
|
+
["via opener", opener],
|
|
78
|
+
["payer", stream?.payer ?? "-"],
|
|
79
|
+
]),
|
|
36
80
|
]);
|
|
37
81
|
out.print("");
|
|
38
82
|
out.print(`Nothing pushes money back. Reclaim what was never earned: metrik reclaim ${streamId}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"close.js","sourceRoot":"","sources":["../../../src/cli/commands/close.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"close.js","sourceRoot":"","sources":["../../../src/cli/commands/close.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import type { CommandSpec } from "../context.js";
|
|
2
2
|
export declare const invokeCommand: CommandSpec;
|
|
3
|
+
export declare function parseHeaders(raw: readonly string[]): Record<string, string>;
|
|
4
|
+
export declare function hasHeader(headers: Record<string, string>, name: string): boolean;
|
|
3
5
|
//# sourceMappingURL=invoke.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoke.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/invoke.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjE,eAAO,MAAM,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"invoke.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/invoke.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjE,eAAO,MAAM,aAAa,EAAE,WAkH3B,CAAC;AA6BF,wBAAgB,YAAY,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAY3E;AAED,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,IAAI,EAAE,MAAM,GACX,OAAO,CAIT"}
|
|
@@ -42,6 +42,7 @@ export const invokeCommand = {
|
|
|
42
42
|
const { account } = await resolveCliWallet(env, {
|
|
43
43
|
purpose: "capability",
|
|
44
44
|
note: out.note,
|
|
45
|
+
rpcUrl: config.rpcUrl,
|
|
45
46
|
});
|
|
46
47
|
const read = deps.createReadClient(config);
|
|
47
48
|
// No transaction is signed here — but the capability is bound to
|
|
@@ -122,7 +123,7 @@ function explainInvokeFailure(error, signer) {
|
|
|
122
123
|
}
|
|
123
124
|
return error;
|
|
124
125
|
}
|
|
125
|
-
function parseHeaders(raw) {
|
|
126
|
+
export function parseHeaders(raw) {
|
|
126
127
|
const headers = {};
|
|
127
128
|
for (const entry of raw) {
|
|
128
129
|
const separator = entry.indexOf(":");
|
|
@@ -135,7 +136,7 @@ function parseHeaders(raw) {
|
|
|
135
136
|
}
|
|
136
137
|
return headers;
|
|
137
138
|
}
|
|
138
|
-
function hasHeader(headers, name) {
|
|
139
|
+
export function hasHeader(headers, name) {
|
|
139
140
|
return Object.keys(headers).some((key) => key.toLowerCase() === name.toLowerCase());
|
|
140
141
|
}
|
|
141
142
|
//# sourceMappingURL=invoke.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../../src/cli/commands/invoke.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,GAEjB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,CAAC,MAAM,aAAa,GAAgB;IACxC,IAAI,EAAE,QAAQ;IACd,OAAO,EACL,sEAAsE;IACxE,KAAK,EACH,iJAAiJ;IACnJ,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC;IAC9D,4EAA4E;IAC5E,qDAAqD;IACrD,KAAK,EAAE,KAAK;IACZ,WAAW,EAAE,IAAI;IACjB,KAAK,CAAC,GAAG,CAAC,OAAuB;QAC/B,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACjD,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QACvC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,UAAU,CAAC,qCAAqC,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,MAAM,UAAU,CACd,sEAAsE,IAAI,IAAI,CAC/E,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,gBAAgB,CAAC,SAAS,CAC7C,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CACpD,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,UAAU,CACd,6EAA6E,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAC5G,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAe,YAAY,CAAC,IAAI,CAAC;QAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtC,6EAA6E;QAC7E,0DAA0D;QAC1D,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5C,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAErD,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC1D,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC;YAC9D,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;QAC/C,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE;YAC9C,OAAO,EAAE,YAAY;YACrB,IAAI,EAAE,GAAG,CAAC,IAAI;
|
|
1
|
+
{"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../../src/cli/commands/invoke.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,eAAe,CAAC;AAkCjE,eAAO,MAAM,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,eAAe,CAAC;AAkCjE,eAAO,MAAM,UAAU,EAAE,WAwExB,CAAC"}
|
package/dist/cli/commands/mcp.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { booleanFlag, stringFlag } from "../args.js";
|
|
2
2
|
import { packageVersion } from "../version.js";
|
|
3
|
-
import { CDP_ENV_VARS, PRIVATE_KEY_ENV } from "../wallet.js";
|
|
3
|
+
import { CDP_ENV_VARS, PRIVATE_KEY_ENV, PRIVY_ENV_VARS } from "../wallet.js";
|
|
4
4
|
/** The published executable an MCP host starts. Declared in `package.json#bin`. */
|
|
5
5
|
const MCP_BIN = "metrik-mcp";
|
|
6
6
|
const PACKAGE_NAME = "@absol-labs/agent";
|
|
@@ -72,6 +72,14 @@ export const mcpCommand = {
|
|
|
72
72
|
},
|
|
73
73
|
},
|
|
74
74
|
};
|
|
75
|
+
// Honesty about the one wallet source this block cannot carry. The CLI
|
|
76
|
+
// resolves a Privy wallet (step 3), but the MCP server's own resolver,
|
|
77
|
+
// `parseAgentWalletEnv()`, reads a raw key or CDP and nothing else — there
|
|
78
|
+
// is no Privy path from the environment there. Printing Privy variables
|
|
79
|
+
// into a config the server would ignore is the failure this says out loud.
|
|
80
|
+
if (PRIVY_ENV_VARS.some((variable) => (env[variable] ?? "").length > 0)) {
|
|
81
|
+
out.note(`note: this environment configures a Privy wallet, which the CLI can use but \`${MCP_BIN}\` cannot — its wallet resolver reads ${PRIVATE_KEY_ENV} or the CDP variables only. The block below therefore carries a key placeholder; give the MCP server a raw key or a CDP account.`);
|
|
82
|
+
}
|
|
75
83
|
out.result(document);
|
|
76
84
|
out.print(`Paste this into your MCP client's config (Claude Desktop: claude_desktop_config.json), then replace every <…> placeholder:`);
|
|
77
85
|
out.print("");
|
|
@@ -85,6 +93,11 @@ export const mcpCommand = {
|
|
|
85
93
|
* Wallet variables, shaped to match how the environment running this command is
|
|
86
94
|
* already configured — CDP if that is what is set, a raw key otherwise.
|
|
87
95
|
*
|
|
96
|
+
* Privy is deliberately absent: `parseAgentWalletEnv()`, which is what the MCP
|
|
97
|
+
* server resolves its wallet with, has no Privy branch. A Privy block here
|
|
98
|
+
* would print a config that cannot start the server. The command says so on
|
|
99
|
+
* stderr instead.
|
|
100
|
+
*
|
|
88
101
|
* Values are ALWAYS placeholders. `metrik` prints derived addresses and never
|
|
89
102
|
* echoes a credential, and a config block is the single most likely thing to be
|
|
90
103
|
* pasted into a chat window or an issue.
|
|
@@ -96,7 +109,7 @@ function walletEnv(env) {
|
|
|
96
109
|
return Object.fromEntries(CDP_ENV_VARS.map((variable) => [variable, `<your ${variable}>`]));
|
|
97
110
|
}
|
|
98
111
|
return {
|
|
99
|
-
[PRIVATE_KEY_ENV]: "<0x… a funded
|
|
112
|
+
[PRIVATE_KEY_ENV]: "<0x… a funded testnet key>",
|
|
100
113
|
};
|
|
101
114
|
}
|
|
102
115
|
/**
|