@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,60 @@
|
|
|
1
|
+
import type { PrivySpendPolicy } from "./privy.js";
|
|
2
|
+
import type { RequestedSpend } from "./mandate.js";
|
|
3
|
+
import type { ServerMandateCaps } from "../mandates/env.js";
|
|
4
|
+
/**
|
|
5
|
+
* Where a hire's spend ceiling comes from, and who enforces it.
|
|
6
|
+
*
|
|
7
|
+
* The CLI has two kinds of wallet, and they differ in WHO holds the key — which
|
|
8
|
+
* is the whole reason the self-signed spend mandate exists at all:
|
|
9
|
+
*
|
|
10
|
+
* - **Key-holding wallet** (a raw private key, a CDP account). The person
|
|
11
|
+
* typing the command holds the key, so nothing outside this process bounds
|
|
12
|
+
* what that key can spend. `signCliMandate()` makes the agent state its own
|
|
13
|
+
* ceiling, and `checkMandate()` enforces it here. That is the best available
|
|
14
|
+
* guarantee when the client is the last line of defence.
|
|
15
|
+
*
|
|
16
|
+
* - **Policy-enforced wallet** (Privy, either shape). The key lives at Privy
|
|
17
|
+
* and is exercised by the broker, which caps every `openStream` against a
|
|
18
|
+
* policy the client CANNOT reach or raise. Re-signing a local mandate on top
|
|
19
|
+
* of that adds nothing: it is an agent attesting to its own limits when a
|
|
20
|
+
* stronger limit is already enforced somewhere the agent cannot touch. Worse,
|
|
21
|
+
* it cannot even be produced — the broker's typed-data policy allows an
|
|
22
|
+
* `InvocationCapability` and nothing else — so insisting on it would block
|
|
23
|
+
* the wallet whose ceiling is the stronger of the two.
|
|
24
|
+
*
|
|
25
|
+
* So for a policy-enforced wallet the CLI does not self-sign a mandate. It
|
|
26
|
+
* SUBSTITUTES the real ceiling rather than dropping the check: it reads the
|
|
27
|
+
* broker's public `/v1/config` and refuses an over-ceiling hire locally, in the
|
|
28
|
+
* same shape as the gas and USDC preflights — fail early with an actionable
|
|
29
|
+
* message instead of paying gas to learn a knowable fact.
|
|
30
|
+
*
|
|
31
|
+
* **Do not "restore" the mandate here for consistency.** Its premise is
|
|
32
|
+
* key-holding, and that premise is false for these wallets. Reinstating it
|
|
33
|
+
* would weaken the property that makes them non-custodial (the broker would
|
|
34
|
+
* have to be widened to sign `SpendMandate`) while making every fund-moving
|
|
35
|
+
* command fail against the broker as deployed.
|
|
36
|
+
*/
|
|
37
|
+
export interface SpendCeiling {
|
|
38
|
+
readonly policy: PrivySpendPolicy;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Refuse a hire the broker will refuse anyway, before any gas is spent.
|
|
42
|
+
*
|
|
43
|
+
* Mirrors the broker's own `openStream` check exactly — `deposit`,
|
|
44
|
+
* `ratePerSecond` and `duration` each against their ceiling — because a
|
|
45
|
+
* divergent copy would either block hires the broker would allow or promise
|
|
46
|
+
* hires it will not.
|
|
47
|
+
*/
|
|
48
|
+
export declare function assertWithinSpendPolicy(policy: PrivySpendPolicy, spend: RequestedSpend): void;
|
|
49
|
+
/**
|
|
50
|
+
* Refuse a hire that exceeds an OPERATOR-SET standing ceiling.
|
|
51
|
+
*
|
|
52
|
+
* `METRIK_AGENT_MANDATE_*` is not the self-signed mandate: it is a ceiling the
|
|
53
|
+
* operator deliberately configured, and it can be TIGHTER than the broker
|
|
54
|
+
* policy. A policy-enforced wallet skips the self-signed mandate, so without
|
|
55
|
+
* this the env caps would silently stop applying to exactly the wallets an
|
|
56
|
+
* unattended run is most likely to use. Enforced locally here instead, with the
|
|
57
|
+
* same comparisons `checkMandate()` makes.
|
|
58
|
+
*/
|
|
59
|
+
export declare function assertWithinOperatorCaps(caps: ServerMandateCaps, spend: RequestedSpend): void;
|
|
60
|
+
//# sourceMappingURL=spend-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spend-policy.d.ts","sourceRoot":"","sources":["../../src/cli/spend-policy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;CACnC;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,cAAc,GACpB,IAAI,CA4BN;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,cAAc,GACpB,IAAI,CAyCN"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { formatUsdc } from "./amounts.js";
|
|
2
|
+
import { CliError } from "./errors.js";
|
|
3
|
+
/**
|
|
4
|
+
* Refuse a hire the broker will refuse anyway, before any gas is spent.
|
|
5
|
+
*
|
|
6
|
+
* Mirrors the broker's own `openStream` check exactly — `deposit`,
|
|
7
|
+
* `ratePerSecond` and `duration` each against their ceiling — because a
|
|
8
|
+
* divergent copy would either block hires the broker would allow or promise
|
|
9
|
+
* hires it will not.
|
|
10
|
+
*/
|
|
11
|
+
export function assertWithinSpendPolicy(policy, spend) {
|
|
12
|
+
const over = [];
|
|
13
|
+
if (spend.budgetUsdc > policy.maxTotalUsdc) {
|
|
14
|
+
over.push(`--budget ${formatUsdc(spend.budgetUsdc)} exceeds the policy ceiling of ${formatUsdc(policy.maxTotalUsdc)}`);
|
|
15
|
+
}
|
|
16
|
+
if (spend.ratePerSecondUsdc > policy.maxRatePerSecondUsdc) {
|
|
17
|
+
over.push(`--rate ${spend.ratePerSecondUsdc} atomic/second exceeds the policy ceiling of ${policy.maxRatePerSecondUsdc} atomic/second`);
|
|
18
|
+
}
|
|
19
|
+
if (spend.durationSeconds > policy.maxDurationSeconds) {
|
|
20
|
+
over.push(`--duration ${spend.durationSeconds}s exceeds the policy ceiling of ${policy.maxDurationSeconds}s`);
|
|
21
|
+
}
|
|
22
|
+
if (over.length === 0)
|
|
23
|
+
return;
|
|
24
|
+
throw new CliError(`this hire is outside the spend policy your wallet is capped at: ${over.join("; ")}`, {
|
|
25
|
+
exitCode: 3,
|
|
26
|
+
hint: `the ceiling is enforced by the broker at ${policy.brokerUrl} (GET /v1/config), not by this CLI — you cannot raise it from this side, ` +
|
|
27
|
+
"which is exactly what makes the wallet non-custodial. Size the stream to fit, or use a key-holding wallet.",
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Refuse a hire that exceeds an OPERATOR-SET standing ceiling.
|
|
32
|
+
*
|
|
33
|
+
* `METRIK_AGENT_MANDATE_*` is not the self-signed mandate: it is a ceiling the
|
|
34
|
+
* operator deliberately configured, and it can be TIGHTER than the broker
|
|
35
|
+
* policy. A policy-enforced wallet skips the self-signed mandate, so without
|
|
36
|
+
* this the env caps would silently stop applying to exactly the wallets an
|
|
37
|
+
* unattended run is most likely to use. Enforced locally here instead, with the
|
|
38
|
+
* same comparisons `checkMandate()` makes.
|
|
39
|
+
*/
|
|
40
|
+
export function assertWithinOperatorCaps(caps, spend) {
|
|
41
|
+
const over = [];
|
|
42
|
+
if (spend.budgetUsdc > caps.maxPerStreamUsdc) {
|
|
43
|
+
over.push(`--budget ${formatUsdc(spend.budgetUsdc)} exceeds METRIK_AGENT_MANDATE max-per-stream ${formatUsdc(caps.maxPerStreamUsdc)}`);
|
|
44
|
+
}
|
|
45
|
+
if (spend.budgetUsdc > caps.maxTotalUsdc) {
|
|
46
|
+
over.push(`--budget ${formatUsdc(spend.budgetUsdc)} exceeds METRIK_AGENT_MANDATE max-total ${formatUsdc(caps.maxTotalUsdc)}`);
|
|
47
|
+
}
|
|
48
|
+
if (spend.ratePerSecondUsdc > caps.maxRatePerSecondUsdc) {
|
|
49
|
+
over.push(`--rate ${spend.ratePerSecondUsdc} atomic/second exceeds METRIK_AGENT_MANDATE max rate ${caps.maxRatePerSecondUsdc} atomic/second`);
|
|
50
|
+
}
|
|
51
|
+
if (spend.durationSeconds > caps.maxDurationSeconds) {
|
|
52
|
+
over.push(`--duration ${spend.durationSeconds}s exceeds METRIK_AGENT_MANDATE max duration ${caps.maxDurationSeconds}s`);
|
|
53
|
+
}
|
|
54
|
+
if (caps.allowedOperators.length > 0 &&
|
|
55
|
+
!caps.allowedOperators.some((operator) => operator.toLowerCase() === spend.operator.toLowerCase())) {
|
|
56
|
+
over.push(`operator ${spend.operator} is not in METRIK_AGENT_MANDATE_ALLOWED_OPERATORS`);
|
|
57
|
+
}
|
|
58
|
+
if (over.length === 0)
|
|
59
|
+
return;
|
|
60
|
+
throw new CliError(`this hire is outside the standing mandate caps in your environment: ${over.join("; ")}`, {
|
|
61
|
+
exitCode: 3,
|
|
62
|
+
hint: "these caps come from METRIK_AGENT_MANDATE_* and are yours to change. They are enforced locally for a policy-enforced wallet, which signs no mandate of its own.",
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=spend-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spend-policy.js","sourceRoot":"","sources":["../../src/cli/spend-policy.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/status.d.ts
CHANGED
|
@@ -84,7 +84,9 @@ export interface StreamReport {
|
|
|
84
84
|
*/
|
|
85
85
|
readonly attesters: AttesterSet;
|
|
86
86
|
}
|
|
87
|
-
export declare function readStreamReport(read: CliReadClient, streamId: `0x${string}`, nowSeconds: number
|
|
87
|
+
export declare function readStreamReport(read: CliReadClient, streamId: `0x${string}`, nowSeconds: number,
|
|
88
|
+
/** The escrow's generation (decides the escape-hatch rule). Default `v2`. */
|
|
89
|
+
escrowGeneration?: string): Promise<StreamReport>;
|
|
88
90
|
export declare function streamReportJson(report: StreamReport): unknown;
|
|
89
91
|
export declare function streamReportRows(report: StreamReport): (readonly [string, string])[];
|
|
90
92
|
//# sourceMappingURL=status.d.ts.map
|
package/dist/cli/status.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGjE,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,0EAA0E;IAC1E,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,WAAW,CAAC,EAChD,yBAAyB,EAAE,MAAM,GAAG,IAAI,EACxC,UAAU,EAAE,MAAM,GACjB,kBAAkB,CAgBpB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IACvC,kDAAkD;IAClD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC/C;;;OAGG;IACH,QAAQ,CAAC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,kFAAkF;IAClF,QAAQ,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC;IACxC,qFAAqF;IACrF,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;CACjC;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,aAAa,EACnB,QAAQ,EAAE,KAAK,MAAM,EAAE,EACvB,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGjE,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,0EAA0E;IAC1E,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,WAAW,CAAC,EAChD,yBAAyB,EAAE,MAAM,GAAG,IAAI,EACxC,UAAU,EAAE,MAAM,GACjB,kBAAkB,CAgBpB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IACvC,kDAAkD;IAClD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC/C;;;OAGG;IACH,QAAQ,CAAC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,kFAAkF;IAClF,QAAQ,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC;IACxC,qFAAqF;IACrF,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;CACjC;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,aAAa,EACnB,QAAQ,EAAE,KAAK,MAAM,EAAE,EACvB,UAAU,EAAE,MAAM;AAClB,6EAA6E;AAC7E,gBAAgB,SAAO,GACtB,OAAO,CAAC,YAAY,CAAC,CAyEvB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAqE9D;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,GACnB,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CA4F/B"}
|
package/dist/cli/status.js
CHANGED
|
@@ -24,7 +24,9 @@ export function settlementCoverage(stream, latestCheckpointCheckedAt, nowSeconds
|
|
|
24
24
|
pending: stopAt !== null && (coveredUpTo === null || coveredUpTo < stopAt),
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
|
-
export async function readStreamReport(read, streamId, nowSeconds
|
|
27
|
+
export async function readStreamReport(read, streamId, nowSeconds,
|
|
28
|
+
/** The escrow's generation (decides the escape-hatch rule). Default `v2`. */
|
|
29
|
+
escrowGeneration = "v2") {
|
|
28
30
|
const stream = await read.getStreamV2(streamId);
|
|
29
31
|
// Timing is answered against the chain, because every deadline on this screen
|
|
30
32
|
// — expiry, and the escape hatch in particular — is compared against
|
|
@@ -55,7 +57,7 @@ export async function readStreamReport(read, streamId, nowSeconds) {
|
|
|
55
57
|
}
|
|
56
58
|
let escapeHatch = null;
|
|
57
59
|
try {
|
|
58
|
-
escapeHatch = escapeHatchWindow(stream, await read.escapeGraceSeconds(), now.seconds);
|
|
60
|
+
escapeHatch = escapeHatchWindow(stream, await read.escapeGraceSeconds(), now.seconds, escrowGeneration);
|
|
59
61
|
}
|
|
60
62
|
catch {
|
|
61
63
|
escapeHatch = null;
|
|
@@ -93,6 +95,11 @@ export function streamReportJson(report) {
|
|
|
93
95
|
status: stream.status,
|
|
94
96
|
reclaimed: stream.reclaimed,
|
|
95
97
|
buyer: stream.buyer,
|
|
98
|
+
// An x402 stream's `buyer` is the X402StreamOpener contract, not the
|
|
99
|
+
// person who paid; `payer` is who any refund goes to.
|
|
100
|
+
opener: stream.opener ?? null,
|
|
101
|
+
payer: stream.payer ?? stream.buyer,
|
|
102
|
+
boughtVia: (stream.opener ?? null) === null ? "wallet" : "x402-opener",
|
|
96
103
|
operator: stream.operator,
|
|
97
104
|
serviceRef: stream.serviceRef,
|
|
98
105
|
deposit: stream.deposit,
|
|
@@ -152,7 +159,12 @@ export function streamReportRows(report) {
|
|
|
152
159
|
"status",
|
|
153
160
|
stream.reclaimed ? `${stream.status} (reclaimed)` : stream.status,
|
|
154
161
|
],
|
|
155
|
-
|
|
162
|
+
...(stream.opener === null || stream.opener === undefined
|
|
163
|
+
? [["buyer", stream.buyer]]
|
|
164
|
+
: [
|
|
165
|
+
["buyer", `${stream.buyer} (x402 opener contract)`],
|
|
166
|
+
["payer", `${stream.payer} (refunds go here)`],
|
|
167
|
+
]),
|
|
156
168
|
["operator", stream.operator],
|
|
157
169
|
["serviceRef", stream.serviceRef],
|
|
158
170
|
["deposit", formatUsdc(stream.deposit)],
|
package/dist/cli/status.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAEL,0BAA0B,EAC1B,eAAe,GAEhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,YAAY,GAEb,MAAM,mBAAmB,CAAC;AAgC3B;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAgD,EAChD,yBAAwC,EACxC,UAAkB;IAElB,MAAM,MAAM,GACV,MAAM,CAAC,QAAQ,GAAG,CAAC;QACjB,CAAC,CAAC,MAAM,CAAC,QAAQ;QACjB,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,SAAS;YAC9B,CAAC,CAAC,MAAM,CAAC,SAAS;YAClB,CAAC,CAAC,IAAI,CAAC;IACb,MAAM,WAAW,GACf,yBAAyB,KAAK,IAAI,IAAI,yBAAyB,GAAG,CAAC;QACjE,CAAC,CAAC,yBAAyB;QAC3B,CAAC,CAAC,IAAI,CAAC;IACX,OAAO;QACL,MAAM;QACN,WAAW;QACX,OAAO,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,WAAW,GAAG,MAAM,CAAC;KAC3E,CAAC;AACJ,CAAC;AAiDD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAmB,EACnB,QAAuB,EACvB,UAAkB;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/wallet.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import type { LocalAccount } from "viem";
|
|
1
|
+
import type { Account, LocalAccount, Transport } from "viem";
|
|
2
|
+
import type { AutonomousWalletCredentialStore } from "../wallet/autonomous-wallet.js";
|
|
3
|
+
import { type PrivyCliWalletSource, type PrivySpendPolicy } from "./privy.js";
|
|
2
4
|
/**
|
|
3
5
|
* The ONLY place the CLI resolves a signing wallet.
|
|
4
6
|
*
|
|
@@ -10,39 +12,41 @@ import type { LocalAccount } from "viem";
|
|
|
10
12
|
*
|
|
11
13
|
* ## Resolution order (first match wins, checked in this order)
|
|
12
14
|
*
|
|
13
|
-
* 1. `METRIK_AGENT_PRIVATE_KEY` — a raw
|
|
15
|
+
* 1. `METRIK_AGENT_PRIVATE_KEY` — a raw testnet key.
|
|
14
16
|
* 2. The `CDP_*` / `METRIK_AGENT_CDP_*` quartet — a Coinbase CDP Server Wallet
|
|
15
17
|
* v2 account, resolved through this package's own `resolveAgentWallet()`.
|
|
18
|
+
* 3. The `METRIK_AGENT_PRIVY_*` variables — a Privy wallet reached through a
|
|
19
|
+
* broker, either agent-owned (`METRIK_AGENT_PRIVY_WALLET_KEY`) or a
|
|
20
|
+
* user-owned broker session. See `./privy.ts`.
|
|
16
21
|
*
|
|
17
|
-
* The
|
|
18
|
-
* one environment configures
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
22
|
+
* The first two match `parseAgentWalletEnv()` (the MCP server's resolution), so
|
|
23
|
+
* one environment configures those surfaces the same way. The order is FIXED
|
|
24
|
+
* rather than "whichever is configured", because an environment carrying two is
|
|
25
|
+
* ambiguous about which address funds the stream — and that ambiguity is a
|
|
26
|
+
* fund-moving one. When more than one is present the earlier entry wins and
|
|
27
|
+
* `resolveCliWallet` says so on stderr rather than silently picking.
|
|
23
28
|
*
|
|
24
|
-
* ##
|
|
29
|
+
* ## What is different about Privy
|
|
25
30
|
*
|
|
26
|
-
*
|
|
27
|
-
* (`
|
|
28
|
-
*
|
|
29
|
-
* viem local account, so it drops straight into the CLI's existing
|
|
30
|
-
* `http(rpcUrl)` transport with no other change.
|
|
31
|
+
* A private key and a CDP account both sign LOCALLY: `privateKeyToAccount()`
|
|
32
|
+
* and `toAccount(cdpServerAccount)` are viem local accounts, so they drop
|
|
33
|
+
* straight into the CLI's `http(rpcUrl)` transport with no other change.
|
|
31
34
|
*
|
|
32
|
-
* Privy does not.
|
|
33
|
-
*
|
|
34
|
-
* `
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* `docs/cli.md` § Wallet.
|
|
35
|
+
* Privy does not. Its account is a JSON-RPC account with no `signTransaction`:
|
|
36
|
+
* it signs and broadcasts by sending `eth_sendTransaction` /
|
|
37
|
+
* `eth_signTypedData_v4` to a provider, so the wallet client's TRANSPORT must
|
|
38
|
+
* be that provider rather than a plain RPC. That is what {@link CliWallet.transport}
|
|
39
|
+
* carries, and the only reason this file knows Privy exists. The signer check
|
|
40
|
+
* below is therefore about CAPABILITY, not about locality: it refuses an
|
|
41
|
+
* account that genuinely cannot sign, and refuses a non-local account only on
|
|
42
|
+
* the paths that broadcast through `--rpc-url`.
|
|
43
|
+
*
|
|
44
|
+
* See `docs/cli.md` § Wallet.
|
|
42
45
|
*/
|
|
43
46
|
export declare const PRIVATE_KEY_ENV = "METRIK_AGENT_PRIVATE_KEY";
|
|
44
47
|
/** Every environment variable the CDP path reads. Named in errors, never printed. */
|
|
45
48
|
export declare const CDP_ENV_VARS: readonly ["CDP_API_KEY_ID", "CDP_API_KEY_SECRET", "CDP_WALLET_SECRET", "METRIK_AGENT_CDP_OWNER_NAME"];
|
|
49
|
+
export { PRIVY_ENV_VARS, PRIVY_SESSION_ENV_VARS, PRIVY_WALLET_KEY_ENV, } from "./privy.js";
|
|
46
50
|
/**
|
|
47
51
|
* What the key is for, in the words of the command that needs it. `invoke`
|
|
48
52
|
* signs an EIP-712 invocation capability and broadcasts NOTHING; telling its
|
|
@@ -50,29 +54,77 @@ export declare const CDP_ENV_VARS: readonly ["CDP_API_KEY_ID", "CDP_API_KEY_SECR
|
|
|
50
54
|
*/
|
|
51
55
|
export type KeyPurpose = "transaction" | "capability";
|
|
52
56
|
/** Which environment configured the signer, for output and for error text. */
|
|
53
|
-
export type CliWalletSource = "private-key" | "cdp";
|
|
57
|
+
export type CliWalletSource = "private-key" | "cdp" | PrivyCliWalletSource;
|
|
58
|
+
/**
|
|
59
|
+
* An account every CLI signing path can actually use.
|
|
60
|
+
*
|
|
61
|
+
* `signTypedData` is required rather than optional because it is the one
|
|
62
|
+
* capability EVERY path needs: fund-moving commands self-sign an EIP-712
|
|
63
|
+
* `SpendMandate`, and `invoke` signs an EIP-712 `InvocationCapability`. An
|
|
64
|
+
* account without it type-checks as a viem `Account` and then fails at the
|
|
65
|
+
* first signature with a `TypeError`.
|
|
66
|
+
*/
|
|
67
|
+
export type CliSignerAccount = Account & Pick<LocalAccount, "signTypedData">;
|
|
54
68
|
export interface CliWallet {
|
|
55
69
|
readonly source: CliWalletSource;
|
|
70
|
+
readonly account: CliSignerAccount;
|
|
56
71
|
/**
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
72
|
+
* The transport fund-moving commands must broadcast through, when the wallet
|
|
73
|
+
* REQUIRES one. `undefined` means "a plain `http(--rpc-url)` is correct" —
|
|
74
|
+
* true for a local signer, false for Privy, whose provider IS the transport.
|
|
60
75
|
*/
|
|
61
|
-
readonly
|
|
76
|
+
readonly transport?: Transport;
|
|
62
77
|
/** One line naming the signer's origin. Safe to print: no secret in it. */
|
|
63
78
|
readonly description: string;
|
|
79
|
+
/**
|
|
80
|
+
* Set when this wallet's spend ceiling is enforced where the CLI cannot reach
|
|
81
|
+
* it — i.e. by a Privy broker policy, not by a locally self-signed mandate.
|
|
82
|
+
*
|
|
83
|
+
* Its presence is the signal that the CLI should NOT self-sign a
|
|
84
|
+
* `SpendMandate` for this wallet, and should read and enforce the real
|
|
85
|
+
* ceiling instead. See `./spend-policy.ts` for why that substitution is
|
|
86
|
+
* strictly stronger than the mandate it replaces, and why re-adding the
|
|
87
|
+
* mandate "for consistency" would be a regression.
|
|
88
|
+
*/
|
|
89
|
+
readonly readSpendPolicy?: () => Promise<PrivySpendPolicy>;
|
|
90
|
+
}
|
|
91
|
+
export interface ResolveCliWalletOptions {
|
|
92
|
+
readonly purpose?: KeyPurpose;
|
|
93
|
+
/**
|
|
94
|
+
* `--rpc-url`. Only the Privy paths use it at resolution time: their provider
|
|
95
|
+
* serves the wallet client's READS as well as its writes, so without this a
|
|
96
|
+
* Privy command would read from a different endpoint than `--rpc-url` names.
|
|
97
|
+
*/
|
|
98
|
+
readonly rpcUrl?: string;
|
|
99
|
+
readonly note?: (line: string) => void;
|
|
100
|
+
/**
|
|
101
|
+
* Test seam, same role as `ResolveAgentWalletOptions.createCdpClient`: the
|
|
102
|
+
* credential store an agent-owned Privy wallet is read from. Unset in every
|
|
103
|
+
* real run, where the store is selected from the environment.
|
|
104
|
+
*/
|
|
105
|
+
readonly store?: AutonomousWalletCredentialStore;
|
|
106
|
+
/** Test seam: the `fetch` the Privy broker is reached through. */
|
|
107
|
+
readonly fetchImpl?: typeof fetch;
|
|
64
108
|
}
|
|
65
109
|
/**
|
|
66
110
|
* Resolves the signing wallet, or throws an actionable configuration error.
|
|
67
111
|
*
|
|
68
|
-
* `note` receives one line when the environment is ambiguous (
|
|
69
|
-
*
|
|
70
|
-
* context with no printer; commands always pass `out.note`.
|
|
112
|
+
* `note` receives one line when the environment is ambiguous (more than one
|
|
113
|
+
* wallet source configured). It is optional so `resolveCliWallet` stays usable
|
|
114
|
+
* from a context with no printer; commands always pass `out.note`.
|
|
71
115
|
*/
|
|
72
|
-
export declare function resolveCliWallet(env: NodeJS.ProcessEnv, options?:
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
116
|
+
export declare function resolveCliWallet(env: NodeJS.ProcessEnv, options?: ResolveCliWalletOptions): Promise<CliWallet>;
|
|
117
|
+
/** True for both Privy shapes, which reach their key through a broker. */
|
|
118
|
+
export declare function isPrivyWalletSource(source: CliWalletSource): source is PrivyCliWalletSource;
|
|
119
|
+
/**
|
|
120
|
+
* Whether this wallet's ceiling is enforced somewhere the CLI cannot reach.
|
|
121
|
+
*
|
|
122
|
+
* The one question every fund-moving command asks before deciding whether to
|
|
123
|
+
* self-sign a `SpendMandate`. See `./spend-policy.ts`.
|
|
124
|
+
*/
|
|
125
|
+
export declare function isPolicyEnforced(wallet: CliWallet): wallet is CliWallet & {
|
|
126
|
+
readonly readSpendPolicy: () => Promise<PrivySpendPolicy>;
|
|
127
|
+
};
|
|
76
128
|
/**
|
|
77
129
|
* The same resolution, but "nothing configured" is not an error. Used by
|
|
78
130
|
* look-before-you-leap paths (`open --dry-run`, `streams --address`) that
|
|
@@ -82,14 +134,31 @@ export declare function resolveCliWallet(env: NodeJS.ProcessEnv, options?: {
|
|
|
82
134
|
* A wallet that is PARTIALLY configured is still an error here: "you set three
|
|
83
135
|
* of the four CDP variables" and "you configured no wallet" are different
|
|
84
136
|
* facts, and rendering the first as the second sends the reader looking in the
|
|
85
|
-
* wrong place.
|
|
137
|
+
* wrong place. The same rule applies to a partial Privy setup.
|
|
86
138
|
*/
|
|
87
|
-
export declare function optionalCliWallet(env: NodeJS.ProcessEnv, options?:
|
|
88
|
-
readonly note?: (line: string) => void;
|
|
89
|
-
}): Promise<CliWallet | null>;
|
|
139
|
+
export declare function optionalCliWallet(env: NodeJS.ProcessEnv, options?: Omit<ResolveCliWalletOptions, "purpose">): Promise<CliWallet | null>;
|
|
90
140
|
/**
|
|
91
141
|
* The raw `METRIK_AGENT_PRIVATE_KEY` read, kept separate so the wallet-source
|
|
92
142
|
* precedence above reads as one list rather than as nested conditionals.
|
|
93
143
|
*/
|
|
94
144
|
export declare function optionalCliAccount(env: NodeJS.ProcessEnv): LocalAccount | null;
|
|
145
|
+
/**
|
|
146
|
+
* Refuses an account that genuinely cannot sign — and nothing else.
|
|
147
|
+
*
|
|
148
|
+
* Two distinct capabilities are checked, because two distinct things fail:
|
|
149
|
+
*
|
|
150
|
+
* - `signTypedData` is needed by EVERY command. Fund-moving commands self-sign
|
|
151
|
+
* an EIP-712 `SpendMandate`; `invoke` signs an EIP-712
|
|
152
|
+
* `InvocationCapability`. Without it the run dies at the first signature
|
|
153
|
+
* with a `TypeError` from inside viem.
|
|
154
|
+
* - A LOCAL account is needed only where the CLI broadcasts through
|
|
155
|
+
* `http(--rpc-url)`, which cannot sign. A Privy account is deliberately NOT
|
|
156
|
+
* local: its provider is the transport and performs `eth_sendTransaction`
|
|
157
|
+
* itself, so demanding locality there would reject a wallet that works.
|
|
158
|
+
*
|
|
159
|
+
* The earlier version of this guard collapsed both into "must be local", which
|
|
160
|
+
* is why Privy was refused. Deleting the guard outright was not the fix: it
|
|
161
|
+
* exists so a broken wallet fails here, named, instead of deep inside viem.
|
|
162
|
+
*/
|
|
163
|
+
export declare function assertCliSigner(account: Account, source: CliWalletSource): CliSignerAccount;
|
|
95
164
|
//# sourceMappingURL=wallet.d.ts.map
|
package/dist/cli/wallet.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/cli/wallet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/cli/wallet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAE7D,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAC;AAGtF,OAAO,EAKL,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAE1D,qFAAqF;AACrF,eAAO,MAAM,YAAY,uGAKf,CAAC;AAEX,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,YAAY,CAAC;AAQtD,8EAA8E;AAC9E,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,KAAK,GAAG,oBAAoB,CAAC;AAE3E;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;AAE7E,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,2EAA2E;IAC3E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;;;;;;;OASG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC5D;AAOD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,+BAA+B,CAAC;IACjD,kEAAkE;IAClE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,SAAS,CAAC,CASpB;AAED,0EAA0E;AAC1E,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,GACtB,MAAM,IAAI,oBAAoB,CAEhC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,IAAI,SAAS,GAAG;IACzE,QAAQ,CAAC,eAAe,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC3D,CAEA;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,OAAO,GAAE,IAAI,CAAC,uBAAuB,EAAE,SAAS,CAAM,GACrD,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA6C3B;AAuDD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,CAAC,UAAU,GACrB,YAAY,GAAG,IAAI,CASrB;AAWD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,eAAe,GACtB,gBAAgB,CAclB"}
|