@auctra/sdk 0.1.2 → 0.2.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/CHANGELOG.md ADDED
@@ -0,0 +1,14 @@
1
+ # Changelog
2
+
3
+ ## 0.2.1
4
+
5
+ - Add complete response types for agents, delegations, action requests, policies, audit events, and API keys.
6
+ - Add `getDelegation`, `createPolicy`, and `listApiKeys`.
7
+ - Honor `Retry-After`, preserve caller cancellation, and validate client options.
8
+ - Correct the REST example to use the API's snake_case contract.
9
+ - Add package-level integration tests and npm provenance metadata.
10
+ - Ship tested ESM and CommonJS entry points.
11
+
12
+ ## 0.2.0
13
+
14
+ - Add bounded retries, request deadlines, idempotent evaluation, and structured API errors.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Auctra
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -16,6 +16,8 @@ Evaluate every agent action against delegated authority and org policies before
16
16
  npm install @auctra/sdk
17
17
  ```
18
18
 
19
+ Both ESM (`import`) and CommonJS (`require`) entry points are included.
20
+
19
21
  ## Quick start
20
22
 
21
23
  ```typescript
@@ -23,13 +25,18 @@ import { Auctra } from "@auctra/sdk";
23
25
 
24
26
  const auctra = new Auctra({
25
27
  apiKey: process.env.AUCTRA_API_KEY!,
28
+ timeoutMs: 10_000,
29
+ maxRetries: 2,
26
30
  });
27
31
 
28
- const decision = await auctra.evaluateAction({
29
- agentId: "your-agent-uuid",
30
- actionType: "send_payment",
31
- payload: { amount: 1200, currency: "USD" },
32
- });
32
+ const decision = await auctra.evaluateAction(
33
+ {
34
+ agentId: "your-agent-uuid",
35
+ actionType: "send_payment",
36
+ payload: { amount: 1200, currency: "USD" },
37
+ },
38
+ { idempotencyKey: crypto.randomUUID() },
39
+ );
33
40
 
