@curless/agentbank-sdk 0.0.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 ADDED
@@ -0,0 +1,61 @@
1
+ # @curless/agentbank-sdk
2
+
3
+ Official SDK for **agentbank** — agent-commerce payments. Wraps the
4
+ agentbank API: agent OAuth, agent/customer management, and the Pay
5
+ spend-control plane.
6
+
7
+ ```bash
8
+ npm install @curless/agentbank-sdk
9
+ ```
10
+
11
+ ## Quick start
12
+
13
+ ### Admin (manage agents, fund, approve)
14
+
15
+ ```ts
16
+ import { Agentbank } from '@curless/agentbank-sdk';
17
+
18
+ const ab = new Agentbank({
19
+ baseUrl: 'https://api.agentbank.example',
20
+ apiKey: 'agb_admin_...', // an agentbank:admin / pay:admin key
21
+ });
22
+
23
+ // 1. create an agent + a spend policy
24
+ const agent = await ab.agents.create({
25
+ name: 'procurement-bot',
26
+ spendPolicy: { perTransactionLimit: 50_00, dailyLimit: 500_00, approvalRequiredAbove: 100_00 },
27
+ });
28
+
29
+ // 2. fund it (after an org deposit), and issue it a client credential
30
+ await ab.pay.deposit({ amount: 1000_00, currency: 'USD' });
31
+ await ab.pay.fundAgent(agent.id, { amount: 500_00, currency: 'USD' });
32
+ const cred = await ab.agents.issueCredential(agent.id); // cred.secret shown once
33
+ ```
34
+
35
+ ### Agent (spend, with auto-managed token)
36
+
37
+ ```ts
38
+ // Exchanges the credential for short-lived tokens; auto-refreshes.
39
+ const agentClient = Agentbank.withClientCredentials({
40
+ baseUrl: 'https://api.agentbank.example',
41
+ clientSecret: cred.secret, // the agb_… issued above
42
+ });
43
+
44
+ const auth = await agentClient.pay.authorize({
45
+ agentId: agent.id,
46
+ merchantRef: 'acme.example',
47
+ amount: 12_00, // minor units
48
+ idempotencyKey: 'order-123',
49
+ });
50
+ // auth.status: 'authorized' | 'pending_approval' | 'denied'
51
+ if (auth.status === 'authorized') {
52
+ await agentClient.pay.capture(auth.id);
53
+ }
54
+ ```
55
+
56
+ ## Notes
57
+
58
+ - **Amounts** are minor-unit integers (USD = cents).
59
+ - **Errors** throw `AgentbankError` with `.status` + `.code`.
60
+ - ESM-only; Node ≥ 18 (uses global `fetch`).
61
+ - Pass `fetch` in the constructor to inject a custom implementation (tests, proxies).
@@ -0,0 +1,36 @@
1
+ import { AgentsResource } from './resources/agents.js';
2
+ import { OAuthResource } from './resources/oauth.js';
3
+ import { PayResource } from './resources/pay.js';
4
+ export type FetchLike = typeof fetch;
5
+ export type RequestOptions = {
6
+ query?: Record<string, string | number | undefined>;
7
+ body?: unknown;
8
+ idempotencyKey?: string;
9
+ skipAuth?: boolean;
10
+ };
11
+ export type AgentbankOptions = {
12
+ baseUrl: string;
13
+ apiKey?: string;
14
+ accessToken?: string;
15
+ fetch?: FetchLike;
16
+ };
17
+ export declare class Agentbank {
18
+ readonly baseUrl: string;
19
+ private readonly fetchImpl;
20
+ private readonly staticToken;
21
+ private tokenProvider;
22
+ readonly oauth: OAuthResource;
23
+ readonly agents: AgentsResource;
24
+ readonly pay: PayResource;
25
+ constructor(opts: AgentbankOptions);
26
+ static withClientCredentials(opts: {
27
+ baseUrl: string;
28
+ clientSecret: string;
29
+ scope?: string;
30
+ fetch?: FetchLike;
31
+ }): Agentbank;
32
+ private resolveToken;
33
+ /** @internal */
34
+ request<T>(method: string, path: string, opts?: RequestOptions, retried?: boolean): Promise<T>;
35
+ }
36
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;AAErC,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IACpD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAGhB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,CAAC;AAMF,qBAAa,SAAS;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,aAAa,CAA4B;IAEjD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;gBAEd,IAAI,EAAE,gBAAgB;IAalC,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE;QACjC,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,SAAS,CAAC;KACnB,GAAG,SAAS;YAaC,YAAY;IAK1B,gBAAgB;IACV,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,cAAmB,EACzB,OAAO,UAAQ,GACd,OAAO,CAAC,CAAC,CAAC;CAiCd"}
package/dist/client.js ADDED
@@ -0,0 +1,94 @@
1
+ import { AgentbankError } from './errors.js';
2
+ import { AgentsResource } from './resources/agents.js';
3
+ import { OAuthResource } from './resources/oauth.js';
4
+ import { PayResource } from './resources/pay.js';
5
+ // agentbank API client. Wraps the HTTP surface with typed resources,
6
+ // bearer auth, idempotency, and typed errors.
7
+ export class Agentbank {
8
+ baseUrl;
9
+ fetchImpl;
10
+ staticToken;
11
+ tokenProvider;
12
+ oauth;
13
+ agents;
14
+ pay;
15
+ constructor(opts) {
16
+ this.baseUrl = opts.baseUrl.replace(/\/+$/, '');
17
+ this.fetchImpl = opts.fetch ?? fetch;
18
+ this.staticToken = opts.accessToken ?? opts.apiKey;
19
+ this.oauth = new OAuthResource(this);
20
+ this.agents = new AgentsResource(this);
21
+ this.pay = new PayResource(this);
22
+ }
23
+ // Build a client that auto-mints + caches + refreshes an agent access
24
+ // token from a client credential (the agb_… secret issued to an agent).
25
+ // Tokens are fetched lazily, reused until ~30s before expiry, and
26
+ // force-refreshed once on a 401.
27
+ static withClientCredentials(opts) {
28
+ const client = new Agentbank({ baseUrl: opts.baseUrl, fetch: opts.fetch });
29
+ let cached;
30
+ client.tokenProvider = async (forceRefresh) => {
31
+ const now = Math.floor(Date.now() / 1000);
32
+ if (!forceRefresh && cached && cached.exp - now > 30)
33
+ return cached.token;
34
+ const t = await client.oauth.token({ clientSecret: opts.clientSecret, scope: opts.scope });
35
+ cached = { token: t.access_token, exp: now + t.expires_in };
36
+ return cached.token;
37
+ };
38
+ return client;
39
+ }
40
+ async resolveToken(forceRefresh) {
41
+ if (this.tokenProvider)
42
+ return this.tokenProvider(forceRefresh);
43
+ return this.staticToken;
44
+ }
45
+ /** @internal */
46
+ async request(method, path, opts = {}, retried = false) {
47
+ const url = new URL(`${this.baseUrl}${path}`);
48
+ if (opts.query) {
49
+ for (const [k, v] of Object.entries(opts.query)) {
50
+ if (v !== undefined)
51
+ url.searchParams.set(k, String(v));
52
+ }
53
+ }
54
+ const headers = { 'content-type': 'application/json' };
55
+ if (!opts.skipAuth) {
56
+ const token = await this.resolveToken(false);
57
+ if (token)
58
+ headers.authorization = `Bearer ${token}`;
59
+ }
60
+ if (opts.idempotencyKey)
61
+ headers['idempotency-key'] = opts.idempotencyKey;
62
+ const res = await this.fetchImpl(url.toString(), {
63
+ method,
64
+ headers,
65
+ body: opts.body === undefined ? undefined : JSON.stringify(opts.body),
66
+ });
67
+ // Auth token expired/revoked mid-flight → refresh once and retry.
68
+ if (res.status === 401 && this.tokenProvider && !opts.skipAuth && !retried) {
69
+ await this.tokenProvider(true);
70
+ return this.request(method, path, opts, true);
71
+ }
72
+ const text = await res.text();
73
+ const json = text ? JSON.parse(text) : undefined;
74
+ if (!res.ok)
75
+ throw toError(res.status, json);
76
+ return json;
77
+ }
78
+ }
79
+ // Map both agentbank's `{ error: { code, message, details } }` and the
80
+ // OAuth `{ error, error_description }` shapes to AgentbankError.
81
+ const toError = (status, json) => {
82
+ if (json && typeof json === 'object') {
83
+ const o = json;
84
+ if (o.error && typeof o.error === 'object') {
85
+ const e = o.error;
86
+ return new AgentbankError(status, String(e.code ?? 'error'), String(e.message ?? 'request failed'), e.details);
87
+ }
88
+ if (typeof o.error === 'string') {
89
+ return new AgentbankError(status, o.error, String(o.error_description ?? o.error));
90
+ }
91
+ }
92
+ return new AgentbankError(status, 'error', `request failed with status ${status}`);
93
+ };
94
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAwBjD,qEAAqE;AACrE,8CAA8C;AAC9C,MAAM,OAAO,SAAS;IACX,OAAO,CAAS;IACR,SAAS,CAAY;IACrB,WAAW,CAAqB;IACzC,aAAa,CAA4B;IAExC,KAAK,CAAgB;IACrB,MAAM,CAAiB;IACvB,GAAG,CAAc;IAE1B,YAAY,IAAsB;QAChC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC;QACnD,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,sEAAsE;IACtE,wEAAwE;IACxE,kEAAkE;IAClE,iCAAiC;IACjC,MAAM,CAAC,qBAAqB,CAAC,IAK5B;QACC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3E,IAAI,MAAkD,CAAC;QACvD,MAAM,CAAC,aAAa,GAAG,KAAK,EAAE,YAAY,EAAE,EAAE;YAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,YAAY,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE;gBAAE,OAAO,MAAM,CAAC,KAAK,CAAC;YAC1E,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3F,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;YAC5D,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,YAAqB;QAC9C,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,gBAAgB;IAChB,KAAK,CAAC,OAAO,CACX,MAAc,EACd,IAAY,EACZ,OAAuB,EAAE,EACzB,OAAO,GAAG,KAAK;QAEf,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC;QAC9C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChD,IAAI,CAAC,KAAK,SAAS;oBAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;QAC/E,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,KAAK;gBAAE,OAAO,CAAC,aAAa,GAAG,UAAU,KAAK,EAAE,CAAC;QACvD,CAAC;QACD,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;QAE1E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YAC/C,MAAM;YACN,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;SACtE,CAAC,CAAC;QAEH,kEAAkE;QAClE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3E,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO,IAAI,CAAC,OAAO,CAAI,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAa,CAAC,CAAC,CAAC,SAAS,CAAC;QAE9D,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7C,OAAO,IAAS,CAAC;IACnB,CAAC;CACF;AAED,uEAAuE;AACvE,iEAAiE;AACjE,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,IAAa,EAAkB,EAAE;IAChE,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAA+B,CAAC;QAC1C,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,KAAgC,CAAC;YAC7C,OAAO,IAAI,cAAc,CACvB,MAAM,EACN,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,EACzB,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,gBAAgB,CAAC,EACrC,CAAC,CAAC,OAAO,CACV,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IACD,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,8BAA8B,MAAM,EAAE,CAAC,CAAC;AACrF,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare class AgentbankError extends Error {
2
+ readonly status: number;
3
+ readonly code: string;
4
+ readonly details?: unknown;
5
+ constructor(status: number, code: string, message: string, details?: unknown);
6
+ }
7
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAGA,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;gBAEf,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAO7E"}
package/dist/errors.js ADDED
@@ -0,0 +1,16 @@
1
+ // Thrown for any non-2xx agentbank response. `code` is the agentbank
2
+ // error code (e.g. CONFLICT, FORBIDDEN) or the OAuth error code
3
+ // (e.g. invalid_client); `status` is the HTTP status.
4
+ export class AgentbankError extends Error {
5
+ status;
6
+ code;
7
+ details;
8
+ constructor(status, code, message, details) {
9
+ super(message);
10
+ this.name = 'AgentbankError';
11
+ this.status = status;
12
+ this.code = code;
13
+ this.details = details;
14
+ }
15
+ }
16
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,gEAAgE;AAChE,sDAAsD;AACtD,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,MAAM,CAAS;IACf,IAAI,CAAS;IACb,OAAO,CAAW;IAE3B,YAAY,MAAc,EAAE,IAAY,EAAE,OAAe,EAAE,OAAiB;QAC1E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ export { Agentbank } from './client.js';
2
+ export type { AgentbankOptions, FetchLike, RequestOptions } from './client.js';
3
+ export { AgentbankError } from './errors.js';
4
+ export type { CreateAgentInput, UpdateAgentInput, AgentCredentialScope, } from './resources/agents.js';
5
+ export type { AuthorizeSpendInput } from './resources/pay.js';
6
+ export type { Agent, AgentCredential, AgentCredentialSummary, AgentStatus, Paginated, SpendAuthorization, SpendAuthorizationStatus, SpendPolicy, TokenResponse, } from './types.js';
7
+ //# 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,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,YAAY,EACV,KAAK,EACL,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,SAAS,EACT,kBAAkB,EAClB,wBAAwB,EACxB,WAAW,EACX,aAAa,GACd,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { Agentbank } from './client.js';
2
+ export { AgentbankError } from './errors.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { Agentbank } from '../client.js';
2
+ import type { Agent, AgentCredential, AgentCredentialSummary, AgentStatus, Paginated, SpendPolicy } from '../types.js';
3
+ export type CreateAgentInput = {
4
+ name: string;
5
+ description?: string;
6
+ defaultCurrency?: string;
7
+ spendPolicy?: SpendPolicy;
8
+ };
9
+ export type UpdateAgentInput = {
10
+ name?: string;
11
+ description?: string;
12
+ status?: AgentStatus;
13
+ defaultCurrency?: string;
14
+ spendPolicy?: SpendPolicy;
15
+ };
16
+ export type AgentCredentialScope = 'agent:spend' | 'agent:execute';
17
+ export declare class AgentsResource {
18
+ private readonly client;
19
+ constructor(client: Agentbank);
20
+ create(input: CreateAgentInput): Promise<Agent>;
21
+ list(params?: {
22
+ limit?: number;
23
+ offset?: number;
24
+ }): Promise<Paginated<Agent>>;
25
+ get(agentId: string): Promise<Agent>;
26
+ update(agentId: string, patch: UpdateAgentInput): Promise<Agent>;
27
+ issueCredential(agentId: string, opts?: {
28
+ name?: string;
29
+ scopes?: AgentCredentialScope[];
30
+ }): Promise<AgentCredential>;
31
+ listCredentials(agentId: string): Promise<{
32
+ data: AgentCredentialSummary[];
33
+ }>;
34
+ revokeCredential(agentId: string, keyId: string): Promise<{
35
+ revoked: string;
36
+ }>;
37
+ }
38
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/resources/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EACV,KAAK,EACL,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,SAAS,EACT,WAAW,EACZ,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG,eAAe,CAAC;AAGnE,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,SAAS;IAE9C,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC;IAI/C,IAAI,CAAC,MAAM,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAIjF,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAIpC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC;IAShE,eAAe,CACb,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,oBAAoB,EAAE,CAAA;KAAO,GAC5D,OAAO,CAAC,eAAe,CAAC;IAQ3B,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,sBAAsB,EAAE,CAAA;KAAE,CAAC;IAO7E,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAM/E"}
@@ -0,0 +1,34 @@
1
+ // Agent / customer management (requires an agentbank:admin credential).
2
+ export class AgentsResource {
3
+ client;
4
+ constructor(client) {
5
+ this.client = client;
6
+ }
7
+ create(input) {
8
+ return this.client.request('POST', '/v1/agents', { body: input });
9
+ }
10
+ list(params = {}) {
11
+ return this.client.request('GET', '/v1/agents', { query: params });
12
+ }
13
+ get(agentId) {
14
+ return this.client.request('GET', `/v1/agents/${encodeURIComponent(agentId)}`);
15
+ }
16
+ update(agentId, patch) {
17
+ return this.client.request('PATCH', `/v1/agents/${encodeURIComponent(agentId)}`, {
18
+ body: patch,
19
+ });
20
+ }
21
+ // Issue an OAuth client credential bound to this agent. The plaintext
22
+ // `secret` is returned only once — store it; exchange it for tokens via
23
+ // Agentbank.withClientCredentials({ clientSecret }).
24
+ issueCredential(agentId, opts = {}) {
25
+ return this.client.request('POST', `/v1/agents/${encodeURIComponent(agentId)}/credentials`, { body: opts });
26
+ }
27
+ listCredentials(agentId) {
28
+ return this.client.request('GET', `/v1/agents/${encodeURIComponent(agentId)}/credentials`);
29
+ }
30
+ revokeCredential(agentId, keyId) {
31
+ return this.client.request('DELETE', `/v1/agents/${encodeURIComponent(agentId)}/credentials/${encodeURIComponent(keyId)}`);
32
+ }
33
+ }
34
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/resources/agents.ts"],"names":[],"mappings":"AA2BA,wEAAwE;AACxE,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,MAAiB;QAAjB,WAAM,GAAN,MAAM,CAAW;IAAG,CAAC;IAElD,MAAM,CAAC,KAAuB;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAQ,MAAM,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,CAAC,SAA8C,EAAE;QACnD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAmB,KAAK,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,GAAG,CAAC,OAAe;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAQ,KAAK,EAAE,cAAc,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,CAAC,OAAe,EAAE,KAAuB;QAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAQ,OAAO,EAAE,cAAc,kBAAkB,CAAC,OAAO,CAAC,EAAE,EAAE;YACtF,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;IACL,CAAC;IAED,sEAAsE;IACtE,wEAAwE;IACxE,qDAAqD;IACrD,eAAe,CACb,OAAe,EACf,OAA2D,EAAE;QAE7D,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,MAAM,EACN,cAAc,kBAAkB,CAAC,OAAO,CAAC,cAAc,EACvD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,OAAe;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,KAAK,EACL,cAAc,kBAAkB,CAAC,OAAO,CAAC,cAAc,CACxD,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,OAAe,EAAE,KAAa;QAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,QAAQ,EACR,cAAc,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,CACrF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { Agentbank } from '../client.js';
2
+ import type { TokenResponse } from '../types.js';
3
+ export declare class OAuthResource {
4
+ private readonly client;
5
+ constructor(client: Agentbank);
6
+ token(opts: {
7
+ clientSecret: string;
8
+ scope?: string;
9
+ }): Promise<TokenResponse>;
10
+ revoke(token: string): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/resources/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,SAAS;IAK9C,KAAK,CAAC,IAAI,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAYvE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAM3C"}
@@ -0,0 +1,27 @@
1
+ export class OAuthResource {
2
+ client;
3
+ constructor(client) {
4
+ this.client = client;
5
+ }
6
+ // Exchange an agent client credential (agb_… secret) for a short-lived
7
+ // access token (client-credentials grant). `skipAuth` because this IS
8
+ // the auth endpoint — it must not attach a bearer token.
9
+ token(opts) {
10
+ return this.client.request('POST', '/oauth/token', {
11
+ skipAuth: true,
12
+ body: {
13
+ grant_type: 'client_credentials',
14
+ client_secret: opts.clientSecret,
15
+ ...(opts.scope ? { scope: opts.scope } : {}),
16
+ },
17
+ });
18
+ }
19
+ // Revoke a token (agb_ client credential or an agent JWT). Always 200.
20
+ async revoke(token) {
21
+ await this.client.request('POST', '/oauth/revoke', {
22
+ skipAuth: true,
23
+ body: { token },
24
+ });
25
+ }
26
+ }
27
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/resources/oauth.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,MAAiB;QAAjB,WAAM,GAAN,MAAM,CAAW;IAAG,CAAC;IAElD,uEAAuE;IACvE,sEAAsE;IACtE,yDAAyD;IACzD,KAAK,CAAC,IAA8C;QAClD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAgB,MAAM,EAAE,cAAc,EAAE;YAChE,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE;gBACJ,UAAU,EAAE,oBAAoB;gBAChC,aAAa,EAAE,IAAI,CAAC,YAAY;gBAChC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7C;SACF,CAAC,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,KAAK,CAAC,MAAM,CAAC,KAAa;QACxB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAU,MAAM,EAAE,eAAe,EAAE;YAC1D,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,EAAE,KAAK,EAAE;SAChB,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ import type { Agentbank } from '../client.js';
2
+ import type { Paginated, SpendAuthorization, SpendAuthorizationStatus } from '../types.js';
3
+ export type AuthorizeSpendInput = {
4
+ agentId: string;
5
+ merchantRef: string;
6
+ amount: number;
7
+ mcc?: string;
8
+ currency?: string;
9
+ protocol?: 'acp' | 'x402' | 'vcc' | 'direct';
10
+ expiresInSeconds?: number;
11
+ idempotencyKey?: string;
12
+ };
13
+ export declare class PayResource {
14
+ private readonly client;
15
+ constructor(client: Agentbank);
16
+ authorize(input: AuthorizeSpendInput): Promise<SpendAuthorization>;
17
+ list(params?: {
18
+ status?: SpendAuthorizationStatus;
19
+ agentId?: string;
20
+ limit?: number;
21
+ offset?: number;
22
+ }): Promise<Paginated<SpendAuthorization>>;
23
+ get(authId: string): Promise<SpendAuthorization>;
24
+ capture(authId: string, opts?: {
25
+ amount?: number;
26
+ }): Promise<SpendAuthorization>;
27
+ release(authId: string): Promise<SpendAuthorization>;
28
+ approve(authId: string): Promise<SpendAuthorization>;
29
+ deny(authId: string, opts?: {
30
+ reason?: string;
31
+ }): Promise<SpendAuthorization>;
32
+ deposit(opts: {
33
+ amount: number;
34
+ currency?: string;
35
+ }): Promise<{
36
+ ok: boolean;
37
+ }>;
38
+ fundAgent(agentId: string, opts: {
39
+ amount: number;
40
+ currency?: string;
41
+ }): Promise<{
42
+ ok: boolean;
43
+ }>;
44
+ }
45
+ //# sourceMappingURL=pay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pay.d.ts","sourceRoot":"","sources":["../../src/resources/pay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE3F,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAKF,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,SAAS;IAE9C,SAAS,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQlE,IAAI,CACF,MAAM,GAAE;QACN,MAAM,CAAC,EAAE,wBAAwB,CAAC;QAClC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACZ,GACL,OAAO,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAMzC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAOhD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQpF,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQpD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQpD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;IASjF,OAAO,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC;IAK9E,SAAS,CACP,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1C,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC;CAO5B"}
@@ -0,0 +1,45 @@
1
+ // Pay-side spend control plane. `authorize`/`capture`/`release` need an
2
+ // agent:spend credential; `approve`/`deny`/`deposit`/`fundAgent` need
3
+ // pay:admin.
4
+ export class PayResource {
5
+ client;
6
+ constructor(client) {
7
+ this.client = client;
8
+ }
9
+ authorize(input) {
10
+ const { idempotencyKey, ...body } = input;
11
+ return this.client.request('POST', '/v1/pay/authorizations', {
12
+ body,
13
+ idempotencyKey,
14
+ });
15
+ }
16
+ list(params = {}) {
17
+ return this.client.request('GET', '/v1/pay/authorizations', {
18
+ query: params,
19
+ });
20
+ }
21
+ get(authId) {
22
+ return this.client.request('GET', `/v1/pay/authorizations/${encodeURIComponent(authId)}`);
23
+ }
24
+ capture(authId, opts = {}) {
25
+ return this.client.request('POST', `/v1/pay/authorizations/${encodeURIComponent(authId)}/capture`, { body: opts });
26
+ }
27
+ release(authId) {
28
+ return this.client.request('POST', `/v1/pay/authorizations/${encodeURIComponent(authId)}/release`, { body: {} });
29
+ }
30
+ approve(authId) {
31
+ return this.client.request('POST', `/v1/pay/authorizations/${encodeURIComponent(authId)}/approve`, { body: {} });
32
+ }
33
+ deny(authId, opts = {}) {
34
+ return this.client.request('POST', `/v1/pay/authorizations/${encodeURIComponent(authId)}/deny`, { body: opts });
35
+ }
36
+ // Record an enterprise deposit into the org's funded balance (admin).
37
+ deposit(opts) {
38
+ return this.client.request('POST', '/v1/pay/deposits', { body: opts });
39
+ }
40
+ // Allocate budget from org funding to an agent (admin).
41
+ fundAgent(agentId, opts) {
42
+ return this.client.request('POST', `/v1/pay/agents/${encodeURIComponent(agentId)}/funding`, { body: opts });
43
+ }
44
+ }
45
+ //# sourceMappingURL=pay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pay.js","sourceRoot":"","sources":["../../src/resources/pay.ts"],"names":[],"mappings":"AAeA,wEAAwE;AACxE,sEAAsE;AACtE,aAAa;AACb,MAAM,OAAO,WAAW;IACO;IAA7B,YAA6B,MAAiB;QAAjB,WAAM,GAAN,MAAM,CAAW;IAAG,CAAC;IAElD,SAAS,CAAC,KAA0B;QAClC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAqB,MAAM,EAAE,wBAAwB,EAAE;YAC/E,IAAI;YACJ,cAAc;SACf,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CACF,SAKI,EAAE;QAEN,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAgC,KAAK,EAAE,wBAAwB,EAAE;YACzF,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAC,MAAc;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,KAAK,EACL,0BAA0B,kBAAkB,CAAC,MAAM,CAAC,EAAE,CACvD,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,MAAc,EAAE,OAA4B,EAAE;QACpD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,MAAM,EACN,0BAA0B,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAC9D,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,MAAM,EACN,0BAA0B,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAC9D,EAAE,IAAI,EAAE,EAAE,EAAE,CACb,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,MAAM,EACN,0BAA0B,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAC9D,EAAE,IAAI,EAAE,EAAE,EAAE,CACb,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAc,EAAE,OAA4B,EAAE;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,MAAM,EACN,0BAA0B,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAC3D,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC;IAED,sEAAsE;IACtE,OAAO,CAAC,IAA2C;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAkB,MAAM,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,wDAAwD;IACxD,SAAS,CACP,OAAe,EACf,IAA2C;QAE3C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,MAAM,EACN,kBAAkB,kBAAkB,CAAC,OAAO,CAAC,UAAU,EACvD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,64 @@
1
+ export type AgentStatus = 'active' | 'paused' | 'revoked';
2
+ export type SpendPolicy = {
3
+ perTransactionLimit?: number;
4
+ dailyLimit?: number;
5
+ monthlyLimit?: number;
6
+ approvalRequiredAbove?: number;
7
+ mccAllowlist?: string[];
8
+ merchantAllowlist?: string[];
9
+ };
10
+ export type Agent = {
11
+ id: string;
12
+ name: string;
13
+ description?: string | null;
14
+ status: AgentStatus;
15
+ defaultCurrency: string;
16
+ spendPolicy: SpendPolicy;
17
+ createdAt: string;
18
+ updatedAt: string;
19
+ };
20
+ export type AgentCredential = {
21
+ id: string;
22
+ agentId: string;
23
+ scopes: string[];
24
+ secret: string;
25
+ };
26
+ export type AgentCredentialSummary = {
27
+ id: string;
28
+ name: string;
29
+ prefix: string;
30
+ scopes: string[];
31
+ createdAt: string;
32
+ revokedAt: string | null;
33
+ };
34
+ export type SpendAuthorizationStatus = 'pending_approval' | 'authorized' | 'captured' | 'released' | 'denied' | 'expired';
35
+ export type SpendAuthorization = {
36
+ id: string;
37
+ organizationId: string;
38
+ agentId: string;
39
+ merchantRef: string;
40
+ mcc?: string | null;
41
+ amount: number;
42
+ currency: string;
43
+ protocol: string;
44
+ status: SpendAuthorizationStatus;
45
+ reason?: string | null;
46
+ capturedAmount?: number | null;
47
+ expiresAt?: string | null;
48
+ createdAt: string;
49
+ };
50
+ export type Paginated<T> = {
51
+ data: T[];
52
+ pagination: {
53
+ limit: number;
54
+ offset: number;
55
+ count: number;
56
+ };
57
+ };
58
+ export type TokenResponse = {
59
+ access_token: string;
60
+ token_type: string;
61
+ expires_in: number;
62
+ scope: string;
63
+ };
64
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE1D,MAAM,MAAM,WAAW,GAAG;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAGF,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAChC,kBAAkB,GAClB,YAAY,GACZ,UAAU,GACV,UAAU,GACV,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,wBAAwB,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IACzB,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@curless/agentbank-sdk",
3
+ "version": "0.0.1",
4
+ "description": "Official SDK for agentbank — agent-commerce payments: OAuth, agent management, and the Pay spend-control plane.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": ["dist", "README.md"],
16
+ "scripts": {
17
+ "build": "tsc",
18
+ "typecheck": "tsc --noEmit",
19
+ "test": "vitest run",
20
+ "clean": "rm -rf dist",
21
+ "prepublishOnly": "npm run build"
22
+ },
23
+ "devDependencies": {
24
+ "@types/node": "^22.10.1",
25
+ "typescript": "^5.6.3",
26
+ "vitest": "^2.1.9"
27
+ },
28
+ "engines": {
29
+ "node": ">=18"
30
+ },
31
+ "keywords": ["agentbank", "curless", "agent", "payments", "sdk", "oauth", "pay"]
32
+ }