@1claw/sdk 0.14.0 → 0.15.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 +2 -1
- package/dist/cmek.d.ts.map +1 -1
- package/dist/cmek.js.map +1 -1
- package/dist/generated/api-types.d.ts +434 -0
- package/dist/generated/api-types.d.ts.map +1 -1
- package/dist/resources/org.d.ts +6 -0
- package/dist/resources/org.d.ts.map +1 -1
- package/dist/resources/org.js +7 -0
- package/dist/resources/org.js.map +1 -1
- package/package.json +1 -1
- package/dist/__tests__/client.test.d.ts +0 -2
- package/dist/__tests__/client.test.d.ts.map +0 -1
- package/dist/__tests__/client.test.js +0 -99
- package/dist/__tests__/client.test.js.map +0 -1
- package/dist/__tests__/errors.test.d.ts +0 -2
- package/dist/__tests__/errors.test.d.ts.map +0 -1
- package/dist/__tests__/errors.test.js +0 -125
- package/dist/__tests__/errors.test.js.map +0 -1
- package/dist/__tests__/http.test.d.ts +0 -2
- package/dist/__tests__/http.test.d.ts.map +0 -1
- package/dist/__tests__/http.test.js +0 -233
- package/dist/__tests__/http.test.js.map +0 -1
- package/dist/__tests__/resources.test.d.ts +0 -2
- package/dist/__tests__/resources.test.d.ts.map +0 -1
- package/dist/__tests__/resources.test.js +0 -552
- package/dist/__tests__/resources.test.js.map +0 -1
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, afterEach } from "vitest";
|
|
2
|
-
import { OneclawClient, createClient } from "../core/client";
|
|
3
|
-
const originalFetch = globalThis.fetch;
|
|
4
|
-
afterEach(() => {
|
|
5
|
-
globalThis.fetch = originalFetch;
|
|
6
|
-
});
|
|
7
|
-
function mockFetch(status, body) {
|
|
8
|
-
return vi.fn().mockResolvedValue({
|
|
9
|
-
ok: status >= 200 && status < 300,
|
|
10
|
-
status,
|
|
11
|
-
headers: new Headers(),
|
|
12
|
-
json: () => Promise.resolve(body),
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
describe("OneclawClient", () => {
|
|
16
|
-
it("initializes all 14 resource properties", () => {
|
|
17
|
-
globalThis.fetch = mockFetch(200, {});
|
|
18
|
-
const client = new OneclawClient({ baseUrl: "https://api.test", token: "t" });
|
|
19
|
-
expect(client.vault).toBeDefined();
|
|
20
|
-
expect(client.secrets).toBeDefined();
|
|
21
|
-
expect(client.access).toBeDefined();
|
|
22
|
-
expect(client.agents).toBeDefined();
|
|
23
|
-
expect(client.sharing).toBeDefined();
|
|
24
|
-
expect(client.approvals).toBeDefined();
|
|
25
|
-
expect(client.billing).toBeDefined();
|
|
26
|
-
expect(client.audit).toBeDefined();
|
|
27
|
-
expect(client.org).toBeDefined();
|
|
28
|
-
expect(client.auth).toBeDefined();
|
|
29
|
-
expect(client.apiKeys).toBeDefined();
|
|
30
|
-
expect(client.chains).toBeDefined();
|
|
31
|
-
expect(client.x402).toBeDefined();
|
|
32
|
-
});
|
|
33
|
-
it("auto-authenticates with agent apiKey + agentId on first request", async () => {
|
|
34
|
-
const fetcher = vi.fn()
|
|
35
|
-
.mockResolvedValueOnce({
|
|
36
|
-
ok: true,
|
|
37
|
-
status: 200,
|
|
38
|
-
headers: new Headers(),
|
|
39
|
-
json: () => Promise.resolve({ access_token: "agent-jwt" }),
|
|
40
|
-
})
|
|
41
|
-
.mockResolvedValueOnce({
|
|
42
|
-
ok: true,
|
|
43
|
-
status: 200,
|
|
44
|
-
headers: new Headers(),
|
|
45
|
-
json: () => Promise.resolve({ vaults: [] }),
|
|
46
|
-
});
|
|
47
|
-
globalThis.fetch = fetcher;
|
|
48
|
-
const client = new OneclawClient({
|
|
49
|
-
baseUrl: "https://api.test",
|
|
50
|
-
apiKey: "ocv_abc",
|
|
51
|
-
agentId: "agent-uuid",
|
|
52
|
-
});
|
|
53
|
-
// Agent auth is lazy — fires on first request, not constructor
|
|
54
|
-
await client.vault.list();
|
|
55
|
-
const [url, init] = fetcher.mock.calls[0];
|
|
56
|
-
expect(url).toContain("/v1/auth/agent-token");
|
|
57
|
-
const body = JSON.parse(init.body);
|
|
58
|
-
expect(body.agent_id).toBe("agent-uuid");
|
|
59
|
-
expect(body.api_key).toBe("ocv_abc");
|
|
60
|
-
});
|
|
61
|
-
it("auto-authenticates with user apiKey (no agentId)", async () => {
|
|
62
|
-
const fetcher = mockFetch(200, { access_token: "user-jwt" });
|
|
63
|
-
globalThis.fetch = fetcher;
|
|
64
|
-
new OneclawClient({
|
|
65
|
-
baseUrl: "https://api.test",
|
|
66
|
-
apiKey: "1ck_abc",
|
|
67
|
-
});
|
|
68
|
-
await vi.waitFor(() => expect(fetcher).toHaveBeenCalled());
|
|
69
|
-
const [url] = fetcher.mock.calls[0];
|
|
70
|
-
expect(url).toContain("/v1/auth/api-key-token");
|
|
71
|
-
});
|
|
72
|
-
it("skips auto-auth when token is already provided", () => {
|
|
73
|
-
const fetcher = mockFetch(200, {});
|
|
74
|
-
globalThis.fetch = fetcher;
|
|
75
|
-
new OneclawClient({
|
|
76
|
-
baseUrl: "https://api.test",
|
|
77
|
-
token: "existing-jwt",
|
|
78
|
-
apiKey: "ocv_abc",
|
|
79
|
-
});
|
|
80
|
-
expect(fetcher).not.toHaveBeenCalled();
|
|
81
|
-
});
|
|
82
|
-
it("skips auto-auth when no apiKey is provided", () => {
|
|
83
|
-
const fetcher = mockFetch(200, {});
|
|
84
|
-
globalThis.fetch = fetcher;
|
|
85
|
-
new OneclawClient({
|
|
86
|
-
baseUrl: "https://api.test",
|
|
87
|
-
token: "jwt",
|
|
88
|
-
});
|
|
89
|
-
expect(fetcher).not.toHaveBeenCalled();
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
describe("createClient", () => {
|
|
93
|
-
it("returns an OneclawClient instance", () => {
|
|
94
|
-
globalThis.fetch = mockFetch(200, {});
|
|
95
|
-
const client = createClient({ baseUrl: "https://api.test", token: "t" });
|
|
96
|
-
expect(client).toBeInstanceOf(OneclawClient);
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
//# sourceMappingURL=client.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../src/__tests__/client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/errors.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { OneclawError, AuthError, PaymentRequiredError, ApprovalRequiredError, NotFoundError, RateLimitError, ValidationError, ServerError, errorFromResponse, } from "../core/errors";
|
|
3
|
-
describe("Error classes", () => {
|
|
4
|
-
it("OneclawError stores status, type, and detail", () => {
|
|
5
|
-
const err = new OneclawError("msg", 418, "teapot", "short and stout");
|
|
6
|
-
expect(err.message).toBe("msg");
|
|
7
|
-
expect(err.status).toBe(418);
|
|
8
|
-
expect(err.type).toBe("teapot");
|
|
9
|
-
expect(err.detail).toBe("short and stout");
|
|
10
|
-
expect(err.name).toBe("OneclawError");
|
|
11
|
-
expect(err).toBeInstanceOf(Error);
|
|
12
|
-
});
|
|
13
|
-
it("AuthError defaults to 401", () => {
|
|
14
|
-
const err = new AuthError("bad token");
|
|
15
|
-
expect(err.status).toBe(401);
|
|
16
|
-
expect(err.type).toBe("auth_error");
|
|
17
|
-
});
|
|
18
|
-
it("AuthError accepts 403", () => {
|
|
19
|
-
const err = new AuthError("forbidden", 403);
|
|
20
|
-
expect(err.status).toBe(403);
|
|
21
|
-
});
|
|
22
|
-
it("PaymentRequiredError includes paymentRequirement", () => {
|
|
23
|
-
const req = { x402Version: 1, accepts: [], description: "pay" };
|
|
24
|
-
const err = new PaymentRequiredError("pay up", req);
|
|
25
|
-
expect(err.status).toBe(402);
|
|
26
|
-
expect(err.paymentRequirement).toBe(req);
|
|
27
|
-
});
|
|
28
|
-
it("ApprovalRequiredError includes approvalRequestId", () => {
|
|
29
|
-
const err = new ApprovalRequiredError("req-123");
|
|
30
|
-
expect(err.status).toBe(403);
|
|
31
|
-
expect(err.approvalRequestId).toBe("req-123");
|
|
32
|
-
expect(err.message).toContain("approval");
|
|
33
|
-
});
|
|
34
|
-
it("NotFoundError defaults message", () => {
|
|
35
|
-
const err = new NotFoundError();
|
|
36
|
-
expect(err.status).toBe(404);
|
|
37
|
-
expect(err.message).toBe("Resource not found");
|
|
38
|
-
});
|
|
39
|
-
it("RateLimitError includes retryAfterMs", () => {
|
|
40
|
-
const err = new RateLimitError("slow down", 5000);
|
|
41
|
-
expect(err.status).toBe(429);
|
|
42
|
-
expect(err.retryAfterMs).toBe(5000);
|
|
43
|
-
});
|
|
44
|
-
it("ValidationError includes fields", () => {
|
|
45
|
-
const err = new ValidationError("bad input", { name: "required" });
|
|
46
|
-
expect(err.status).toBe(400);
|
|
47
|
-
expect(err.fields).toEqual({ name: "required" });
|
|
48
|
-
});
|
|
49
|
-
it("ServerError defaults to 500", () => {
|
|
50
|
-
const err = new ServerError();
|
|
51
|
-
expect(err.status).toBe(500);
|
|
52
|
-
expect(err.type).toBe("server_error");
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
describe("errorFromResponse", () => {
|
|
56
|
-
function fakeResponse(status, body, headers) {
|
|
57
|
-
return {
|
|
58
|
-
status,
|
|
59
|
-
ok: status >= 200 && status < 300,
|
|
60
|
-
headers: new Headers(headers),
|
|
61
|
-
json: () => Promise.resolve(body),
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
it("maps 400 to ValidationError", async () => {
|
|
65
|
-
const err = await errorFromResponse(fakeResponse(400, { detail: "bad field" }));
|
|
66
|
-
expect(err).toBeInstanceOf(ValidationError);
|
|
67
|
-
expect(err.message).toBe("bad field");
|
|
68
|
-
});
|
|
69
|
-
it("maps 401 to AuthError", async () => {
|
|
70
|
-
const err = await errorFromResponse(fakeResponse(401, { detail: "expired" }));
|
|
71
|
-
expect(err).toBeInstanceOf(AuthError);
|
|
72
|
-
expect(err.status).toBe(401);
|
|
73
|
-
});
|
|
74
|
-
it("maps 403 to AuthError", async () => {
|
|
75
|
-
const err = await errorFromResponse(fakeResponse(403, { detail: "forbidden" }));
|
|
76
|
-
expect(err).toBeInstanceOf(AuthError);
|
|
77
|
-
expect(err.status).toBe(403);
|
|
78
|
-
});
|
|
79
|
-
it("maps 402 to PaymentRequiredError", async () => {
|
|
80
|
-
const body = { x402Version: 1, accepts: [], description: "pay" };
|
|
81
|
-
const err = await errorFromResponse(fakeResponse(402, body));
|
|
82
|
-
expect(err).toBeInstanceOf(PaymentRequiredError);
|
|
83
|
-
});
|
|
84
|
-
it("maps 404 to NotFoundError", async () => {
|
|
85
|
-
const err = await errorFromResponse(fakeResponse(404, { detail: "gone" }));
|
|
86
|
-
expect(err).toBeInstanceOf(NotFoundError);
|
|
87
|
-
});
|
|
88
|
-
it("maps 429 to RateLimitError with Retry-After header", async () => {
|
|
89
|
-
const err = await errorFromResponse(fakeResponse(429, { detail: "too many" }, { "Retry-After": "5" }));
|
|
90
|
-
expect(err).toBeInstanceOf(RateLimitError);
|
|
91
|
-
expect(err.retryAfterMs).toBe(5000);
|
|
92
|
-
});
|
|
93
|
-
it("maps 500 to ServerError", async () => {
|
|
94
|
-
const err = await errorFromResponse(fakeResponse(500, { detail: "boom" }));
|
|
95
|
-
expect(err).toBeInstanceOf(ServerError);
|
|
96
|
-
});
|
|
97
|
-
it("maps 502 to ServerError", async () => {
|
|
98
|
-
const err = await errorFromResponse(fakeResponse(502, {}));
|
|
99
|
-
expect(err).toBeInstanceOf(ServerError);
|
|
100
|
-
});
|
|
101
|
-
it("maps unknown status to generic OneclawError", async () => {
|
|
102
|
-
const err = await errorFromResponse(fakeResponse(418, { detail: "teapot" }));
|
|
103
|
-
expect(err).toBeInstanceOf(OneclawError);
|
|
104
|
-
expect(err.type).toBe("unknown");
|
|
105
|
-
});
|
|
106
|
-
it("falls back to 'HTTP {status}' when body has no message", async () => {
|
|
107
|
-
const err = await errorFromResponse(fakeResponse(500, {}));
|
|
108
|
-
expect(err.message).toBe("HTTP 500");
|
|
109
|
-
});
|
|
110
|
-
it("reads message field as fallback", async () => {
|
|
111
|
-
const err = await errorFromResponse(fakeResponse(400, { message: "from message" }));
|
|
112
|
-
expect(err.message).toBe("from message");
|
|
113
|
-
});
|
|
114
|
-
it("handles non-JSON response gracefully", async () => {
|
|
115
|
-
const res = {
|
|
116
|
-
status: 500,
|
|
117
|
-
ok: false,
|
|
118
|
-
headers: new Headers(),
|
|
119
|
-
json: () => Promise.reject(new Error("not json")),
|
|
120
|
-
};
|
|
121
|
-
const err = await errorFromResponse(res);
|
|
122
|
-
expect(err.message).toBe("HTTP 500");
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
//# sourceMappingURL=errors.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../src/__tests__/errors.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/http.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, afterEach } from "vitest";
|
|
2
|
-
import { HttpClient } from "../core/http";
|
|
3
|
-
import { PaymentRequiredError } from "../core/errors";
|
|
4
|
-
function mockFetch(status, body, headers) {
|
|
5
|
-
return vi.fn().mockResolvedValue({
|
|
6
|
-
ok: status >= 200 && status < 300,
|
|
7
|
-
status,
|
|
8
|
-
headers: new Headers(headers),
|
|
9
|
-
json: () => Promise.resolve(body),
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
describe("HttpClient", () => {
|
|
13
|
-
const originalFetch = globalThis.fetch;
|
|
14
|
-
afterEach(() => {
|
|
15
|
-
globalThis.fetch = originalFetch;
|
|
16
|
-
});
|
|
17
|
-
it("sends GET with Bearer token", async () => {
|
|
18
|
-
const fetcher = mockFetch(200, { id: "v1" });
|
|
19
|
-
globalThis.fetch = fetcher;
|
|
20
|
-
const http = new HttpClient({
|
|
21
|
-
baseUrl: "https://api.test",
|
|
22
|
-
token: "tok123",
|
|
23
|
-
});
|
|
24
|
-
const res = await http.request("GET", "/v1/vaults");
|
|
25
|
-
expect(fetcher).toHaveBeenCalledOnce();
|
|
26
|
-
const [url, init] = fetcher.mock.calls[0];
|
|
27
|
-
expect(url).toBe("https://api.test/v1/vaults");
|
|
28
|
-
expect(init.method).toBe("GET");
|
|
29
|
-
expect(init.headers["Authorization"]).toBe("Bearer tok123");
|
|
30
|
-
expect(res.data).toEqual({ id: "v1" });
|
|
31
|
-
expect(res.error).toBeNull();
|
|
32
|
-
expect(res.meta?.status).toBe(200);
|
|
33
|
-
});
|
|
34
|
-
it("sends POST with JSON body", async () => {
|
|
35
|
-
const fetcher = mockFetch(201, { id: "new" });
|
|
36
|
-
globalThis.fetch = fetcher;
|
|
37
|
-
const http = new HttpClient({
|
|
38
|
-
baseUrl: "https://api.test",
|
|
39
|
-
token: "t",
|
|
40
|
-
});
|
|
41
|
-
await http.request("POST", "/v1/vaults", { body: { name: "test" } });
|
|
42
|
-
const [, init] = fetcher.mock.calls[0];
|
|
43
|
-
expect(init.body).toBe(JSON.stringify({ name: "test" }));
|
|
44
|
-
expect(init.headers["Content-Type"]).toBe("application/json");
|
|
45
|
-
});
|
|
46
|
-
it("omits Authorization when no token", async () => {
|
|
47
|
-
const fetcher = mockFetch(200, {});
|
|
48
|
-
globalThis.fetch = fetcher;
|
|
49
|
-
const http = new HttpClient({ baseUrl: "https://api.test" });
|
|
50
|
-
await http.request("GET", "/v1/health");
|
|
51
|
-
const [, init] = fetcher.mock.calls[0];
|
|
52
|
-
expect(init.headers["Authorization"]).toBeUndefined();
|
|
53
|
-
});
|
|
54
|
-
it("strips trailing slash from baseUrl", async () => {
|
|
55
|
-
const fetcher = mockFetch(200, {});
|
|
56
|
-
globalThis.fetch = fetcher;
|
|
57
|
-
const http = new HttpClient({ baseUrl: "https://api.test/" });
|
|
58
|
-
await http.request("GET", "/v1/health");
|
|
59
|
-
expect(fetcher.mock.calls[0][0]).toBe("https://api.test/v1/health");
|
|
60
|
-
});
|
|
61
|
-
it("appends query parameters and skips undefined values", async () => {
|
|
62
|
-
const fetcher = mockFetch(200, {});
|
|
63
|
-
globalThis.fetch = fetcher;
|
|
64
|
-
const http = new HttpClient({
|
|
65
|
-
baseUrl: "https://api.test",
|
|
66
|
-
token: "t",
|
|
67
|
-
});
|
|
68
|
-
await http.request("GET", "/v1/secrets", {
|
|
69
|
-
query: { prefix: "db", limit: 10, missing: undefined },
|
|
70
|
-
});
|
|
71
|
-
const url = new URL(fetcher.mock.calls[0][0]);
|
|
72
|
-
expect(url.searchParams.get("prefix")).toBe("db");
|
|
73
|
-
expect(url.searchParams.get("limit")).toBe("10");
|
|
74
|
-
expect(url.searchParams.has("missing")).toBe(false);
|
|
75
|
-
});
|
|
76
|
-
it("returns null data for 204 No Content", async () => {
|
|
77
|
-
globalThis.fetch = mockFetch(204, null);
|
|
78
|
-
const http = new HttpClient({
|
|
79
|
-
baseUrl: "https://api.test",
|
|
80
|
-
token: "t",
|
|
81
|
-
});
|
|
82
|
-
const res = await http.request("DELETE", "/v1/vaults/abc");
|
|
83
|
-
expect(res.data).toBeNull();
|
|
84
|
-
expect(res.error).toBeNull();
|
|
85
|
-
expect(res.meta?.status).toBe(204);
|
|
86
|
-
});
|
|
87
|
-
it("returns error envelope on non-ok responses", async () => {
|
|
88
|
-
globalThis.fetch = mockFetch(404, { detail: "Vault not found" });
|
|
89
|
-
const http = new HttpClient({
|
|
90
|
-
baseUrl: "https://api.test",
|
|
91
|
-
token: "t",
|
|
92
|
-
});
|
|
93
|
-
const res = await http.request("GET", "/v1/vaults/missing");
|
|
94
|
-
expect(res.data).toBeNull();
|
|
95
|
-
expect(res.error).toBeTruthy();
|
|
96
|
-
expect(res.error?.type).toBe("not_found");
|
|
97
|
-
expect(res.error?.message).toBe("Vault not found");
|
|
98
|
-
expect(res.meta?.status).toBe(404);
|
|
99
|
-
});
|
|
100
|
-
it("requestOrThrow throws on error responses", async () => {
|
|
101
|
-
globalThis.fetch = mockFetch(401, { detail: "Invalid token" });
|
|
102
|
-
const http = new HttpClient({
|
|
103
|
-
baseUrl: "https://api.test",
|
|
104
|
-
token: "bad",
|
|
105
|
-
});
|
|
106
|
-
await expect(http.requestOrThrow("GET", "/v1/vaults")).rejects.toThrow("Invalid token");
|
|
107
|
-
});
|
|
108
|
-
it("requestOrThrow returns data on success", async () => {
|
|
109
|
-
globalThis.fetch = mockFetch(200, { vaults: [] });
|
|
110
|
-
const http = new HttpClient({
|
|
111
|
-
baseUrl: "https://api.test",
|
|
112
|
-
token: "t",
|
|
113
|
-
});
|
|
114
|
-
const data = await http.requestOrThrow("GET", "/v1/vaults");
|
|
115
|
-
expect(data.vaults).toEqual([]);
|
|
116
|
-
});
|
|
117
|
-
it("setToken/getToken updates the auth header", async () => {
|
|
118
|
-
const fetcher = mockFetch(200, {});
|
|
119
|
-
globalThis.fetch = fetcher;
|
|
120
|
-
const http = new HttpClient({ baseUrl: "https://api.test" });
|
|
121
|
-
expect(http.getToken()).toBeUndefined();
|
|
122
|
-
http.setToken("new-jwt");
|
|
123
|
-
expect(http.getToken()).toBe("new-jwt");
|
|
124
|
-
await http.request("GET", "/v1/vaults");
|
|
125
|
-
expect(fetcher.mock.calls[0][1].headers["Authorization"]).toBe("Bearer new-jwt");
|
|
126
|
-
});
|
|
127
|
-
describe("x402 auto-payment", () => {
|
|
128
|
-
const paymentRequirement = {
|
|
129
|
-
x402Version: 1,
|
|
130
|
-
accepts: [
|
|
131
|
-
{
|
|
132
|
-
scheme: "exact",
|
|
133
|
-
network: "eip155:8453",
|
|
134
|
-
payTo: "0xabc",
|
|
135
|
-
maxAmountRequired: "1000",
|
|
136
|
-
resource: "https://api.test/v1/vaults/v1/secrets/key",
|
|
137
|
-
maxTimeoutSeconds: 60,
|
|
138
|
-
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
|
|
139
|
-
description: "Pay per query",
|
|
140
|
-
mimeType: "application/json",
|
|
141
|
-
price: "0.001",
|
|
142
|
-
},
|
|
143
|
-
],
|
|
144
|
-
description: "Pay per query",
|
|
145
|
-
};
|
|
146
|
-
it("retries with X-PAYMENT header when signer is configured", async () => {
|
|
147
|
-
const signer = {
|
|
148
|
-
getAddress: vi.fn().mockResolvedValue("0xsigner"),
|
|
149
|
-
signPayment: vi.fn().mockResolvedValue("sig-bytes"),
|
|
150
|
-
};
|
|
151
|
-
let callCount = 0;
|
|
152
|
-
globalThis.fetch = vi.fn().mockImplementation(() => {
|
|
153
|
-
callCount++;
|
|
154
|
-
if (callCount === 1) {
|
|
155
|
-
return Promise.resolve({
|
|
156
|
-
ok: false,
|
|
157
|
-
status: 402,
|
|
158
|
-
headers: new Headers(),
|
|
159
|
-
json: () => Promise.resolve(paymentRequirement),
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
return Promise.resolve({
|
|
163
|
-
ok: true,
|
|
164
|
-
status: 200,
|
|
165
|
-
headers: new Headers(),
|
|
166
|
-
json: () => Promise.resolve({ value: "secret" }),
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
const http = new HttpClient({
|
|
170
|
-
baseUrl: "https://api.test",
|
|
171
|
-
token: "t",
|
|
172
|
-
x402Signer: signer,
|
|
173
|
-
maxAutoPayUsd: 1,
|
|
174
|
-
});
|
|
175
|
-
const res = await http.request("GET", "/v1/vaults/v1/secrets/key");
|
|
176
|
-
expect(signer.signPayment).toHaveBeenCalledWith(paymentRequirement.accepts[0]);
|
|
177
|
-
expect(globalThis.fetch).toHaveBeenCalledTimes(2);
|
|
178
|
-
const retryHeaders = globalThis.fetch
|
|
179
|
-
.mock.calls[1][1].headers;
|
|
180
|
-
expect(retryHeaders["X-PAYMENT"]).toBeDefined();
|
|
181
|
-
expect(res.data).toEqual({ value: "secret" });
|
|
182
|
-
});
|
|
183
|
-
it("throws PaymentRequiredError when maxAutoPayUsd is 0", async () => {
|
|
184
|
-
globalThis.fetch = vi.fn().mockResolvedValue({
|
|
185
|
-
ok: false,
|
|
186
|
-
status: 402,
|
|
187
|
-
headers: new Headers(),
|
|
188
|
-
json: () => Promise.resolve(paymentRequirement),
|
|
189
|
-
});
|
|
190
|
-
const signer = {
|
|
191
|
-
getAddress: vi.fn(),
|
|
192
|
-
signPayment: vi.fn(),
|
|
193
|
-
};
|
|
194
|
-
const http = new HttpClient({
|
|
195
|
-
baseUrl: "https://api.test",
|
|
196
|
-
token: "t",
|
|
197
|
-
x402Signer: signer,
|
|
198
|
-
maxAutoPayUsd: 0,
|
|
199
|
-
});
|
|
200
|
-
await expect(http.request("GET", "/v1/test")).rejects.toThrow(PaymentRequiredError);
|
|
201
|
-
});
|
|
202
|
-
it("throws when payment exceeds maxAutoPayUsd", async () => {
|
|
203
|
-
const expensiveRequirement = {
|
|
204
|
-
...paymentRequirement,
|
|
205
|
-
accepts: [
|
|
206
|
-
{
|
|
207
|
-
...paymentRequirement.accepts[0],
|
|
208
|
-
price: "100.0",
|
|
209
|
-
maxAmountRequired: "100000000",
|
|
210
|
-
},
|
|
211
|
-
],
|
|
212
|
-
};
|
|
213
|
-
globalThis.fetch = vi.fn().mockResolvedValue({
|
|
214
|
-
ok: false,
|
|
215
|
-
status: 402,
|
|
216
|
-
headers: new Headers(),
|
|
217
|
-
json: () => Promise.resolve(expensiveRequirement),
|
|
218
|
-
});
|
|
219
|
-
const signer = {
|
|
220
|
-
getAddress: vi.fn(),
|
|
221
|
-
signPayment: vi.fn(),
|
|
222
|
-
};
|
|
223
|
-
const http = new HttpClient({
|
|
224
|
-
baseUrl: "https://api.test",
|
|
225
|
-
token: "t",
|
|
226
|
-
x402Signer: signer,
|
|
227
|
-
maxAutoPayUsd: 1,
|
|
228
|
-
});
|
|
229
|
-
await expect(http.request("GET", "/v1/test")).rejects.toThrow(/exceeds auto-pay limit/);
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
});
|
|
233
|
-
//# sourceMappingURL=http.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http.test.js","sourceRoot":"","sources":["../../src/__tests__/http.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resources.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/resources.test.ts"],"names":[],"mappings":""}
|