@aexhq/sdk 0.25.2 → 0.26.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.
Files changed (53) hide show
  1. package/README.md +1 -1
  2. package/dist/_contracts/connection-ticket.d.ts +2 -2
  3. package/dist/_contracts/connection-ticket.js +2 -2
  4. package/dist/_contracts/event-stream-client.d.ts +2 -2
  5. package/dist/_contracts/event-stream-client.js +2 -2
  6. package/dist/_contracts/index.d.ts +1 -0
  7. package/dist/_contracts/index.js +1 -0
  8. package/dist/_contracts/operations.d.ts +13 -1
  9. package/dist/_contracts/operations.js +19 -0
  10. package/dist/_contracts/proxy-protocol.js +1 -1
  11. package/dist/_contracts/runtime-manifest.d.ts +1 -1
  12. package/dist/_contracts/runtime-sizes.d.ts +5 -0
  13. package/dist/_contracts/runtime-sizes.js +3 -1
  14. package/dist/_contracts/runtime-types.d.ts +18 -0
  15. package/dist/_contracts/submission.d.ts +22 -0
  16. package/dist/_contracts/submission.js +38 -0
  17. package/dist/_contracts/webhook-verify.d.ts +34 -0
  18. package/dist/_contracts/webhook-verify.js +94 -0
  19. package/dist/agents-md.d.ts +1 -1
  20. package/dist/agents-md.js +1 -1
  21. package/dist/agents-md.js.map +1 -1
  22. package/dist/asset-upload.js +2 -2
  23. package/dist/asset-upload.js.map +1 -1
  24. package/dist/bundle.d.ts +1 -1
  25. package/dist/bundle.js +2 -2
  26. package/dist/bundle.js.map +1 -1
  27. package/dist/cli.mjs +185 -134
  28. package/dist/cli.mjs.sha256 +1 -1
  29. package/dist/client.d.ts +22 -1
  30. package/dist/client.js +18 -0
  31. package/dist/client.js.map +1 -1
  32. package/dist/fetch-archive.js +2 -2
  33. package/dist/fetch-archive.js.map +1 -1
  34. package/dist/index.d.ts +4 -2
  35. package/dist/index.js +3 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/node-fs.d.ts +2 -2
  38. package/dist/node-fs.js +2 -2
  39. package/dist/skill.d.ts +2 -2
  40. package/dist/skill.js +2 -2
  41. package/dist/version.d.ts +1 -1
  42. package/dist/version.js +1 -1
  43. package/docs/credentials.md +3 -3
  44. package/docs/defaults.md +70 -0
  45. package/docs/limits-and-quotas.md +108 -0
  46. package/docs/provider-runtime-capabilities.md +1 -1
  47. package/docs/public-surface.json +1 -1
  48. package/docs/quickstart.md +1 -1
  49. package/docs/release.md +69 -101
  50. package/docs/testing.md +10 -9
  51. package/docs/vision-skills.md +2 -2
  52. package/package.json +15 -14
  53. package/LICENSE +0 -201
package/README.md CHANGED
@@ -15,7 +15,7 @@ The package ships:
15
15
  ## Install
16
16
 
17
17
  ```bash
18
- npm install @aexhq/sdk
18
+ bun add @aexhq/sdk
19
19
  ```
20
20
 
21
21
  ## First Run
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Connection tickets for the event-coordinator WebSocket handshake.
3
3
  *
4
- * A browser/Node WebSocket handshake cannot carry an Authorization header,
4
+ * A browser/runtime WebSocket handshake cannot carry an Authorization header,
5
5
  * so a subscriber first obtains a short-lived ticket from an authenticated
6
6
  * HTTP endpoint, then presents it as a `?ticket=` query parameter on the WS
7
7
  * upgrade. The ticket is an HMAC over `${runId}.${channel}.${exp}` keyed by
@@ -10,7 +10,7 @@
10
10
  *
11
11
  * This lives in shared so the coordinator (which verifies) and the API
12
12
  * hosted API's ticket broker (which mints, on behalf of a workspace token) use
13
- * ONE implementation. Pure Web Crypto — identical under Node and workerd.
13
+ * ONE implementation. Pure Web Crypto — identical under Bun, Node, and workerd.
14
14
  */
