@aexhq/sdk 0.54.1 → 0.55.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.
Files changed (57) hide show
  1. package/README.md +16 -123
  2. package/dist/errors.d.ts +33 -0
  3. package/dist/errors.js +69 -0
  4. package/dist/index.d.ts +16 -23
  5. package/dist/index.js +18 -16
  6. package/dist/json.d.ts +4 -0
  7. package/dist/json.js +46 -0
  8. package/dist/session.d.ts +74 -0
  9. package/dist/session.js +255 -0
  10. package/dist/transport.d.ts +22 -0
  11. package/dist/transport.js +196 -0
  12. package/package.json +16 -64
  13. package/LICENSE +0 -201
  14. package/NOTICE +0 -38
  15. package/dist/client/aex.d.ts +0 -38
  16. package/dist/client/aex.js +0 -149
  17. package/dist/client/aex.js.map +0 -1
  18. package/dist/client/credentials.d.ts +0 -25
  19. package/dist/client/credentials.js +0 -97
  20. package/dist/client/credentials.js.map +0 -1
  21. package/dist/client/routing.d.ts +0 -7
  22. package/dist/client/routing.js +0 -26
  23. package/dist/client/routing.js.map +0 -1
  24. package/dist/downloads/download.d.ts +0 -18
  25. package/dist/downloads/download.js +0 -67
  26. package/dist/downloads/download.js.map +0 -1
  27. package/dist/files/workspace-files.d.ts +0 -55
  28. package/dist/files/workspace-files.js +0 -150
  29. package/dist/files/workspace-files.js.map +0 -1
  30. package/dist/generated/errors.d.ts +0 -12
  31. package/dist/generated/errors.js +0 -66
  32. package/dist/generated/errors.js.map +0 -1
  33. package/dist/generated/models.d.ts +0 -853
  34. package/dist/generated/models.js +0 -62
  35. package/dist/generated/models.js.map +0 -1
  36. package/dist/generated/resources.d.ts +0 -265
  37. package/dist/generated/resources.js +0 -207
  38. package/dist/generated/resources.js.map +0 -1
  39. package/dist/generated/routes.d.ts +0 -44
  40. package/dist/generated/routes.js +0 -510
  41. package/dist/generated/routes.js.map +0 -1
  42. package/dist/index.js.map +0 -1
  43. package/dist/observations/stream.d.ts +0 -1
  44. package/dist/observations/stream.js +0 -18
  45. package/dist/observations/stream.js.map +0 -1
  46. package/dist/transport/errors.d.ts +0 -60
  47. package/dist/transport/errors.js +0 -107
  48. package/dist/transport/errors.js.map +0 -1
  49. package/dist/transport/pagination.d.ts +0 -8
  50. package/dist/transport/pagination.js +0 -34
  51. package/dist/transport/pagination.js.map +0 -1
  52. package/dist/transport/retry.d.ts +0 -21
  53. package/dist/transport/retry.js +0 -37
  54. package/dist/transport/retry.js.map +0 -1
  55. package/dist/transport/transport.d.ts +0 -33
  56. package/dist/transport/transport.js +0 -111
  57. package/dist/transport/transport.js.map +0 -1
