@aexhq/sdk 0.46.5-canary → 0.51.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 (346) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +38 -0
  3. package/README.md +54 -29
  4. package/dist/client/aex.d.ts +33 -0
  5. package/dist/client/aex.js +108 -0
  6. package/dist/client/aex.js.map +1 -0
  7. package/dist/client/credentials.d.ts +25 -0
  8. package/dist/client/credentials.js +97 -0
  9. package/dist/client/credentials.js.map +1 -0
  10. package/dist/client/routing.d.ts +7 -0
  11. package/dist/client/routing.js +29 -0
  12. package/dist/client/routing.js.map +1 -0
  13. package/dist/downloads/download.d.ts +18 -0
  14. package/dist/downloads/download.js +67 -0
  15. package/dist/downloads/download.js.map +1 -0
  16. package/dist/generated/errors.d.ts +12 -0
  17. package/dist/generated/errors.js +82 -0
  18. package/dist/generated/errors.js.map +1 -0
  19. package/dist/generated/models.d.ts +1392 -0
  20. package/dist/generated/models.js +62 -0
  21. package/dist/generated/models.js.map +1 -0
  22. package/dist/generated/resources.d.ts +710 -0
  23. package/dist/generated/resources.js +582 -0
  24. package/dist/generated/resources.js.map +1 -0
  25. package/dist/generated/routes.d.ts +44 -0
  26. package/dist/generated/routes.js +1905 -0
  27. package/dist/generated/routes.js.map +1 -0
  28. package/dist/index.d.ts +21 -50
  29. package/dist/index.js +14 -62
  30. package/dist/index.js.map +1 -1
  31. package/dist/node/session-file-limits.d.ts +4 -0
  32. package/dist/node/session-file-limits.js +7 -0
  33. package/dist/node/session-file-limits.js.map +1 -0
  34. package/dist/node/session-files.d.ts +80 -0
  35. package/dist/node/session-files.js +254 -0
  36. package/dist/node/session-files.js.map +1 -0
  37. package/dist/observations/stream.d.ts +1 -0
  38. package/dist/observations/stream.js +18 -0
  39. package/dist/observations/stream.js.map +1 -0
  40. package/dist/transport/errors.d.ts +60 -0
  41. package/dist/transport/errors.js +107 -0
  42. package/dist/transport/errors.js.map +1 -0
  43. package/dist/transport/pagination.d.ts +8 -0
  44. package/dist/transport/pagination.js +34 -0
  45. package/dist/transport/pagination.js.map +1 -0
  46. package/dist/transport/retry.d.ts +21 -0
  47. package/dist/transport/retry.js +37 -0
  48. package/dist/transport/retry.js.map +1 -0
  49. package/dist/transport/transport.d.ts +25 -0
  50. package/dist/transport/transport.js +33 -0
  51. package/dist/transport/transport.js.map +1 -0
  52. package/package.json +67 -30
  53. package/dist/_contracts/account-operations.d.ts +0 -101
  54. package/dist/_contracts/account-operations.js +0 -242
  55. package/dist/_contracts/account-types.d.ts +0 -461
  56. package/dist/_contracts/account-types.js +0 -1
  57. package/dist/_contracts/api-key.d.ts +0 -61
  58. package/dist/_contracts/api-key.js +0 -101
  59. package/dist/_contracts/api-routes.d.ts +0 -20
  60. package/dist/_contracts/api-routes.js +0 -109
  61. package/dist/_contracts/archive-limits.d.ts +0 -3
  62. package/dist/_contracts/archive-limits.js +0 -23
  63. package/dist/_contracts/asset-authoring.d.ts +0 -22
  64. package/dist/_contracts/asset-authoring.js +0 -106
  65. package/dist/_contracts/asset-bundle.d.ts +0 -64
  66. package/dist/_contracts/asset-bundle.js +0 -263
  67. package/dist/_contracts/asset-upload-helper.d.ts +0 -31
  68. package/dist/_contracts/asset-upload-helper.js +0 -84
  69. package/dist/_contracts/billing-admission.d.ts +0 -29
  70. package/dist/_contracts/billing-admission.js +0 -28
  71. package/dist/_contracts/bundle-manifest.d.ts +0 -89
  72. package/dist/_contracts/bundle-manifest.js +0 -158
  73. package/dist/_contracts/canonical-sha256.d.ts +0 -8
  74. package/dist/_contracts/canonical-sha256.js +0 -8
  75. package/dist/_contracts/connection-ticket.d.ts +0 -22
  76. package/dist/_contracts/connection-ticket.js +0 -54
  77. package/dist/_contracts/continuation-event.d.ts +0 -31
  78. package/dist/_contracts/continuation-event.js +0 -6
  79. package/dist/_contracts/contract-parse-error.d.ts +0 -12
  80. package/dist/_contracts/contract-parse-error.js +0 -51
  81. package/dist/_contracts/error-codes.d.ts +0 -26
  82. package/dist/_contracts/error-codes.js +0 -116
  83. package/dist/_contracts/error-factory.d.ts +0 -32
  84. package/dist/_contracts/error-factory.js +0 -174
  85. package/dist/_contracts/event-envelope.d.ts +0 -471
  86. package/dist/_contracts/event-envelope.js +0 -501
  87. package/dist/_contracts/event-stream-client.d.ts +0 -122
  88. package/dist/_contracts/event-stream-client.js +0 -445
  89. package/dist/_contracts/event-view.d.ts +0 -44
  90. package/dist/_contracts/event-view.js +0 -69
  91. package/dist/_contracts/failure-class.d.ts +0 -29
  92. package/dist/_contracts/failure-class.js +0 -73
  93. package/dist/_contracts/http.d.ts +0 -135
  94. package/dist/_contracts/http.js +0 -434
  95. package/dist/_contracts/ids.d.ts +0 -66
  96. package/dist/_contracts/ids.js +0 -119
  97. package/dist/_contracts/index.d.ts +0 -42
  98. package/dist/_contracts/index.js +0 -52
  99. package/dist/_contracts/internal.d.ts +0 -55
  100. package/dist/_contracts/internal.js +0 -113
  101. package/dist/_contracts/models.d.ts +0 -30
  102. package/dist/_contracts/models.js +0 -28
  103. package/dist/_contracts/operation-core.d.ts +0 -36
  104. package/dist/_contracts/operation-core.js +0 -70
  105. package/dist/_contracts/operations.d.ts +0 -218
  106. package/dist/_contracts/operations.js +0 -1496
  107. package/dist/_contracts/otlp-projection.d.ts +0 -78
  108. package/dist/_contracts/otlp-projection.js +0 -171
  109. package/dist/_contracts/post-hook.d.ts +0 -31
  110. package/dist/_contracts/post-hook.js +0 -61
  111. package/dist/_contracts/provider-fault.d.ts +0 -34
  112. package/dist/_contracts/provider-fault.js +0 -68
  113. package/dist/_contracts/retry-core.d.ts +0 -29
  114. package/dist/_contracts/retry-core.js +0 -79
  115. package/dist/_contracts/runner-event.d.ts +0 -117
  116. package/dist/_contracts/runner-event.js +0 -172
  117. package/dist/_contracts/runtime-kind.d.ts +0 -60
  118. package/dist/_contracts/runtime-kind.js +0 -70
  119. package/dist/_contracts/runtime-manifest.d.ts +0 -121
  120. package/dist/_contracts/runtime-manifest.js +0 -83
  121. package/dist/_contracts/runtime-security-profile.d.ts +0 -26
  122. package/dist/_contracts/runtime-security-profile.js +0 -73
  123. package/dist/_contracts/runtime-sizes.d.ts +0 -104
  124. package/dist/_contracts/runtime-sizes.js +0 -111
  125. package/dist/_contracts/runtime-types.d.ts +0 -618
  126. package/dist/_contracts/runtime-types.js +0 -58
  127. package/dist/_contracts/schemas/asset-bundle.d.ts +0 -70
  128. package/dist/_contracts/schemas/asset-bundle.js +0 -107
  129. package/dist/_contracts/schemas/asset-ref.d.ts +0 -61
  130. package/dist/_contracts/schemas/asset-ref.js +0 -118
  131. package/dist/_contracts/schemas/bundle-manifest.d.ts +0 -66
  132. package/dist/_contracts/schemas/bundle-manifest.js +0 -77
  133. package/dist/_contracts/schemas/index.d.ts +0 -32
  134. package/dist/_contracts/schemas/index.js +0 -30
  135. package/dist/_contracts/schemas/mcp-server.d.ts +0 -99
  136. package/dist/_contracts/schemas/mcp-server.js +0 -209
  137. package/dist/_contracts/schemas/models.d.ts +0 -29
  138. package/dist/_contracts/schemas/models.js +0 -51
  139. package/dist/_contracts/schemas/numeric.d.ts +0 -18
  140. package/dist/_contracts/schemas/numeric.js +0 -28
  141. package/dist/_contracts/schemas/post-hook.d.ts +0 -45
  142. package/dist/_contracts/schemas/post-hook.js +0 -68
  143. package/dist/_contracts/schemas/response-assets.d.ts +0 -75
  144. package/dist/_contracts/schemas/response-assets.js +0 -81
  145. package/dist/_contracts/schemas/response-billing.d.ts +0 -208
  146. package/dist/_contracts/schemas/response-billing.js +0 -139
  147. package/dist/_contracts/schemas/response-common.d.ts +0 -132
  148. package/dist/_contracts/schemas/response-common.js +0 -162
  149. package/dist/_contracts/schemas/response-identity.d.ts +0 -648
  150. package/dist/_contracts/schemas/response-identity.js +0 -131
  151. package/dist/_contracts/schemas/response-mcp-servers.d.ts +0 -51
  152. package/dist/_contracts/schemas/response-mcp-servers.js +0 -32
  153. package/dist/_contracts/schemas/response-secrets.d.ts +0 -50
  154. package/dist/_contracts/schemas/response-secrets.js +0 -32
  155. package/dist/_contracts/schemas/response-sessions-internal.d.ts +0 -200
  156. package/dist/_contracts/schemas/response-sessions-internal.js +0 -142
  157. package/dist/_contracts/schemas/response-sessions.d.ts +0 -1598
  158. package/dist/_contracts/schemas/response-sessions.js +0 -377
  159. package/dist/_contracts/schemas/response-webhooks.d.ts +0 -76
  160. package/dist/_contracts/schemas/response-webhooks.js +0 -42
  161. package/dist/_contracts/schemas/response-workspace.d.ts +0 -225
  162. package/dist/_contracts/schemas/response-workspace.js +0 -99
  163. package/dist/_contracts/schemas/runtime-kind.d.ts +0 -31
  164. package/dist/_contracts/schemas/runtime-kind.js +0 -29
  165. package/dist/_contracts/schemas/runtime-security-profile.d.ts +0 -28
  166. package/dist/_contracts/schemas/runtime-security-profile.js +0 -26
  167. package/dist/_contracts/schemas/runtime-sizes.d.ts +0 -70
  168. package/dist/_contracts/schemas/runtime-sizes.js +0 -127
  169. package/dist/_contracts/schemas/session-limits.d.ts +0 -34
  170. package/dist/_contracts/schemas/session-limits.js +0 -39
  171. package/dist/_contracts/schemas/session-machine.d.ts +0 -23
  172. package/dist/_contracts/schemas/session-machine.js +0 -24
  173. package/dist/_contracts/schemas/session-request-config.d.ts +0 -58
  174. package/dist/_contracts/schemas/session-request-config.js +0 -134
  175. package/dist/_contracts/schemas/session-webhook.d.ts +0 -11
  176. package/dist/_contracts/schemas/session-webhook.js +0 -38
  177. package/dist/_contracts/schemas/side-effect-audit.d.ts +0 -98
  178. package/dist/_contracts/schemas/side-effect-audit.js +0 -102
  179. package/dist/_contracts/schemas/submission-assets.d.ts +0 -117
  180. package/dist/_contracts/schemas/submission-assets.js +0 -147
  181. package/dist/_contracts/schemas/submission-body.d.ts +0 -251
  182. package/dist/_contracts/schemas/submission-body.js +0 -378
  183. package/dist/_contracts/schemas/submission-environment.d.ts +0 -79
  184. package/dist/_contracts/schemas/submission-environment.js +0 -179
  185. package/dist/_contracts/schemas/submission-request.d.ts +0 -158
  186. package/dist/_contracts/schemas/submission-request.js +0 -49
  187. package/dist/_contracts/schemas/submission-secrets.d.ts +0 -47
  188. package/dist/_contracts/schemas/submission-secrets.js +0 -108
  189. package/dist/_contracts/schemas/wire.d.ts +0 -118
  190. package/dist/_contracts/schemas/wire.js +0 -171
  191. package/dist/_contracts/schemas/workspace-resources.d.ts +0 -50
  192. package/dist/_contracts/schemas/workspace-resources.js +0 -87
  193. package/dist/_contracts/sdk-errors.d.ts +0 -212
  194. package/dist/_contracts/sdk-errors.js +0 -313
  195. package/dist/_contracts/sdk-secrets.d.ts +0 -67
  196. package/dist/_contracts/sdk-secrets.js +0 -427
  197. package/dist/_contracts/session-archive.d.ts +0 -16
  198. package/dist/_contracts/session-archive.js +0 -92
  199. package/dist/_contracts/session-artifacts.d.ts +0 -189
  200. package/dist/_contracts/session-artifacts.js +0 -264
  201. package/dist/_contracts/session-config.d.ts +0 -373
  202. package/dist/_contracts/session-config.js +0 -562
  203. package/dist/_contracts/session-cost-types.d.ts +0 -211
  204. package/dist/_contracts/session-cost-types.js +0 -69
  205. package/dist/_contracts/session-cost.d.ts +0 -8
  206. package/dist/_contracts/session-cost.js +0 -582
  207. package/dist/_contracts/session-custody.d.ts +0 -165
  208. package/dist/_contracts/session-custody.js +0 -345
  209. package/dist/_contracts/session-file-query.d.ts +0 -14
  210. package/dist/_contracts/session-file-query.js +0 -178
  211. package/dist/_contracts/session-record.d.ts +0 -112
  212. package/dist/_contracts/session-record.js +0 -165
  213. package/dist/_contracts/session-retention.d.ts +0 -201
  214. package/dist/_contracts/session-retention.js +0 -450
  215. package/dist/_contracts/side-effect-audit.d.ts +0 -126
  216. package/dist/_contracts/side-effect-audit.js +0 -520
  217. package/dist/_contracts/sse.d.ts +0 -74
  218. package/dist/_contracts/sse.js +0 -227
  219. package/dist/_contracts/stable.d.ts +0 -45
  220. package/dist/_contracts/stable.js +0 -62
  221. package/dist/_contracts/status.d.ts +0 -25
  222. package/dist/_contracts/status.js +0 -57
  223. package/dist/_contracts/submission-limits.d.ts +0 -61
  224. package/dist/_contracts/submission-limits.js +0 -60
  225. package/dist/_contracts/submission.d.ts +0 -547
  226. package/dist/_contracts/submission.js +0 -812
  227. package/dist/_contracts/suggest.d.ts +0 -15
  228. package/dist/_contracts/suggest.js +0 -53
  229. package/dist/_contracts/testing/response-bindings.d.ts +0 -45
  230. package/dist/_contracts/testing/response-bindings.js +0 -256
  231. package/dist/_contracts/testing/wire-conformance-entry.d.ts +0 -10
  232. package/dist/_contracts/testing/wire-conformance-entry.js +0 -8
  233. package/dist/_contracts/testing/wire-conformance.d.ts +0 -169
  234. package/dist/_contracts/testing/wire-conformance.js +0 -276
  235. package/dist/_contracts/turn-trace.d.ts +0 -28
  236. package/dist/_contracts/turn-trace.js +0 -1
  237. package/dist/_contracts/unknown-field-error.d.ts +0 -13
  238. package/dist/_contracts/unknown-field-error.js +0 -21
  239. package/dist/_contracts/value-guards.d.ts +0 -20
  240. package/dist/_contracts/value-guards.js +0 -34
  241. package/dist/_contracts/webhook-verify.d.ts +0 -34
  242. package/dist/_contracts/webhook-verify.js +0 -93
  243. package/dist/_contracts/wire-observer.d.ts +0 -49
  244. package/dist/_contracts/wire-observer.js +0 -34
  245. package/dist/_contracts/workflow-status.d.ts +0 -7
  246. package/dist/_contracts/workflow-status.js +0 -43
  247. package/dist/_contracts/workspace-resources.d.ts +0 -98
  248. package/dist/_contracts/workspace-resources.js +0 -39
  249. package/dist/archive-limits.d.ts +0 -1
  250. package/dist/archive-limits.js +0 -2
  251. package/dist/archive-limits.js.map +0 -1
  252. package/dist/asset-upload.d.ts +0 -47
  253. package/dist/asset-upload.js +0 -269
  254. package/dist/asset-upload.js.map +0 -1
  255. package/dist/bundle.d.ts +0 -9
  256. package/dist/bundle.js +0 -20
  257. package/dist/bundle.js.map +0 -1
  258. package/dist/canonical-zip.d.ts +0 -68
  259. package/dist/canonical-zip.js +0 -355
  260. package/dist/canonical-zip.js.map +0 -1
  261. package/dist/cli.mjs +0 -12048
  262. package/dist/cli.mjs.sha256 +0 -1
  263. package/dist/client-types.d.ts +0 -192
  264. package/dist/client-types.js +0 -2
  265. package/dist/client-types.js.map +0 -1
  266. package/dist/client.d.ts +0 -464
  267. package/dist/client.js +0 -1207
  268. package/dist/client.js.map +0 -1
  269. package/dist/event-projection.d.ts +0 -22
  270. package/dist/event-projection.js +0 -380
  271. package/dist/event-projection.js.map +0 -1
  272. package/dist/fetch-archive.d.ts +0 -16
  273. package/dist/fetch-archive.js +0 -252
  274. package/dist/fetch-archive.js.map +0 -1
  275. package/dist/file.d.ts +0 -96
  276. package/dist/file.js +0 -272
  277. package/dist/file.js.map +0 -1
  278. package/dist/instructions.d.ts +0 -20
  279. package/dist/instructions.js +0 -40
  280. package/dist/instructions.js.map +0 -1
  281. package/dist/legacy-session-provider-fault.d.ts +0 -7
  282. package/dist/legacy-session-provider-fault.js +0 -38
  283. package/dist/legacy-session-provider-fault.js.map +0 -1
  284. package/dist/mcp-server.d.ts +0 -84
  285. package/dist/mcp-server.js +0 -117
  286. package/dist/mcp-server.js.map +0 -1
  287. package/dist/node-fs.d.ts +0 -29
  288. package/dist/node-fs.js +0 -19
  289. package/dist/node-fs.js.map +0 -1
  290. package/dist/node-walk.d.ts +0 -69
  291. package/dist/node-walk.js +0 -151
  292. package/dist/node-walk.js.map +0 -1
  293. package/dist/path-basename.d.ts +0 -5
  294. package/dist/path-basename.js +0 -9
  295. package/dist/path-basename.js.map +0 -1
  296. package/dist/retry.d.ts +0 -70
  297. package/dist/retry.js +0 -155
  298. package/dist/retry.js.map +0 -1
  299. package/dist/secret.d.ts +0 -65
  300. package/dist/secret.js +0 -110
  301. package/dist/secret.js.map +0 -1
  302. package/dist/session-validate.d.ts +0 -100
  303. package/dist/session-validate.js +0 -303
  304. package/dist/session-validate.js.map +0 -1
  305. package/dist/skill.d.ts +0 -99
  306. package/dist/skill.js +0 -169
  307. package/dist/skill.js.map +0 -1
  308. package/dist/submission-wire.d.ts +0 -13
  309. package/dist/submission-wire.js +0 -69
  310. package/dist/submission-wire.js.map +0 -1
  311. package/dist/tool.d.ts +0 -41
  312. package/dist/tool.js +0 -76
  313. package/dist/tool.js.map +0 -1
  314. package/dist/version.d.ts +0 -9
  315. package/dist/version.js +0 -10
  316. package/dist/version.js.map +0 -1
  317. package/docs/authentication.md +0 -125
  318. package/docs/billing.md +0 -164
  319. package/docs/cleanup.md +0 -27
  320. package/docs/concepts/agent-tools.md +0 -47
  321. package/docs/concepts/composition.md +0 -60
  322. package/docs/concepts/providers-and-runtimes.md +0 -121
  323. package/docs/concepts/sessions.md +0 -51
  324. package/docs/concepts/subagents.md +0 -35
  325. package/docs/credentials.md +0 -116
  326. package/docs/defaults.md +0 -51
  327. package/docs/errors.md +0 -258
  328. package/docs/events.md +0 -143
  329. package/docs/files.md +0 -130
  330. package/docs/limits-and-quotas.md +0 -114
  331. package/docs/limits.md +0 -51
  332. package/docs/mcp.md +0 -47
  333. package/docs/networking.md +0 -114
  334. package/docs/provider-runtime-capabilities.md +0 -32
  335. package/docs/public-surface.json +0 -73
  336. package/docs/quickstart.md +0 -135
  337. package/docs/release.md +0 -44
  338. package/docs/retries.md +0 -108
  339. package/docs/secrets.md +0 -141
  340. package/docs/session-config.md +0 -51
  341. package/docs/session-record.md +0 -58
  342. package/docs/skills.md +0 -65
  343. package/docs/telemetry.md +0 -66
  344. package/docs/testing.md +0 -35
  345. package/docs/vision-skills.md +0 -94
  346. package/docs/webhooks.md +0 -143
