@hpp-io/x402-mcp-bridge 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +125 -77
  2. package/bin/hpp-x402.js +5 -0
  3. package/bin/x402-mcp-bridge.js +0 -0
  4. package/dist/a2a.d.ts +70 -0
  5. package/dist/a2a.js +210 -0
  6. package/dist/a2a.js.map +1 -0
  7. package/dist/autoTopup.d.ts +2 -1
  8. package/dist/autoTopup.js.map +1 -1
  9. package/dist/cli/channel.d.ts +1 -0
  10. package/dist/cli/channel.js +323 -0
  11. package/dist/cli/channel.js.map +1 -0
  12. package/dist/cli/hpp-x402.d.ts +2 -0
  13. package/dist/cli/hpp-x402.js +375 -0
  14. package/dist/cli/hpp-x402.js.map +1 -0
  15. package/dist/cli/install-claude-code.d.ts +24 -0
  16. package/dist/cli/install-claude-code.js +50 -0
  17. package/dist/cli/install-claude-code.js.map +1 -0
  18. package/dist/cli/install-claude.d.ts +2 -20
  19. package/dist/cli/install-claude.js +12 -63
  20. package/dist/cli/install-claude.js.map +1 -1
  21. package/dist/cli/install-cursor.d.ts +7 -0
  22. package/dist/cli/install-cursor.js +26 -0
  23. package/dist/cli/install-cursor.js.map +1 -0
  24. package/dist/cli/install-mcp-host.d.ts +35 -0
  25. package/dist/cli/install-mcp-host.js +82 -0
  26. package/dist/cli/install-mcp-host.js.map +1 -0
  27. package/dist/cli/install-openclaw.d.ts +7 -0
  28. package/dist/cli/install-openclaw.js +28 -0
  29. package/dist/cli/install-openclaw.js.map +1 -0
  30. package/dist/cli/install-windsurf.d.ts +7 -0
  31. package/dist/cli/install-windsurf.js +37 -0
  32. package/dist/cli/install-windsurf.js.map +1 -0
  33. package/dist/cli/policy.d.ts +1 -0
  34. package/dist/cli/policy.js +212 -0
  35. package/dist/cli/policy.js.map +1 -0
  36. package/dist/cli/revoke.d.ts +1 -1
  37. package/dist/cli/revoke.js +1 -5
  38. package/dist/cli/revoke.js.map +1 -1
  39. package/dist/cli/safe.d.ts +4172 -9580
  40. package/dist/cli/setup.d.ts +1 -1
  41. package/dist/cli/setup.js +24 -6
  42. package/dist/cli/setup.js.map +1 -1
  43. package/dist/client.d.ts +25 -10
  44. package/dist/client.js +139 -2
  45. package/dist/client.js.map +1 -1
  46. package/dist/config.d.ts +50 -11
  47. package/dist/config.js +50 -10
  48. package/dist/config.js.map +1 -1
  49. package/dist/discovery.d.ts +43 -0
  50. package/dist/discovery.js +62 -0
  51. package/dist/discovery.js.map +1 -0
  52. package/dist/discoveryTools.d.ts +75 -0
  53. package/dist/discoveryTools.js +101 -0
  54. package/dist/discoveryTools.js.map +1 -0
  55. package/dist/funds/direct-balance.d.ts +27 -0
  56. package/dist/funds/direct-balance.js +58 -0
  57. package/dist/funds/direct-balance.js.map +1 -0
  58. package/dist/funds.d.ts +26 -0
  59. package/dist/funds.js +2 -0
  60. package/dist/funds.js.map +1 -0
  61. package/dist/httpX402.d.ts +45 -0
  62. package/dist/httpX402.js +214 -0
  63. package/dist/httpX402.js.map +1 -0
  64. package/dist/index.js +66 -20
  65. package/dist/index.js.map +1 -1
  66. package/dist/keychain.d.ts +23 -0
  67. package/dist/keychain.js +111 -0
  68. package/dist/keychain.js.map +1 -0
  69. package/dist/policy.d.ts +73 -0
  70. package/dist/policy.js +249 -0
  71. package/dist/policy.js.map +1 -0
  72. package/dist/server.d.ts +18 -1
  73. package/dist/server.js +120 -10
  74. package/dist/server.js.map +1 -1
  75. package/docs/policy.md +101 -0
  76. package/package.json +11 -8
  77. package/bin/hpp-x402-safe-revoke.js +0 -5
  78. package/bin/hpp-x402-safe-setup.js +0 -5
