@1claw/sdk 0.14.0 → 0.15.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.
@@ -1,552 +0,0 @@
1
- import { describe, it, expect, vi, afterEach } from "vitest";
2
- import { HttpClient } from "../core/http";
3
- import { VaultResource } from "../resources/vault";
4
- import { SecretsResource } from "../resources/secrets";
5
- import { AccessResource } from "../resources/access";
6
- import { AgentsResource } from "../resources/agents";
7
- import { ChainsResource } from "../resources/chains";
8
- import { SharingResource } from "../resources/sharing";
9
- import { ApprovalsResource } from "../resources/approvals";
10
- import { BillingResource } from "../resources/billing";
11
- import { AuditResource } from "../resources/audit";
12
- import { OrgResource } from "../resources/org";
13
- import { AuthResource } from "../resources/auth";
14
- import { ApiKeysResource } from "../resources/api-keys";
15
- const BASE = "https://api.test";
16
- const originalFetch = globalThis.fetch;
17
- function mockFetch(status, body) {
18
- return vi.fn().mockResolvedValue({
19
- ok: status >= 200 && status < 300,
20
- status,
21
- headers: new Headers(),
22
- json: () => Promise.resolve(body),
23
- });
24
- }
25
- function makeHttp(token = "test-jwt") {
26
- return new HttpClient({ baseUrl: BASE, token });
27
- }
28
- function lastCall() {
29
- const f = globalThis.fetch;
30
- return { url: f.mock.calls[0][0], init: f.mock.calls[0][1] };
31
- }
32
- afterEach(() => {
33
- globalThis.fetch = originalFetch;
34
- });
35
- // ---------------------------------------------------------------------------
36
- // VaultResource
37
- // ---------------------------------------------------------------------------
38
- describe("VaultResource", () => {
39
- it("create sends POST /v1/vaults with name and description", async () => {
40
- globalThis.fetch = mockFetch(201, { id: "v-1", name: "prod" });
41
- const res = await new VaultResource(makeHttp()).create({ name: "prod", description: "test" });
42
- const { url, init } = lastCall();
43
- expect(url).toBe(`${BASE}/v1/vaults`);
44
- expect(init.method).toBe("POST");
45
- expect(JSON.parse(init.body)).toEqual({ name: "prod", description: "test" });
46
- expect(res.data?.id).toBe("v-1");
47
- });
48
- it("create defaults description to empty string", async () => {
49
- globalThis.fetch = mockFetch(201, { id: "v-1" });
50
- await new VaultResource(makeHttp()).create({ name: "prod" });
51
- expect(JSON.parse(lastCall().init.body).description).toBe("");
52
- });
53
- it("get sends GET /v1/vaults/{id}", async () => {
54
- globalThis.fetch = mockFetch(200, { id: "v-1" });
55
- await new VaultResource(makeHttp()).get("v-1");
56
- expect(lastCall().url).toBe(`${BASE}/v1/vaults/v-1`);
57
- expect(lastCall().init.method).toBe("GET");
58
- });
59
- it("list sends GET /v1/vaults", async () => {
60
- globalThis.fetch = mockFetch(200, { vaults: [] });
61
- const res = await new VaultResource(makeHttp()).list();
62
- expect(lastCall().url).toBe(`${BASE}/v1/vaults`);
63
- expect(res.data?.vaults).toEqual([]);
64
- });
65
- it("delete sends DELETE /v1/vaults/{id}", async () => {
66
- globalThis.fetch = mockFetch(204, null);
67
- const res = await new VaultResource(makeHttp()).delete("v-1");
68
- expect(lastCall().init.method).toBe("DELETE");
69
- expect(res.meta?.status).toBe(204);
70
- });
71
- });
72
- // ---------------------------------------------------------------------------
73
- // SecretsResource
74
- // ---------------------------------------------------------------------------
75
- describe("SecretsResource", () => {
76
- it("set sends PUT with value and type", async () => {
77
- globalThis.fetch = mockFetch(201, { id: "s-1", path: "db/pass", version: 1 });
78
- await new SecretsResource(makeHttp()).set("v-1", "db/pass", "secret123", { type: "password" });
79
- const { url, init } = lastCall();
80
- expect(url).toBe(`${BASE}/v1/vaults/v-1/secrets/db/pass`);
81
- expect(init.method).toBe("PUT");
82
- const body = JSON.parse(init.body);
83
- expect(body.value).toBe("secret123");
84
- expect(body.type).toBe("password");
85
- });
86
- it("set defaults type to 'generic'", async () => {
87
- globalThis.fetch = mockFetch(201, {});
88
- await new SecretsResource(makeHttp()).set("v-1", "key", "val");
89
- expect(JSON.parse(lastCall().init.body).type).toBe("generic");
90
- });
91
- it("set passes optional fields", async () => {
92
- globalThis.fetch = mockFetch(201, {});
93
- await new SecretsResource(makeHttp()).set("v-1", "key", "val", {
94
- max_access_count: 5,
95
- expires_at: "2025-12-31T00:00:00Z",
96
- metadata: { env: "prod" },
97
- });
98
- const body = JSON.parse(lastCall().init.body);
99
- expect(body.max_access_count).toBe(5);
100
- expect(body.expires_at).toBe("2025-12-31T00:00:00Z");
101
- expect(body.metadata).toEqual({ env: "prod" });
102
- });
103
- it("get sends GET with correct path", async () => {
104
- globalThis.fetch = mockFetch(200, { value: "s3cr3t" });
105
- const res = await new SecretsResource(makeHttp()).get("v-1", "db/pass");
106
- expect(lastCall().url).toBe(`${BASE}/v1/vaults/v-1/secrets/db/pass`);
107
- expect(res.data?.value).toBe("s3cr3t");
108
- });
109
- it("delete sends DELETE", async () => {
110
- globalThis.fetch = mockFetch(204, null);
111
- await new SecretsResource(makeHttp()).delete("v-1", "db/pass");
112
- expect(lastCall().init.method).toBe("DELETE");
113
- });
114
- it("list sends GET with optional prefix query", async () => {
115
- globalThis.fetch = mockFetch(200, { secrets: [] });
116
- await new SecretsResource(makeHttp()).list("v-1", "db");
117
- const url = new URL(lastCall().url);
118
- expect(url.pathname).toBe("/v1/vaults/v-1/secrets");
119
- expect(url.searchParams.get("prefix")).toBe("db");
120
- });
121
- it("list omits prefix when not provided", async () => {
122
- globalThis.fetch = mockFetch(200, { secrets: [] });
123
- await new SecretsResource(makeHttp()).list("v-1");
124
- const url = new URL(lastCall().url);
125
- expect(url.searchParams.has("prefix")).toBe(false);
126
- });
127
- it("rotate delegates to set", async () => {
128
- globalThis.fetch = mockFetch(201, { version: 2 });
129
- await new SecretsResource(makeHttp()).rotate("v-1", "key", "new-val");
130
- expect(lastCall().init.method).toBe("PUT");
131
- expect(JSON.parse(lastCall().init.body).value).toBe("new-val");
132
- });
133
- });
134
- // ---------------------------------------------------------------------------
135
- // AccessResource
136
- // ---------------------------------------------------------------------------
137
- describe("AccessResource", () => {
138
- it("grantHuman sends POST with principal_type user", async () => {
139
- globalThis.fetch = mockFetch(201, { id: "p-1" });
140
- await new AccessResource(makeHttp()).grantHuman("v-1", "u-1", ["read"]);
141
- const body = JSON.parse(lastCall().init.body);
142
- expect(body.principal_type).toBe("user");
143
- expect(body.principal_id).toBe("u-1");
144
- expect(body.permissions).toEqual(["read"]);
145
- expect(body.secret_path_pattern).toBe("**");
146
- expect(lastCall().url).toBe(`${BASE}/v1/vaults/v-1/policies`);
147
- });
148
- it("grantAgent sends POST with principal_type agent", async () => {
149
- globalThis.fetch = mockFetch(201, { id: "p-1" });
150
- await new AccessResource(makeHttp()).grantAgent("v-1", "a-1", ["read", "write"], {
151
- secretPathPattern: "keys/*",
152
- expires_at: "2025-12-31T00:00:00Z",
153
- });
154
- const body = JSON.parse(lastCall().init.body);
155
- expect(body.principal_type).toBe("agent");
156
- expect(body.secret_path_pattern).toBe("keys/*");
157
- expect(body.expires_at).toBe("2025-12-31T00:00:00Z");
158
- });
159
- it("update sends PUT", async () => {
160
- globalThis.fetch = mockFetch(200, {});
161
- await new AccessResource(makeHttp()).update("v-1", "p-1", { permissions: ["read"] });
162
- expect(lastCall().init.method).toBe("PUT");
163
- expect(lastCall().url).toBe(`${BASE}/v1/vaults/v-1/policies/p-1`);
164
- });
165
- it("revoke sends DELETE", async () => {
166
- globalThis.fetch = mockFetch(204, null);
167
- await new AccessResource(makeHttp()).revoke("v-1", "p-1");
168
- expect(lastCall().init.method).toBe("DELETE");
169
- });
170
- it("listGrants sends GET", async () => {
171
- globalThis.fetch = mockFetch(200, { policies: [] });
172
- await new AccessResource(makeHttp()).listGrants("v-1");
173
- expect(lastCall().url).toBe(`${BASE}/v1/vaults/v-1/policies`);
174
- });
175
- });
176
- // ---------------------------------------------------------------------------
177
- // AgentsResource
178
- // ---------------------------------------------------------------------------
179
- describe("AgentsResource", () => {
180
- it("create sends POST /v1/agents", async () => {
181
- globalThis.fetch = mockFetch(201, { agent: { id: "a-1" }, api_key: "ocv_xxx" });
182
- const res = await new AgentsResource(makeHttp()).create({
183
- name: "bot",
184
- intents_api_enabled: true,
185
- tx_max_value_eth: "0.5",
186
- });
187
- const body = JSON.parse(lastCall().init.body);
188
- expect(body.name).toBe("bot");
189
- expect(body.intents_api_enabled).toBe(true);
190
- expect(body.tx_max_value_eth).toBe("0.5");
191
- expect(res.data?.api_key).toBe("ocv_xxx");
192
- });
193
- it("get sends GET /v1/agents/{id}", async () => {
194
- globalThis.fetch = mockFetch(200, { id: "a-1" });
195
- await new AgentsResource(makeHttp()).get("a-1");
196
- expect(lastCall().url).toBe(`${BASE}/v1/agents/a-1`);
197
- });
198
- it("list sends GET /v1/agents", async () => {
199
- globalThis.fetch = mockFetch(200, { agents: [] });
200
- await new AgentsResource(makeHttp()).list();
201
- expect(lastCall().url).toBe(`${BASE}/v1/agents`);
202
- });
203
- it("update sends PATCH", async () => {
204
- globalThis.fetch = mockFetch(200, {});
205
- await new AgentsResource(makeHttp()).update("a-1", { is_active: false });
206
- expect(lastCall().init.method).toBe("PATCH");
207
- expect(JSON.parse(lastCall().init.body).is_active).toBe(false);
208
- });
209
- it("delete sends DELETE", async () => {
210
- globalThis.fetch = mockFetch(204, null);
211
- await new AgentsResource(makeHttp()).delete("a-1");
212
- expect(lastCall().init.method).toBe("DELETE");
213
- });
214
- it("rotateKey sends POST to /rotate-key", async () => {
215
- globalThis.fetch = mockFetch(200, { api_key: "ocv_new" });
216
- const res = await new AgentsResource(makeHttp()).rotateKey("a-1");
217
- expect(lastCall().url).toBe(`${BASE}/v1/agents/a-1/rotate-key`);
218
- expect(res.data?.api_key).toBe("ocv_new");
219
- });
220
- it("submitTransaction sends POST to /transactions", async () => {
221
- globalThis.fetch = mockFetch(201, { id: "tx-1", status: "signed" });
222
- await new AgentsResource(makeHttp()).submitTransaction("a-1", {
223
- to: "0xdead",
224
- value: "0.01",
225
- chain: "sepolia",
226
- simulate_first: true,
227
- });
228
- expect(lastCall().url).toBe(`${BASE}/v1/agents/a-1/transactions`);
229
- const body = JSON.parse(lastCall().init.body);
230
- expect(body.to).toBe("0xdead");
231
- expect(body.simulate_first).toBe(true);
232
- });
233
- it("getTransaction sends GET to /transactions/{txId}", async () => {
234
- globalThis.fetch = mockFetch(200, { id: "tx-1" });
235
- await new AgentsResource(makeHttp()).getTransaction("a-1", "tx-1");
236
- expect(lastCall().url).toBe(`${BASE}/v1/agents/a-1/transactions/tx-1`);
237
- });
238
- it("listTransactions sends GET to /transactions", async () => {
239
- globalThis.fetch = mockFetch(200, { transactions: [] });
240
- await new AgentsResource(makeHttp()).listTransactions("a-1");
241
- expect(lastCall().url).toBe(`${BASE}/v1/agents/a-1/transactions`);
242
- });
243
- it("listTransactions with includeSignedTx appends query param", async () => {
244
- globalThis.fetch = mockFetch(200, { transactions: [] });
245
- await new AgentsResource(makeHttp()).listTransactions("a-1", {
246
- includeSignedTx: true,
247
- });
248
- expect(lastCall().url).toBe(`${BASE}/v1/agents/a-1/transactions?include_signed_tx=true`);
249
- });
250
- it("getTransaction with includeSignedTx appends query param", async () => {
251
- globalThis.fetch = mockFetch(200, { id: "tx-1", status: "signed" });
252
- await new AgentsResource(makeHttp()).getTransaction("a-1", "tx-1", {
253
- includeSignedTx: true,
254
- });
255
- expect(lastCall().url).toBe(`${BASE}/v1/agents/a-1/transactions/tx-1?include_signed_tx=true`);
256
- });
257
- it("simulateTransaction sends POST to /transactions/simulate", async () => {
258
- globalThis.fetch = mockFetch(200, { simulation_id: "sim-1", status: "success" });
259
- await new AgentsResource(makeHttp()).simulateTransaction("a-1", {
260
- to: "0xdead",
261
- value: "0.01",
262
- chain: "sepolia",
263
- });
264
- expect(lastCall().url).toBe(`${BASE}/v1/agents/a-1/transactions/simulate`);
265
- });
266
- it("simulateBundle sends POST to /transactions/simulate-bundle", async () => {
267
- globalThis.fetch = mockFetch(200, { simulations: [] });
268
- await new AgentsResource(makeHttp()).simulateBundle("a-1", {
269
- transactions: [{ to: "0xdead", value: "0.01", chain: "sepolia" }],
270
- });
271
- expect(lastCall().url).toBe(`${BASE}/v1/agents/a-1/transactions/simulate-bundle`);
272
- });
273
- });
274
- // ---------------------------------------------------------------------------
275
- // ChainsResource
276
- // ---------------------------------------------------------------------------
277
- describe("ChainsResource", () => {
278
- it("list sends GET /v1/chains", async () => {
279
- globalThis.fetch = mockFetch(200, { chains: [] });
280
- await new ChainsResource(makeHttp()).list();
281
- expect(lastCall().url).toBe(`${BASE}/v1/chains`);
282
- });
283
- it("get sends GET /v1/chains/{identifier}", async () => {
284
- globalThis.fetch = mockFetch(200, { name: "ethereum", chain_id: 1 });
285
- await new ChainsResource(makeHttp()).get("ethereum");
286
- expect(lastCall().url).toBe(`${BASE}/v1/chains/ethereum`);
287
- });
288
- it("adminList sends GET /v1/admin/chains", async () => {
289
- globalThis.fetch = mockFetch(200, { chains: [] });
290
- await new ChainsResource(makeHttp()).adminList();
291
- expect(lastCall().url).toBe(`${BASE}/v1/admin/chains`);
292
- });
293
- it("create sends POST /v1/admin/chains", async () => {
294
- globalThis.fetch = mockFetch(201, {});
295
- await new ChainsResource(makeHttp()).create({
296
- name: "optimism",
297
- display_name: "Optimism",
298
- chain_id: 10,
299
- });
300
- expect(lastCall().init.method).toBe("POST");
301
- expect(lastCall().url).toBe(`${BASE}/v1/admin/chains`);
302
- });
303
- it("update sends PUT /v1/admin/chains/{id}", async () => {
304
- globalThis.fetch = mockFetch(200, {});
305
- await new ChainsResource(makeHttp()).update("c-1", { rpc_url: "https://rpc.test" });
306
- expect(lastCall().init.method).toBe("PUT");
307
- });
308
- it("delete sends DELETE /v1/admin/chains/{id}", async () => {
309
- globalThis.fetch = mockFetch(204, null);
310
- await new ChainsResource(makeHttp()).delete("c-1");
311
- expect(lastCall().init.method).toBe("DELETE");
312
- });
313
- });
314
- // ---------------------------------------------------------------------------
315
- // SharingResource
316
- // ---------------------------------------------------------------------------
317
- describe("SharingResource", () => {
318
- it("create sends POST /v1/secrets/{id}/share", async () => {
319
- globalThis.fetch = mockFetch(201, { id: "sh-1", share_url: "https://..." });
320
- await new SharingResource(makeHttp()).create("s-1", {
321
- recipient_type: "user",
322
- recipient_id: "u-1",
323
- expires_at: "2025-12-31T00:00:00Z",
324
- });
325
- expect(lastCall().url).toBe(`${BASE}/v1/secrets/s-1/share`);
326
- expect(lastCall().init.method).toBe("POST");
327
- });
328
- it("access sends GET /v1/share/{shareId}", async () => {
329
- globalThis.fetch = mockFetch(200, { value: "shared-secret" });
330
- await new SharingResource(makeHttp()).access("sh-1");
331
- expect(lastCall().url).toBe(`${BASE}/v1/share/sh-1`);
332
- });
333
- it("listOutbound sends GET /v1/shares/outbound", async () => {
334
- globalThis.fetch = mockFetch(200, { shares: [] });
335
- await new SharingResource(makeHttp()).listOutbound();
336
- expect(lastCall().url).toBe(`${BASE}/v1/shares/outbound`);
337
- });
338
- it("listInbound sends GET /v1/shares/inbound", async () => {
339
- globalThis.fetch = mockFetch(200, { shares: [] });
340
- await new SharingResource(makeHttp()).listInbound();
341
- expect(lastCall().url).toBe(`${BASE}/v1/shares/inbound`);
342
- });
343
- it("accept sends POST /v1/shares/{id}/accept", async () => {
344
- globalThis.fetch = mockFetch(204, null);
345
- await new SharingResource(makeHttp()).accept("sh-1");
346
- expect(lastCall().url).toBe(`${BASE}/v1/shares/sh-1/accept`);
347
- });
348
- it("decline sends POST /v1/shares/{id}/decline", async () => {
349
- globalThis.fetch = mockFetch(204, null);
350
- await new SharingResource(makeHttp()).decline("sh-1");
351
- expect(lastCall().url).toBe(`${BASE}/v1/shares/sh-1/decline`);
352
- });
353
- it("revoke sends DELETE /v1/share/{id}", async () => {
354
- globalThis.fetch = mockFetch(204, null);
355
- await new SharingResource(makeHttp()).revoke("sh-1");
356
- expect(lastCall().url).toBe(`${BASE}/v1/share/sh-1`);
357
- expect(lastCall().init.method).toBe("DELETE");
358
- });
359
- });
360
- // ---------------------------------------------------------------------------
361
- // ApprovalsResource
362
- // ---------------------------------------------------------------------------
363
- describe("ApprovalsResource", () => {
364
- it("request sends POST /v1/approvals", async () => {
365
- globalThis.fetch = mockFetch(201, { id: "apr-1", status: "pending" });
366
- await new ApprovalsResource(makeHttp()).request({
367
- vault_id: "v-1",
368
- secret_path: "keys/master",
369
- });
370
- expect(lastCall().init.method).toBe("POST");
371
- });
372
- it("list sends GET /v1/approvals with optional status", async () => {
373
- globalThis.fetch = mockFetch(200, { approvals: [] });
374
- await new ApprovalsResource(makeHttp()).list("pending");
375
- const url = new URL(lastCall().url);
376
- expect(url.searchParams.get("status")).toBe("pending");
377
- });
378
- it("approve sends POST /v1/approvals/{id}/approve", async () => {
379
- globalThis.fetch = mockFetch(200, { status: "approved" });
380
- await new ApprovalsResource(makeHttp()).approve("apr-1");
381
- expect(lastCall().url).toBe(`${BASE}/v1/approvals/apr-1/approve`);
382
- });
383
- it("deny sends POST /v1/approvals/{id}/deny", async () => {
384
- globalThis.fetch = mockFetch(200, { status: "denied" });
385
- await new ApprovalsResource(makeHttp()).deny("apr-1", "not authorized");
386
- expect(JSON.parse(lastCall().init.body)).toEqual({ reason: "not authorized" });
387
- });
388
- it("check sends GET /v1/approvals/{id}", async () => {
389
- globalThis.fetch = mockFetch(200, { id: "apr-1", status: "pending" });
390
- await new ApprovalsResource(makeHttp()).check("apr-1");
391
- expect(lastCall().url).toBe(`${BASE}/v1/approvals/apr-1`);
392
- });
393
- it("subscribe polls and calls back, returns unsubscribe function", async () => {
394
- vi.useFakeTimers();
395
- const callback = vi.fn();
396
- const approvals = [{ id: "a-1", status: "pending" }];
397
- globalThis.fetch = mockFetch(200, { approvals });
398
- const unsub = new ApprovalsResource(makeHttp()).subscribe(callback, { intervalMs: 100 });
399
- await vi.advanceTimersByTimeAsync(50);
400
- expect(callback).toHaveBeenCalledWith(approvals);
401
- unsub();
402
- vi.useRealTimers();
403
- });
404
- });
405
- // ---------------------------------------------------------------------------
406
- // BillingResource
407
- // ---------------------------------------------------------------------------
408
- describe("BillingResource", () => {
409
- it("usage sends GET /v1/billing/usage", async () => {
410
- globalThis.fetch = mockFetch(200, { billing_tier: "free" });
411
- await new BillingResource(makeHttp()).usage();
412
- expect(lastCall().url).toBe(`${BASE}/v1/billing/usage`);
413
- });
414
- it("history sends GET /v1/billing/history with optional limit", async () => {
415
- globalThis.fetch = mockFetch(200, { events: [] });
416
- await new BillingResource(makeHttp()).history(25);
417
- const url = new URL(lastCall().url);
418
- expect(url.searchParams.get("limit")).toBe("25");
419
- });
420
- it("history omits limit when not provided", async () => {
421
- globalThis.fetch = mockFetch(200, { events: [] });
422
- await new BillingResource(makeHttp()).history();
423
- const url = new URL(lastCall().url);
424
- expect(url.searchParams.has("limit")).toBe(false);
425
- });
426
- });
427
- // ---------------------------------------------------------------------------
428
- // AuditResource
429
- // ---------------------------------------------------------------------------
430
- describe("AuditResource", () => {
431
- it("query sends GET /v1/audit/events with filters as query params", async () => {
432
- globalThis.fetch = mockFetch(200, { events: [], count: 0 });
433
- await new AuditResource(makeHttp()).query({
434
- resource_id: "v-1",
435
- action: "secret.read",
436
- limit: 10,
437
- offset: 5,
438
- });
439
- const url = new URL(lastCall().url);
440
- expect(url.pathname).toBe("/v1/audit/events");
441
- expect(url.searchParams.get("resource_id")).toBe("v-1");
442
- expect(url.searchParams.get("action")).toBe("secret.read");
443
- expect(url.searchParams.get("limit")).toBe("10");
444
- expect(url.searchParams.get("offset")).toBe("5");
445
- });
446
- it("query with no filters sends bare request", async () => {
447
- globalThis.fetch = mockFetch(200, { events: [], count: 0 });
448
- await new AuditResource(makeHttp()).query();
449
- const url = new URL(lastCall().url);
450
- expect(url.search).toBe("");
451
- });
452
- });
453
- // ---------------------------------------------------------------------------
454
- // OrgResource
455
- // ---------------------------------------------------------------------------
456
- describe("OrgResource", () => {
457
- it("listMembers sends GET /v1/org/members", async () => {
458
- globalThis.fetch = mockFetch(200, { members: [] });
459
- await new OrgResource(makeHttp()).listMembers();
460
- expect(lastCall().url).toBe(`${BASE}/v1/org/members`);
461
- });
462
- it("updateMemberRole sends PATCH /v1/org/members/{userId}", async () => {
463
- globalThis.fetch = mockFetch(200, {});
464
- await new OrgResource(makeHttp()).updateMemberRole("u-1", "admin");
465
- expect(lastCall().init.method).toBe("PATCH");
466
- expect(lastCall().url).toBe(`${BASE}/v1/org/members/u-1`);
467
- expect(JSON.parse(lastCall().init.body)).toEqual({ role: "admin" });
468
- });
469
- it("removeMember sends DELETE /v1/org/members/{userId}", async () => {
470
- globalThis.fetch = mockFetch(204, null);
471
- await new OrgResource(makeHttp()).removeMember("u-1");
472
- expect(lastCall().init.method).toBe("DELETE");
473
- });
474
- });
475
- // ---------------------------------------------------------------------------
476
- // AuthResource
477
- // ---------------------------------------------------------------------------
478
- describe("AuthResource", () => {
479
- it("login sends POST /v1/auth/token and stores JWT", async () => {
480
- globalThis.fetch = mockFetch(200, { access_token: "jwt-123", token_type: "bearer", expires_in: 3600 });
481
- const http = makeHttp("");
482
- const res = await new AuthResource(http).login({ email: "a@b.co", password: "p" });
483
- expect(lastCall().url).toBe(`${BASE}/v1/auth/token`);
484
- expect(http.getToken()).toBe("jwt-123");
485
- expect(res.data?.access_token).toBe("jwt-123");
486
- });
487
- it("signup sends POST /v1/auth/signup and stores JWT", async () => {
488
- globalThis.fetch = mockFetch(200, { access_token: "jwt-new" });
489
- const http = makeHttp("");
490
- await new AuthResource(http).signup({ email: "a@b.co", password: "p", display_name: "A" });
491
- expect(lastCall().url).toBe(`${BASE}/v1/auth/signup`);
492
- expect(http.getToken()).toBe("jwt-new");
493
- });
494
- it("agentToken sends POST /v1/auth/agent-token", async () => {
495
- globalThis.fetch = mockFetch(200, { access_token: "agent-jwt" });
496
- const http = makeHttp("");
497
- await new AuthResource(http).agentToken({ agent_id: "a-1", api_key: "ocv_x" });
498
- expect(lastCall().url).toBe(`${BASE}/v1/auth/agent-token`);
499
- expect(http.getToken()).toBe("agent-jwt");
500
- });
501
- it("apiKeyToken sends POST /v1/auth/api-key-token", async () => {
502
- globalThis.fetch = mockFetch(200, { access_token: "key-jwt" });
503
- const http = makeHttp("");
504
- await new AuthResource(http).apiKeyToken({ api_key: "ocv_x" });
505
- expect(lastCall().url).toBe(`${BASE}/v1/auth/api-key-token`);
506
- expect(http.getToken()).toBe("key-jwt");
507
- });
508
- it("google sends POST /v1/auth/google", async () => {
509
- globalThis.fetch = mockFetch(200, { access_token: "g-jwt" });
510
- const http = makeHttp("");
511
- await new AuthResource(http).google({ id_token: "google-id" });
512
- expect(lastCall().url).toBe(`${BASE}/v1/auth/google`);
513
- });
514
- it("changePassword sends POST /v1/auth/change-password", async () => {
515
- globalThis.fetch = mockFetch(204, null);
516
- await new AuthResource(makeHttp()).changePassword({
517
- current_password: "old",
518
- new_password: "new",
519
- });
520
- expect(lastCall().url).toBe(`${BASE}/v1/auth/change-password`);
521
- });
522
- it("logout sends DELETE /v1/auth/token and clears JWT", async () => {
523
- globalThis.fetch = mockFetch(204, null);
524
- const http = makeHttp("active-jwt");
525
- await new AuthResource(http).logout();
526
- expect(lastCall().init.method).toBe("DELETE");
527
- expect(http.getToken()).toBe("");
528
- });
529
- });
530
- // ---------------------------------------------------------------------------
531
- // ApiKeysResource
532
- // ---------------------------------------------------------------------------
533
- describe("ApiKeysResource", () => {
534
- it("create sends POST /v1/auth/api-keys", async () => {
535
- globalThis.fetch = mockFetch(201, { key: { id: "k-1" }, api_key: "1ck_xxx" });
536
- const res = await new ApiKeysResource(makeHttp()).create({ name: "ci-key" });
537
- expect(lastCall().url).toBe(`${BASE}/v1/auth/api-keys`);
538
- expect(res.data?.api_key).toBe("1ck_xxx");
539
- });
540
- it("list sends GET /v1/auth/api-keys", async () => {
541
- globalThis.fetch = mockFetch(200, { keys: [] });
542
- await new ApiKeysResource(makeHttp()).list();
543
- expect(lastCall().url).toBe(`${BASE}/v1/auth/api-keys`);
544
- });
545
- it("revoke sends DELETE /v1/auth/api-keys/{keyId}", async () => {
546
- globalThis.fetch = mockFetch(204, null);
547
- await new ApiKeysResource(makeHttp()).revoke("k-1");
548
- expect(lastCall().init.method).toBe("DELETE");
549
- expect(lastCall().url).toBe(`${BASE}/v1/auth/api-keys/k-1`);
550
- });
551
- });
552
- //# sourceMappingURL=resources.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resources.test.js","sourceRoot":"","sources":["../../src/__tests__/resources.test.ts"],"names":[],"mappings":"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"}