15
15
  export type ConnectionTicketChannel = "event" | "log" | "all";
16
16
  /** Mint a `${channel}.${exp}.${mac}` ticket valid for `ttlMs` from `nowMs`. */
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Connection tickets for the event-coordinator WebSocket handshake.
3
3
  *
4
- * A browser/Node WebSocket handshake cannot carry an Authorization header,
4
+ * A browser/runtime WebSocket handshake cannot carry an Authorization header,
5
5
  * so a subscriber first obtains a short-lived ticket from an authenticated
6
6
  * HTTP endpoint, then presents it as a `?ticket=` query parameter on the WS
7
7
  * upgrade. The ticket is an HMAC over `${runId}.${channel}.${exp}` keyed by
@@ -10,7 +10,7 @@
10
10
  *
11
11
  * This lives in shared so the coordinator (which verifies) and the API
12
12
  * hosted API's ticket broker (which mints, on behalf of a workspace token) use
13
- * ONE implementation. Pure Web Crypto — identical under Node and workerd.
13
+ * ONE implementation. Pure Web Crypto — identical under Bun, Node, and workerd.
14
14
  */
15
15
  const DEFAULT_TICKET_TTL_MS = 60_000;
16
16
  const encoder = new TextEncoder();
@@ -13,8 +13,8 @@
13
13
  * whole run): compose {@link filterStream} with the envelope guards, and
14
14
  * {@link mapStream} with {@link toAGUI}, on top of this stream.
15
15
  *
16
- * The WebSocket is injectable so the SDK/CLI use the Node/global `WebSocket`
17
- * (Node 22+ ships it; no dependency) and tests drive a fake.
16
+ * The WebSocket is injectable so the SDK/CLI use the global `WebSocket`
17
+ * (Bun and Node 22+ ship it; no dependency) and tests drive a fake.
18
18
  */
19
19
  import type { AexEvent } from "./event-envelope.js";
20
20
  /** The slice of the WHATWG WebSocket this client depends on. */
@@ -13,8 +13,8 @@
13
13
  * whole run): compose {@link filterStream} with the envelope guards, and
14
14
  * {@link mapStream} with {@link toAGUI}, on top of this stream.
15
15
  *
16
- * The WebSocket is injectable so the SDK/CLI use the Node/global `WebSocket`
17
- * (Node 22+ ships it; no dependency) and tests drive a fake.
16
+ * The WebSocket is injectable so the SDK/CLI use the global `WebSocket`
17
+ * (Bun and Node 22+ ship it; no dependency) and tests drive a fake.
18
18
  */
19
19
  const isTerminalType = (e) => e.type === "RUN_FINISHED" || e.type === "RUN_ERROR";
