@blacklake-systems/surface-sdk 0.1.5

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 BlackLake Systems Ltd.
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 ADDED
@@ -0,0 +1,177 @@
1
+ # @blacklake-systems/sdk
2
+
3
+ TypeScript SDK for [BlackLake Surface](https://blacklake.systems/product) — integrate governance directly into custom agent code.
4
+
5
+ > **Note:** If you are routing tool calls through the MCP proxy, you do not need this SDK. The proxy handles governance automatically. Use the SDK when you want to call the governance API directly from your own code.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npm install @blacklake-systems/sdk
11
+ ```
12
+
13
+ ## Quick Start
14
+
15
+ ### Local Surface (self-hosted)
16
+
17
+ Run `npx @blacklake-systems/cli` first to start Surface on your machine, then point the SDK at it:
18
+
19
+ ```typescript
20
+ import { BlackLake } from '@blacklake-systems/sdk';
21
+
22
+ const bl = new BlackLake({
23
+ baseUrl: 'http://localhost:3100',
24
+ apiKey: process.env.BLACKLAKE_API_KEY!,
25
+ });
26
+
27
+ // Evaluate governance before executing a tool call
28
+ const result = await bl.govern({
29
+ agent: 'expense-bot',
30
+ tool: 'payments.send',
31
+ action: { amount: 4200, vendor: 'Acme Corp' },
32
+ });
33
+
34
+ if (result.decision === 'allow') {
35
+ // proceed with tool call
36
+ }
37
+ ```
38
+
39
+ ### Cloud Surface
40
+
41
+ Sign up at [console.blacklake.systems](https://console.blacklake.systems) to get your API key:
42
+
43
+ ```typescript
44
+ import { BlackLake } from '@blacklake-systems/sdk';
45
+
46
+ const bl = new BlackLake({
47
+ apiKey: process.env.BLACKLAKE_API_KEY!,
48
+ // baseUrl defaults to https://api.blacklake.systems
49
+ });
50
+ ```
51
+
52
+ ## API Reference
53
+
54
+ ### `new BlackLake(config)`
55
+
56
+ | Option | Type | Default | Description |
57
+ |--------|------|---------|-------------|
58
+ | `apiKey` | `string` | — | Your BlackLake API key (required) |
59
+ | `baseUrl` | `string` | `https://api.blacklake.systems` | API base URL. Override only for local development (e.g. `http://localhost:3100`). |
60
+
61
+ ### `bl.govern(request)`
62
+
63
+ Evaluate whether an agent is allowed to invoke a tool.
64
+
65
+ ```typescript
66
+ const result = await bl.govern({
67
+ agent: 'expense-bot', // agent name
68
+ tool: 'payments.send', // tool name
69
+ action: { amount: 4200 }, // optional: tool invocation payload
70
+ context: { ip: '10.0.0.1' } // optional: request metadata
71
+ });
72
+
73
+ // result.decision: 'allow' | 'deny' | 'approval_required' | 'default_deny'
74
+ // result.evaluation_id: string
75
+ // result.policy_id: string | null
76
+ // result.reason: string
77
+ // result.evaluated_at: string (ISO 8601)
78
+ // result.approval_id: string | undefined (set when decision === 'approval_required')
79
+ ```
80
+
81
+ ### `bl.agents`
82
+
83
+ ```typescript
84
+ await bl.agents.create({ name, environment, risk_classification, description?, approval_mode? });
85
+ await bl.agents.list({ environment?, status? });
86
+ await bl.agents.get(id);
87
+ await bl.agents.update(id, { name?, description?, environment?, risk_classification?, status?, approval_mode? });
88
+ await bl.agents.suspend(id);
89
+ await bl.agents.activate(id);
90
+ await bl.agents.bindTool(agentId, toolId);
91
+ await bl.agents.listTools(agentId); // returns ToolBinding[] — each item has { binding_id, binding_created_at, tool: Tool }
92
+ await bl.agents.unbindTool(agentId, toolId);
93
+ ```
94
+
95
+ ### `bl.tools`
96
+
97
+ ```typescript
98
+ await bl.tools.create({ name, risk_classification, description? });
99
+ await bl.tools.list();
100
+ await bl.tools.get(id);
101
+ ```
102
+
103
+ ### `bl.policies`
104
+
105
+ ```typescript
106
+ await bl.policies.create({ name, priority, outcome, agent_selector?, tool_selector?, enabled? });
107
+ await bl.policies.list();
108
+ await bl.policies.get(id);
109
+ await bl.policies.update(id, { name?, priority?, outcome?, agent_selector?, tool_selector?, enabled? });
110
+ await bl.policies.delete(id);
111
+ ```
112
+
113
+ ### `bl.evaluations`
114
+
115
+ ```typescript
116
+ await bl.evaluations.list({ agent_id?, tool_id?, outcome?, limit?, offset? });
117
+ await bl.evaluations.get(id);
118
+ ```
119
+
120
+ ### `bl.organisation`
121
+
122
+ ```typescript
123
+ await bl.organisation.get(); // fetch the current organisation (derived from the API key)
124
+ await bl.organisation.delete(confirmation); // permanently delete the organisation; pass the organisation's exact name as confirmation
125
+ ```
126
+
127
+ ### `bl.apiKeys`
128
+
129
+ ```typescript
130
+ await bl.apiKeys.list(); // returns { keys: ApiKey[] } — each item has { id, name, key_suffix, created_at, revoked_at }
131
+ await bl.apiKeys.create('prod-key'); // returns { id, name, key, created_at, warning } — the raw key is shown ONCE; store it securely
132
+ await bl.apiKeys.revoke(id); // sets revoked_at on the key; the API rejects revoking the key in use
133
+ ```
134
+
135
+ ### `bl.approvals`
136
+
137
+ ```typescript
138
+ await bl.approvals.list({ status?, agent_id?, tool_id?, limit?, offset? }); // returns PaginatedResponse<Approval>
139
+ await bl.approvals.get(id);
140
+ await bl.approvals.status(id); // returns ApprovalStatusResponse — lightweight poll target
141
+ await bl.approvals.approve(id, { decided_by, reason });
142
+ await bl.approvals.reject(id, { decided_by, reason });
143
+ await bl.approvals.wait(id, { interval?, timeout? }); // polls status until approved/rejected/expired; throws BlackLakeError on timeout
144
+ ```
145
+
146
+ `wait()` defaults to polling every 2 000 ms with a 5-minute total timeout. Returns the fully-populated `Approval` once the status leaves `'pending'`.
147
+
148
+ ### `bl.webhooks`
149
+
150
+ ```typescript
151
+ await bl.webhooks.list(); // returns { webhooks: Webhook[] }
152
+ await bl.webhooks.create({ url, events, enabled? }); // returns CreatedWebhook — the raw signing secret is shown ONCE; store it securely
153
+ await bl.webhooks.get(id);
154
+ await bl.webhooks.update(id, { url?, events?, enabled? });
155
+ await bl.webhooks.delete(id);
156
+ await bl.webhooks.listDeliveries(id, { limit?, offset? }); // returns PaginatedResponse<WebhookDelivery>
157
+ ```
158
+
159
+ Webhooks fire on `'approval.created'`, `'approval.approved'`, and `'approval.rejected'`. Each request is signed with HMAC-SHA256; the signature is sent in the `X-BlackLake-Signature` header.
160
+
161
+ ### Error Handling
162
+
163
+ ```typescript
164
+ import { BlackLake, BlackLakeError } from '@blacklake-systems/sdk';
165
+
166
+ try {
167
+ await bl.govern({ agent: 'unknown', tool: 'unknown' });
168
+ } catch (err) {
169
+ if (err instanceof BlackLakeError) {
170
+ console.error(err.status, err.code, err.message);
171
+ }
172
+ }
173
+ ```
174
+
175
+ ## Documentation
176
+
177
+ Full documentation at [blacklake.systems/docs](https://blacklake.systems/docs).
@@ -0,0 +1,326 @@
1
+ export interface Organisation {
2
+ id: string;
3
+ name: string;
4
+ contact_email: string | null;
5
+ created_at: string;
6
+ }
7
+ export interface Agent {
8
+ id: string;
9
+ organisation_id: string;
10
+ name: string;
11
+ description: string | null;
12
+ environment: 'development' | 'staging' | 'production';
13
+ risk_classification: 'low' | 'medium' | 'high' | 'critical';
14
+ status: 'active' | 'suspended' | 'disabled';
15
+ approval_mode: 'auto_approve' | 'require_approval' | 'block';
16
+ created_at: string;
17
+ updated_at: string;
18
+ }
19
+ export interface Tool {
20
+ id: string;
21
+ organisation_id: string;
22
+ name: string;
23
+ description: string | null;
24
+ risk_classification: 'low' | 'medium' | 'high' | 'critical';
25
+ created_at: string;
26
+ }
27
+ export interface Policy {
28
+ id: string;
29
+ organisation_id: string;
30
+ name: string;
31
+ priority: number;
32
+ agent_selector: Record<string, unknown>;
33
+ tool_selector: Record<string, unknown>;
34
+ outcome: 'allow' | 'deny' | 'approval_required';
35
+ enabled: boolean;
36
+ created_at: string;
37
+ updated_at: string;
38
+ }
39
+ export interface GovernRequest {
40
+ agent: string;
41
+ tool: string;
42
+ action?: Record<string, unknown>;
43
+ context?: Record<string, unknown>;
44
+ }
45
+ export interface GovernResponse {
46
+ decision: 'allow' | 'deny' | 'approval_required' | 'default_deny';
47
+ evaluation_id: string;
48
+ policy_id: string | null;
49
+ reason: string;
50
+ evaluated_at: string;
51
+ approval_id?: string;
52
+ }
53
+ export interface Evaluation {
54
+ id: string;
55
+ organisation_id: string;
56
+ agent_id: string;
57
+ tool_id: string;
58
+ policy_id: string | null;
59
+ action_payload: Record<string, unknown> | null;
60
+ outcome: 'allow' | 'deny' | 'approval_required' | 'default_deny';
61
+ evaluated_at: string;
62
+ request_context: Record<string, unknown> | null;
63
+ }
64
+ export interface PaginatedResponse<T> {
65
+ data: T[];
66
+ total: number;
67
+ }
68
+ export interface ToolBinding {
69
+ binding_id: string;
70
+ binding_created_at: string;
71
+ tool: Tool;
72
+ }
73
+ export interface ApiKey {
74
+ id: string;
75
+ name: string;
76
+ key_suffix: string | null;
77
+ created_at: string;
78
+ revoked_at: string | null;
79
+ }
80
+ export interface CreatedApiKey {
81
+ id: string;
82
+ name: string;
83
+ key: string;
84
+ created_at: string;
85
+ warning: string;
86
+ }
87
+ export type ApprovalStatus = 'pending' | 'approved' | 'rejected' | 'expired';
88
+ export interface Approval {
89
+ id: string;
90
+ organisation_id: string;
91
+ evaluation_id: string;
92
+ agent_id: string;
93
+ tool_id: string;
94
+ policy_id: string | null;
95
+ action_payload: Record<string, unknown> | null;
96
+ request_context: Record<string, unknown> | null;
97
+ status: ApprovalStatus;
98
+ decided_by: string | null;
99
+ decision_reason: string | null;
100
+ decided_at: string | null;
101
+ created_at: string;
102
+ expires_at: string;
103
+ }
104
+ export interface ApprovalStatusResponse {
105
+ status: ApprovalStatus;
106
+ decided_at: string | null;
107
+ expires_at: string;
108
+ }
109
+ export type WebhookEvent = 'approval.created' | 'approval.approved' | 'approval.rejected';
110
+ export interface Webhook {
111
+ id: string;
112
+ organisation_id: string;
113
+ url: string;
114
+ secret_suffix: string | null;
115
+ events: WebhookEvent[];
116
+ enabled: boolean;
117
+ created_at: string;
118
+ }
119
+ export interface CreatedWebhook {
120
+ id: string;
121
+ url: string;
122
+ secret: string;
123
+ secret_suffix: string;
124
+ events: WebhookEvent[];
125
+ enabled: boolean;
126
+ created_at: string;
127
+ warning: string;
128
+ }
129
+ export interface WebhookDelivery {
130
+ id: string;
131
+ webhook_id: string;
132
+ event: WebhookEvent;
133
+ payload: Record<string, unknown>;
134
+ status_code: number | null;
135
+ response_body: string | null;
136
+ error: string | null;
137
+ delivered_at: string;
138
+ duration_ms: number | null;
139
+ }
140
+ export declare class BlackLakeError extends Error {
141
+ readonly status: number;
142
+ readonly code: string;
143
+ constructor(status: number, code: string, message: string);
144
+ }
145
+ export interface BlackLakeConfig {
146
+ apiKey: string;
147
+ baseUrl?: string;
148
+ }
149
+ declare class AgentsResource {
150
+ private client;
151
+ constructor(client: BlackLakeClient);
152
+ create(data: {
153
+ name: string;
154
+ description?: string;
155
+ environment: Agent['environment'];
156
+ risk_classification: Agent['risk_classification'];
157
+ approval_mode?: Agent['approval_mode'];
158
+ }): Promise<Agent>;
159
+ list(params?: {
160
+ environment?: string;
161
+ status?: string;
162
+ }): Promise<Agent[]>;
163
+ get(id: string): Promise<Agent>;
164
+ update(id: string, data: Partial<Pick<Agent, 'name' | 'description' | 'environment' | 'risk_classification' | 'status' | 'approval_mode'>>): Promise<Agent>;
165
+ suspend(id: string): Promise<Agent>;
166
+ activate(id: string): Promise<Agent>;
167
+ bindTool(agentId: string, toolId: string): Promise<{
168
+ id: string;
169
+ agent_id: string;
170
+ tool_id: string;
171
+ created_at: string;
172
+ }>;
173
+ listTools(agentId: string): Promise<ToolBinding[]>;
174
+ unbindTool(agentId: string, toolId: string): Promise<void>;
175
+ }
176
+ declare class ToolsResource {
177
+ private client;
178
+ constructor(client: BlackLakeClient);
179
+ create(data: {
180
+ name: string;
181
+ description?: string;
182
+ risk_classification: Tool['risk_classification'];
183
+ }): Promise<Tool>;
184
+ list(): Promise<Tool[]>;
185
+ get(id: string): Promise<Tool>;
186
+ }
187
+ declare class PoliciesResource {
188
+ private client;
189
+ constructor(client: BlackLakeClient);
190
+ create(data: {
191
+ name: string;
192
+ priority: number;
193
+ agent_selector?: Record<string, unknown>;
194
+ tool_selector?: Record<string, unknown>;
195
+ outcome: Policy['outcome'];
196
+ enabled?: boolean;
197
+ }): Promise<Policy>;
198
+ list(): Promise<Policy[]>;
199
+ get(id: string): Promise<Policy>;
200
+ update(id: string, data: Partial<Pick<Policy, 'name' | 'priority' | 'agent_selector' | 'tool_selector' | 'outcome' | 'enabled'>>): Promise<Policy>;
201
+ delete(id: string): Promise<void>;
202
+ }
203
+ declare class EvaluationsResource {
204
+ private client;
205
+ constructor(client: BlackLakeClient);
206
+ list(params?: {
207
+ agent_id?: string;
208
+ tool_id?: string;
209
+ outcome?: string;
210
+ limit?: number;
211
+ offset?: number;
212
+ }): Promise<PaginatedResponse<Evaluation>>;
213
+ get(id: string): Promise<Evaluation>;
214
+ }
215
+ declare class OrganisationResource {
216
+ private client;
217
+ constructor(client: BlackLakeClient);
218
+ /** Fetch the current organisation (derived from the API key). */
219
+ get(): Promise<Organisation>;
220
+ /**
221
+ * Permanently delete the organisation and all associated data.
222
+ *
223
+ * This deletes agents, tools, policies, bindings, the audit log, and all API keys.
224
+ * The deletion is irreversible. The caller must pass the organisation's exact
225
+ * name as `confirmation` — any other value will be rejected.
226
+ */
227
+ delete(confirmation: string): Promise<void>;
228
+ }
229
+ declare class ApiKeysResource {
230
+ private client;
231
+ constructor(client: BlackLakeClient);
232
+ /** List all API keys for the current organisation (active and revoked). */
233
+ list(): Promise<{
234
+ keys: ApiKey[];
235
+ }>;
236
+ /**
237
+ * Generate a new API key. The raw key is returned ONCE in the `key` field
238
+ * and cannot be retrieved again. Store it securely.
239
+ */
240
+ create(name: string): Promise<CreatedApiKey>;
241
+ /**
242
+ * Revoke an API key by its id. Returns void on success. The API rejects
243
+ * attempts to revoke the key currently being used to make the request.
244
+ */
245
+ revoke(id: string): Promise<void>;
246
+ }
247
+ declare class ApprovalsResource {
248
+ private client;
249
+ constructor(client: BlackLakeClient);
250
+ list(params?: {
251
+ status?: ApprovalStatus;
252
+ agent_id?: string;
253
+ tool_id?: string;
254
+ limit?: number;
255
+ offset?: number;
256
+ }): Promise<PaginatedResponse<Approval>>;
257
+ get(id: string): Promise<Approval>;
258
+ status(id: string): Promise<ApprovalStatusResponse>;
259
+ approve(id: string, args: {
260
+ decided_by: string;
261
+ reason: string;
262
+ }): Promise<Approval>;
263
+ reject(id: string, args: {
264
+ decided_by: string;
265
+ reason: string;
266
+ }): Promise<Approval>;
267
+ /**
268
+ * Poll an approval until it is resolved (approved, rejected, or expired).
269
+ *
270
+ * Polls /v1/approvals/:id/status at `interval` ms (default 2000). Throws if
271
+ * the overall wait exceeds `timeout` ms (default 5 minutes). Returns the
272
+ * fully-populated Approval object once it resolves.
273
+ *
274
+ * @example
275
+ * const result = await bl.approvals.wait(approvalId);
276
+ * if (result.status === 'approved') { ... }
277
+ */
278
+ wait(id: string, options?: {
279
+ interval?: number;
280
+ timeout?: number;
281
+ }): Promise<Approval>;
282
+ }
283
+ declare class WebhooksResource {
284
+ private client;
285
+ constructor(client: BlackLakeClient);
286
+ list(): Promise<{
287
+ webhooks: Webhook[];
288
+ }>;
289
+ create(args: {
290
+ url: string;
291
+ events: WebhookEvent[];
292
+ enabled?: boolean;
293
+ }): Promise<CreatedWebhook>;
294
+ get(id: string): Promise<Webhook>;
295
+ update(id: string, patch: Partial<{
296
+ url: string;
297
+ events: WebhookEvent[];
298
+ enabled: boolean;
299
+ }>): Promise<Webhook>;
300
+ delete(id: string): Promise<void>;
301
+ listDeliveries(id: string, params?: {
302
+ limit?: number;
303
+ offset?: number;
304
+ }): Promise<PaginatedResponse<WebhookDelivery>>;
305
+ }
306
+ declare class BlackLakeClient {
307
+ private baseUrl;
308
+ private apiKey;
309
+ constructor(config: BlackLakeConfig);
310
+ request<T>(method: string, path: string, body?: unknown): Promise<T>;
311
+ }
312
+ export declare class BlackLake {
313
+ private client;
314
+ readonly agents: AgentsResource;
315
+ readonly tools: ToolsResource;
316
+ readonly policies: PoliciesResource;
317
+ readonly evaluations: EvaluationsResource;
318
+ readonly organisation: OrganisationResource;
319
+ readonly apiKeys: ApiKeysResource;
320
+ readonly approvals: ApprovalsResource;
321
+ readonly webhooks: WebhooksResource;
322
+ constructor(config: BlackLakeConfig);
323
+ govern(request: GovernRequest): Promise<GovernResponse>;
324
+ }
325
+ export {};
326
+ //# 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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"}
package/dist/index.js ADDED
@@ -0,0 +1,305 @@
1
+ // Error types
2
+ const DOCS_URL = 'https://blacklake.systems/docs';
3
+ export class BlackLakeError extends Error {
4
+ status;
5
+ code;
6
+ constructor(status, code, message) {
7
+ super(`${message} — Need help? ${DOCS_URL}`);
8
+ this.status = status;
9
+ this.code = code;
10
+ this.name = 'BlackLakeError';
11
+ }
12
+ }
13
+ // Resource classes for namespaced methods
14
+ class AgentsResource {
15
+ client;
16
+ constructor(client) {
17
+ this.client = client;
18
+ }
19
+ async create(data) {
20
+ return this.client.request('POST', '/v1/agents', data);
21
+ }
22
+ async list(params) {
23
+ const query = new URLSearchParams();
24
+ if (params?.environment)
25
+ query.set('environment', params.environment);
26
+ if (params?.status)
27
+ query.set('status', params.status);
28
+ const qs = query.toString();
29
+ return this.client.request('GET', `/v1/agents${qs ? `?${qs}` : ''}`);
30
+ }
31
+ async get(id) {
32
+ return this.client.request('GET', `/v1/agents/${id}`);
33
+ }
34
+ async update(id, data) {
35
+ return this.client.request('PATCH', `/v1/agents/${id}`, data);
36
+ }
37
+ async suspend(id) {
38
+ return this.client.request('POST', `/v1/agents/${id}/suspend`);
39
+ }
40
+ async activate(id) {
41
+ return this.client.request('POST', `/v1/agents/${id}/activate`);
42
+ }
43
+ async bindTool(agentId, toolId) {
44
+ return this.client.request('POST', `/v1/agents/${agentId}/tools`, { tool_id: toolId });
45
+ }
46
+ async listTools(agentId) {
47
+ return this.client.request('GET', `/v1/agents/${agentId}/tools`);
48
+ }
49
+ async unbindTool(agentId, toolId) {
50
+ await this.client.request('DELETE', `/v1/agents/${agentId}/tools/${toolId}`);
51
+ }
52
+ }
53
+ class ToolsResource {
54
+ client;
55
+ constructor(client) {
56
+ this.client = client;
57
+ }
58
+ async create(data) {
59
+ return this.client.request('POST', '/v1/tools', data);
60
+ }
61
+ async list() {
62
+ return this.client.request('GET', '/v1/tools');
63
+ }
64
+ async get(id) {
65
+ return this.client.request('GET', `/v1/tools/${id}`);
66
+ }
67
+ }
68
+ class PoliciesResource {
69
+ client;
70
+ constructor(client) {
71
+ this.client = client;
72
+ }
73
+ async create(data) {
74
+ return this.client.request('POST', '/v1/policies', data);
75
+ }
76
+ async list() {
77
+ return this.client.request('GET', '/v1/policies');
78
+ }
79
+ async get(id) {
80
+ return this.client.request('GET', `/v1/policies/${id}`);
81
+ }
82
+ async update(id, data) {
83
+ return this.client.request('PATCH', `/v1/policies/${id}`, data);
84
+ }
85
+ async delete(id) {
86
+ await this.client.request('DELETE', `/v1/policies/${id}`);
87
+ }
88
+ }
89
+ class EvaluationsResource {
90
+ client;
91
+ constructor(client) {
92
+ this.client = client;
93
+ }
94
+ async list(params) {
95
+ const query = new URLSearchParams();
96
+ if (params?.agent_id)
97
+ query.set('agent_id', params.agent_id);
98
+ if (params?.tool_id)
99
+ query.set('tool_id', params.tool_id);
100
+ if (params?.outcome)
101
+ query.set('outcome', params.outcome);
102
+ if (params?.limit)
103
+ query.set('limit', String(params.limit));
104
+ if (params?.offset)
105
+ query.set('offset', String(params.offset));
106
+ const qs = query.toString();
107
+ return this.client.request('GET', `/v1/evaluations${qs ? `?${qs}` : ''}`);
108
+ }
109
+ async get(id) {
110
+ return this.client.request('GET', `/v1/evaluations/${id}`);
111
+ }
112
+ }
113
+ class OrganisationResource {
114
+ client;
115
+ constructor(client) {
116
+ this.client = client;
117
+ }
118
+ /** Fetch the current organisation (derived from the API key). */
119
+ async get() {
120
+ return this.client.request('GET', '/v1/organisation');
121
+ }
122
+ /**
123
+ * Permanently delete the organisation and all associated data.
124
+ *
125
+ * This deletes agents, tools, policies, bindings, the audit log, and all API keys.
126
+ * The deletion is irreversible. The caller must pass the organisation's exact
127
+ * name as `confirmation` — any other value will be rejected.
128
+ */
129
+ async delete(confirmation) {
130
+ await this.client.request('POST', '/v1/organisation/delete', { confirmation });
131
+ }
132
+ }
133
+ class ApiKeysResource {
134
+ client;
135
+ constructor(client) {
136
+ this.client = client;
137
+ }
138
+ /** List all API keys for the current organisation (active and revoked). */
139
+ async list() {
140
+ return this.client.request('GET', '/v1/api-keys');
141
+ }
142
+ /**
143
+ * Generate a new API key. The raw key is returned ONCE in the `key` field
144
+ * and cannot be retrieved again. Store it securely.
145
+ */
146
+ async create(name) {
147
+ return this.client.request('POST', '/v1/api-keys', { name });
148
+ }
149
+ /**
150
+ * Revoke an API key by its id. Returns void on success. The API rejects
151
+ * attempts to revoke the key currently being used to make the request.
152
+ */
153
+ async revoke(id) {
154
+ await this.client.request('DELETE', `/v1/api-keys/${id}`);
155
+ }
156
+ }
157
+ class ApprovalsResource {
158
+ client;
159
+ constructor(client) {
160
+ this.client = client;
161
+ }
162
+ async list(params) {
163
+ const query = new URLSearchParams();
164
+ if (params?.status)
165
+ query.set('status', params.status);
166
+ if (params?.agent_id)
167
+ query.set('agent_id', params.agent_id);
168
+ if (params?.tool_id)
169
+ query.set('tool_id', params.tool_id);
170
+ if (params?.limit)
171
+ query.set('limit', String(params.limit));
172
+ if (params?.offset)
173
+ query.set('offset', String(params.offset));
174
+ const qs = query.toString();
175
+ return this.client.request('GET', `/v1/approvals${qs ? `?${qs}` : ''}`);
176
+ }
177
+ async get(id) {
178
+ return this.client.request('GET', `/v1/approvals/${id}`);
179
+ }
180
+ async status(id) {
181
+ return this.client.request('GET', `/v1/approvals/${id}/status`);
182
+ }
183
+ async approve(id, args) {
184
+ return this.client.request('POST', `/v1/approvals/${id}/approve`, args);
185
+ }
186
+ async reject(id, args) {
187
+ return this.client.request('POST', `/v1/approvals/${id}/reject`, args);
188
+ }
189
+ /**
190
+ * Poll an approval until it is resolved (approved, rejected, or expired).
191
+ *
192
+ * Polls /v1/approvals/:id/status at `interval` ms (default 2000). Throws if
193
+ * the overall wait exceeds `timeout` ms (default 5 minutes). Returns the
194
+ * fully-populated Approval object once it resolves.
195
+ *
196
+ * @example
197
+ * const result = await bl.approvals.wait(approvalId);
198
+ * if (result.status === 'approved') { ... }
199
+ */
200
+ async wait(id, options = {}) {
201
+ const interval = options.interval ?? 2000;
202
+ const timeout = options.timeout ?? 5 * 60 * 1000;
203
+ const deadline = Date.now() + timeout;
204
+ while (Date.now() < deadline) {
205
+ const statusResponse = await this.status(id);
206
+ if (statusResponse.status !== 'pending') {
207
+ // Resolved — fetch the full record to return to the caller
208
+ return this.get(id);
209
+ }
210
+ const remaining = deadline - Date.now();
211
+ if (remaining <= 0)
212
+ break;
213
+ await new Promise((resolve) => setTimeout(resolve, Math.min(interval, remaining)));
214
+ }
215
+ throw new BlackLakeError(408, 'APPROVAL_WAIT_TIMEOUT', `Approval ${id} did not resolve within ${timeout}ms`);
216
+ }
217
+ }
218
+ class WebhooksResource {
219
+ client;
220
+ constructor(client) {
221
+ this.client = client;
222
+ }
223
+ async list() {
224
+ return this.client.request('GET', '/v1/webhooks');
225
+ }
226
+ async create(args) {
227
+ return this.client.request('POST', '/v1/webhooks', args);
228
+ }
229
+ async get(id) {
230
+ return this.client.request('GET', `/v1/webhooks/${id}`);
231
+ }
232
+ async update(id, patch) {
233
+ return this.client.request('PATCH', `/v1/webhooks/${id}`, patch);
234
+ }
235
+ async delete(id) {
236
+ await this.client.request('DELETE', `/v1/webhooks/${id}`);
237
+ }
238
+ async listDeliveries(id, params) {
239
+ const query = new URLSearchParams();
240
+ if (params?.limit)
241
+ query.set('limit', String(params.limit));
242
+ if (params?.offset)
243
+ query.set('offset', String(params.offset));
244
+ const qs = query.toString();
245
+ return this.client.request('GET', `/v1/webhooks/${id}/deliveries${qs ? `?${qs}` : ''}`);
246
+ }
247
+ }
248
+ // Internal HTTP client
249
+ class BlackLakeClient {
250
+ baseUrl;
251
+ apiKey;
252
+ constructor(config) {
253
+ this.apiKey = config.apiKey;
254
+ this.baseUrl = (config.baseUrl ?? 'https://api.blacklake.systems').replace(/\/$/, '');
255
+ }
256
+ async request(method, path, body) {
257
+ const headers = {
258
+ 'x-api-key': this.apiKey,
259
+ };
260
+ if (body !== undefined) {
261
+ headers['Content-Type'] = 'application/json';
262
+ }
263
+ const response = await fetch(`${this.baseUrl}${path}`, {
264
+ method,
265
+ headers,
266
+ body: body !== undefined ? JSON.stringify(body) : undefined,
267
+ });
268
+ if (response.status === 204) {
269
+ return undefined;
270
+ }
271
+ const data = await response.json();
272
+ if (!response.ok) {
273
+ const error = data['error'];
274
+ throw new BlackLakeError(response.status, error?.code ?? 'UNKNOWN_ERROR', error?.message ?? 'An unknown error occurred');
275
+ }
276
+ return data;
277
+ }
278
+ }
279
+ // Main SDK class
280
+ export class BlackLake {
281
+ client;
282
+ agents;
283
+ tools;
284
+ policies;
285
+ evaluations;
286
+ organisation;
287
+ apiKeys;
288
+ approvals;
289
+ webhooks;
290
+ constructor(config) {
291
+ this.client = new BlackLakeClient(config);
292
+ this.agents = new AgentsResource(this.client);
293
+ this.tools = new ToolsResource(this.client);
294
+ this.policies = new PoliciesResource(this.client);
295
+ this.evaluations = new EvaluationsResource(this.client);
296
+ this.organisation = new OrganisationResource(this.client);
297
+ this.apiKeys = new ApiKeysResource(this.client);
298
+ this.approvals = new ApprovalsResource(this.client);
299
+ this.webhooks = new WebhooksResource(this.client);
300
+ }
301
+ async govern(request) {
302
+ return this.client.request('POST', '/v1/govern', request);
303
+ }
304
+ }
305
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@blacklake-systems/surface-sdk",
3
+ "version": "0.1.5",
4
+ "description": "TypeScript SDK for BlackLake Surface — agent governance infrastructure",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc",
19
+ "prepublishOnly": "tsc"
20
+ },
21
+ "license": "MIT",
22
+ "homepage": "https://blacklake.systems/product",
23
+ "bugs": {
24
+ "url": "https://blacklake.systems/support"
25
+ },
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "https://github.com/blacklake-systems/control-plane",
29
+ "directory": "packages/sdk"
30
+ },
31
+ "keywords": [
32
+ "blacklake",
33
+ "agent",
34
+ "governance",
35
+ "control-plane",
36
+ "sdk"
37
+ ],
38
+ "devDependencies": {
39
+ "typescript": "^5.8.3"
40
+ },
41
+ "engines": {
42
+ "node": ">=18"
43
+ }
44
+ }