@@ -1,107 +0,0 @@
1
- import { ERROR_METADATA } from "../generated/errors.js";
2
- export class AexError extends Error {
3
- constructor(message) {
4
- super(message);
5
- this.name = new.target.name;
6
- }
7
- }
8
- export class AexConfigError extends AexError {
9
- }
10
- export class AexApiError extends AexError {
11
- status;
12
- code;
13
- requestId;
14
- retryable;
15
- operationId;
16
- details;
17
- retryAfterMs;
18
- constructor(input) {
19
- super(redact(input.message));
20
- this.status = input.status;
21
- this.code = input.code;
22
- this.requestId = input.requestId;
23
- this.retryable = input.retryable;
24
- this.operationId = input.operationId;
25
- this.details = input.details;
26
- this.retryAfterMs = input.retryAfterMs;
27
- }
28
- }
29
- export class AexAuthError extends AexApiError {
30
- }
31
- export class AexNotFoundError extends AexApiError {
32
- }
33
- export class AexConflictError extends AexApiError {
34
- }
35
- export class AexPreconditionError extends AexApiError {
36
- }
37
- export class AexValidationError extends AexApiError {
38
- }
39
- export class AexQuotaError extends AexApiError {
40
- }
41
- export class AexStateError extends AexApiError {
42
- }
43
- export class AexUnavailableError extends AexApiError {
44
- }
45
- export class AexInternalError extends AexApiError {
46
- }
47
- export class AexGoneError extends AexApiError {
48
- }
49
- export class AexStreamProtocolError extends AexError {
50
- }
51
- function constructorFor(errorClass) {
52
- switch (errorClass) {
53
- case "auth": return AexAuthError;
54
- case "not_found": return AexNotFoundError;
55
- case "conflict": return AexConflictError;
56
- case "precondition": return AexPreconditionError;
57
- case "validation": return AexValidationError;
58
- case "quota": return AexQuotaError;
59
- case "state": return AexStateError;
60
- case "unavailable": return AexUnavailableError;
61
- case "internal": return AexInternalError;
62
- }
63
- }
64
- export function apiErrorFromResponse(_routeId, status, body, headers) {
65
- const envelope = body;
66
- const value = envelope.error;
67
- const code = typeof value?.code === "string" ? value.code : "invalid_error_envelope";
68
- const requestId = typeof value?.requestId === "string"
69
- ? value.requestId
70
- : headers.get("x-request-id");
71
- if (!requestId)
72
- throw new AexConfigError("error response omitted its request id");
73
- const retryAfterMs = parseRetryAfter(headers);
74
- const input = {
75
- status,
76
- code,
77
- requestId,
78
- retryable: value?.retryable === true,
79
- message: typeof value?.message === "string" ? value.message : "request failed",
80
- ...(typeof value?.operationId === "string" ? { operationId: value.operationId } : {}),
81
- ...(value?.details === undefined ? {} : { details: value.details }),
82
- ...(retryAfterMs === undefined ? {} : { retryAfterMs }),
83
- };
84
- if (status === 410)
85
- return new AexGoneError(input);
86
- const metadata = ERROR_METADATA[code];
87
- if (!metadata)
88
- return new AexApiError(input);
89
- return new (constructorFor(metadata.class))(input);
90
- }
91
- function parseRetryAfter(headers) {
92
- const value = headers.get("retry-after");
93
- if (!value)
94
- return undefined;
95
- const seconds = Number(value);
96
- return Number.isFinite(seconds) && seconds >= 0 ? Math.ceil(seconds * 1000) : undefined;
97
- }
98
- function redact(message) {
99
- return message
100
- .replace(/aex_(?:wk|at)_[A-Za-z0-9_-]+/g, "[credential]")
101
- .replace(/https:\/\/[^\s?#]+\?[^\s]+/g, "[url]")
102
- .slice(0, 2_000);
103
- }
104
- export function isRetryable(error) {
105
- return error instanceof AexApiError && error.retryable;
106
- }
107
- //# sourceMappingURL=errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/transport/errors.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- export declare class Page<T> implements AsyncIterable<T> {
2
- #private;
3
- readonly items: readonly T[];
4
- readonly nextCursor: string | undefined;
5
- constructor(items: readonly T[], nextCursor?: string, next?: (cursor: string) => Promise<Page<T>>);
6
- pages(): AsyncGenerator<Page<T>>;
7
- [Symbol.asyncIterator](): AsyncGenerator<T>;
8
- }
@@ -1,34 +0,0 @@
1
- import { AexStreamProtocolError } from "./errors.js";
2
- export class Page {
3
- items;
4
- nextCursor;
5
- #next;
6
- constructor(items, nextCursor, next) {
7
- this.items = items;
8
- this.nextCursor = nextCursor;
9
- this.#next = next;
10
- }
11
- async *pages() {
12
- const seen = new Set();
13
- let page = this;
14
- while (page) {
15
- yield page;
16
- const cursor = page.nextCursor;
17
- if (!cursor)
18
- return;
19
- if (seen.has(cursor))
20
- throw new AexStreamProtocolError(`repeated cursor ${cursor}`);
21
- seen.add(cursor);
22
- if (!page.#next)
23
- throw new AexStreamProtocolError("page has a cursor but no continuation");
24
- page = await page.#next(cursor);
25
- }
26
- }
27
- async *[Symbol.asyncIterator]() {
28
- for await (const page of this.pages()) {
29
- for (const item of page.items)
30
- yield item;
31
- }
32
- }
33
- }
34
- //# sourceMappingURL=pagination.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/transport/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,OAAO,IAAI;IACN,KAAK,CAAe;IACpB,UAAU,CAAqB;IAC/B,KAAK,CAAqD;IAEnE,YAAY,KAAmB,EAAE,UAAmB,EAAE,IAA2C;QAC/F,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,CAAC,KAAK;QACV,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,IAAI,IAAI,GAAwB,IAAI,CAAC;QACrC,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,IAAI,CAAC;YACX,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;YAC/B,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,sBAAsB,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;YACpF,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,sBAAsB,CAAC,uCAAuC,CAAC,CAAC;YAC3F,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3B,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YACtC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,CAAC;QAC5C,CAAC;IACH,CAAC;CACF"}
@@ -1,21 +0,0 @@
1
- export declare const RETRY_POLICY: Readonly<{
2
- maxAttempts: 4;
3
- initialDelayMs: 500;
4
- maxDelayMs: 20000;
5
- maxElapsedMs: 120000;
6
- }>;
7
- export interface RetryExecution<T> {
8
- readonly route: {
9
- readonly safeRetry: boolean;
10
- };
11
- readonly identity: string;
12
- readonly streamedBytes?: number;
13
- readonly random?: () => number;
14
- readonly sleep?: (delayMs: number) => Promise<void>;
15
- readonly now?: () => number;
16
- readonly attempt: (context: {
17
- readonly attempt: number;
18
- readonly identity: string;
19
- }) => Promise<T>;
20
- }
21
- export declare function executeWithRetry<T>(input: RetryExecution<T>): Promise<T>;
@@ -1,37 +0,0 @@
1
- import { AexApiError } from "./errors.js";
2
- export const RETRY_POLICY = Object.freeze({
3
- maxAttempts: 4,
4
- initialDelayMs: 500,
5
- maxDelayMs: 20_000,
6
- maxElapsedMs: 120_000,
7
- });
8
- export async function executeWithRetry(input) {
9
- const now = input.now ?? Date.now;
10
- const sleep = input.sleep ?? ((delay) => new Promise((resolve) => setTimeout(resolve, delay)));
11
- const random = input.random ?? Math.random;
12
- const started = now();
13
- let attempt = 1;
14
- for (;;) {
15
- try {
16
- return await input.attempt({ attempt, identity: input.identity });
17
- }
18
- catch (error) {
19
- const retryableError = !(error instanceof AexApiError) || error.retryable;
20
- const mayRetry = input.route.safeRetry
21
- && (input.streamedBytes ?? 0) === 0
22
- && retryableError
23
- && attempt < RETRY_POLICY.maxAttempts;
24
- if (!mayRetry)
25
- throw error;
26
- const exponential = Math.min(RETRY_POLICY.maxDelayMs, RETRY_POLICY.initialDelayMs * (2 ** (attempt - 1)));
27
- const jitter = Math.floor(exponential * Math.max(0, Math.min(1, random())));
28
- const retryAfter = error instanceof AexApiError ? (error.retryAfterMs ?? 0) : 0;
29
- const delay = Math.max(jitter, retryAfter);
30
- if (now() - started + delay > RETRY_POLICY.maxElapsedMs)
31
- throw error;
32
- await sleep(delay);
33
- attempt += 1;
34
- }
35
- }
36
- }
37
- //# sourceMappingURL=retry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/transport/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACxC,WAAW,EAAE,CAAC;IACd,cAAc,EAAE,GAAG;IACnB,UAAU,EAAE,MAAM;IAClB,YAAY,EAAE,OAAO;CACtB,CAAC,CAAC;AAYH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAI,KAAwB;IAChE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7G,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;IAC3C,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;IACtB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,SAAS,CAAC;QACR,IAAI,CAAC;YACH,OAAO,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,YAAY,WAAW,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC;YAC1E,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS;mBACjC,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,KAAK,CAAC;mBAChC,cAAc;mBACd,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC;YACxC,IAAI,CAAC,QAAQ;gBAAE,MAAM,KAAK,CAAC;YAE3B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,YAAY,CAAC,UAAU,EACvB,YAAY,CAAC,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CACnD,CAAC;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5E,MAAM,UAAU,GAAG,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC3C,IAAI,GAAG,EAAE,GAAG,OAAO,GAAG,KAAK,GAAG,YAAY,CAAC,YAAY;gBAAE,MAAM,KAAK,CAAC;YACrE,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,33 +0,0 @@
1
- import { type RouteId } from "../generated/routes.js";
2
- export interface WireRequest {
3
- readonly routeId: RouteId;
4
- readonly method: string;
5
- readonly path: string;
6
- readonly headers: Headers;
7
- readonly body?: Uint8Array;
8
- readonly signal?: AbortSignal;
9
- }
10
- export interface WireResponse<T = unknown> {
11
- readonly status: number;
12
- readonly headers: Headers;
13
- readonly body: T;
14
- }
15
- export interface WireStreamResponse<T = unknown> {
16
- readonly status: number;
17
- readonly headers: Headers;
18
- readonly frames?: AsyncIterable<T>;
19
- readonly error?: unknown;
20
- }
21
- export interface AexTransport {
22
- execute<T>(request: WireRequest): Promise<WireResponse<T>>;
23
- stream<T>(request: WireRequest): Promise<WireStreamResponse<T>>;
24
- }
25
- export declare class FetchTransport implements AexTransport {
26
- #private;
27
- constructor(baseUrls: {
28
- central: string;
29
- regional?: string;
30
- }, fetchLike?: typeof fetch);
31
- execute<T>(request: WireRequest): Promise<WireResponse<T>>;
32
- stream<T>(request: WireRequest): Promise<WireStreamResponse<T>>;
33
- }
@@ -1,111 +0,0 @@
1
- import { ROUTES } from "../generated/routes.js";
2
- import { AexConfigError, AexStreamProtocolError } from "./errors.js";
3
- export class FetchTransport {
4
- #baseUrls;
5
- #fetch;
6
- constructor(baseUrls, fetchLike = globalThis.fetch) {
7
- this.#baseUrls = baseUrls;
8
- this.#fetch = fetchLike.bind(globalThis);
9
- }
10
- async execute(request) {
11
- const plane = ROUTES[request.routeId].plane;
12
- const baseUrl = this.#baseUrls[plane];
13
- if (!baseUrl)
14
- throw new AexConfigError("a workspace API key is required for regional routes");
15
- const response = await this.#fetch(`${baseUrl}${request.path}`, {
16
- method: request.method,
17
- headers: request.headers,
18
- ...(request.body ? { body: toFetchBody(request.body) } : {}),
19
- ...(request.signal ? { signal: request.signal } : {}),
20
- redirect: "error",
21
- });
22
- const binary = ROUTES[request.routeId].transport === "binary";
23
- const body = response.status === 204
24
- ? undefined
25
- : response.ok && binary
26
- ? new Uint8Array(await response.arrayBuffer())
27
- : await response.json();
28
- return { status: response.status, headers: response.headers, body: body };
29
- }
30
- async stream(request) {
31
- const plane = ROUTES[request.routeId].plane;
32
- const baseUrl = this.#baseUrls[plane];
33
- if (!baseUrl)
34
- throw new AexConfigError("a workspace API key is required for regional routes");
35
- const response = await this.#fetch(`${baseUrl}${request.path}`, {
36
- method: request.method,
37
- headers: request.headers,
38
- ...(request.body ? { body: toFetchBody(request.body) } : {}),
39
- ...(request.signal ? { signal: request.signal } : {}),
40
- redirect: "error",
41
- });
42
- if (!response.ok) {
43
- return {
44
- status: response.status,
45
- headers: response.headers,
46
- error: await response.json(),
47
- };
48
- }
49
- if (!response.body) {
50
- return {
51
- status: response.status,
52
- headers: response.headers,
53
- frames: emptyFrames(),
54
- };
55
- }
56
- const contentType = response.headers.get("content-type")?.split(";", 1)[0]?.trim();
57
- if (contentType !== "application/x-ndjson") {
58
- throw new AexStreamProtocolError("stream response was not application/x-ndjson");
59
- }
60
- return {
61
- status: response.status,
62
- headers: response.headers,
63
- frames: parseResponseNdjson(response.body),
64
- };
65
- }
66
- }
67
- async function* emptyFrames() { }
68
- async function* parseResponseNdjson(body) {
69
- const reader = body.getReader();
70
- const decoder = new TextDecoder();
71
- let pending = "";
72
- try {
73
- for (;;) {
74
- const { done, value } = await reader.read();
75
- if (done)
76
- break;
77
- pending += decoder.decode(value, { stream: true });
78
- for (;;) {
79
- const newline = pending.indexOf("\n");
80
- if (newline < 0)
81
- break;
82
- const line = pending.slice(0, newline).trim();
83
- pending = pending.slice(newline + 1);
84
- if (line)
85
- yield parseFrame(line);
86
- }
87
- }
88
- pending += decoder.decode();
89
- const final = pending.trim();
90
- if (final)
91
- yield parseFrame(final);
92
- }
93
- finally {
94
- reader.releaseLock();
95
- }
96
- }
97
- function parseFrame(line) {
98
- try {
99
- return JSON.parse(line);
100
- }
101
- catch {
102
- throw new AexStreamProtocolError("stream contained an invalid NDJSON frame");
103
- }
104
- }
105
- function toFetchBody(bytes) {
106
- const buffer = bytes.buffer;
107
- return buffer instanceof ArrayBuffer
108
- ? new Uint8Array(buffer, bytes.byteOffset, bytes.byteLength)
109
- : Uint8Array.from(bytes);
110
- }
111
- //# sourceMappingURL=transport.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/transport/transport.ts"],"names":[],"mappings":"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"}