@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 +61 -0
- package/dist/client.d.ts +36 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +94 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +7 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +16 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/agents.d.ts +38 -0
- package/dist/resources/agents.d.ts.map +1 -0
- package/dist/resources/agents.js +34 -0
- package/dist/resources/agents.js.map +1 -0
- package/dist/resources/oauth.d.ts +12 -0
- package/dist/resources/oauth.d.ts.map +1 -0
- package/dist/resources/oauth.js +27 -0
- package/dist/resources/oauth.js.map +1 -0
- package/dist/resources/pay.d.ts +45 -0
- package/dist/resources/pay.d.ts.map +1 -0
- package/dist/resources/pay.js +45 -0
- package/dist/resources/pay.js.map +1 -0
- package/dist/types.d.ts +64 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +32 -0
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).
|
package/dist/client.d.ts
ADDED
|
@@ -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":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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 @@
|
|
|
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
|
+
}
|