@@ -0,0 +1,35 @@
1
+ export interface InstallEnv {
2
+ DELEGATE_PRIVATE_KEY: string;
3
+ SAFE_ADDRESS?: string;
4
+ ALLOWANCE_MODULE_ADDRESS?: string;
5
+ USDCE_ADDRESS: string;
6
+ RESOURCE_SERVER_URL: string;
7
+ HPP_RPC_URL: string;
8
+ HPP_NETWORK: string;
9
+ LOG_LEVEL?: string;
10
+ }
11
+ export interface InstallResult {
12
+ configPath: string;
13
+ backupPath: string | null;
14
+ changed: boolean;
15
+ preservedEntries: string[];
16
+ }
17
+ export interface InstallOptions {
18
+ configPath: string;
19
+ entryName: string;
20
+ env: InstallEnv;
21
+ force?: boolean;
22
+ bridgeAbsPath?: string;
23
+ /**
24
+ * JSON key path where MCP servers live. Defaults to `["mcpServers"]`
25
+ * (Claude Desktop). OpenClaw uses `["mcp", "servers"]`.
26
+ */
27
+ serversKeyPath?: string[];
28
+ }
29
+ /**
30
+ * Merge an `<entryName>` MCP server entry into the host config and write it.
31
+ * Preserves all other entries; backs up the original if it exists.
32
+ * `command`/`args` default to launching the published bridge via npx;
33
+ * pass `bridgeAbsPath` for a local checkout.
34
+ */
35
+ export declare function installMcpHost(opts: InstallOptions): InstallResult;
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Generic JSON-config merge for MCP hosts.
3
+ *
4
+ * Both Claude Desktop and OpenClaw store their MCP server registry as
5
+ * `{ mcpServers: { <name>: { command, args, env } } }` JSON. The merge
6
+ * logic is identical — only the file path differs. This module owns
7
+ * that logic; `install-claude.ts` / `install-openclaw.ts` are thin
8
+ * wrappers that pass the right path.
9
+ */
10
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, copyFileSync, } from "node:fs";
11
+ import { dirname } from "node:path";
12
+ function getOrCreateNested(root, keyPath) {
13
+ let cur = root;
14
+ for (const k of keyPath) {
15
+ if (typeof cur[k] !== "object" || cur[k] === null)
16
+ cur[k] = {};
17
+ cur = cur[k];
18
+ }
19
+ return cur;
20
+ }
21
+ /**
22
+ * Merge an `<entryName>` MCP server entry into the host config and write it.
23
+ * Preserves all other entries; backs up the original if it exists.
24
+ * `command`/`args` default to launching the published bridge via npx;
25
+ * pass `bridgeAbsPath` for a local checkout.
26
+ */
27
+ export function installMcpHost(opts) {
28
+ const { configPath, entryName, env, force, bridgeAbsPath, serversKeyPath = ["mcpServers"], } = opts;
29
+ let existing = {};
30
+ if (existsSync(configPath)) {
31
+ existing = JSON.parse(readFileSync(configPath, "utf8"));
32
+ }
33
+ else {
34
+ mkdirSync(dirname(configPath), { recursive: true });
35
+ }
36
+ const command = bridgeAbsPath ? "node" : "npx";
37
+ const args = bridgeAbsPath
38
+ ? [bridgeAbsPath]
39
+ : ["-y", "@hpp-io/x402-mcp-bridge"];
40
+ const entry = {
41
+ command,
42
+ args,
43
+ env: {
44
+ DELEGATE_PRIVATE_KEY: env.DELEGATE_PRIVATE_KEY,
45
+ SAFE_ADDRESS: env.SAFE_ADDRESS,
46
+ ALLOWANCE_MODULE_ADDRESS: env.ALLOWANCE_MODULE_ADDRESS,
47
+ USDCE_ADDRESS: env.USDCE_ADDRESS,
48
+ RESOURCE_SERVER_URL: env.RESOURCE_SERVER_URL,
49
+ HPP_RPC_URL: env.HPP_RPC_URL,
50
+ HPP_NETWORK: env.HPP_NETWORK,
51
+ LOG_LEVEL: env.LOG_LEVEL ?? "info",
52
+ },
53
+ };
54
+ const servers = getOrCreateNested(existing, serversKeyPath);
55
+ const prior = servers[entryName];
56
+ if (prior && JSON.stringify(prior) === JSON.stringify(entry)) {
57
+ return {
58
+ configPath,
59
+ backupPath: null,
60
+ changed: false,
61
+ preservedEntries: Object.keys(servers).filter((k) => k !== entryName),
62
+ };
63
+ }
64
+ if (prior && !force) {
65
+ throw new Error(`existing ${entryName} entry differs; pass force:true (or --force in CLI) to overwrite`);
66
+ }
67
+ servers[entryName] = entry;
68
+ let backupPath = null;
69
+ if (existsSync(configPath)) {
70
+ const ts = new Date().toISOString().replace(/[:.]/g, "-");
71
+ backupPath = configPath + "." + ts + ".bak";
72
+ copyFileSync(configPath, backupPath);
73
+ }
74
+ writeFileSync(configPath, JSON.stringify(existing, null, 2) + "\n", "utf8");
75
+ return {
76
+ configPath,
77
+ backupPath,
78
+ changed: true,
79
+ preservedEntries: Object.keys(servers).filter((k) => k !== entryName),
80
+ };
81
+ }
82
+ //# sourceMappingURL=install-mcp-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-mcp-host.js","sourceRoot":"","sources":["../../src/cli/install-mcp-host.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EACL,YAAY,EACZ,aAAa,EACb,UAAU,EACV,SAAS,EACT,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmCpC,SAAS,iBAAiB,CACxB,IAA6B,EAC7B,OAAiB;IAEjB,IAAI,GAAG,GAA4B,IAAI,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC/D,GAAG,GAAG,GAAG,CAAC,CAAC,CAA4B,CAAC;IAC1C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAoB;IACjD,MAAM,EACJ,UAAU,EACV,SAAS,EACT,GAAG,EACH,KAAK,EACL,aAAa,EACb,cAAc,GAAG,CAAC,YAAY,CAAC,GAChC,GAAG,IAAI,CAAC;IAET,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAC3C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/C,MAAM,IAAI,GAAG,aAAa;QACxB,CAAC,CAAC,CAAC,aAAa,CAAC;QACjB,CAAC,CAAC,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;IAEtC,MAAM,KAAK,GAAG;QACZ,OAAO;QACP,IAAI;QACJ,GAAG,EAAE;YACH,oBAAoB,EAAE,GAAG,CAAC,oBAAoB;YAC9C,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,wBAAwB,EAAE,GAAG,CAAC,wBAAwB;YACtD,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,mBAAmB,EAAE,GAAG,CAAC,mBAAmB;YAC5C,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,MAAM;SACnC;KACF,CAAC;IAEF,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAEjC,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7D,OAAO;YACL,UAAU;YACV,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,KAAK;YACd,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;SACtE,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,YAAY,SAAS,kEAAkE,CACxF,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;IAE3B,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC1D,UAAU,GAAG,UAAU,GAAG,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC;QAC5C,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC;IAED,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IAE5E,OAAO;QACL,UAAU;QACV,UAAU;QACV,OAAO,EAAE,IAAI;QACb,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;KACtE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type InstallEnv, type InstallResult } from "./install-mcp-host.js";
2
+ export declare function configPath(): string;
3
+ export declare function installOpenClaw(env: InstallEnv, opts?: {
4
+ force?: boolean;
5
+ bridgeAbsPath?: string;
6
+ configPathOverride?: string;
7
+ }): InstallResult;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Merge an `hpp-x402` MCP server entry into the user's OpenClaw config.
3
+ *
4
+ * OpenClaw stores its MCP gateway config as JSON at
5
+ * ~/.openclaw/openclaw.json (default)
6
+ *
7
+ * If a project / corp setup uses a non-default location, callers can
8
+ * pass `configPathOverride` to point at it directly. The merge logic
9
+ * is shared with Claude Desktop — see install-mcp-host.ts.
10
+ */
11
+ import { resolve } from "node:path";
12
+ import { homedir } from "node:os";
13
+ import { installMcpHost, } from "./install-mcp-host.js";
14
+ const ENTRY_NAME = "hpp-x402";
15
+ export function configPath() {
16
+ return resolve(homedir(), ".openclaw/openclaw.json");
17
+ }
18
+ export function installOpenClaw(env, opts = {}) {
19
+ return installMcpHost({
20
+ configPath: opts.configPathOverride ?? configPath(),
21
+ entryName: ENTRY_NAME,
22
+ env,
23
+ force: opts.force,
24
+ bridgeAbsPath: opts.bridgeAbsPath,
25
+ serversKeyPath: ["mcp", "servers"],
26
+ });
27
+ }
28
+ //# sourceMappingURL=install-openclaw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-openclaw.js","sourceRoot":"","sources":["../../src/cli/install-openclaw.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EACL,cAAc,GAGf,MAAM,uBAAuB,CAAC;AAE/B,MAAM,UAAU,GAAG,UAAU,CAAC;AAE9B,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,yBAAyB,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,GAAe,EACf,OAAiF,EAAE;IAEnF,OAAO,cAAc,CAAC;QACpB,UAAU,EAAE,IAAI,CAAC,kBAAkB,IAAI,UAAU,EAAE;QACnD,SAAS,EAAE,UAAU;QACrB,GAAG;QACH,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,cAAc,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC;KACnC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type InstallEnv, type InstallResult } from "./install-mcp-host.js";
2
+ export declare function configPath(): string;
3
+ export declare function installWindsurf(env: InstallEnv, opts?: {
4
+ force?: boolean;
5
+ bridgeAbsPath?: string;
6
+ configPathOverride?: string;
7
+ }): InstallResult;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Merge an `hpp-x402` MCP server entry into Windsurf's mcp_config.json.
3
+ *
4
+ * Windsurf (Codeium) uses the same `{ mcpServers: { … } }` schema, but a
5
+ * different file location per OS:
6
+ * macOS : ~/.codeium/windsurf/mcp_config.json
7
+ * Linux : ~/.config/.codeium/windsurf/mcp_config.json
8
+ * Windows : %APPDATA%/Codeium/windsurf/mcp_config.json
9
+ * Pass `configPathOverride` for a non-default path (or for tests).
10
+ * The merge logic is shared — see install-mcp-host.ts.
11
+ */
12
+ import { resolve } from "node:path";
13
+ import { homedir, platform } from "node:os";
14
+ import { installMcpHost, } from "./install-mcp-host.js";
15
+ const ENTRY_NAME = "hpp-x402";
16
+ export function configPath() {
17
+ const p = platform();
18
+ if (p === "win32") {
19
+ return resolve(process.env.APPDATA ?? "", "Codeium/windsurf/mcp_config.json");
20
+ }
21
+ if (p === "darwin") {
22
+ return resolve(homedir(), ".codeium/windsurf/mcp_config.json");
23
+ }
24
+ // Linux
25
+ return resolve(homedir(), ".config/.codeium/windsurf/mcp_config.json");
26
+ }
27
+ export function installWindsurf(env, opts = {}) {
28
+ return installMcpHost({
29
+ configPath: opts.configPathOverride ?? configPath(),
30
+ entryName: ENTRY_NAME,
31
+ env,
32
+ force: opts.force,
33
+ bridgeAbsPath: opts.bridgeAbsPath,
34
+ // serversKeyPath defaults to ["mcpServers"] — same as Windsurf's schema.
35
+ });
36
+ }
37
+ //# sourceMappingURL=install-windsurf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-windsurf.js","sourceRoot":"","sources":["../../src/cli/install-windsurf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,EACL,cAAc,GAGf,MAAM,uBAAuB,CAAC;AAE/B,MAAM,UAAU,GAAG,UAAU,CAAC;AAE9B,MAAM,UAAU,UAAU;IACxB,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;IACrB,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,kCAAkC,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,mCAAmC,CAAC,CAAC;IACjE,CAAC;IACD,QAAQ;IACR,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,2CAA2C,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,GAAe,EACf,OAAiF,EAAE;IAEnF,OAAO,cAAc,CAAC;QACpB,UAAU,EAAE,IAAI,CAAC,kBAAkB,IAAI,UAAU,EAAE;QACnD,SAAS,EAAE,UAAU;QACrB,GAAG;QACH,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,yEAAyE;KAC1E,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function run(): void;
@@ -0,0 +1,212 @@
1
+ /**
2
+ * hpp-x402-policy — manage the host policy file (`~/.hpp-x402/policy.json`)
3
+ * that the `x402_http_call` tool reads for per-host auth-header injection and
4
+ * spend guardrails. Editing the JSON by hand works too; this is a convenience
5
+ * wrapper (mirrors hpp-x402-keychain).
6
+ *
7
+ * Usage:
8
+ * hpp-x402-policy path print the policy file path
9
+ * hpp-x402-policy show print the full policy JSON
10
+ * hpp-x402-policy list summarize configured hosts
11
+ * hpp-x402-policy set <host> [flags] add/update a host entry
12
+ * --header NAME=SOURCE (repeatable) e.g. X-Api-Key=file:~/.hpphub/config.json#api_key
13
+ * --max-per-call <usdc> e.g. 5 (stored atomic, 6 dec)
14
+ * --cooldown-ms <n> min ms between paid calls
15
+ * --https <true|false> require https (default true)
16
+ * hpp-x402-policy unset <host> remove a host entry
17
+ * hpp-x402-policy unset <host> --header NAME remove a single header
18
+ * hpp-x402-policy defaults [flags] set _defaults
19
+ * --allow-unlisted <true|false> allow non-listed hosts (default false)
20
+ * --max-per-call <usdc> / --https <bool> default limits
21
+ *
22
+ * value-source for headers: file:<path>#<field> | env:<VAR> |
23
+ * keychain://<svc>/<acct> | literal:<value>
24
+ */
25
+ import { loadPolicy, savePolicy, policyFilePath, } from "../policy.js";
26
+ const USDC_DECIMALS = 6; // USDC.e
27
+ const SOURCE_PREFIXES = ["file:", "env:", "keychain://", "literal:"];
28
+ function usage() {
29
+ process.stderr.write([
30
+ "hpp-x402-policy — manage ~/.hpp-x402/policy.json (host auth + spend guardrails)",
31
+ "",
32
+ "Usage:",
33
+ " hpp-x402-policy path",
34
+ " hpp-x402-policy show",
35
+ " hpp-x402-policy list",
36
+ " hpp-x402-policy set <host> [--header NAME=SOURCE]... [--max-per-call <usdc>]",
37
+ " [--cooldown-ms <n>] [--https <true|false>]",
38
+ " hpp-x402-policy unset <host> [--header NAME]",
39
+ " hpp-x402-policy defaults [--allow-unlisted <true|false>] [--max-per-call <usdc>] [--https <true|false>]",
40
+ "",
41
+ "value-source: file:<path>#<field> | env:<VAR> | keychain://<svc>/<acct> | literal:<value>",
42
+ "example: hpp-x402-policy set hub-stage.hpp.io \\",
43
+ " --header X-Api-Key=file:~/.hpphub/config.json#api_key --max-per-call 5 --cooldown-ms 300000",
44
+ "",
45
+ ].join("\n"));
46
+ process.exit(1);
47
+ }
48
+ function parseArgs(argv) {
49
+ const args = argv.slice(2);
50
+ const cmd = args[0] ?? "help";
51
+ const out = { cmd, headers: [] };
52
+ const rest = args.slice(1);
53
+ const positional = [];
54
+ for (let i = 0; i < rest.length; i++) {
55
+ const a = rest[i];
56
+ if (!a.startsWith("--")) {
57
+ positional.push(a);
58
+ continue;
59
+ }
60
+ const key = a.slice(2);
61
+ const val = rest[i + 1];
62
+ const takeVal = () => {
63
+ if (val === undefined || val.startsWith("--"))
64
+ throw new Error(`--${key} needs a value`);
65
+ i++;
66
+ return val;
67
+ };
68
+ switch (key) {
69
+ case "header": {
70
+ const v = takeVal();
71
+ if (out.cmd === "unset") {
72
+ out.removeHeader = v; // unset --header NAME
73
+ }
74
+ else {
75
+ const eq = v.indexOf("=");
76
+ if (eq === -1)
77
+ throw new Error(`--header expects NAME=SOURCE, got "${v}"`);
78
+ out.headers.push({ name: v.slice(0, eq), source: v.slice(eq + 1) });
79
+ }
80
+ break;
81
+ }
82
+ case "max-per-call":
83
+ out.maxPerCall = takeVal();
84
+ break;
85
+ case "cooldown-ms":
86
+ out.cooldownMs = takeVal();
87
+ break;
88
+ case "https":
89
+ out.https = takeVal();
90
+ break;
91
+ case "allow-unlisted":
92
+ out.allowUnlisted = takeVal();
93
+ break;
94
+ default: throw new Error(`unknown flag --${key}`);
95
+ }
96
+ }
97
+ out.host = positional[0];
98
+ return out;
99
+ }
100
+ function usdcToAtomic(usdc) {
101
+ const n = Number(usdc);
102
+ if (!Number.isFinite(n) || n < 0)
103
+ throw new Error(`invalid amount: ${usdc}`);
104
+ return String(Math.round(n * 10 ** USDC_DECIMALS));
105
+ }
106
+ function atomicToUsdc(a) {
107
+ return a == null ? "-" : String(Number(a) / 10 ** USDC_DECIMALS);
108
+ }
109
+ function parseBool(s) {
110
+ if (s === "true")
111
+ return true;
112
+ if (s === "false")
113
+ return false;
114
+ throw new Error(`expected true|false, got "${s}"`);
115
+ }
116
+ function buildLimits(base, a) {
117
+ const limits = { ...(base ?? {}) };
118
+ if (a.maxPerCall !== undefined)
119
+ limits.maxPerCallAtomic = usdcToAtomic(a.maxPerCall);
120
+ if (a.cooldownMs !== undefined)
121
+ limits.cooldownMs = Number(a.cooldownMs);
122
+ if (a.https !== undefined)
123
+ limits.requireHttps = parseBool(a.https);
124
+ return limits;
125
+ }
126
+ export function run() {
127
+ const a = parseArgs(process.argv);
128
+ if (a.cmd === "help")
129
+ usage();
130
+ if (a.cmd === "path") {
131
+ process.stdout.write(policyFilePath() + "\n");
132
+ return;
133
+ }
134
+ const policy = loadPolicy();
135
+ if (a.cmd === "show") {
136
+ process.stdout.write(JSON.stringify(policy, null, 2) + "\n");
137
+ return;
138
+ }
139
+ if (a.cmd === "list") {
140
+ const hosts = Object.keys(policy).filter((k) => k !== "_defaults");
141
+ if (hosts.length === 0) {
142
+ process.stdout.write("(no hosts configured)\n");
143
+ return;
144
+ }
145
+ const d = policy._defaults;
146
+ if (d)
147
+ process.stdout.write(`_defaults: allowUnlisted=${d.allowUnlisted ?? false} maxPerCall=${atomicToUsdc(d.limits?.maxPerCallAtomic)} https=${d.limits?.requireHttps ?? true}\n`);
148
+ for (const h of hosts) {
149
+ const hp = policy[h];
150
+ const hdrs = Object.keys(hp.headers ?? {}).join(", ") || "(none)";
151
+ const l = hp.limits ?? {};
152
+ process.stdout.write(`${h}\n headers: ${hdrs}\n maxPerCall: ${atomicToUsdc(l.maxPerCallAtomic)} cooldownMs: ${l.cooldownMs ?? "-"} https: ${l.requireHttps ?? true}\n`);
153
+ }
154
+ return;
155
+ }
156
+ if (a.cmd === "set") {
157
+ if (!a.host)
158
+ throw new Error("set requires <host>");
159
+ if (a.headers.some((h) => !SOURCE_PREFIXES.some((p) => h.source.startsWith(p)))) {
160
+ throw new Error(`header source must start with one of: ${SOURCE_PREFIXES.join(", ")}`);
161
+ }
162
+ const existing = policy[a.host] ?? {};
163
+ const headers = { ...(existing.headers ?? {}) };
164
+ for (const h of a.headers)
165
+ headers[h.name] = h.source;
166
+ const next = { ...existing };
167
+ if (Object.keys(headers).length)
168
+ next.headers = headers;
169
+ const limits = buildLimits(existing.limits, a);
170
+ if (Object.keys(limits).length)
171
+ next.limits = limits;
172
+ policy[a.host] = next;
173
+ savePolicy(policy);
174
+ process.stdout.write(`✓ set ${a.host}\n headers: ${Object.keys(next.headers ?? {}).join(", ") || "(none)"}\n maxPerCall: ${atomicToUsdc(next.limits?.maxPerCallAtomic)} cooldownMs: ${next.limits?.cooldownMs ?? "-"} https: ${next.limits?.requireHttps ?? true}\n`);
175
+ return;
176
+ }
177
+ if (a.cmd === "unset") {
178
+ if (!a.host)
179
+ throw new Error("unset requires <host>");
180
+ const hp = policy[a.host];
181
+ if (!hp) {
182
+ process.stdout.write(`(no entry: ${a.host})\n`);
183
+ return;
184
+ }
185
+ if (a.removeHeader) {
186
+ if (hp.headers)
187
+ delete hp.headers[a.removeHeader];
188
+ savePolicy(policy);
189
+ process.stdout.write(`✓ removed header ${a.removeHeader} from ${a.host}\n`);
190
+ }
191
+ else {
192
+ delete policy[a.host];
193
+ savePolicy(policy);
194
+ process.stdout.write(`✓ removed host ${a.host}\n`);
195
+ }
196
+ return;
197
+ }
198
+ if (a.cmd === "defaults") {
199
+ const d = { ...(policy._defaults ?? {}) };
200
+ if (a.allowUnlisted !== undefined)
201
+ d.allowUnlisted = parseBool(a.allowUnlisted);
202
+ const limits = buildLimits(d.limits, a);
203
+ if (Object.keys(limits).length)
204
+ d.limits = limits;
205
+ policy._defaults = d;
206
+ savePolicy(policy);
207
+ process.stdout.write(`✓ defaults: allowUnlisted=${d.allowUnlisted ?? false} maxPerCall=${atomicToUsdc(d.limits?.maxPerCallAtomic)} https=${d.limits?.requireHttps ?? true}\n`);
208
+ return;
209
+ }
210
+ usage();
211
+ }
212
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/cli/policy.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- export {};
1
+ export declare function run(): Promise<void>;
@@ -52,7 +52,7 @@ const ERC20_ABI = [
52
52
  stateMutability: "nonpayable",
53
53
  },
54
54
  ];
55
- async function main() {
55
+ export async function run() {
56
56
  const args = parseArgs(process.argv);
57
57
  const network = args.network || "eip155:181228";
58
58
  const def = DEFAULTS[network];
@@ -116,8 +116,4 @@ async function main() {
116
116
  console.log(" Run again with --drain --delegate-pk 0x... to recover that balance.");
117
117
  }
118
118
  }
119
- main().catch((err) => {
120
- console.error("\nERROR:", err?.message ?? err);
121
- process.exit(1);
122
- });
123
119
  //# sourceMappingURL=revoke.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"revoke.js","sourceRoot":"","sources":["../../src/cli/revoke.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"revoke.js","sourceRoot":"","sources":["../../src/cli/revoke.ts"],"names":[],"mappings":"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"}