@beeos-ai/bma-sdk 0.0.0-stage → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,6 @@
1
+ /**
2
+ * This file was auto-generated by openapi-typescript.
3
+ * Do not make direct changes to the file.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=rest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest.js","sourceRoot":"","sources":["../../src/generated/rest.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,90 @@
1
+ import { type Client } from "openapi-fetch";
2
+ import type { components, operations, paths } from "./generated/rest.js";
3
+ export type { components, operations, paths };
4
+ export type Schemas = components["schemas"];
5
+ /** Hosted BMA API root, including the /v1 prefix. */
6
+ export declare const DEFAULT_BASE_URL = "https://api.bma.beeos.ai/v1";
7
+ export declare const SDK_VERSION = "0.4.0";
8
+ export interface BmaClientOptions {
9
+ /** BMA personal or organization bearer token. */
10
+ token: string;
11
+ /** API root, for example https://api.bma.beeos.ai/v1 or https://host/api/v1. */
12
+ baseUrl?: string;
13
+ /** Optional fetch implementation; defaults to globalThis.fetch. */
14
+ fetch?: typeof globalThis.fetch;
15
+ }
16
+ /** A non-2xx response from the BMA API. */
17
+ export declare class BmaApiError extends Error {
18
+ readonly status: number;
19
+ readonly code: string;
20
+ readonly currentDigest?: string;
21
+ readonly issues?: Schemas["AgentConfigErrorIssue"][];
22
+ constructor(status: number, body: unknown);
23
+ /** Whether a retry may succeed without changing the request. */
24
+ get retryable(): boolean;
25
+ }
26
+ /**
27
+ * Returns `data` from an openapi-fetch result or throws BmaApiError.
28
+ *
29
+ * ```ts
30
+ * const agent = unwrap(await bma.rest.GET("/orgs/{orgID}/projects/{projectID}/agents/{agentID}", { params }));
31
+ * ```
32
+ */
33
+ export declare function unwrap<T>(result: {
34
+ data?: T;
35
+ error?: unknown;
36
+ response: Response;
37
+ }): T;
38
+ export interface StreamEventsOptions {
39
+ orgID: string;
40
+ projectID: string;
41
+ agentID: string;
42
+ /** Agent session (ses_...). Omit for the agent's default session. */
43
+ sessionId?: string;
44
+ afterSequence?: number;
45
+ /** Resume after this durable sequence (sent as Last-Event-ID). */
46
+ lastEventId?: number;
47
+ streamDeltas?: boolean;
48
+ signal?: AbortSignal;
49
+ }
50
+ /** One SSE data frame. `data` is the parsed JSON payload. */
51
+ export interface StreamFrame {
52
+ event: string;
53
+ id?: string;
54
+ /** Durable event sequence; set only for frames that carry an SSE id. */
55
+ sequence?: number;
56
+ data: Schemas["AgentEventStreamData"];
57
+ }
58
+ export interface DownloadArtifactOptions {
59
+ /** Explicit product limit; artifacts larger than this are refused. */
60
+ maxBytes: number;
61
+ signal?: AbortSignal;
62
+ }
63
+ /** Authenticated BMA REST client. */
64
+ export declare class BmaClient {
65
+ /** Generated, fully typed openapi-fetch client for every contract operation. */
66
+ readonly rest: Client<paths>;
67
+ readonly baseUrl: string;
68
+ private readonly token;
69
+ private readonly fetchImpl;
70
+ constructor(options: BmaClientOptions);
71
+ private headers;
72
+ private send;
73
+ /**
74
+ * Streams `GET .../agents/{agentID}/events/stream`. Heartbeat comments are
75
+ * skipped; the iterator ends when the server closes the stream.
76
+ */
77
+ streamEvents(options: StreamEventsOptions): AsyncGenerator<StreamFrame>;
78
+ /**
79
+ * Downloads artifact content and verifies the size and sha256 digest
80
+ * recorded on the artifact. The whole body is buffered, bounded by maxBytes.
81
+ */
82
+ downloadArtifact(artifact: Schemas["Artifact"], options: DownloadArtifactOptions): Promise<Uint8Array<ArrayBuffer>>;
83
+ }
84
+ interface RawSSEFrame {
85
+ event: string;
86
+ id?: string;
87
+ data: string;
88
+ }
89
+ /** Minimal text/event-stream parser (WHATWG SSE field rules). */
90
+ export declare function parseSSE(body: ReadableStream<Uint8Array>): AsyncGenerator<RawSSEFrame>;
package/dist/index.js ADDED
@@ -0,0 +1,248 @@
1
+ // TypeScript client for the BMA REST API. Every path, operation and schema
2
+ // type comes from src/generated/rest.ts, which is generated from
3
+ // contracts/bma/rest.openapi.yaml; this file adds only what the contract does
4
+ // not describe: bearer authentication, error decoding, the server-sent event
5
+ // stream, and verified artifact downloads.
6
+ import createClient from "openapi-fetch";
7
+ /** Hosted BMA API root, including the /v1 prefix. */
8
+ export const DEFAULT_BASE_URL = "https://api.bma.beeos.ai/v1";
9
+ export const SDK_VERSION = "0.4.0";
10
+ /** A non-2xx response from the BMA API. */
11
+ export class BmaApiError extends Error {
12
+ status;
13
+ code;
14
+ currentDigest;
15
+ issues;
16
+ constructor(status, body) {
17
+ const wire = (typeof body === "object" && body !== null ? body : {});
18
+ const code = typeof wire.code === "string" ? wire.code : "";
19
+ const message = typeof wire.error === "string" && wire.error !== "" ? wire.error : `HTTP ${status}`;
20
+ super(`bma: HTTP ${status} ${code || "unknown"}: ${message}`);
21
+ this.name = "BmaApiError";
22
+ this.status = status;
23
+ this.code = code;
24
+ this.currentDigest = wire.current_digest;
25
+ this.issues = wire.issues;
26
+ }
27
+ /** Whether a retry may succeed without changing the request. */
28
+ get retryable() {
29
+ return (this.status === 408 ||
30
+ this.status === 429 ||
31
+ this.status >= 500 ||
32
+ this.code === "service_unavailable" ||
33
+ this.code === "rate_limited");
34
+ }
35
+ }
36
+ /**
37
+ * Returns `data` from an openapi-fetch result or throws BmaApiError.
38
+ *
39
+ * ```ts
40
+ * const agent = unwrap(await bma.rest.GET("/orgs/{orgID}/projects/{projectID}/agents/{agentID}", { params }));
41
+ * ```
42
+ */
43
+ export function unwrap(result) {
44
+ if (result.response.ok) {
45
+ return result.data;
46
+ }
47
+ throw new BmaApiError(result.response.status, result.error);
48
+ }
49
+ /** Authenticated BMA REST client. */
50
+ export class BmaClient {
51
+ /** Generated, fully typed openapi-fetch client for every contract operation. */
52
+ rest;
53
+ baseUrl;
54
+ token;
55
+ fetchImpl;
56
+ constructor(options) {
57
+ const token = options.token?.trim();
58
+ if (!token) {
59
+ throw new Error("bma: token is required");
60
+ }
61
+ const baseUrl = (options.baseUrl?.trim() || DEFAULT_BASE_URL).replace(/\/+$/, "");
62
+ const scheme = new URL(baseUrl).protocol;
63
+ if (scheme !== "http:" && scheme !== "https:") {
64
+ throw new Error("bma: baseUrl must use http or https");
65
+ }
66
+ this.baseUrl = baseUrl;
67
+ this.token = token;
68
+ this.fetchImpl = options.fetch ?? globalThis.fetch;
69
+ this.rest = createClient({ baseUrl, fetch: this.fetchImpl, headers: this.headers() });
70
+ }
71
+ headers(extra = {}) {
72
+ return { Authorization: `Bearer ${this.token}`, ...extra };
73
+ }
74
+ async send(path, accept, headers, signal) {
75
+ const response = await this.fetchImpl(this.baseUrl + path, {
76
+ method: "GET",
77
+ headers: this.headers({ Accept: accept, ...headers }),
78
+ signal,
79
+ });
80
+ if (!response.ok) {
81
+ const text = await response.text();
82
+ let body;
83
+ try {
84
+ body = JSON.parse(text);
85
+ }
86
+ catch {
87
+ body = undefined;
88
+ }
89
+ throw new BmaApiError(response.status, body);
90
+ }
91
+ return response;
92
+ }
93
+ /**
94
+ * Streams `GET .../agents/{agentID}/events/stream`. Heartbeat comments are
95
+ * skipped; the iterator ends when the server closes the stream.
96
+ */
97
+ async *streamEvents(options) {
98
+ const query = {};
99
+ if (options.sessionId !== undefined)
100
+ query.session_id = options.sessionId;
101
+ if (options.afterSequence !== undefined)
102
+ query.after_sequence = options.afterSequence;
103
+ if (options.streamDeltas !== undefined)
104
+ query.stream_deltas = options.streamDeltas;
105
+ const search = new URLSearchParams(Object.entries(query).map(([k, v]) => [k, String(v)])).toString();
106
+ const path = `/orgs/${encodeURIComponent(options.orgID)}/projects/${encodeURIComponent(options.projectID)}` +
107
+ `/agents/${encodeURIComponent(options.agentID)}/events/stream` +
108
+ (search ? `?${search}` : "");
109
+ const headers = {};
110
+ if (options.lastEventId !== undefined)
111
+ headers["Last-Event-ID"] = String(options.lastEventId);
112
+ const response = await this.send(path, "text/event-stream", headers, options.signal);
113
+ const media = (response.headers.get("Content-Type") ?? "").split(";")[0].trim();
114
+ if (media !== "text/event-stream" || !response.body) {
115
+ await response.body?.cancel();
116
+ throw new Error(`bma: event stream content type = ${JSON.stringify(media)}`);
117
+ }
118
+ for await (const raw of parseSSE(response.body)) {
119
+ const frame = { event: raw.event, data: JSON.parse(raw.data) };
120
+ if (raw.id !== undefined) {
121
+ const sequence = Number(raw.id);
122
+ if (!Number.isSafeInteger(sequence)) {
123
+ throw new Error(`bma: invalid event id ${JSON.stringify(raw.id)}`);
124
+ }
125
+ frame.id = raw.id;
126
+ frame.sequence = sequence;
127
+ }
128
+ yield frame;
129
+ }
130
+ }
131
+ /**
132
+ * Downloads artifact content and verifies the size and sha256 digest
133
+ * recorded on the artifact. The whole body is buffered, bounded by maxBytes.
134
+ */
135
+ async downloadArtifact(artifact, options) {
136
+ const size = artifact.size_bytes;
137
+ if (!(options.maxBytes > 0))
138
+ throw new Error("bma: maxBytes is required");
139
+ if (size === undefined || size < 0 || size > options.maxBytes) {
140
+ throw new Error("bma: artifact size is missing or exceeds maxBytes");
141
+ }
142
+ const digest = artifact.digest ?? "";
143
+ if (!/^sha256:[0-9a-f]{64}$/.test(digest)) {
144
+ throw new Error("bma: artifact digest must be sha256:<hex>");
145
+ }
146
+ const path = `/orgs/${encodeURIComponent(artifact.org_id)}/projects/${encodeURIComponent(artifact.project_id)}` +
147
+ `/agents/${encodeURIComponent(artifact.agent_id)}/artifacts/${encodeURIComponent(artifact.id)}/content`;
148
+ const response = await this.send(path, "application/octet-stream", {}, options.signal);
149
+ const bytes = await readAtMost(response, size + 1);
150
+ if (bytes.byteLength !== size) {
151
+ throw new Error(`bma: artifact size = ${bytes.byteLength}, want ${size}`);
152
+ }
153
+ const hash = new Uint8Array(await crypto.subtle.digest("SHA-256", bytes));
154
+ const actual = Array.from(hash, (b) => b.toString(16).padStart(2, "0")).join("");
155
+ if (`sha256:${actual}` !== digest) {
156
+ throw new Error("bma: artifact digest mismatch");
157
+ }
158
+ return bytes;
159
+ }
160
+ }
161
+ async function readAtMost(response, limit) {
162
+ const reader = response.body?.getReader();
163
+ if (!reader)
164
+ return new Uint8Array();
165
+ const chunks = [];
166
+ let total = 0;
167
+ for (;;) {
168
+ const { done, value } = await reader.read();
169
+ if (done)
170
+ break;
171
+ chunks.push(value);
172
+ total += value.byteLength;
173
+ if (total >= limit) {
174
+ await reader.cancel();
175
+ break;
176
+ }
177
+ }
178
+ const out = new Uint8Array(total);
179
+ let offset = 0;
180
+ for (const chunk of chunks) {
181
+ out.set(chunk, offset);
182
+ offset += chunk.byteLength;
183
+ }
184
+ return out;
185
+ }
186
+ /** Minimal text/event-stream parser (WHATWG SSE field rules). */
187
+ export async function* parseSSE(body) {
188
+ const decoder = new TextDecoder();
189
+ let buffer = "";
190
+ let event = "";
191
+ let id;
192
+ let data = [];
193
+ const dispatch = () => {
194
+ const frame = data.length > 0 ? { event: event || "message", id, data: data.join("\n") } : undefined;
195
+ event = "";
196
+ id = undefined;
197
+ data = [];
198
+ return frame;
199
+ };
200
+ const reader = body.getReader();
201
+ try {
202
+ for (;;) {
203
+ const { done, value } = await reader.read();
204
+ buffer += done ? decoder.decode() : decoder.decode(value, { stream: true });
205
+ let newline;
206
+ while ((newline = buffer.search(/\r\n|\r|\n/)) >= 0) {
207
+ const line = buffer.slice(0, newline);
208
+ buffer = buffer.slice(newline + (buffer.startsWith("\r\n", newline) ? 2 : 1));
209
+ if (line === "") {
210
+ const frame = dispatch();
211
+ if (frame)
212
+ yield frame;
213
+ continue;
214
+ }
215
+ if (line.startsWith(":"))
216
+ continue;
217
+ const colon = line.indexOf(":");
218
+ const field = colon < 0 ? line : line.slice(0, colon);
219
+ let value = colon < 0 ? "" : line.slice(colon + 1);
220
+ if (value.startsWith(" "))
221
+ value = value.slice(1);
222
+ if (field === "event")
223
+ event = value;
224
+ else if (field === "id")
225
+ id = value;
226
+ else if (field === "data")
227
+ data.push(value);
228
+ }
229
+ if (done) {
230
+ if (buffer !== "") {
231
+ // A final line without a terminator still belongs to the frame.
232
+ const colon = buffer.indexOf(":");
233
+ if (colon > 0 && buffer.slice(0, colon) === "data") {
234
+ data.push(buffer.slice(colon + 1).replace(/^ /, ""));
235
+ }
236
+ }
237
+ const frame = dispatch();
238
+ if (frame)
239
+ yield frame;
240
+ return;
241
+ }
242
+ }
243
+ }
244
+ finally {
245
+ reader.releaseLock();
246
+ }
247
+ }
248
+ //# 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 CHANGED
@@ -1,6 +1,42 @@
1
1
  {
2
2
  "name": "@beeos-ai/bma-sdk",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.4.0",
4
+ "description": "TypeScript client for the BMA REST API and the BMA extensions to the Anthropic Managed Agents API.",
5
+ "license": "Apache-2.0",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/beeos-ai/bma-sdks.git",
9
+ "directory": "typescript"
10
+ },
11
+ "type": "module",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js"
16
+ },
17
+ "./facade-extensions": {
18
+ "types": "./dist/facade-extensions.d.ts",
19
+ "import": "./dist/facade-extensions.js"
20
+ }
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "!dist/**/*.test.*"
25
+ ],
26
+ "engines": {
27
+ "node": ">=20"
28
+ },
29
+ "scripts": {
30
+ "generate": "openapi-typescript ../contracts/bma/rest.openapi.yaml -o src/generated/rest.ts && openapi-typescript ../contracts/bma/facade-extensions.openapi.yaml -o src/generated/facade-extensions.ts",
31
+ "build": "tsc -p tsconfig.json",
32
+ "test": "tsc -p tsconfig.test.json && node --test build-test/test/*.test.js"
33
+ },
34
+ "dependencies": {
35
+ "openapi-fetch": "0.17.0"
36
+ },
37
+ "devDependencies": {
38
+ "@types/node": "^22.0.0",
39
+ "openapi-typescript": "7.13.0",
40
+ "typescript": "5.9.3"
41
+ }
42
+ }