@@ -1,242 +0,0 @@
1
- import { SessionStateError } from "./sdk-errors.js";
2
- import { isRecord } from "./value-guards.js";
3
- import { configError, resolveIdempotencyKey } from "./operation-core.js";
4
- /**
5
- * Read the workspace billing summary (`GET /api/billing`, scope `billing:read`):
6
- * prepaid balance, current-month spend, spend cap, the free monthly allowances,
7
- * auto-recharge settings and the saved card.
8
- */
9
- export async function getBilling(http) {
10
- return http.request("/api/billing");
11
- }
12
- function rejectBodyIdempotencyKey(request) {
13
- if (isRecord(request) && Object.prototype.hasOwnProperty.call(request, "idempotencyKey")) {
14
- throw configError("idempotencyKey", "billing idempotencyKey belongs in the second options argument, not the request body");
15
- }
16
- }
17
- function resolveBillingIdempotencyKey(request, options) {
18
- rejectBodyIdempotencyKey(request);
19
- const idempotencyKey = resolveIdempotencyKey(options?.idempotencyKey);
20
- return idempotencyKey;
21
- }
22
- /**
23
- * Buy prepaid credit (`POST /api/billing/topup/checkout`). Returns only the
24
- * hosted URL; the balance moves after the charge settles, not when this
25
- * resolves. The same flow captures the card on first use.
26
- */
27
- export async function createBillingTopupCheckout(http, request, options) {
28
- const idempotencyKey = resolveBillingIdempotencyKey(request, options);
29
- return http.request("/api/billing/topup/checkout", {
30
- method: "POST",
31
- headers: { "Idempotency-Key": idempotencyKey },
32
- body: JSON.stringify(request)
33
- });
34
- }
35
- /**
36
- * Update auto-recharge (`PATCH /api/billing/autotopup`). Omitted fields keep
37
- * their stored value; the response echoes the stored settings.
38
- *
39
- * No idempotency key: this is a whole-state PATCH, so a replay writes the same
40
- * row. The body guard stays — an `idempotencyKey` in the body was never a
41
- * request field and silently ignoring it would look like it worked.
42
- */
43
- export async function updateBillingAutoTopup(http, request) {
44
- rejectBodyIdempotencyKey(request);
45
- return http.request("/api/billing/autotopup", {
46
- method: "PATCH",
47
- body: JSON.stringify(request)
48
- });
49
- }
50
- /**
51
- * Create a hosted billing-portal session for the workspace customer.
52
- * Returns only the hosted URL.
53
- */
54
- export async function createBillingPortal(http, request = {}, options) {
55
- const idempotencyKey = resolveBillingIdempotencyKey(request, options);
56
- return http.request("/api/billing/portal", {
57
- method: "POST",
58
- headers: { "Idempotency-Key": idempotencyKey },
59
- body: JSON.stringify(request)
60
- });
61
- }
62
- /**
63
- * Read recent workspace credit-ledger rows (`GET /api/billing/ledger`, scope
64
- * `billing:read`), newest first. `limit` is clamped server-side to [1, 100]
65
- * (default 25); the read is not cursor-paged.
66
- */
67
- export async function getBillingLedger(http, query) {
68
- const params = {};
69
- if (query?.limit !== undefined)
70
- params.limit = String(query.limit);
71
- return http.request("/api/billing/ledger", {}, params);
72
- }
73
- /**
74
- * Reveal the workspace webhook signing secret (`POST /api/webhook/signing-secret`),
75
- * CREATING one on first use. Repeat calls return the same `whsec_<base64>` value —
76
- * the hosted API does not rotate it. POST (not GET) so a reveal is a logged action.
77
- * Pass the returned `whsec` to `verifyAexWebhook` as `secret`.
78
- */
79
- export async function getWebhookSigningSecret(http) {
80
- return http.request("/api/webhook/signing-secret", { method: "POST" });
81
- }
82
- // ===========================================================================
83
- // Workspace secret operations
84
- //
85
- // Value-bearing requests (create/rotate) carry the value in the JSON BODY,
86
- // never the URL/query, so it never lands in logs or the request line. Reads
87
- // return metadata only; persisted secret values are write-only through this API.
88
- // ===========================================================================
89
- /** Create a named workspace secret. The value travels in the body. */
90
- export async function createSecret(http, args) {
91
- const result = await http.request("/api/secrets", {
92
- method: "POST",
93
- body: JSON.stringify({ name: args.name, value: args.value })
94
- });
95
- return unwrapSecret(result);
96
- }
97
- export async function listSecrets(http) {
98
- const result = await http.request("/api/secrets");
99
- if (!isRecord(result) || !Array.isArray(result.secrets)) {
100
- throw new SessionStateError("workspace secrets response must contain a secrets array");
101
- }
102
- return result.secrets;
103
- }
104
- /** Metadata for one workspace secret by name. Never returns the value. */
105
- export async function getSecret(http, name) {
106
- const result = await http.request(`/api/secrets/${encodeURIComponent(name)}`);
107
- return unwrapSecret(result);
108
- }
109
- /** Replace the value of an existing workspace secret; bumps its version. */
110
- export async function rotateSecret(http, args) {
111
- const result = await http.request(`/api/secrets/${encodeURIComponent(args.name)}/rotate`, { method: "POST", body: JSON.stringify({ value: args.value }) });
112
- return unwrapSecret(result);
113
- }
114
- export async function deleteSecret(http, name) {
115
- await http.request(`/api/secrets/${encodeURIComponent(name)}`, {
116
- method: "DELETE"
117
- });
118
- }
119
- function unwrapSecret(result) {
120
- if (!isRecord(result) || !isRecord(result.secret)) {
121
- throw new SessionStateError("workspace secret response must contain a secret object");
122
- }
123
- return result.secret;
124
- }
125
- // ===========================================================================
126
- // Control-plane operations (orgs / workspaces / API keys / members)
127
- //
128
- // These target the ACCOUNT/control-plane surface on the dashboard BFF — reached
129
- // with an account PAT / device session, NOT a data-plane workspace key. They
130
- // mirror the publish/list/get/delete generic and the value-bearing one-time
131
- // reveal shapes above (create returns the key exactly once). Endpoints:
132
- // orgs: POST/GET /api/orgs, GET /api/orgs/:orgId/members,
133
- // POST /api/orgs/:orgId/invites
134
- // workspaces: POST/GET /api/workspaces, DELETE /api/workspaces/:id
135
- // keys: POST/GET /api/keys, DELETE /api/keys/:id
136
- // Workspace/org identity is passed EXPLICITLY here (unlike the data plane, which
137
- // derives the workspace from the key) because a control-plane principal spans
138
- // multiple orgs and workspaces.
139
- // ===========================================================================
140
- /** Create an org (the caller becomes its admin). `POST /api/orgs`. */
141
- export async function createOrg(http, request) {
142
- const result = await http.request("/api/orgs", {
143
- method: "POST",
144
- body: JSON.stringify(request)
145
- });
146
- return unwrapControlRecord(result, "org", "org");
147
- }
148
- /** List the orgs the caller belongs to. `GET /api/orgs`. */
149
- export async function listOrgs(http) {
150
- return listControlRecords(http, "/api/orgs", "orgs");
151
- }
152
- /** List an org's members (and pending invites, as `status: "pending"`). `GET /api/orgs/:orgId/members`. */
153
- export async function listOrgMembers(http, orgId) {
154
- requireControlId(orgId, "orgId", "listOrgMembers");
155
- return listControlRecords(http, `/api/orgs/${encodeURIComponent(orgId)}/members`, "members");
156
- }
157
- /** Invite an email to an org at a role. `POST /api/orgs/:orgId/invites`. */
158
- export async function createOrgInvite(http, orgId, request) {
159
- requireControlId(orgId, "orgId", "createOrgInvite");
160
- const result = await http.request(`/api/orgs/${encodeURIComponent(orgId)}/invites`, { method: "POST", body: JSON.stringify(request) });
161
- return unwrapControlRecord(result, "invite", "org invite");
162
- }
163
- /**
164
- * Create a workspace under an org and mint its FIRST workspace-scoped API key,
165
- * returned once as {@link NewWorkspace}. `POST /api/workspaces`. The free tier
166
- * caps at 3 workspaces per org (the server surfaces a 409 when exceeded).
167
- */
168
- export async function createWorkspace(http, request) {
169
- const result = await http.request("/api/workspaces", {
170
- method: "POST",
171
- body: JSON.stringify(request)
172
- });
173
- const workspace = unwrapControlRecord(result, "workspace", "new workspace");
174
- if (typeof workspace.workspaceId !== "string" || workspace.workspaceId.length === 0) {
175
- throw new SessionStateError("createWorkspace response is missing workspaceId");
176
- }
177
- if (typeof workspace.apiKey !== "string" || workspace.apiKey.length === 0) {
178
- throw new SessionStateError("createWorkspace response is missing the one-time apiKey");
179
- }
180
- return workspace;
181
- }
182
- /** List the workspaces the caller can manage across their orgs. `GET /api/workspaces`. */
183
- export async function listWorkspaces(http) {
184
- return listControlRecords(http, "/api/workspaces", "workspaces");
185
- }
186
- /** Delete a workspace by id. `DELETE /api/workspaces/:id`. Idempotent. */
187
- export async function deleteWorkspace(http, workspaceId) {
188
- requireControlId(workspaceId, "workspaceId", "deleteWorkspace");
189
- await http.request(`/api/workspaces/${encodeURIComponent(workspaceId)}`, { method: "DELETE" });
190
- }
191
- /**
192
- * Mint an API key, returned once as {@link NewApiKey}. `POST /api/keys`. Pass
193
- * `workspaceId` for a data-plane workspace key, or `account: true` for an
194
- * account PAT (control-plane). A PAT cannot mint another PAT (anti-escalation,
195
- * enforced server-side).
196
- */
197
- export async function createApiKey(http, request = {}) {
198
- if (request.account === true && request.workspaceId !== undefined) {
199
- throw configError("account", "createApiKey: pass either workspaceId or account:true, not both");
200
- }
201
- const result = await http.request("/api/keys", {
202
- method: "POST",
203
- body: JSON.stringify(request)
204
- });
205
- const key = unwrapControlRecord(result, "key", "new api key");
206
- if (typeof key.id !== "string" || key.id.length === 0) {
207
- throw new SessionStateError("createApiKey response is missing the key id");
208
- }
209
- if (typeof key.apiKey !== "string" || key.apiKey.length === 0) {
210
- throw new SessionStateError("createApiKey response is missing the one-time apiKey");
211
- }
212
- return key;
213
- }
214
- /** List API keys (metadata only; never values). `GET /api/keys`. */
215
- export async function listApiKeys(http) {
216
- return listControlRecords(http, "/api/keys", "keys");
217
- }
218
- /** Revoke/delete an API key by id. `DELETE /api/keys/:id`. Idempotent. */
219
- export async function deleteApiKey(http, keyId) {
220
- requireControlId(keyId, "keyId", "deleteApiKey");
221
- await http.request(`/api/keys/${encodeURIComponent(keyId)}`, { method: "DELETE" });
222
- }
223
- function requireControlId(value, field, context) {
224
- if (typeof value !== "string" || value.trim().length === 0) {
225
- throw configError(field, `${context}: ${field} must be a non-empty string`);
226
- }
227
- }
228
- /** Unwrap a `{ <key>: T }` single-record control-plane envelope, validating shape. */
229
- function unwrapControlRecord(result, key, label) {
230
- if (!isRecord(result) || !isRecord(result[key])) {
231
- throw new SessionStateError(`${label} response must contain a ${key} object`);
232
- }
233
- return result[key];
234
- }
235
- /** Unwrap a `{ <key>: T[] }` list control-plane envelope, validating shape. */
236
- async function listControlRecords(http, path, key) {
237
- const result = await http.request(path);
238
- if (!isRecord(result) || !Array.isArray(result[key])) {
239
- throw new SessionStateError(`${path} response must contain a ${key} array`);
240
- }
241
- return result[key];
242
- }