20
20
  export async function* streamCoordinatorEvents(opts) {
@@ -23,6 +23,7 @@ export * from "./sdk-secrets.js";
23
23
  export * from "./sdk-errors.js";
24
24
  export * from "./run-config.js";
25
25
  export * from "./runtime-types.js";
26
+ export * from "./webhook-verify.js";
26
27
  export * from "./http.js";
27
28
  export * from "./run-artifacts.js";
28
29
  export * as operations from "./operations.js";
@@ -23,6 +23,7 @@ export * from "./sdk-secrets.js";
23
23
  export * from "./sdk-errors.js";
24
24
  export * from "./run-config.js";
25
25
  export * from "./runtime-types.js";
26
+ export * from "./webhook-verify.js";
26
27
  export * from "./http.js";
27
28
  export * from "./run-artifacts.js";
28
29
  export * as operations from "./operations.js";
@@ -1,6 +1,6 @@
1
1
  import type { HttpClient } from "./http.js";
2
2
  import type { RunUnit } from "./run-unit.js";
3
- import type { AgentsMdRecord, FileRecord, Output, OutputLink, OutputLinkOptions, OutputFileDownload, OutputFileSelector, OutputFileType, OutputQuery, Run, RunEvent, SecretRecord, SecretReveal, Skill, WhoAmI } from "./runtime-types.js";
3
+ import type { AgentsMdRecord, FileRecord, Output, OutputLink, OutputLinkOptions, OutputFileDownload, OutputFileSelector, OutputFileType, OutputQuery, Run, RunEvent, RunWebhookDelivery, SecretRecord, SecretReveal, Skill, WhoAmI } from "./runtime-types.js";
4
4
  import type { PlatformRunSubmissionInput } from "./submission.js";
5
5
  /**
6
6
  * The single source of truth for SDK<->BFF transport. The SDK class
@@ -58,6 +58,18 @@ export declare function resolveOutputFileSelector(outputs: readonly Output[], se
58
58
  export declare function downloadOutput(http: HttpClient, runId: string, selector: OutputFileSelector): Promise<OutputFileDownload>;
59
59
  export declare function cancelRun(http: HttpClient, runId: string): Promise<void>;
60
60
  export declare function deleteRun(http: HttpClient, runId: string): Promise<void>;
61
+ /**
62
+ * List a run's webhook delivery attempts (the per-run delivery ledger). Returns
63
+ * the rows surfaced by `GET /api/runs/:id/webhook-deliveries`; an empty array
64
+ * means the run carried no `webhook` or has not reached a terminal state yet.
65
+ */
66
+ export declare function getRunWebhookDeliveries(http: HttpClient, runId: string): Promise<readonly RunWebhookDelivery[]>;
67
+ /**
68
+ * Manually re-trigger a run's webhook delivery: resets the row to `pending` and
69
+ * re-sends the frozen payload with the SAME `webhook-id` so the consumer
70
+ * dedupes. Idempotent from the caller's view.
71
+ */
72
+ export declare function redeliverRunWebhook(http: HttpClient, runId: string, deliveryId: string): Promise<void>;
61
73
  /**
62
74
  * Delete a workspace asset cache entry. Accepts an `asset_<id>` value,
63
75
  * `sha256:<hex>`, or a bare 64-hex digest. Workspace is derived server-side
@@ -152,6 +152,25 @@ export async function cancelRun(http, runId) {
152
152
  export async function deleteRun(http, runId) {
153
153
  await http.request(`/api/runs/${encodeURIComponent(runId)}`, { method: "DELETE" });
154
154
  }
155
+ /**
156
+ * List a run's webhook delivery attempts (the per-run delivery ledger). Returns
157
+ * the rows surfaced by `GET /api/runs/:id/webhook-deliveries`; an empty array
158
+ * means the run carried no `webhook` or has not reached a terminal state yet.
159
+ */
160
+ export async function getRunWebhookDeliveries(http, runId) {
161
+ const result = await http.request(`/api/runs/${encodeURIComponent(runId)}/webhook-deliveries`);
162
+ return Array.isArray(result)
163
+ ? result
164
+ : result.deliveries;
165
+ }
166
+ /**
167
+ * Manually re-trigger a run's webhook delivery: resets the row to `pending` and
168
+ * re-sends the frozen payload with the SAME `webhook-id` so the consumer
169
+ * dedupes. Idempotent from the caller's view.
170
+ */
171
+ export async function redeliverRunWebhook(http, runId, deliveryId) {
172
+ await http.request(`/api/runs/${encodeURIComponent(runId)}/webhook-deliveries/${encodeURIComponent(deliveryId)}/redeliver`, { method: "POST" });
173
+ }
155
174
  /**
156
175
  * Delete a workspace asset cache entry. Accepts an `asset_<id>` value,
157
176
  * `sha256:<hex>`, or a bare 64-hex digest. Workspace is derived server-side
@@ -1,5 +1,5 @@
1
1
  // Wire format between the in-container runtime bridge (mounted at
2
- // `/mnt/session/uploads/aex/aex`, invoked through `node`) and
2
+ // `/mnt/session/uploads/aex/aex`, invoked through `bun`) and
3
3
  // the Worker-owned named proxy route
4
4
  // (`POST /api/runs/:runId/proxy/:endpointName`).
5
5
  //
@@ -44,7 +44,7 @@ export interface RuntimeManifest {
44
44
  readonly filesRoot: string;
45
45
  /** Parent dir of non-SKILL.md asset mounts: `<assetsRoot>/<skl_id>/<rel-path>`. */
46
46
  readonly assetsRoot: string;
47
- /** Absolute path of the in-container aex runtime bridge (invoke via `node`). */
47
+ /** Absolute path of the in-container aex runtime bridge (invoke via `bun`). */
48
48
  readonly aexCli: string;
49
49
  /** Absolute path of the per-run proxy-endpoints manifest. */
50
50
  readonly indexJson: string;
@@ -14,6 +14,10 @@ export interface RuntimeResources {
14
14
  * Tokens intentionally remain stable product presets.
15
15
  */
16
16
  export declare const RUNTIME_SIZE_PRESETS: {
17
+ readonly "shared-1x-128mb": {
18
+ readonly cpus: 1;
19
+ readonly memoryMb: 128;
20
+ };
17
21
  readonly "shared-1x-256mb": {
18
22
  readonly cpus: 1;
19
23
  readonly memoryMb: 256;
@@ -90,6 +94,7 @@ export declare const DEFAULT_RUNTIME_SIZE: RuntimeSize;
90
94
  * resolves to the wire token `"shared-2x-2gb"`.
91
95
  */
92
96
  export declare const RuntimeSizes: {
97
+ readonly SHARED_1X_128MB: "shared-1x-128mb";
93
98
  readonly SHARED_1X_256MB: "shared-1x-256mb";
94
99
  readonly SHARED_1X_512MB: "shared-1x-512mb";
95
100
  readonly SHARED_1X_1GB: "shared-1x-1gb";
@@ -10,6 +10,7 @@
10
10
  * Tokens intentionally remain stable product presets.
11
11
  */
12
12
  export const RUNTIME_SIZE_PRESETS = {
13
+ "shared-1x-128mb": { cpus: 1, memoryMb: 128 },
13
14
  "shared-1x-256mb": { cpus: 1, memoryMb: 256 },
14
15
  "shared-1x-512mb": { cpus: 1, memoryMb: 512 },
15
16
  "shared-1x-1gb": { cpus: 1, memoryMb: 1024 },
@@ -30,12 +31,13 @@ export const RUNTIME_SIZE_PRESETS = {
30
31
  /** All preset tokens, ordered as declared. Handy for CLI help + validation. */
31
32
  export const RUNTIME_SIZES = Object.keys(RUNTIME_SIZE_PRESETS);
32
33
  /** Default when `runtimeSize` is omitted. */
33
- export const DEFAULT_RUNTIME_SIZE = "shared-1x-512mb";
34
+ export const DEFAULT_RUNTIME_SIZE = "shared-1x-128mb";
34
35
  /**
35
36
  * Symbol-style accessors for TS callers. `RuntimeSizes.SHARED_2X_2GB`
36
37
  * resolves to the wire token `"shared-2x-2gb"`.
37
38
  */
38
39
  export const RuntimeSizes = {
40
+ SHARED_1X_128MB: "shared-1x-128mb",
39
41
  SHARED_1X_256MB: "shared-1x-256mb",
40
42
  SHARED_1X_512MB: "shared-1x-512mb",
41
43
  SHARED_1X_1GB: "shared-1x-1gb",
@@ -77,6 +77,24 @@ export interface RunEvent {
77
77
  readonly level?: import("./event-envelope.js").AexLogLevel;
78
78
  readonly [key: string]: unknown;
79
79
  }
80
+ /** Status of a per-run webhook delivery. Terminal: delivered/exhausted/invalid. */
81
+ export type RunWebhookDeliveryStatus = "pending" | "delivering" | "retrying" | "delivered" | "exhausted" | "invalid";
82
+ /**
83
+ * One row of a run's webhook delivery ledger, as returned by
84
+ * `GET /api/runs/:id/webhook-deliveries`. `id` is the stable `webhook-id`
85
+ * header the consumer dedupes on across retries; the optional fields are
86
+ * populated only once a delivery attempt has been made.
87
+ */
88
+ export interface RunWebhookDelivery {
89
+ readonly id: string;
90
+ readonly eventType: string;
91
+ readonly status: RunWebhookDeliveryStatus;
92
+ readonly attemptCount: number;
93
+ readonly lastStatusCode?: number;
94
+ readonly lastError?: string;
95
+ readonly nextAttemptAt?: string;
96
+ readonly createdAt: string;
97
+ }
80
98
  /**
81
99
  * Provider-emitted event payload. Provider-specific fields are passed through
82
100
  * structurally so historical events and managed-runner events can be displayed
@@ -466,6 +466,19 @@ export interface PlatformRunSubmissionRequest {
466
466
  * so a forged value cannot bypass the cap.
467
467
  */
468
468
  readonly parentRunId?: string;
469
+ /**
470
+ * Optional per-run callback URL. The platform delivers exactly the terminal
471
+ * `run.finished` event to this URL at the settle-consistent barrier, signed
472
+ * Standard-Webhooks style. It is a sibling of {@link idempotencyKey} /
473
+ * {@link parentRunId} — an operational/delivery concern, NOT part of the
474
+ * hashed submission brief, so the same idempotency key with a different
475
+ * callback URL never 409s and the field never enters `request_hash`.
476
+ */
477
+ readonly webhook?: RunWebhookSpec;
478
+ }
479
+ /** Per-run webhook callback. v1: terminal-only; the URL must be https. */
480
+ export interface RunWebhookSpec {
481
+ readonly url: string;
469
482
  }
470
483
  /**
471
484
  * Wire shape posted by the SDK and CLI. `workspaceId` is **omitted by
@@ -506,6 +519,15 @@ export type PlatformRunSubmissionInput = Omit<PlatformRunSubmissionRequest, "wor
506
519
  export interface ParseRunSubmissionOptions {
507
520
  }
508
521
  export declare function parseRunSubmissionRequest(input: unknown, options?: ParseRunSubmissionOptions): PlatformRunSubmissionRequest;
522
+ /**
523
+ * Parse + SSRF-shape-validate the optional per-run `webhook`. The URL must be
524
+ * https with no userinfo (a `user:pass@host` URL is rejected — credentials must
525
+ * not ride in a callback URL). Unknown subfields are rejected so the strict
526
+ * top-level allow-list extends to the nested object. Returns `undefined` when
527
+ * absent. Delivery-time re-resolution + IP-deny checks live server-side; this
528
+ * is the submit-time shape gate.
529
+ */
530
+ export declare function parseRunWebhook(input: unknown): RunWebhookSpec | undefined;
509
531
  export declare function parseRunRegion(input: unknown): RunRegion | undefined;
510
532
  export declare function parseRuntimeKind(input: unknown): RuntimeKind | undefined;
511
533
  export declare function parseRunProvider(input: unknown): RunProvider;
@@ -1011,6 +1011,7 @@ export function parseRunSubmissionRequest(input, options = {}) {
1011
1011
  "postHook",
1012
1012
  "proxyEndpoints",
1013
1013
  "parentRunId",
1014
+ "webhook",
1014
1015
  SECRETS_KEY
1015
1016
  ]);
1016
1017
  for (const key of Object.keys(value)) {
@@ -1045,6 +1046,7 @@ export function parseRunSubmissionRequest(input, options = {}) {
1045
1046
  // Lineage parent only. `depth` is NEVER accepted from the wire — the server
1046
1047
  // derives it from the parent row (a forged depth must not bypass the cap).
1047
1048
  const parentRunId = optionalString(value.parentRunId, "submission.parentRunId");
1049
+ const webhook = parseRunWebhook(value.webhook);
1048
1050
  const postHook = parsePostHook(value.postHook, "submission.postHook");
1049
1051
  const proxyEndpoints = parseProxyEndpoints(value.proxyEndpoints);
1050
1052
  const secrets = parseInlineSecrets(value.secrets);
@@ -1099,9 +1101,45 @@ export function parseRunSubmissionRequest(input, options = {}) {
1099
1101
  ...(postHook !== undefined ? { postHook } : {}),
1100
1102
  ...(proxyEndpoints ? { proxyEndpoints } : {}),
1101
1103
  ...(parentRunId !== undefined ? { parentRunId } : {}),
1104
+ ...(webhook !== undefined ? { webhook } : {}),
1102
1105
  secrets
1103
1106
  };
1104
1107
  }
1108
+ /**
1109
+ * Parse + SSRF-shape-validate the optional per-run `webhook`. The URL must be
1110
+ * https with no userinfo (a `user:pass@host` URL is rejected — credentials must
1111
+ * not ride in a callback URL). Unknown subfields are rejected so the strict
1112
+ * top-level allow-list extends to the nested object. Returns `undefined` when
1113
+ * absent. Delivery-time re-resolution + IP-deny checks live server-side; this
1114
+ * is the submit-time shape gate.
1115
+ */
1116
+ export function parseRunWebhook(input) {
1117
+ if (input === undefined) {
1118
+ return undefined;
1119
+ }
1120
+ const value = requireRecord(input, "webhook");
1121
+ const allowed = new Set(["url"]);
1122
+ for (const key of Object.keys(value)) {
1123
+ if (!allowed.has(key)) {
1124
+ throw new Error(`webhook.${key} is not an allowed field; permitted: ${[...allowed].join(", ")}`);
1125
+ }
1126
+ }
1127
+ const url = requireString(value.url, "webhook.url");
1128
+ let parsed;
1129
+ try {
1130
+ parsed = new URL(url);
1131
+ }
1132
+ catch {
1133
+ throw new Error(`webhook.url must be a valid absolute URL (got ${JSON.stringify(url)})`);
1134
+ }
1135
+ if (parsed.protocol !== "https:") {
1136
+ throw new Error(`webhook.url must use https (got ${parsed.protocol.replace(/:$/, "")})`);
1137
+ }
1138
+ if (parsed.username !== "" || parsed.password !== "") {
1139
+ throw new Error("webhook.url must not contain userinfo (user:pass@host)");
1140
+ }
1141
+ return { url };
1142
+ }
1105
1143
  export function parseRunRegion(input) {
1106
1144
  if (input === undefined) {
1107
1145
  return undefined;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Customer-side verification for aex run webhooks (Standard Webhooks scheme).
3
+ *
4
+ * aex signs every delivery HMAC-SHA256 over `${webhook-id}.${webhook-timestamp}.${rawBody}`
5
+ * and sends three headers:
6
+ * - `webhook-id` : stable across retries (dedupe key)
7
+ * - `webhook-timestamp` : unix seconds at send time
8
+ * - `webhook-signature` : space-delimited list of `v1,<base64(hmac)>` entries
9
+ * (a list during secret rotation — accept ANY match)
10
+ *
11
+ * The secret is the workspace signing secret surfaced once as `whsec_<base64>`;
12
+ * the HMAC key is the raw bytes after the `whsec_` prefix. Verification accepts
13
+ * the secret with or without the prefix.
14
+ *
15
+ * Pure Web Crypto — identical under Bun, Node, and workerd; this mirrors the
16
+ * `standardwebhooks` library so a customer can verify with either.
17
+ */
18
+ export interface VerifyAexWebhookInput {
19
+ /** The exact bytes of the request body, as a string (do NOT re-serialize). */
20
+ readonly rawBody: string;
21
+ /** The inbound request headers (case-insensitive lookup). */
22
+ readonly headers: Headers | Readonly<Record<string, string | string[] | undefined>>;
23
+ /** The workspace signing secret, `whsec_<base64>` (or the bare base64). */
24
+ readonly secret: string;
25
+ /** Max allowed clock skew between `webhook-timestamp` and now. Default 300s. */
26
+ readonly toleranceSeconds?: number;
27
+ }
28
+ /**
29
+ * Verify an aex webhook delivery. Returns `true` only when the timestamp is
30
+ * within tolerance AND one of the `v1,<base64>` entries in `webhook-signature`
31
+ * matches the HMAC over `${id}.${timestamp}.${rawBody}`. Constant-time compare;
32
+ * never throws on a bad signature (only on a malformed secret).
33
+ */
34
+ export declare function verifyAexWebhook(input: VerifyAexWebhookInput): Promise<boolean>;
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Customer-side verification for aex run webhooks (Standard Webhooks scheme).
3
+ *
4
+ * aex signs every delivery HMAC-SHA256 over `${webhook-id}.${webhook-timestamp}.${rawBody}`
5
+ * and sends three headers:
6
+ * - `webhook-id` : stable across retries (dedupe key)
7
+ * - `webhook-timestamp` : unix seconds at send time
8
+ * - `webhook-signature` : space-delimited list of `v1,<base64(hmac)>` entries
9
+ * (a list during secret rotation — accept ANY match)
10
+ *
11
+ * The secret is the workspace signing secret surfaced once as `whsec_<base64>`;
12
+ * the HMAC key is the raw bytes after the `whsec_` prefix. Verification accepts
13
+ * the secret with or without the prefix.
14
+ *
15
+ * Pure Web Crypto — identical under Bun, Node, and workerd; this mirrors the
16
+ * `standardwebhooks` library so a customer can verify with either.
17
+ */
18
+ const encoder = new TextEncoder();
19
+ function headerValue(headers, name) {
20
+ if (headers instanceof Headers) {
21
+ return headers.get(name) ?? undefined;
22
+ }
23
+ const lower = name.toLowerCase();
24
+ for (const [key, value] of Object.entries(headers)) {
25
+ if (key.toLowerCase() === lower) {
26
+ return Array.isArray(value) ? value[0] : value ?? undefined;
27
+ }
28
+ }
29
+ return undefined;
30
+ }
31
+ /** Strip the `whsec_` prefix and decode the base64 key material to bytes. */
32
+ function decodeSecret(secret) {
33
+ const material = secret.startsWith("whsec_") ? secret.slice("whsec_".length) : secret;
34
+ const binary = atob(material);
35
+ const bytes = new Uint8Array(binary.length);
36
+ for (let i = 0; i < binary.length; i++)
37
+ bytes[i] = binary.charCodeAt(i);
38
+ return bytes;
39
+ }
40
+ async function hmacBase64(keyBytes, message) {
41
+ const key = await crypto.subtle.importKey("raw", keyBytes, { name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
42
+ const sig = await crypto.subtle.sign("HMAC", key, encoder.encode(message));
43
+ let binary = "";
44
+ const view = new Uint8Array(sig);
45
+ for (let i = 0; i < view.length; i++)
46
+ binary += String.fromCharCode(view[i]);
47
+ return btoa(binary);
48
+ }
49
+ /** Length-then-constant-time comparison of two strings. */
50
+ function timingSafeEqual(a, b) {
51
+ if (a.length !== b.length)
52
+ return false;
53
+ let diff = 0;
54
+ for (let i = 0; i < a.length; i++)
55
+ diff |= a.charCodeAt(i) ^ b.charCodeAt(i);
56
+ return diff === 0;
57
+ }
58
+ /**
59
+ * Verify an aex webhook delivery. Returns `true` only when the timestamp is
60
+ * within tolerance AND one of the `v1,<base64>` entries in `webhook-signature`
61
+ * matches the HMAC over `${id}.${timestamp}.${rawBody}`. Constant-time compare;
62
+ * never throws on a bad signature (only on a malformed secret).
63
+ */
64
+ export async function verifyAexWebhook(input) {
65
+ const toleranceSeconds = input.toleranceSeconds ?? 300;
66
+ const id = headerValue(input.headers, "webhook-id");
67
+ const timestamp = headerValue(input.headers, "webhook-timestamp");
68
+ const signatureHeader = headerValue(input.headers, "webhook-signature");
69
+ if (!id || !timestamp || !signatureHeader)
70
+ return false;
71
+ const ts = Number(timestamp);
72
+ if (!Number.isFinite(ts))
73
+ return false;
74
+ const nowSeconds = Math.floor(Date.now() / 1000);
75
+ if (Math.abs(nowSeconds - ts) > toleranceSeconds)
76
+ return false;
77
+ const keyBytes = decodeSecret(input.secret);
78
+ const expected = await hmacBase64(keyBytes, `${id}.${timestamp}.${input.rawBody}`);
79
+ // `webhook-signature` is a space-delimited list of versioned signatures; a
80
+ // single delivery may carry several (current + previous key during rotation).
81
+ for (const entry of signatureHeader.split(" ")) {
82
+ const comma = entry.indexOf(",");
83
+ if (comma === -1)
84
+ continue;
85
+ const version = entry.slice(0, comma);
86
+ const value = entry.slice(comma + 1);
87
+ if (version !== "v1")
88
+ continue;
89
+ if (timingSafeEqual(value, expected))
90
+ return true;
91
+ }
92
+ return false;
93
+ }
94
+ //# sourceMappingURL=webhook-verify.js.map
@@ -24,7 +24,7 @@ export declare class AgentsMd {
24
24
  static fromContent(content: string, args: {
25
25
  readonly name: string;
26
26
  }): Promise<AgentsMd>;
27
- /** Node-only convenience: read a markdown file from disk. */
27
+ /** Bun/Node filesystem convenience: read a markdown file from disk. */
28
28
  static fromPath(path: string, args: {
29
29
  readonly name: string;
30
30
  }): Promise<AgentsMd>;
package/dist/agents-md.js CHANGED
@@ -46,7 +46,7 @@ export class AgentsMd {
46
46
  const ref = { kind: "draft", name: args.name, contentHash };
47
47
  return new AgentsMd(ref, zip);
48
48
  }
49
- /** Node-only convenience: read a markdown file from disk. */
49
+ /** Bun/Node filesystem convenience: read a markdown file from disk. */
50
50
  static async fromPath(path, args) {
51
51
  const content = await readFile(path, "utf8");
52
52
  return AgentsMd.fromContent(content, args);
@@ -1 +1 @@
1
- {"version":3,"file":"agents-md.js","sourceRoot":"","sources":["../src/agents-md.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agents-md.js","sourceRoot":"","sources":["../src/agents-md.ts"],"names":[],"mappings":"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"}
@@ -138,14 +138,14 @@ async function uploadAssetBuffered(args, actualHex) {
138
138
  // ---------------------------------------------------------------------------
139
139
  /**
140
140
  * Compute SHA-256 over `bytes` and return the lowercase hex digest.
141
- * Uses Web Crypto when available (Node 18+ / browser); the SDK already
141
+ * Uses Web Crypto when available (Bun / Node 18+ / browser); the SDK already
142
142
  * requires Web Crypto for `hashSkillBundle`.
143
143
  */
144
144
  async function computeSha256Hex(bytes) {
145
145
  const subtle = globalThis.crypto?.subtle;
146
146
  if (!subtle) {
147
147
  throw new Error("uploadAsset: globalThis.crypto.subtle is not available; " +
148
- "Node 18+ or a Web-Crypto-capable runtime is required");
148
+ "Bun, Node 18+, or a Web-Crypto-capable runtime is required");
149
149
  }
150
150
  const copy = new Uint8Array(bytes.byteLength);
151
151
  copy.set(bytes);
@@ -1 +1 @@
1
- {"version":3,"file":"asset-upload.js","sourceRoot":"","sources":["../src/asset-upload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"asset-upload.js","sourceRoot":"","sources":["../src/asset-upload.ts"],"names":[],"mappings":"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"}
package/dist/bundle.d.ts CHANGED
@@ -40,7 +40,7 @@ export declare function bundleToolFiles(files: SkillFiles, manifest: ToolBundleM
40
40
  * `Skill.fromFiles` / `Skill.fromPath` to populate the
41
41
  * `InlineSkillRef.contentHash` field. The hash is advisory — the BFF
42
42
  * recomputes server-side after re-canonicalising the zip; a mismatch is
43
- * rejected. Web-Crypto-only so the SDK works in Node, edge runtimes,
43
+ * rejected. Web-Crypto-only so the SDK works in Bun, Node, edge runtimes,
44
44
  * and browsers without polyfills.
45
45
  */
46
46
  export declare function hashSkillBundle(zipBytes: Uint8Array): Promise<string>;
package/dist/bundle.js CHANGED
@@ -110,13 +110,13 @@ const ZIP_EPOCH = new Date(Date.UTC(1980, 0, 1));
110
110
  * `Skill.fromFiles` / `Skill.fromPath` to populate the
111
111
  * `InlineSkillRef.contentHash` field. The hash is advisory — the BFF
112
112
  * recomputes server-side after re-canonicalising the zip; a mismatch is
113
- * rejected. Web-Crypto-only so the SDK works in Node, edge runtimes,
113
+ * rejected. Web-Crypto-only so the SDK works in Bun, Node, edge runtimes,
114
114
  * and browsers without polyfills.
115
115
  */
116
116
  export async function hashSkillBundle(zipBytes) {
117
117
  const subtle = globalThis.crypto?.subtle;
118
118
  if (!subtle) {
119
- throw new Error("hashSkillBundle: globalThis.crypto.subtle is not available; Node 18+ or a Web-Crypto-capable runtime is required");
119
+ throw new Error("hashSkillBundle: globalThis.crypto.subtle is not available; Bun, Node 18+, or a Web-Crypto-capable runtime is required");
120
120
  }
121
121
  // crypto.subtle.digest expects a BufferSource. Pass a freshly-sliced
122
122
  // copy to detach from any external Uint8Array view (Web Crypto rejects
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"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"}