34
41
  if (decision.decision === "allowed") {
35
42
  // proceed with action
@@ -50,34 +57,45 @@ if (decision.decision === "allowed") {
50
57
 
51
58
  ## API
52
59
 
53
- | Method | Description |
54
- |--------|-------------|
55
- | `evaluateAction(input)` | Check authority before an agent acts |
56
- | `listAgents()` | List registered agents |
57
- | `createAgent(input)` | Register a new agent |
58
- | `listDelegations()` | List authority delegations |
59
- | `createDelegation(input)` | Grant bounded authority |
60
- | `revokeDelegation(id)` | Revoke a delegation |
61
- | `listActionRequests()` | List recent evaluations |
62
- | `approveActionRequest(id)` | Approve pending action |
63
- | `rejectActionRequest(id)` | Reject pending action |
64
- | `escalateActionRequest(id)` | Escalate for review |
65
- | `listPolicies()` | List org policies |
66
- | `listAuditEvents()` | List audit ledger events |
60
+ | Method | Description |
61
+ | ------------------------------------------- | ------------------------------------------------- |
62
+ | `evaluateAction(input, options)` | Idempotently check authority before an agent acts |
63
+ | `listAgents()` | List registered agents |
64
+ | `createAgent(input)` | Register a new agent |
65
+ | `getAgent(id)` | Get one registered agent |
66
+ | `listDelegations()` | List authority delegations |
67
+ | `getDelegation(id)` | Get one authority delegation |
68
+ | `createDelegation(input)` | Grant bounded authority |
69
+ | `revokeDelegation(id)` | Revoke a delegation |
70
+ | `listActionRequests()` | List recent evaluations |
71
+ | `approveActionRequest(id, approverUserId)` | Approve as an accountable reviewer |
72
+ | `rejectActionRequest(id, approverUserId)` | Reject as an accountable reviewer |
73
+ | `escalateActionRequest(id, approverUserId)` | Escalate as an accountable reviewer |
74
+ | `listPolicies()` | List org policies |
75
+ | `createPolicy(input)` | Create an org policy |
76
+ | `listAuditEvents()` | List audit ledger events |
77
+ | `listApiKeys()` | List API key metadata |
67
78
 
68
79
  ## REST API (curl)
69
80
 
70
81
  ```bash
71
82
  curl -X POST https://console.auctra.tech/v1/action-requests/evaluate \
72
83
  -H "Authorization: Bearer YOUR_API_KEY" \
84
+ -H "Idempotency-Key: $(uuidgen)" \
73
85
  -H "Content-Type: application/json" \
74
86
  -d '{
75
- "agentId": "your-agent-uuid",
76
- "actionType": "send_payment",
87
+ "agent_id": "your-agent-uuid",
88
+ "action_type": "send_payment",
77
89
  "payload": { "amount": 100, "currency": "USD" }
78
90
  }'
79
91
  ```
80
92
 
93
+ The SDK applies bounded retries only to reads and idempotent evaluations. API failures throw
94
+ `AuctraApiError` with `status`, optional structured `details`, and the server `requestId`.
95
+
96
+ The machine-readable OpenAPI 3.1 contract is available at
97
+ `https://console.auctra.tech/v1/openapi.json`.
98
+
81
99
  ## License
82
100
 
83
101
  MIT
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Auctra = exports.AuctraApiError = exports.AUCTRA_SDK_VERSION = void 0;
4
+ exports.AUCTRA_SDK_VERSION = "0.2.1";
5
+ class AuctraApiError extends Error {
6
+ status;
7
+ code;
8
+ details;
9
+ requestId;
10
+ constructor(message, options) {
11
+ super(message);
12
+ this.name = "AuctraApiError";
13
+ this.status = options.status;
14
+ this.code = options.code;
15
+ this.details = options.details;
16
+ this.requestId = options.requestId;
17
+ }
18
+ }
19
+ exports.AuctraApiError = AuctraApiError;
20
+ function retryDelay(response, attempt) {
21
+ const retryAfter = response?.headers.get("retry-after");
22
+ if (retryAfter) {
23
+ const seconds = Number(retryAfter);
24
+ if (Number.isFinite(seconds))
25
+ return Math.min(30_000, Math.max(0, seconds * 1_000));
26
+ const dateDelay = Date.parse(retryAfter) - Date.now();
27
+ if (Number.isFinite(dateDelay))
28
+ return Math.min(30_000, Math.max(0, dateDelay));
29
+ }
30
+ return Math.min(5_000, 150 * 2 ** attempt);
31
+ }
32
+ function wait(ms, signal) {
33
+ if (signal?.aborted)
34
+ return Promise.reject(signal.reason);
35
+ return new Promise((resolve, reject) => {
36
+ const timeout = setTimeout(resolve, ms);
37
+ signal?.addEventListener("abort", () => {
38
+ clearTimeout(timeout);
39
+ reject(signal.reason);
40
+ }, { once: true });
41
+ });
42
+ }
43
+ class Auctra {
44
+ apiKey;
45
+ baseUrl;
46
+ timeoutMs;
47
+ maxRetries;
48
+ fetchImpl;
49
+ constructor(options) {
50
+ if (!options.apiKey.trim())
51
+ throw new Error("apiKey is required");
52
+ if (options.timeoutMs !== undefined && options.timeoutMs <= 0) {
53
+ throw new Error("timeoutMs must be greater than zero");
54
+ }
55
+ if (options.maxRetries !== undefined &&
56
+ (!Number.isInteger(options.maxRetries) || options.maxRetries < 0)) {
57
+ throw new Error("maxRetries must be a non-negative integer");
58
+ }
59
+ this.apiKey = options.apiKey;
60
+ this.baseUrl = (options.baseUrl ?? "https://console.auctra.tech").replace(/\/$/, "");
61
+ this.timeoutMs = options.timeoutMs ?? 10_000;
62
+ this.maxRetries = options.maxRetries ?? 2;
63
+ this.fetchImpl = options.fetch ?? globalThis.fetch;
64
+ if (!this.fetchImpl)
65
+ throw new Error("A fetch implementation is required");
66
+ }
67
+ async request(method, path, body, options = {}) {
68
+ const retryableRequest = method === "GET" || Boolean(options.idempotencyKey);
69
+ let lastError;
70
+ for (let attempt = 0; attempt <= this.maxRetries; attempt += 1) {
71
+ if (options.signal?.aborted)
72
+ throw options.signal.reason;
73
+ const timeoutSignal = AbortSignal.timeout(this.timeoutMs);
74
+ const signal = options.signal
75
+ ? AbortSignal.any([options.signal, timeoutSignal])
76
+ : timeoutSignal;
77
+ let response;
78
+ try {
79
+ response = await this.fetchImpl(`${this.baseUrl}${path}`, {
80
+ method,
81
+ signal,
82
+ headers: {
83
+ ...(body !== undefined ? { "content-type": "application/json" } : {}),
84
+ ...(options.idempotencyKey ? { "idempotency-key": options.idempotencyKey } : {}),
85
+ authorization: `Bearer ${this.apiKey}`,
86
+ "x-auctra-sdk-version": exports.AUCTRA_SDK_VERSION,
87
+ },
88
+ ...(body !== undefined ? { body: JSON.stringify(body) } : {}),
89
+ });
90
+ const data = (await response.json().catch(() => ({})));
91
+ if (response.ok)
92
+ return data;
93
+ if (retryableRequest &&
94
+ (response.status === 429 || response.status >= 500) &&
95
+ attempt < this.maxRetries) {
96
+ await wait(retryDelay(response, attempt), options.signal);
97
+ continue;
98
+ }
99
+ throw new AuctraApiError(typeof data.error === "string" ? data.error : `Auctra API error (${response.status})`, {
100
+ status: response.status,
101
+ code: typeof data.code === "string" ? data.code : undefined,
102
+ details: data.details,
103
+ requestId: response.headers.get("x-request-id") ?? undefined,
104
+ });
105
+ }
106
+ catch (error) {
107
+ lastError = error;
108
+ if (options.signal?.aborted)
109
+ throw options.signal.reason;
110
+ if (error instanceof AuctraApiError || !retryableRequest || attempt >= this.maxRetries) {
111
+ throw error;
112
+ }
113
+ await wait(retryDelay(response, attempt), options.signal);
114
+ }
115
+ }
116
+ throw lastError;
117
+ }
118
+ async evaluateAction(input, options = {}) {
119
+ const idempotencyKey = options.idempotencyKey ?? crypto.randomUUID();
120
+ return this.request("POST", "/v1/action-requests/evaluate", { agent_id: input.agentId, action_type: input.actionType, payload: input.payload ?? {} }, { ...options, idempotencyKey });
121
+ }
122
+ async listAgents() {
123
+ return this.request("GET", "/v1/agents");
124
+ }
125
+ async getAgent(agentId) {
126
+ return this.request("GET", `/v1/agents/${encodeURIComponent(agentId)}`);
127
+ }
128
+ async createAgent(input) {
129
+ return this.request("POST", "/v1/agents", {
130
+ name: input.name,
131
+ model_provider: input.modelProvider,
132
+ model_name: input.modelName,
133
+ description: input.description,
134
+ environment: input.environment,
135
+ authority_level: input.authorityLevel,
136
+ sponsor_user_id: input.sponsorUserId,
137
+ });
138
+ }
139
+ async listDelegations() {
140
+ return this.request("GET", "/v1/delegations");
141
+ }
142
+ async getDelegation(delegationId) {
143
+ return this.request("GET", `/v1/delegations/${encodeURIComponent(delegationId)}`);
144
+ }
145
+ async createDelegation(input) {
146
+ return this.request("POST", "/v1/delegations", {
147
+ agent_id: input.agentId,
148
+ action_types: input.actionTypes,
149
+ valid_until: input.validUntil,
150
+ max_amount: input.maxAmount,
151
+ max_count: input.maxCount,
152
+ environment: input.environment,
153
+ currency: input.currency,
154
+ delegator_user_id: input.delegatorUserId,
155
+ });
156
+ }
157
+ async revokeDelegation(delegationId) {
158
+ return this.request("POST", `/v1/delegations/${encodeURIComponent(delegationId)}/revoke`, {});
159
+ }
160
+ async listActionRequests() {
161
+ return this.request("GET", "/v1/action-requests");
162
+ }
163
+ async approveActionRequest(actionRequestId, approverUserId, reason) {
164
+ return this.resolveActionRequest(actionRequestId, "approve", approverUserId, reason);
165
+ }
166
+ async rejectActionRequest(actionRequestId, approverUserId, reason) {
167
+ return this.resolveActionRequest(actionRequestId, "reject", approverUserId, reason);
168
+ }
169
+ async escalateActionRequest(actionRequestId, approverUserId, reason) {
170
+ return this.resolveActionRequest(actionRequestId, "escalate", approverUserId, reason);
171
+ }
172
+ async resolveActionRequest(actionRequestId, action, approverUserId, reason) {
173
+ return this.request("POST", `/v1/action-requests/${encodeURIComponent(actionRequestId)}/${action}`, { reason, approver_user_id: approverUserId });
174
+ }
175
+ async listPolicies() {
176
+ return this.request("GET", "/v1/policies");
177
+ }
178
+ async createPolicy(input) {
179
+ return this.request("POST", "/v1/policies", {
180
+ name: input.name,
181
+ description: input.description,
182
+ policy_type: input.policyType,
183
+ status: input.status,
184
+ priority: input.priority,
185
+ action_type: input.actionType,
186
+ amount_greater_than: input.amountGreaterThan,
187
+ resource_sensitivity: input.resourceSensitivity,
188
+ external_recipient: input.externalRecipient,
189
+ environment: input.environment,
190
+ decision: input.decision,
191
+ approver_role: input.approverRole,
192
+ });
193
+ }
194
+ async listAuditEvents() {
195
+ return this.request("GET", "/v1/audit-events");
196
+ }
197
+ async listApiKeys() {
198
+ return this.request("GET", "/v1/api-keys");
199
+ }
200
+ }
201
+ exports.Auctra = Auctra;
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }
@@ -0,0 +1,234 @@
1
+ export declare const AUCTRA_SDK_VERSION = "0.2.1";
2
+ export type AgentEnvironment = "dev" | "staging" | "production";
3
+ export type AuthorityLevel = "low" | "medium" | "high" | "critical";
4
+ export type Decision = "allowed" | "blocked" | "require_approval";
5
+ export type PolicyType = "spending" | "data_access" | "communication" | "approval";
6
+ export type EvaluateActionInput = {
7
+ agentId: string;
8
+ actionType: string;
9
+ payload?: Record<string, unknown>;
10
+ };
11
+ export type EvaluateActionResponse = {
12
+ decision: Decision;
13
+ risk_score: number;
14
+ reason: string;
15
+ delegation_id: string | null;
16
+ delegator: string | null;
17
+ sponsor: string;
18
+ matched_policies: string[];
19
+ action_request_id: string;
20
+ };
21
+ export type RequestOptions = {
22
+ idempotencyKey?: string;
23
+ signal?: AbortSignal;
24
+ };
25
+ export type AuctraClientOptions = {
26
+ apiKey: string;
27
+ baseUrl?: string;
28
+ timeoutMs?: number;
29
+ maxRetries?: number;
30
+ fetch?: typeof fetch;
31
+ };
32
+ export type Agent = {
33
+ id: string;
34
+ identity_id: string;
35
+ name: string;
36
+ description: string | null;
37
+ model_provider: "openai" | "anthropic" | "gemini" | "local";
38
+ model_name: string;
39
+ environment: AgentEnvironment;
40
+ authority_level: AuthorityLevel;
41
+ status: "active" | "suspended" | "restricted" | "compromised";
42
+ trust_rating: number;
43
+ sponsor: {
44
+ id: string;
45
+ full_name: string;
46
+ email: string;
47
+ };
48
+ created_at: string;
49
+ };
50
+ export type CreateAgentInput = {
51
+ name: string;
52
+ modelProvider: Agent["model_provider"];
53
+ modelName: string;
54
+ description?: string;
55
+ environment?: AgentEnvironment;
56
+ authorityLevel?: AuthorityLevel;
57
+ sponsorUserId?: string;
58
+ };
59
+ export type Delegation = {
60
+ id: string;
61
+ agent: {
62
+ id: string;
63
+ name: string;
64
+ };
65
+ delegator: {
66
+ id: string;
67
+ full_name: string;
68
+ email: string;
69
+ };
70
+ scope: {
71
+ action_types: string[];
72
+ };
73
+ limits: {
74
+ max_amount?: number;
75
+ max_count?: number;
76
+ currency?: string;
77
+ environment?: AgentEnvironment;
78
+ };
79
+ valid_from: string;
80
+ valid_until: string;
81
+ status: "active" | "revoked" | "expired";
82
+ is_active: boolean;
83
+ created_at: string;
84
+ };
85
+ export type CreateDelegationInput = {
86
+ agentId: string;
87
+ actionTypes: string[];
88
+ validUntil: string;
89
+ maxAmount?: number;
90
+ maxCount?: number;
91
+ environment?: AgentEnvironment;
92
+ currency?: string;
93
+ delegatorUserId?: string;
94
+ };
95
+ export type ActionRequest = {
96
+ id: string;
97
+ agent_name: string;
98
+ action_type: string;
99
+ action_summary: string;
100
+ payload: Record<string, unknown>;
101
+ decision: string;
102
+ decision_reason: string | null;
103
+ risk_score: number;
104
+ delegation_id: string | null;
105
+ policy_ids: string[];
106
+ pending_approval_id: string | null;
107
+ created_at: string;
108
+ decided_at: string | null;
109
+ };
110
+ export type Policy = {
111
+ id: string;
112
+ name: string;
113
+ description: string | null;
114
+ policy_type: PolicyType;
115
+ status: "active" | "draft" | "archived";
116
+ priority: number;
117
+ conditions: Record<string, unknown>;
118
+ actions: Record<string, unknown>;
119
+ created_at: string;
120
+ };
121
+ export type CreatePolicyInput = {
122
+ name: string;
123
+ description?: string;
124
+ policyType: PolicyType;
125
+ status?: "active" | "draft";
126
+ priority?: number;
127
+ actionType?: string;
128
+ amountGreaterThan?: number;
129
+ resourceSensitivity?: "public" | "internal" | "confidential" | "pii";
130
+ externalRecipient?: boolean;
131
+ environment?: AgentEnvironment;
132
+ decision: "block" | "require_approval";
133
+ approverRole?: "owner" | "admin" | "reviewer";
134
+ };
135
+ export type AuditEvent = {
136
+ id: string;
137
+ event_type: string;
138
+ event_summary: string;
139
+ decision: string | null;
140
+ decision_reason: string | null;
141
+ authority_valid_at_action: boolean | null;
142
+ actor_name: string;
143
+ approver_name: string | null;
144
+ policy_applied: string | null;
145
+ delegation_id: string | null;
146
+ hash: string | null;
147
+ previous_hash: string | null;
148
+ created_at: string;
149
+ };
150
+ export type ApiKeySummary = {
151
+ id: string;
152
+ name: string;
153
+ key_prefix: string;
154
+ environment: "development" | "production";
155
+ permissions: string[];
156
+ status: "active" | "revoked";
157
+ last_used_at: string | null;
158
+ created_at: string;
159
+ };
160
+ export declare class AuctraApiError extends Error {
161
+ readonly status: number;
162
+ readonly code?: string;
163
+ readonly details?: unknown;
164
+ readonly requestId?: string;
165
+ constructor(message: string, options: {
166
+ status: number;
167
+ code?: string;
168
+ details?: unknown;
169
+ requestId?: string;
170
+ });
171
+ }
172
+ export declare class Auctra {
173
+ private readonly apiKey;
174
+ private readonly baseUrl;
175
+ private readonly timeoutMs;
176
+ private readonly maxRetries;
177
+ private readonly fetchImpl;
178
+ constructor(options: AuctraClientOptions);
179
+ private request;
180
+ evaluateAction(input: EvaluateActionInput, options?: RequestOptions): Promise<EvaluateActionResponse>;
181
+ listAgents(): Promise<{
182
+ agents: Agent[];
183
+ }>;
184
+ getAgent(agentId: string): Promise<{
185
+ agent: Agent;
186
+ }>;
187
+ createAgent(input: CreateAgentInput): Promise<{
188
+ agent: Agent;
189
+ }>;
190
+ listDelegations(): Promise<{
191
+ delegations: Delegation[];
192
+ }>;
193
+ getDelegation(delegationId: string): Promise<{
194
+ delegation: Delegation;
195
+ }>;
196
+ createDelegation(input: CreateDelegationInput): Promise<{
197
+ delegation: Delegation;
198
+ }>;
199
+ revokeDelegation(delegationId: string): Promise<{
200
+ ok: true;
201
+ }>;
202
+ listActionRequests(): Promise<{
203
+ action_requests: ActionRequest[];
204
+ }>;
205
+ approveActionRequest(actionRequestId: string, approverUserId: string, reason?: string): Promise<{
206
+ ok: true;
207
+ decision: string;
208
+ reason: string;
209
+ }>;
210
+ rejectActionRequest(actionRequestId: string, approverUserId: string, reason?: string): Promise<{
211
+ ok: true;
212
+ decision: string;
213
+ reason: string;
214
+ }>;
215
+ escalateActionRequest(actionRequestId: string, approverUserId: string, reason?: string): Promise<{
216
+ ok: true;
217
+ decision: string;
218
+ reason: string;
219
+ }>;
220
+ private resolveActionRequest;
221
+ listPolicies(): Promise<{
222
+ policies: Policy[];
223
+ }>;
224
+ createPolicy(input: CreatePolicyInput): Promise<{
225
+ policy: Pick<Policy, "id" | "name" | "status" | "created_at">;
226
+ }>;
227
+ listAuditEvents(): Promise<{
228
+ audit_events: AuditEvent[];
229
+ }>;
230
+ listApiKeys(): Promise<{
231
+ api_keys: ApiKeySummary[];
232
+ }>;
233
+ }
234
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}