@obul.ai/obulx 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,105 @@
1
+ # @obul.ai/obulx
2
+
3
+ Obul x402 CLI and library.
4
+
5
+ ## Install
6
+ ```bash
7
+ npm install -g @obul.ai/obulx
8
+ ```
9
+
10
+ ## What It Does
11
+ `obulx` is a CLI for calling x402-protected endpoints. It supports:
12
+ - Proxy mode (via Obul proxy) API key auth.
13
+ - Direct x402 mode with a local private key for signing payments.
14
+
15
+ ## CLI Usage
16
+ ```bash
17
+ obulx [options] <url>
18
+ ```
19
+
20
+ ## Key Parameters
21
+ - `--obul-proxy <BASE>`: Enables proxy mode and rewrites the URL as `BASE/{scheme}/{host}{path}?{query}`.
22
+ - `--network <NETWORK>`: Required for direct x402 mode. Repeatable or comma-separated.
23
+ - `--auto-approve-limit <N>`: Required for direct x402 mode. Integer string in token units.
24
+ - `--asset <ADDRESS>`: Optional in direct mode. Exact match (case-insensitive).
25
+ - `-X, --method <METHOD>`: HTTP method (default `GET`).
26
+ - `-d, --data <BODY>`: Raw request body. Defaults method to `POST` if method is not set.
27
+ - `-H, --header <NAME: VALUE>`: Add a request header (repeatable).
28
+ - `-v`: Show final response status and headers.
29
+ - `-vv`: Show final request + response.
30
+ - `-vvv`: Also show probe request + response in direct x402 mode.
31
+
32
+ ## Environment Variables
33
+ - `OBUL_PROXY_URL`: Default proxy base when `--obul-proxy` is not set.
34
+ - `OBUL_API_KEY`: API key for proxy mode.
35
+ - `OBUL_X402_PRIVATE_KEY`: Private signing key for direct x402 mode.
36
+
37
+ ## Examples
38
+
39
+ Proxy mode (API key):
40
+ ```bash
41
+ export OBUL_PROXY_URL="https://proxy.devnet.obul.ai/proxy"
42
+ export OBUL_API_KEY="your-api-key"
43
+
44
+ obulx <x402-protected endpoint>
45
+ ```
46
+
47
+ Proxy mode with custom headers:
48
+ ```bash
49
+ obulx --obul-proxy https://proxy.devnet.obul.ai/proxy \
50
+ -H "Content-Type: application/json" \
51
+ -H "X-Custom: value" \
52
+ <x402-protected endpoint>
53
+ ```
54
+
55
+ Direct x402 mode:
56
+ ```bash
57
+ export OBUL_X402_PRIVATE_KEY="0x..."
58
+
59
+ obulx --network base --auto-approve-limit 1000 \
60
+ https://x402.example.com/resource
61
+ ```
62
+
63
+ Direct mode with network priority and asset filter:
64
+ ```bash
65
+ export OBUL_X402_PRIVATE_KEY="0x..."
66
+
67
+ obulx --network base,optimism --asset 0xA0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 \
68
+ --auto-approve-limit 1000 \
69
+ https://x402.example.com/resource
70
+ ```
71
+
72
+ Verbose output (final request + response):
73
+ ```bash
74
+ obulx -vv --obul-proxy https://proxy.devnet.obul.ai/proxy \
75
+ <x402-protected endpoint>
76
+ ```
77
+
78
+ Verbose output (probe + final in direct mode):
79
+ ```bash
80
+ obulx -vvv --network base --auto-approve-limit 1000 \
81
+ https://x402.example.com/resource
82
+ ```
83
+
84
+ ## CLI
85
+ ```bash
86
+ obulx --obul-proxy https://proxy.devnet.obul.ai/proxy \
87
+ -X POST -d '<x402 request body>' \
88
+ <x402-protected endpoint>
89
+ ```
90
+
91
+ ## Library
92
+ ```ts
93
+ import { obulxFetch } from "@obul.ai/obulx"
94
+
95
+ const response = await obulxFetch({
96
+ url: "<x402-protected endpoint>",
97
+ method: "POST",
98
+ body: "...",
99
+ obulProxy: "https://proxy.devnet.obul.ai/proxy",
100
+ obulApiKey: process.env.OBUL_API_KEY,
101
+ verbose: 1
102
+ })
103
+
104
+ process.stdout.write(response.body)
105
+ ```
package/dist/args.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ export type ParsedArgs = {
2
+ url?: string;
3
+ method?: string;
4
+ data?: string;
5
+ headers: Record<string, string>;
6
+ networks: string[];
7
+ asset?: string;
8
+ autoApproveLimit?: string;
9
+ obulProxy?: string;
10
+ obulAccessToken?: string;
11
+ obulApiKey?: string;
12
+ verbose: number;
13
+ help: boolean;
14
+ };
15
+ export declare const helpText = "obulx [options] <url>\n\nOptions:\n -X, --method <METHOD> HTTP method (default GET)\n -d, --data <BODY> request body; defaults method to POST if method not set\n -H, --header <NAME: VALUE> add a header (repeatable)\n --network <NETWORK> accepted network (repeatable or comma-separated)\n --asset <ADDRESS> required asset address (exact match, case-insensitive)\n --auto-approve-limit <N> auto-approve limit in token units, integer string\n --obul-proxy <BASE> proxy base, e.g. https://proxy.devnet.obul.ai/proxy\n --obul-access-token <TOK> JWT access token for proxy mode (overrides env)\n --obul-api-key <KEY> API key for proxy mode (overrides env)\n -v, --verbose print final response status/headers\n -vv also print x402 probe request/response when in direct mode\n -h, --help show usage\n";
16
+ export declare function parseNetworks(values: string[]): string[];
17
+ export declare function parseArgs(argv: string[]): ParsedArgs;
18
+ export declare function parseArgsWithDefaults(args: ParsedArgs): Required<Pick<ParsedArgs, "method" | "headers" | "networks" | "verbose">> & ParsedArgs;
19
+ //# sourceMappingURL=args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,eAAO,MAAM,QAAQ,+6BAepB,CAAA;AAkBD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAOxD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAuGpD;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,UAAU,GACf,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC,GAAG,UAAU,CASxF"}
package/dist/args.js ADDED
@@ -0,0 +1,148 @@
1
+ export const helpText = `obulx [options] <url>
2
+
3
+ Options:
4
+ -X, --method <METHOD> HTTP method (default GET)
5
+ -d, --data <BODY> request body; defaults method to POST if method not set
6
+ -H, --header <NAME: VALUE> add a header (repeatable)
7
+ --network <NETWORK> accepted network (repeatable or comma-separated)
8
+ --asset <ADDRESS> required asset address (exact match, case-insensitive)
9
+ --auto-approve-limit <N> auto-approve limit in token units, integer string
10
+ --obul-proxy <BASE> proxy base, e.g. https://proxy.devnet.obul.ai/proxy
11
+ --obul-access-token <TOK> JWT access token for proxy mode (overrides env)
12
+ --obul-api-key <KEY> API key for proxy mode (overrides env)
13
+ -v, --verbose print final response status/headers
14
+ -vv also print x402 probe request/response when in direct mode
15
+ -h, --help show usage
16
+ `;
17
+ function parseHeader(raw) {
18
+ const index = raw.indexOf(":");
19
+ if (index === -1) {
20
+ throw new Error(`Invalid header format: ${raw}`);
21
+ }
22
+ const name = raw.slice(0, index).trim();
23
+ const value = raw.slice(index + 1).trim();
24
+ if (!name)
25
+ throw new Error(`Invalid header name: ${raw}`);
26
+ return { name, value };
27
+ }
28
+ function addNetworks(target, value) {
29
+ const parts = value.split(",").map((part) => part.trim()).filter(Boolean);
30
+ target.push(...parts);
31
+ }
32
+ export function parseNetworks(values) {
33
+ const output = [];
34
+ for (const value of values) {
35
+ const parts = value.split(",").map((part) => part.trim()).filter(Boolean);
36
+ output.push(...parts);
37
+ }
38
+ return output;
39
+ }
40
+ export function parseArgs(argv) {
41
+ const result = {
42
+ headers: {},
43
+ networks: [],
44
+ verbose: 0,
45
+ help: false
46
+ };
47
+ const args = [...argv];
48
+ while (args.length > 0) {
49
+ const arg = args.shift();
50
+ if (!arg)
51
+ continue;
52
+ if (arg === "-h" || arg === "--help") {
53
+ result.help = true;
54
+ continue;
55
+ }
56
+ if (arg === "-v" || arg === "--verbose") {
57
+ result.verbose = Math.min(2, result.verbose + 1);
58
+ continue;
59
+ }
60
+ if (arg === "-vv") {
61
+ result.verbose = 2;
62
+ continue;
63
+ }
64
+ if (arg === "-X" || arg === "--method") {
65
+ const value = args.shift();
66
+ if (!value)
67
+ throw new Error("Missing value for --method");
68
+ result.method = value.toUpperCase();
69
+ continue;
70
+ }
71
+ if (arg === "-d" || arg === "--data") {
72
+ const value = args.shift();
73
+ if (value == null)
74
+ throw new Error("Missing value for --data");
75
+ result.data = value;
76
+ continue;
77
+ }
78
+ if (arg === "-H" || arg === "--header") {
79
+ const value = args.shift();
80
+ if (!value)
81
+ throw new Error("Missing value for --header");
82
+ const { name, value: headerValue } = parseHeader(value);
83
+ result.headers[name] = headerValue;
84
+ continue;
85
+ }
86
+ if (arg === "--network") {
87
+ const value = args.shift();
88
+ if (!value)
89
+ throw new Error("Missing value for --network");
90
+ addNetworks(result.networks, value);
91
+ continue;
92
+ }
93
+ if (arg === "--asset") {
94
+ const value = args.shift();
95
+ if (!value)
96
+ throw new Error("Missing value for --asset");
97
+ result.asset = value;
98
+ continue;
99
+ }
100
+ if (arg === "--auto-approve-limit") {
101
+ const value = args.shift();
102
+ if (!value)
103
+ throw new Error("Missing value for --auto-approve-limit");
104
+ result.autoApproveLimit = value;
105
+ continue;
106
+ }
107
+ if (arg === "--obul-proxy") {
108
+ const value = args.shift();
109
+ if (!value)
110
+ throw new Error("Missing value for --obul-proxy");
111
+ result.obulProxy = value;
112
+ continue;
113
+ }
114
+ if (arg === "--obul-access-token") {
115
+ const value = args.shift();
116
+ if (!value)
117
+ throw new Error("Missing value for --obul-access-token");
118
+ result.obulAccessToken = value;
119
+ continue;
120
+ }
121
+ if (arg === "--obul-api-key") {
122
+ const value = args.shift();
123
+ if (!value)
124
+ throw new Error("Missing value for --obul-api-key");
125
+ result.obulApiKey = value;
126
+ continue;
127
+ }
128
+ if (arg.startsWith("-")) {
129
+ throw new Error(`Unknown flag: ${arg}`);
130
+ }
131
+ if (result.url) {
132
+ throw new Error("Only one URL argument is allowed");
133
+ }
134
+ result.url = arg;
135
+ }
136
+ return result;
137
+ }
138
+ export function parseArgsWithDefaults(args) {
139
+ const method = args.method ?? (args.data ? "POST" : "GET");
140
+ const networks = parseNetworks(args.networks);
141
+ return {
142
+ ...args,
143
+ method,
144
+ networks,
145
+ verbose: args.verbose ?? 0
146
+ };
147
+ }
148
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env node
2
+ import { obulxFetch } from "./lib.js";
3
+ import { helpText, parseArgs, parseArgsWithDefaults } from "./args.js";
4
+ async function main() {
5
+ try {
6
+ const parsed = parseArgs(process.argv.slice(2));
7
+ if (parsed.help) {
8
+ process.stderr.write(helpText);
9
+ process.exit(0);
10
+ }
11
+ if (!parsed.url) {
12
+ throw new Error("Missing URL");
13
+ }
14
+ const args = parseArgsWithDefaults(parsed);
15
+ if (!args.url) {
16
+ throw new Error("Missing URL");
17
+ }
18
+ const obulProxy = args.obulProxy ?? process.env.OBUL_PROXY_URL;
19
+ const obulAccessToken = args.obulAccessToken ?? process.env.OBUL_ACCESS_TOKEN;
20
+ const obulApiKey = args.obulApiKey ?? process.env.OBUL_API_KEY;
21
+ const privateKey = process.env.OBUL_X402_PRIVATE_KEY ?? process.env.PRIVATE_KEY;
22
+ const response = await obulxFetch({
23
+ url: args.url,
24
+ method: args.method,
25
+ headers: args.headers,
26
+ body: args.data,
27
+ networks: args.networks,
28
+ asset: args.asset,
29
+ autoApproveLimit: args.autoApproveLimit,
30
+ obulProxy,
31
+ obulAccessToken,
32
+ obulApiKey,
33
+ verbose: args.verbose,
34
+ privateKey
35
+ });
36
+ process.stdout.write(Buffer.from(response.body));
37
+ }
38
+ catch (error) {
39
+ const message = error instanceof Error ? error.message : String(error);
40
+ process.stderr.write(`${message}\n`);
41
+ process.exit(1);
42
+ }
43
+ }
44
+ main();
45
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAEtE,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/C,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;QAChC,CAAC;QAED,MAAM,IAAI,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAA;QAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;QAChC,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAA;QAC9D,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAA;QAC7E,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;QAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;QAE/E,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC;YAChC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,SAAS;YACT,eAAe;YACf,UAAU;YACV,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU;SACX,CAAC,CAAA;QAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAA;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { obulxFetch } from "./lib.js";
2
+ export type { ObulxFetchOptions, ObulxResponse } from "./lib.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { obulxFetch } from "./lib.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA"}
package/dist/lib.d.ts ADDED
@@ -0,0 +1,44 @@
1
+ export type ObulxFetchOptions = {
2
+ url: string;
3
+ method?: string;
4
+ headers?: Record<string, string>;
5
+ body?: string;
6
+ networks?: string[];
7
+ asset?: string;
8
+ autoApproveLimit?: string;
9
+ obulProxy?: string;
10
+ obulAccessToken?: string;
11
+ obulApiKey?: string;
12
+ verbose?: number;
13
+ privateKey?: string;
14
+ fetch?: typeof fetch;
15
+ stderr?: NodeJS.WritableStream;
16
+ stdin?: NodeJS.ReadableStream;
17
+ };
18
+ export type ObulxResponse = {
19
+ status: number;
20
+ statusText: string;
21
+ headers: Record<string, string>;
22
+ body: Uint8Array;
23
+ url: string;
24
+ };
25
+ type PaymentRequirement = {
26
+ scheme?: string;
27
+ network?: string;
28
+ asset?: string;
29
+ amount?: string | number;
30
+ maxAmountRequired?: string | number;
31
+ [key: string]: unknown;
32
+ };
33
+ export declare function buildProxyUrl(base: string, target: URL): string;
34
+ export declare function applyProxyAuth(headers: Headers, options: {
35
+ obulAccessToken?: string;
36
+ obulApiKey?: string;
37
+ }): void;
38
+ export declare function selectPaymentRequirement(input: unknown, options: {
39
+ networks?: string[];
40
+ asset?: string;
41
+ }): PaymentRequirement;
42
+ export declare function obulxFetch(options: ObulxFetchOptions): Promise<ObulxResponse>;
43
+ export {};
44
+ //# sourceMappingURL=lib.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,IAAI,EAAE,UAAU,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,KAAK,kBAAkB,GAAG;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB,CAAA;AAYD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,CAM/D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,QAgB1G;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,kBAAkB,CAwBpB;AAyPD,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CA6FnF"}
package/dist/lib.js ADDED
@@ -0,0 +1,350 @@
1
+ import { wrapFetchWithPayment } from "x402-fetch";
2
+ import { privateKeyToAccount } from "viem/accounts";
3
+ const REDACTED = "<redacted>";
4
+ const DEFAULT_MAX_VALUE = 10n ** 30n;
5
+ export function buildProxyUrl(base, target) {
6
+ const trimmed = base.replace(/\/+$/, "");
7
+ const scheme = target.protocol.replace(":", "");
8
+ const host = target.host;
9
+ const path = target.pathname || "/";
10
+ return `${trimmed}/${scheme}/${host}${path}${target.search}`;
11
+ }
12
+ export function applyProxyAuth(headers, options) {
13
+ if (options.obulAccessToken) {
14
+ headers.set("Authorization", `Bearer ${options.obulAccessToken}`);
15
+ return;
16
+ }
17
+ if (headers.get("authorization")) {
18
+ return;
19
+ }
20
+ if (options.obulApiKey) {
21
+ headers.set("X-Obul-Api-Key", options.obulApiKey);
22
+ return;
23
+ }
24
+ throw new Error("Missing proxy auth: set --obul-access-token, --obul-api-key, or OBUL_ACCESS_TOKEN/OBUL_API_KEY.");
25
+ }
26
+ export function selectPaymentRequirement(input, options) {
27
+ const requirements = normalizeRequirements(input);
28
+ if (requirements.length === 0) {
29
+ throw new Error("No payment requirements available");
30
+ }
31
+ const asset = options.asset?.toLowerCase();
32
+ const filteredByAsset = asset
33
+ ? requirements.filter((req) => (req.asset ?? "").toString().toLowerCase() === asset)
34
+ : requirements;
35
+ if (asset && filteredByAsset.length === 0) {
36
+ throw new Error(`No payment requirements matched asset ${options.asset}`);
37
+ }
38
+ if (options.networks && options.networks.length > 0) {
39
+ for (const network of options.networks) {
40
+ const match = filteredByAsset.find((req) => matchesNetwork(req, network));
41
+ if (match)
42
+ return match;
43
+ }
44
+ throw new Error(`No payment requirements matched networks: ${options.networks.join(", ")}`);
45
+ }
46
+ return filteredByAsset[0];
47
+ }
48
+ function matchesNetwork(requirement, network) {
49
+ const target = network.toLowerCase();
50
+ const requirementNetwork = extractNetwork(requirement);
51
+ if (!requirementNetwork)
52
+ return false;
53
+ return requirementNetwork.toLowerCase() === target;
54
+ }
55
+ function extractNetwork(requirement) {
56
+ const network = requirement.network;
57
+ if (typeof network === "string")
58
+ return network;
59
+ if (typeof network === "number")
60
+ return String(network);
61
+ if (typeof network === "object" && network !== null) {
62
+ const value = network.id;
63
+ if (typeof value === "string")
64
+ return value;
65
+ if (typeof value === "number")
66
+ return String(value);
67
+ }
68
+ return undefined;
69
+ }
70
+ function normalizeRequirements(input) {
71
+ if (!input)
72
+ return [];
73
+ if (Array.isArray(input)) {
74
+ return input.flatMap((item) => normalizeRequirements(item));
75
+ }
76
+ if (typeof input !== "object")
77
+ return [];
78
+ const obj = input;
79
+ if ("paymentRequirements" in obj) {
80
+ return normalizeRequirements(obj.paymentRequirements);
81
+ }
82
+ if ("accepts" in obj) {
83
+ return normalizeRequirements(obj.accepts);
84
+ }
85
+ if ("paymentRequired" in obj) {
86
+ return normalizeRequirements(obj.paymentRequired);
87
+ }
88
+ if ("payment_required" in obj) {
89
+ return normalizeRequirements(obj.payment_required);
90
+ }
91
+ if ("requirements" in obj) {
92
+ return normalizeRequirements(obj.requirements);
93
+ }
94
+ if (looksLikeRequirement(obj)) {
95
+ return [obj];
96
+ }
97
+ return [];
98
+ }
99
+ function looksLikeRequirement(obj) {
100
+ return "scheme" in obj || "network" in obj || "asset" in obj || "amount" in obj;
101
+ }
102
+ function parseAmount(requirement) {
103
+ const value = requirement.amount ?? requirement.maxAmountRequired;
104
+ if (typeof value === "number" && Number.isFinite(value)) {
105
+ return { raw: String(value), number: value };
106
+ }
107
+ if (typeof value === "string") {
108
+ const trimmed = value.trim();
109
+ if (/^\d+$/.test(trimmed)) {
110
+ try {
111
+ return { raw: trimmed, bigint: BigInt(trimmed) };
112
+ }
113
+ catch {
114
+ return { raw: trimmed };
115
+ }
116
+ }
117
+ const asNumber = Number(trimmed);
118
+ if (Number.isFinite(asNumber)) {
119
+ return { raw: trimmed, number: asNumber };
120
+ }
121
+ return { raw: trimmed };
122
+ }
123
+ return { raw: "" };
124
+ }
125
+ function parseLimit(limit) {
126
+ if (limit == null)
127
+ return undefined;
128
+ if (!/^\d+$/.test(limit.trim())) {
129
+ throw new Error("--auto-approve-limit must be an integer string");
130
+ }
131
+ return BigInt(limit.trim());
132
+ }
133
+ function normalizePrivateKey(key) {
134
+ const trimmed = key.trim();
135
+ if (trimmed.startsWith("0x"))
136
+ return trimmed;
137
+ return `0x${trimmed}`;
138
+ }
139
+ async function confirmPayment(requirement, options) {
140
+ const isTTY = Boolean(options.stdin.isTTY);
141
+ if (!isTTY) {
142
+ throw new Error("Payment requires confirmation but stdin is not interactive");
143
+ }
144
+ const { stderr, stdin } = options;
145
+ const amount = parseAmount(requirement);
146
+ const displayAmount = amount.raw || "unknown";
147
+ const asset = requirement.asset ?? "unknown";
148
+ return new Promise((resolve) => {
149
+ stderr.write(`Approve payment of ${displayAmount} ${asset}? [y/N]: `);
150
+ let buffer = "";
151
+ const onData = (chunk) => {
152
+ buffer += chunk.toString();
153
+ if (!buffer.includes("\n"))
154
+ return;
155
+ cleanup();
156
+ const answer = buffer.trim().toLowerCase();
157
+ resolve(answer === "y" || answer === "yes");
158
+ };
159
+ const onEnd = () => {
160
+ cleanup();
161
+ resolve(false);
162
+ };
163
+ const cleanup = () => {
164
+ stdin.off("data", onData);
165
+ stdin.off("end", onEnd);
166
+ };
167
+ stdin.on("data", onData);
168
+ stdin.on("end", onEnd);
169
+ });
170
+ }
171
+ function redactHeaders(headers) {
172
+ const lines = [];
173
+ headers.forEach((value, key) => {
174
+ if (key.toLowerCase() === "authorization" || key.toLowerCase() === "x-obul-api-key") {
175
+ lines.push(`${key}: ${REDACTED}`);
176
+ return;
177
+ }
178
+ lines.push(`${key}: ${value}`);
179
+ });
180
+ return lines;
181
+ }
182
+ function logResponse(res, stderr, label) {
183
+ const prefix = label ? `[${label}] ` : "";
184
+ stderr.write(`${prefix}${res.status} ${res.statusText}\n`);
185
+ for (const line of redactHeaders(res.headers)) {
186
+ stderr.write(`${prefix}${line}\n`);
187
+ }
188
+ }
189
+ function logRequest(method, url, headers, stderr, label) {
190
+ const prefix = label ? `[${label}] ` : "";
191
+ stderr.write(`${prefix}${method.toUpperCase()} ${url}\n`);
192
+ for (const line of redactHeaders(headers)) {
193
+ stderr.write(`${prefix}${line}\n`);
194
+ }
195
+ }
196
+ async function toResponseLike(response) {
197
+ const buffer = new Uint8Array(await response.arrayBuffer());
198
+ const headers = {};
199
+ response.headers.forEach((value, key) => {
200
+ headers[key] = value;
201
+ });
202
+ return {
203
+ status: response.status,
204
+ statusText: response.statusText,
205
+ headers,
206
+ body: buffer,
207
+ url: response.url
208
+ };
209
+ }
210
+ async function parsePaymentRequired(response) {
211
+ const header = response.headers.get("payment-required") ?? response.headers.get("x-payment-required");
212
+ if (header) {
213
+ const fromHeader = parsePaymentRequiredHeader(header);
214
+ if (fromHeader) {
215
+ return { raw: fromHeader, requirements: normalizeRequirements(fromHeader) };
216
+ }
217
+ }
218
+ try {
219
+ const body = await response.json();
220
+ return { raw: body, requirements: normalizeRequirements(body) };
221
+ }
222
+ catch {
223
+ return { raw: undefined, requirements: [] };
224
+ }
225
+ }
226
+ function parsePaymentRequiredHeader(header) {
227
+ const trimmed = header.trim();
228
+ if (!trimmed)
229
+ return undefined;
230
+ try {
231
+ return JSON.parse(trimmed);
232
+ }
233
+ catch {
234
+ try {
235
+ const decoded = Buffer.from(trimmed, "base64").toString("utf8");
236
+ return JSON.parse(decoded);
237
+ }
238
+ catch {
239
+ return undefined;
240
+ }
241
+ }
242
+ }
243
+ function createProbeFetch(fetcher, probe) {
244
+ let used = false;
245
+ return async (input, init) => {
246
+ if (!used) {
247
+ used = true;
248
+ return probe;
249
+ }
250
+ return fetcher(input, init);
251
+ };
252
+ }
253
+ function pickMatchingRequirement(requirements, selected) {
254
+ if (requirements.length === 0) {
255
+ throw new Error("No payment requirements available");
256
+ }
257
+ const selectedAmount = selected.amount ?? selected.maxAmountRequired;
258
+ const matches = requirements.filter((req) => {
259
+ const sameNetwork = selected.network ? matchesNetwork(req, selected.network) : true;
260
+ const sameAsset = selected.asset
261
+ ? (req.asset ?? "").toString().toLowerCase() === selected.asset.toString().toLowerCase()
262
+ : true;
263
+ const reqAmount = req.amount ?? req.maxAmountRequired;
264
+ const sameAmount = selectedAmount != null ? String(reqAmount ?? "") === String(selectedAmount) : true;
265
+ return sameNetwork && sameAsset && sameAmount;
266
+ });
267
+ return matches[0] ?? requirements[0];
268
+ }
269
+ export async function obulxFetch(options) {
270
+ const fetcher = options.fetch ?? globalThis.fetch;
271
+ if (!fetcher) {
272
+ throw new Error("fetch is not available in this environment");
273
+ }
274
+ const stderr = options.stderr ?? process.stderr;
275
+ const stdin = options.stdin ?? process.stdin;
276
+ const method = options.method ?? (options.body ? "POST" : "GET");
277
+ const headers = new Headers(options.headers ?? {});
278
+ const verbose = options.verbose ?? 0;
279
+ const requestUrl = new URL(options.url);
280
+ const init = {
281
+ method,
282
+ headers,
283
+ body: options.body
284
+ };
285
+ if (options.obulProxy) {
286
+ const proxyUrl = buildProxyUrl(options.obulProxy, requestUrl);
287
+ applyProxyAuth(headers, { obulAccessToken: options.obulAccessToken, obulApiKey: options.obulApiKey });
288
+ const response = await fetcher(proxyUrl, init);
289
+ if (verbose >= 1) {
290
+ logResponse(response, stderr);
291
+ }
292
+ return toResponseLike(response);
293
+ }
294
+ if (!options.networks || options.networks.length === 0) {
295
+ throw new Error("--network is required for direct x402 mode");
296
+ }
297
+ const limit = parseLimit(options.autoApproveLimit);
298
+ if (!limit) {
299
+ throw new Error("--auto-approve-limit is required for direct x402 mode");
300
+ }
301
+ const privateKey = options.privateKey;
302
+ if (!privateKey) {
303
+ throw new Error("Missing private key: set OBUL_X402_PRIVATE_KEY or PRIVATE_KEY");
304
+ }
305
+ const probe = await fetcher(requestUrl.toString(), init);
306
+ if (verbose >= 2) {
307
+ logRequest(method, requestUrl.toString(), headers, stderr, "probe request");
308
+ logResponse(probe, stderr, "probe response");
309
+ }
310
+ if (probe.status !== 402) {
311
+ if (verbose >= 1) {
312
+ logResponse(probe, stderr);
313
+ }
314
+ return toResponseLike(probe);
315
+ }
316
+ const parsed = await parsePaymentRequired(probe.clone());
317
+ if (parsed.requirements.length === 0) {
318
+ throw new Error("Received 402 but could not parse payment requirements");
319
+ }
320
+ const selected = selectPaymentRequirement(parsed.raw ?? parsed.requirements, {
321
+ networks: options.networks,
322
+ asset: options.asset
323
+ });
324
+ const amount = parseAmount(selected);
325
+ if (amount.bigint != null) {
326
+ if (amount.bigint > limit) {
327
+ const approved = await confirmPayment(selected, { stderr, stdin });
328
+ if (!approved)
329
+ throw new Error("Payment declined");
330
+ }
331
+ }
332
+ else if (amount.number != null) {
333
+ const limitNumber = Number(limit);
334
+ if (Number.isFinite(limitNumber) && amount.number > limitNumber) {
335
+ const approved = await confirmPayment(selected, { stderr, stdin });
336
+ if (!approved)
337
+ throw new Error("Payment declined");
338
+ }
339
+ }
340
+ const account = privateKeyToAccount(normalizePrivateKey(privateKey));
341
+ const fetchWithProbe = createProbeFetch(fetcher, probe);
342
+ const selector = (requirements) => pickMatchingRequirement(requirements, selected);
343
+ const fetchWithPayment = wrapFetchWithPayment(fetchWithProbe, account, DEFAULT_MAX_VALUE, selector);
344
+ const paidResponse = await fetchWithPayment(requestUrl.toString(), init);
345
+ if (verbose >= 1) {
346
+ logResponse(paidResponse, stderr);
347
+ }
348
+ return toResponseLike(paidResponse);
349
+ }
350
+ //# sourceMappingURL=lib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@obul.ai/obulx",
3
+ "version": "0.2.0",
4
+ "description": "Obul x402 CLI and library.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "obulx": "dist/cli.js"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "README.md"
14
+ ],
15
+ "sideEffects": false,
16
+ "scripts": {
17
+ "build": "tsc -p tsconfig.json",
18
+ "typecheck": "tsc -p tsconfig.json --noEmit"
19
+ },
20
+ "dependencies": {
21
+ "x402-fetch": "^0.6.0",
22
+ "viem": "^2.21.26"
23
+ },
24
+ "devDependencies": {
25
+ "@types/node": "^20.11.30"
26
+ }
27
+ }