@astrale-os/kernel-server 0.4.17 → 0.5.0-beta.10

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 (235) hide show
  1. package/dist/capture.d.ts +2 -0
  2. package/dist/capture.js +9 -0
  3. package/dist/cors/cors.d.ts +21 -0
  4. package/dist/cors/cors.js +135 -0
  5. package/dist/cors/index.d.ts +2 -0
  6. package/dist/cors/index.js +1 -0
  7. package/dist/cors/types.d.ts +11 -0
  8. package/dist/cors/types.js +1 -0
  9. package/dist/errors/availability.d.ts +10 -0
  10. package/dist/errors/availability.js +14 -0
  11. package/dist/errors/classify.d.ts +3 -0
  12. package/dist/errors/classify.js +41 -0
  13. package/dist/errors/index.d.ts +4 -0
  14. package/dist/errors/index.js +4 -0
  15. package/dist/errors/request-body.d.ts +7 -0
  16. package/dist/errors/request-body.js +14 -0
  17. package/dist/errors/response-body.d.ts +4 -0
  18. package/dist/errors/response-body.js +8 -0
  19. package/dist/index.d.ts +5 -12
  20. package/dist/index.js +4 -19
  21. package/dist/invocation/context.d.ts +6 -0
  22. package/dist/invocation/context.js +60 -0
  23. package/dist/invocation/identity.d.ts +9 -0
  24. package/dist/invocation/identity.js +11 -0
  25. package/dist/invocation/index.d.ts +4 -3
  26. package/dist/invocation/index.js +3 -3
  27. package/dist/invocation/publication-route.d.ts +13 -0
  28. package/dist/invocation/publication-route.js +44 -0
  29. package/dist/invocation/types.d.ts +62 -0
  30. package/dist/invocation/types.js +1 -0
  31. package/dist/issuer/exchange.d.ts +12 -0
  32. package/dist/issuer/exchange.js +136 -0
  33. package/dist/issuer/index.d.ts +3 -0
  34. package/dist/issuer/index.js +1 -0
  35. package/dist/issuer/routes.d.ts +13 -0
  36. package/dist/issuer/routes.js +149 -0
  37. package/dist/issuer/types.d.ts +11 -0
  38. package/dist/issuer/types.js +1 -0
  39. package/dist/lifecycle/active.d.ts +39 -0
  40. package/dist/lifecycle/active.js +199 -0
  41. package/dist/lifecycle/index.d.ts +1 -0
  42. package/dist/lifecycle/index.js +1 -0
  43. package/dist/publication/delivery/handler.d.ts +9 -0
  44. package/dist/publication/delivery/handler.js +127 -0
  45. package/dist/publication/delivery/index.d.ts +2 -0
  46. package/dist/publication/delivery/index.js +1 -0
  47. package/dist/publication/delivery/types.d.ts +11 -0
  48. package/dist/publication/delivery/types.js +1 -0
  49. package/dist/publication/index.d.ts +3 -0
  50. package/dist/publication/index.js +2 -0
  51. package/dist/publication/snapshot.d.ts +16 -0
  52. package/dist/publication/snapshot.js +37 -0
  53. package/dist/publication/table.d.ts +4 -0
  54. package/dist/publication/table.js +16 -0
  55. package/dist/publication/types.d.ts +22 -0
  56. package/dist/publication/types.js +1 -0
  57. package/dist/routes/index.d.ts +1 -0
  58. package/dist/routes/index.js +1 -0
  59. package/dist/routes/routes.d.ts +25 -0
  60. package/dist/routes/routes.js +448 -0
  61. package/dist/server.d.ts +4 -0
  62. package/dist/server.js +266 -0
  63. package/dist/transport/body.d.ts +4 -0
  64. package/dist/transport/body.js +50 -0
  65. package/dist/transport/codecs.d.ts +4 -0
  66. package/dist/transport/codecs.js +5 -0
  67. package/dist/transport/credential.d.ts +10 -0
  68. package/dist/transport/credential.js +28 -0
  69. package/dist/transport/http/handler.d.ts +17 -0
  70. package/dist/transport/http/handler.js +180 -0
  71. package/dist/transport/http/index.d.ts +2 -0
  72. package/dist/transport/http/index.js +2 -0
  73. package/dist/transport/http/render.d.ts +31 -0
  74. package/dist/transport/http/render.js +288 -0
  75. package/dist/transport/index.d.ts +9 -0
  76. package/dist/transport/index.js +8 -0
  77. package/dist/transport/router.d.ts +4 -0
  78. package/dist/transport/router.js +4 -0
  79. package/dist/transport/stream-error.d.ts +3 -0
  80. package/dist/transport/stream-error.js +13 -0
  81. package/dist/transport/types.d.ts +28 -0
  82. package/dist/transport/types.js +1 -0
  83. package/dist/transport/websocket/index.d.ts +2 -0
  84. package/dist/transport/websocket/index.js +2 -0
  85. package/dist/transport/websocket/session.d.ts +20 -0
  86. package/dist/transport/websocket/session.js +335 -0
  87. package/dist/transport/websocket/upgrade.d.ts +20 -0
  88. package/dist/transport/websocket/upgrade.js +46 -0
  89. package/dist/types.d.ts +65 -0
  90. package/dist/types.js +1 -0
  91. package/package.json +24 -14
  92. package/dist/app/create.d.ts +0 -48
  93. package/dist/app/create.d.ts.map +0 -1
  94. package/dist/app/create.js +0 -108
  95. package/dist/app/create.js.map +0 -1
  96. package/dist/app/index.d.ts +0 -4
  97. package/dist/app/index.d.ts.map +0 -1
  98. package/dist/app/index.js +0 -4
  99. package/dist/app/index.js.map +0 -1
  100. package/dist/app/multiplexed.d.ts +0 -53
  101. package/dist/app/multiplexed.d.ts.map +0 -1
  102. package/dist/app/multiplexed.js +0 -64
  103. package/dist/app/multiplexed.js.map +0 -1
  104. package/dist/app/ws-upgrade.d.ts +0 -34
  105. package/dist/app/ws-upgrade.d.ts.map +0 -1
  106. package/dist/app/ws-upgrade.js +0 -94
  107. package/dist/app/ws-upgrade.js.map +0 -1
  108. package/dist/capabilities/contract.d.ts +0 -8
  109. package/dist/capabilities/contract.d.ts.map +0 -1
  110. package/dist/capabilities/contract.js +0 -2
  111. package/dist/capabilities/contract.js.map +0 -1
  112. package/dist/capabilities/defer.d.ts +0 -4
  113. package/dist/capabilities/defer.d.ts.map +0 -1
  114. package/dist/capabilities/defer.js +0 -2
  115. package/dist/capabilities/defer.js.map +0 -1
  116. package/dist/capabilities/hono.d.ts +0 -8
  117. package/dist/capabilities/hono.d.ts.map +0 -1
  118. package/dist/capabilities/hono.js +0 -13
  119. package/dist/capabilities/hono.js.map +0 -1
  120. package/dist/capabilities/index.d.ts +0 -6
  121. package/dist/capabilities/index.d.ts.map +0 -1
  122. package/dist/capabilities/index.js +0 -3
  123. package/dist/capabilities/index.js.map +0 -1
  124. package/dist/capabilities/lifecycle.d.ts +0 -17
  125. package/dist/capabilities/lifecycle.d.ts.map +0 -1
  126. package/dist/capabilities/lifecycle.js +0 -37
  127. package/dist/capabilities/lifecycle.js.map +0 -1
  128. package/dist/capabilities/sleep.d.ts +0 -4
  129. package/dist/capabilities/sleep.d.ts.map +0 -1
  130. package/dist/capabilities/sleep.js +0 -8
  131. package/dist/capabilities/sleep.js.map +0 -1
  132. package/dist/cors.d.ts +0 -21
  133. package/dist/cors.d.ts.map +0 -1
  134. package/dist/cors.js +0 -17
  135. package/dist/cors.js.map +0 -1
  136. package/dist/envelope/batch.d.ts +0 -13
  137. package/dist/envelope/batch.d.ts.map +0 -1
  138. package/dist/envelope/batch.js +0 -96
  139. package/dist/envelope/batch.js.map +0 -1
  140. package/dist/envelope/codec.d.ts +0 -26
  141. package/dist/envelope/codec.d.ts.map +0 -1
  142. package/dist/envelope/codec.js +0 -52
  143. package/dist/envelope/codec.js.map +0 -1
  144. package/dist/envelope/credential.d.ts +0 -20
  145. package/dist/envelope/credential.d.ts.map +0 -1
  146. package/dist/envelope/credential.js +0 -32
  147. package/dist/envelope/credential.js.map +0 -1
  148. package/dist/envelope/http.d.ts +0 -31
  149. package/dist/envelope/http.d.ts.map +0 -1
  150. package/dist/envelope/http.js +0 -132
  151. package/dist/envelope/http.js.map +0 -1
  152. package/dist/envelope/sse.d.ts +0 -11
  153. package/dist/envelope/sse.d.ts.map +0 -1
  154. package/dist/envelope/sse.js +0 -73
  155. package/dist/envelope/sse.js.map +0 -1
  156. package/dist/envelope/ws.d.ts +0 -35
  157. package/dist/envelope/ws.d.ts.map +0 -1
  158. package/dist/envelope/ws.js +0 -142
  159. package/dist/envelope/ws.js.map +0 -1
  160. package/dist/index.d.ts.map +0 -1
  161. package/dist/index.js.map +0 -1
  162. package/dist/invocation/dispatch.d.ts +0 -32
  163. package/dist/invocation/dispatch.d.ts.map +0 -1
  164. package/dist/invocation/dispatch.js +0 -68
  165. package/dist/invocation/dispatch.js.map +0 -1
  166. package/dist/invocation/dispatcher.d.ts +0 -19
  167. package/dist/invocation/dispatcher.d.ts.map +0 -1
  168. package/dist/invocation/dispatcher.js +0 -9
  169. package/dist/invocation/dispatcher.js.map +0 -1
  170. package/dist/invocation/index.d.ts.map +0 -1
  171. package/dist/invocation/index.js.map +0 -1
  172. package/dist/jwks/discovery.d.ts +0 -40
  173. package/dist/jwks/discovery.d.ts.map +0 -1
  174. package/dist/jwks/discovery.js +0 -113
  175. package/dist/jwks/discovery.js.map +0 -1
  176. package/dist/jwks/index.d.ts +0 -3
  177. package/dist/jwks/index.d.ts.map +0 -1
  178. package/dist/jwks/index.js +0 -3
  179. package/dist/jwks/index.js.map +0 -1
  180. package/dist/jwks/issuers.d.ts +0 -47
  181. package/dist/jwks/issuers.d.ts.map +0 -1
  182. package/dist/jwks/issuers.js +0 -76
  183. package/dist/jwks/issuers.js.map +0 -1
  184. package/dist/jwks/keys.d.ts +0 -44
  185. package/dist/jwks/keys.d.ts.map +0 -1
  186. package/dist/jwks/keys.js +0 -56
  187. package/dist/jwks/keys.js.map +0 -1
  188. package/dist/plan/host-params.d.ts +0 -13
  189. package/dist/plan/host-params.d.ts.map +0 -1
  190. package/dist/plan/host-params.js +0 -23
  191. package/dist/plan/host-params.js.map +0 -1
  192. package/dist/plan/host.d.ts +0 -24
  193. package/dist/plan/host.d.ts.map +0 -1
  194. package/dist/plan/host.js +0 -24
  195. package/dist/plan/host.js.map +0 -1
  196. package/dist/plan/index.d.ts +0 -4
  197. package/dist/plan/index.d.ts.map +0 -1
  198. package/dist/plan/index.js +0 -4
  199. package/dist/plan/index.js.map +0 -1
  200. package/dist/plan/walk.d.ts +0 -51
  201. package/dist/plan/walk.d.ts.map +0 -1
  202. package/dist/plan/walk.js +0 -110
  203. package/dist/plan/walk.js.map +0 -1
  204. package/dist/render/binary.d.ts +0 -19
  205. package/dist/render/binary.d.ts.map +0 -1
  206. package/dist/render/binary.js +0 -33
  207. package/dist/render/binary.js.map +0 -1
  208. package/dist/render/body.d.ts +0 -10
  209. package/dist/render/body.d.ts.map +0 -1
  210. package/dist/render/body.js +0 -17
  211. package/dist/render/body.js.map +0 -1
  212. package/dist/render/index.d.ts +0 -3
  213. package/dist/render/index.d.ts.map +0 -1
  214. package/dist/render/index.js +0 -3
  215. package/dist/render/index.js.map +0 -1
  216. package/dist/routed/credential.d.ts +0 -10
  217. package/dist/routed/credential.d.ts.map +0 -1
  218. package/dist/routed/credential.js +0 -55
  219. package/dist/routed/credential.js.map +0 -1
  220. package/dist/routed/handler.d.ts +0 -38
  221. package/dist/routed/handler.d.ts.map +0 -1
  222. package/dist/routed/handler.js +0 -123
  223. package/dist/routed/handler.js.map +0 -1
  224. package/dist/routed/index.d.ts +0 -5
  225. package/dist/routed/index.d.ts.map +0 -1
  226. package/dist/routed/index.js +0 -5
  227. package/dist/routed/index.js.map +0 -1
  228. package/dist/routed/params.d.ts +0 -40
  229. package/dist/routed/params.d.ts.map +0 -1
  230. package/dist/routed/params.js +0 -146
  231. package/dist/routed/params.js.map +0 -1
  232. package/dist/routed/stream.d.ts +0 -21
  233. package/dist/routed/stream.d.ts.map +0 -1
  234. package/dist/routed/stream.js +0 -69
  235. package/dist/routed/stream.js.map +0 -1
@@ -1,108 +0,0 @@
1
- /**
2
- * createKernelApp — Hono app builder for the kernel protocol.
3
- *
4
- * Walks a domain of MountableContract and mounts:
5
- * - kernel HTTP envelope (POST) at each base URL
6
- * - native HTTP routes per route binding
7
- * - kernel WS upgrade at the same base URL when transports includes 'ws'
8
- *
9
- * Codecs are hardcoded (json + msgpack). Credentials for kernel HTTP are
10
- * fixed to the Authorization header; route bindings can override via
11
- * `route.credential`.
12
- */
13
- import { Hono as HonoCtor } from 'hono';
14
- import { honoCapabilityHost } from '../capabilities/index.js';
15
- import { createKernelDispatcher } from '../envelope/http.js';
16
- import { mountJwks } from '../jwks/keys.js';
17
- import { extractHostParams, walkDomain } from '../plan/index.js';
18
- import { createRouteHandler } from '../routed/handler.js';
19
- import { mountKernelWs } from './ws-upgrade.js';
20
- const DEFAULT_CORS = { origin: '*' };
21
- export function createKernelApp(config) {
22
- const cors = config.cors ?? DEFAULT_CORS;
23
- const app = config.app ?? new HonoCtor();
24
- const transports = config.transports ?? ['http'];
25
- if (!transports.includes('http')) {
26
- throw new Error(`createKernelApp: transports must include 'http'`);
27
- }
28
- // 1. Walk domain → compute mount plan.
29
- const plan = walkDomain(config.domain, config.host);
30
- // 2. JWKS (always mounted).
31
- mountJwks(app, { ...config.jwks, cors });
32
- // 3. Health endpoint.
33
- if (config.health !== false) {
34
- app.get(config.health ?? '/health', (c) => c.json({ status: 'ok' }));
35
- }
36
- // 4. Kernel HTTP mounts — POST envelope at each unique base path.
37
- // Because ambient functions all share the server's base path, and
38
- // anchored functions re-use the same host, nearly always there's just
39
- // one base path. For multi-domain servers with different remoteUrl
40
- // base paths, we create one mount per path.
41
- const hostParams = plan.hostMatcher
42
- ? (req) => extractHostParams(plan.hostMatcher, req)
43
- : undefined;
44
- const envelope = createKernelDispatcher(cors, { hostParams });
45
- const basePaths = new Set();
46
- for (const basePath of plan.kernelMounts.keys()) {
47
- basePaths.add(basePath === '' ? '/' : basePath);
48
- }
49
- if (basePaths.size === 0)
50
- basePaths.add('/');
51
- // 4a. WS upgrade (HTTP GET with Upgrade header) at each base path.
52
- if (transports.includes('ws')) {
53
- if (!config.ws) {
54
- throw new Error(`createKernelApp: transports includes 'ws' but no WS adapter was passed. ` +
55
- `Pass { ws: { upgradeWebSocket } } from your runtime's Hono adapter ` +
56
- `(hono/bun, @hono/node-ws, hono/deno).`);
57
- }
58
- for (const wsPath of basePaths) {
59
- mountKernelWs(app, wsPath, config.ws, config.dispatcher);
60
- }
61
- }
62
- // 4b. HTTP POST envelope + OPTIONS preflight for each base path.
63
- for (const path of basePaths) {
64
- app.post(path, (c) => envelope(c.req.raw, config.dispatcher, honoCapabilityHost(c)));
65
- app.options(path, (c) => envelope(c.req.raw, config.dispatcher, honoCapabilityHost(c)));
66
- }
67
- // 6. Route bindings — one Hono handler per mounted route.
68
- for (const mountedRoute of plan.routes) {
69
- const { route, fullPath } = mountedRoute;
70
- const honoPath = toHonoPath(fullPath);
71
- const handler = createRouteHandler({
72
- method: mountedRoute.contract.ref,
73
- route,
74
- dispatcher: config.dispatcher,
75
- cors,
76
- hostParams,
77
- auth: mountedRoute.contract.binding?.auth,
78
- });
79
- const mountHandler = async (c) => {
80
- const pathParams = {};
81
- for (const m of fullPath.matchAll(/\{(\w+)([+*])?\}/g)) {
82
- const name = m[1];
83
- const value = c.req.param(name);
84
- if (value !== undefined)
85
- pathParams[name] = decodeURIComponent(value);
86
- }
87
- return handler(c.req.raw, pathParams, honoCapabilityHost(c));
88
- };
89
- if (route.method === '*') {
90
- app.all(honoPath, mountHandler);
91
- }
92
- else {
93
- const verb = route.method.toLowerCase();
94
- app[verb](honoPath, mountHandler);
95
- }
96
- // Always allow CORS preflight on routes.
97
- app.options(honoPath, (c) => handler(c.req.raw, {}, honoCapabilityHost(c)));
98
- }
99
- return { app, plan };
100
- }
101
- /** Convert spec path syntax `/tasks/{id}`, `/files/{name+}` and `/files/{name*}` to Hono syntax. */
102
- function toHonoPath(path) {
103
- return path
104
- .replace(/\{(\w+)\+\}/g, ':$1{.+}')
105
- .replace(/\{(\w+)\*\}/g, ':$1{.*}')
106
- .replace(/\{(\w+)\}/g, ':$1');
107
- }
108
- //# sourceMappingURL=create.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../app/create.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- export { createKernelApp, type KernelAppConfig, type WsAdapter } from './create.js';
2
- export { createMultiplexedKernelApp, type MultiplexedKernelAppConfig, type DispatcherResolver, } from './multiplexed.js';
3
- export { mountKernelWs } from './ws-upgrade.js';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../app/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAA;AACnF,OAAO,EACL,0BAA0B,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,GACxB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
package/dist/app/index.js DELETED
@@ -1,4 +0,0 @@
1
- export { createKernelApp } from './create.js';
2
- export { createMultiplexedKernelApp, } from './multiplexed.js';
3
- export { mountKernelWs } from './ws-upgrade.js';
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../app/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAwC,MAAM,aAAa,CAAA;AACnF,OAAO,EACL,0BAA0B,GAG3B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
@@ -1,53 +0,0 @@
1
- /**
2
- * createMultiplexedKernelApp — Hono app for multi-instance kernel hosting.
3
- *
4
- * One HTTP server hosts many kernel instances under `/{id}/...` paths. Each
5
- * incoming request is resolved to a dispatcher via `resolve()`
6
- * function. The manager kernel (if any) is mounted at its own static prefix.
7
- *
8
- * Both the envelope HTTP dispatcher and the WS upgrade handler are built
9
- * once at startup. The HTTP handler takes `(req, dispatcher)` per request; the WS
10
- * handler resolves its dispatcher once at upgrade time and pins it to the
11
- * connection for its entire lifetime.
12
- *
13
- * Note: this skips per-instance domain mount-walking (no `domain` argument
14
- * per request) — multiplexed servers dispatch all calls to the kernel layer
15
- * regardless of binding. Anchored functions still work, since the binding is
16
- * carried by the contract registered in the kernel.
17
- */
18
- import type { Hono } from 'hono';
19
- import type { CorsConfig } from '../cors.js';
20
- import type { Dispatcher } from '../invocation/index.js';
21
- import type { JwksKeys, MultiplexedJwks } from '../jwks/index.js';
22
- import { type WsAdapter } from './ws-upgrade.js';
23
- /**
24
- * Resolves a dispatcher from an incoming request.
25
- */
26
- export type DispatcherResolver = (req: Request) => Dispatcher | null | Promise<Dispatcher | null>;
27
- export type MultiplexedKernelAppConfig = {
28
- /** Per-request dispatcher resolver (the selected instance handles its own auth). */
29
- resolve: DispatcherResolver;
30
- /** Optional manager dispatcher hosted at a static prefix. */
31
- manager?: {
32
- dispatcher: Dispatcher;
33
- prefix: string;
34
- jwks: JwksKeys;
35
- };
36
- /** Path prefix for instance routes. Defaults to `/:id`. */
37
- instancePrefix?: string;
38
- /** Per-instance JWKS lookup. */
39
- jwks: MultiplexedJwks;
40
- cors?: CorsConfig;
41
- health?: string | false;
42
- app?: Hono;
43
- /**
44
- * Runtime-specific WS adapter (from `hono/bun`, `@hono/node-ws`, `hono/deno`).
45
- * When provided, WS endpoints are mounted for the manager (if any) and all
46
- * instances at `{instancePrefix}`. Omit to serve HTTP only.
47
- */
48
- ws?: WsAdapter;
49
- };
50
- export declare function createMultiplexedKernelApp(config: MultiplexedKernelAppConfig): {
51
- app: Hono;
52
- };
53
- //# sourceMappingURL=multiplexed.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multiplexed.d.ts","sourceRoot":"","sources":["../../app/multiplexed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,MAAM,CAAA;AAIzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAKjE,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAI/D;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAA;AAEjG,MAAM,MAAM,0BAA0B,GAAG;IACvC,oFAAoF;IACpF,OAAO,EAAE,kBAAkB,CAAA;IAC3B,6DAA6D;IAC7D,OAAO,CAAC,EAAE;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAA;IACpE,2DAA2D;IAC3D,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gCAAgC;IAChC,IAAI,EAAE,eAAe,CAAA;IACrB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACvB,GAAG,CAAC,EAAE,IAAI,CAAA;IACV;;;;OAIG;IACH,EAAE,CAAC,EAAE,SAAS,CAAA;CACf,CAAA;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,0BAA0B,GAAG;IAAE,GAAG,EAAE,IAAI,CAAA;CAAE,CA+C5F"}
@@ -1,64 +0,0 @@
1
- /**
2
- * createMultiplexedKernelApp — Hono app for multi-instance kernel hosting.
3
- *
4
- * One HTTP server hosts many kernel instances under `/{id}/...` paths. Each
5
- * incoming request is resolved to a dispatcher via `resolve()`
6
- * function. The manager kernel (if any) is mounted at its own static prefix.
7
- *
8
- * Both the envelope HTTP dispatcher and the WS upgrade handler are built
9
- * once at startup. The HTTP handler takes `(req, dispatcher)` per request; the WS
10
- * handler resolves its dispatcher once at upgrade time and pins it to the
11
- * connection for its entire lifetime.
12
- *
13
- * Note: this skips per-instance domain mount-walking (no `domain` argument
14
- * per request) — multiplexed servers dispatch all calls to the kernel layer
15
- * regardless of binding. Anchored functions still work, since the binding is
16
- * carried by the contract registered in the kernel.
17
- */
18
- import { Hono as HonoCtor } from 'hono';
19
- import { honoCapabilityHost } from '../capabilities/index.js';
20
- import { createKernelDispatcher } from '../envelope/http.js';
21
- import { mountInstanceJwks, mountJwks } from '../jwks/keys.js';
22
- import { mountKernelWs } from './ws-upgrade.js';
23
- const DEFAULT_CORS = { origin: '*' };
24
- export function createMultiplexedKernelApp(config) {
25
- const cors = config.cors ?? DEFAULT_CORS;
26
- const app = config.app ?? new HonoCtor();
27
- const instancePrefix = config.instancePrefix ?? '/:id';
28
- if (config.health !== false) {
29
- app.get(typeof config.health === 'string' ? config.health : '/health', (c) => c.json({ status: 'ok' }));
30
- }
31
- // Single HTTP handler, reused across manager + all instance dispatchers.
32
- const envelope = createKernelDispatcher(cors);
33
- // Manager kernel (if any) — static prefix, fixed kernel.
34
- // POST + OPTIONS handle HTTP dispatch; GET is reserved for WS upgrade
35
- // (matches createKernelApp's mount layout).
36
- if (config.manager) {
37
- const managerDispatcher = config.manager.dispatcher;
38
- const managerPath = `${config.manager.prefix}/`;
39
- app.post(managerPath, (c) => envelope(c.req.raw, managerDispatcher, honoCapabilityHost(c)));
40
- app.options(managerPath, (c) => envelope(c.req.raw, managerDispatcher, honoCapabilityHost(c)));
41
- mountJwks(app, { ...config.manager.jwks, cors });
42
- if (config.ws) {
43
- mountKernelWs(app, managerPath, config.ws, managerDispatcher);
44
- }
45
- }
46
- // Per-instance JWKS
47
- mountInstanceJwks(app, instancePrefix, { ...config.jwks, cors });
48
- // Per-instance kernel envelope — dispatcher resolved per request.
49
- const instancePath = `${instancePrefix}/`;
50
- const httpDispatch = async (c) => {
51
- const dispatcher = await config.resolve(c.req.raw);
52
- if (!dispatcher)
53
- return new Response('Instance not found', { status: 404 });
54
- return envelope(c.req.raw, dispatcher, honoCapabilityHost(c));
55
- };
56
- app.post(instancePath, httpDispatch);
57
- app.options(instancePath, httpDispatch);
58
- // Per-instance WS upgrade — dispatcher resolved at upgrade time and pinned.
59
- if (config.ws) {
60
- mountKernelWs(app, instancePath, config.ws, config.resolve);
61
- }
62
- return { app };
63
- }
64
- //# sourceMappingURL=multiplexed.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multiplexed.js","sourceRoot":"","sources":["../../app/multiplexed.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- /**
2
- * Hono WS upgrade adapter — wires the kernel envelope WS connection class
3
- * into a Hono app via the runtime-specific `upgradeWebSocket` shim.
4
- *
5
- * The adapter is supplied by the caller (`hono/bun`, `@hono/node-ws`,
6
- * `hono/deno`) so that this module remains free of runtime imports.
7
- *
8
- * The dispatcher can be either fixed or resolved per request by a resolver
9
- * called at upgrade time with the upgrade request. Once resolved, it is pinned
10
- * to the WS connection.
11
- */
12
- import type { Hono } from 'hono';
13
- import type { UpgradeWebSocket } from 'hono/ws';
14
- import type { Dispatcher } from '../invocation/index.js';
15
- export type WsAdapter = {
16
- upgradeWebSocket: UpgradeWebSocket;
17
- };
18
- /**
19
- * Invocation source for a WS mount — either a fixed dispatcher or a per-request
20
- * resolver. Resolvers may be async and return `null` to reject the upgrade.
21
- */
22
- export type WsInvocationSource = Dispatcher | ((req: Request) => Dispatcher | null | Promise<Dispatcher | null>);
23
- /**
24
- * Mount the kernel WS handler at `path` on the Hono app.
25
- *
26
- * The handler shares the URL with the kernel HTTP handler — clients use the
27
- * same base URL and switch transports via HTTP Upgrade negotiation.
28
- *
29
- * When `source` is a resolver, it is invoked once at upgrade time. A null
30
- * result closes the socket with code 4004 (instance not found) before any
31
- * messages are exchanged.
32
- */
33
- export declare function mountKernelWs(app: Hono, path: string, ws: WsAdapter, source: WsInvocationSource): void;
34
- //# sourceMappingURL=ws-upgrade.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ws-upgrade.d.ts","sourceRoot":"","sources":["../../app/ws-upgrade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,SAAS,CAAA;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAMxD,MAAM,MAAM,SAAS,GAAG;IACtB,gBAAgB,EAAE,gBAAgB,CAAA;CACnC,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAC1B,UAAU,GACV,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAA;AAuBtE;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,IAAI,EACT,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,kBAAkB,GACzB,IAAI,CAmDN"}
@@ -1,94 +0,0 @@
1
- /**
2
- * Hono WS upgrade adapter — wires the kernel envelope WS connection class
3
- * into a Hono app via the runtime-specific `upgradeWebSocket` shim.
4
- *
5
- * The adapter is supplied by the caller (`hono/bun`, `@hono/node-ws`,
6
- * `hono/deno`) so that this module remains free of runtime imports.
7
- *
8
- * The dispatcher can be either fixed or resolved per request by a resolver
9
- * called at upgrade time with the upgrade request. Once resolved, it is pinned
10
- * to the WS connection.
11
- */
12
- import { honoCapabilityHost } from '../capabilities/index.js';
13
- import { negotiateWsCodec } from '../envelope/codec.js';
14
- import { KernelWsConnection } from '../envelope/ws.js';
15
- function adaptHonoWs(ws) {
16
- const raw = ws.raw;
17
- return {
18
- send(data) {
19
- ws.send(data);
20
- },
21
- close(code, reason) {
22
- ws.close(code, reason);
23
- },
24
- get readyState() {
25
- return raw?.readyState ?? ws.readyState;
26
- },
27
- };
28
- }
29
- function isResolver(source) {
30
- return typeof source === 'function';
31
- }
32
- /**
33
- * Mount the kernel WS handler at `path` on the Hono app.
34
- *
35
- * The handler shares the URL with the kernel HTTP handler — clients use the
36
- * same base URL and switch transports via HTTP Upgrade negotiation.
37
- *
38
- * When `source` is a resolver, it is invoked once at upgrade time. A null
39
- * result closes the socket with code 4004 (instance not found) before any
40
- * messages are exchanged.
41
- */
42
- export function mountKernelWs(app, path, ws, source) {
43
- const route = ws.upgradeWebSocket((c) => {
44
- const upgradeRequest = c.req.raw;
45
- const capabilityHost = honoCapabilityHost(c);
46
- const codec = negotiateWsCodec(upgradeRequest);
47
- let conn = null;
48
- return {
49
- async onOpen(_evt, wsCtx) {
50
- if (!codec) {
51
- wsCtx.close(4000, 'Unsupported codec');
52
- return;
53
- }
54
- let dispatcher;
55
- try {
56
- dispatcher = isResolver(source) ? await source(upgradeRequest) : source;
57
- }
58
- catch (err) {
59
- // A mount-time failure (e.g. a child kernel boot throwing) must not
60
- // escape: this `onOpen` is async but the host WS adapter wraps it in
61
- // a *synchronous* try/catch that cannot observe an async rejection,
62
- // so an uncaught throw here becomes a process-killing unhandled
63
- // rejection. Reject the upgrade by closing the socket instead — and
64
- // log the error so a programmer bug (e.g. an unrelated TypeError
65
- // bubbling up from the resolver) isn't silently masked as a benign
66
- // mount fail.
67
- // oxlint-disable-next-line no-console
68
- console.error('[ws-upgrade] mount failed (socket closed 4005):', err);
69
- wsCtx.close(4005, 'mount failed');
70
- return;
71
- }
72
- if (!dispatcher) {
73
- wsCtx.close(4004, 'Instance not found');
74
- return;
75
- }
76
- conn = new KernelWsConnection(adaptHonoWs(wsCtx), codec, dispatcher, capabilityHost);
77
- conn.start();
78
- },
79
- onMessage(evt) {
80
- conn?.handleMessage(evt.data);
81
- },
82
- onClose() {
83
- conn?.handleClose();
84
- conn = null;
85
- },
86
- onError(evt) {
87
- const msg = evt instanceof ErrorEvent ? evt.message : `WebSocket error: ${evt.type}`;
88
- conn?.handleError(new Error(msg));
89
- },
90
- };
91
- });
92
- app.get(path, route);
93
- }
94
- //# sourceMappingURL=ws-upgrade.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ws-upgrade.js","sourceRoot":"","sources":["../../app/ws-upgrade.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import type { Defer } from './defer.js';
2
- import type { Sleep } from './sleep.js';
3
- /** Host-provided capabilities available while an invocation is executing. */
4
- export type Capabilities = {
5
- defer: Defer;
6
- sleep: Sleep;
7
- };
8
- //# sourceMappingURL=contract.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../capabilities/contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC,6EAA6E;AAC7E,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,KAAK,CAAA;CACb,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=contract.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../capabilities/contract.ts"],"names":[],"mappings":""}
@@ -1,4 +0,0 @@
1
- /** Work detached from an invocation's immediate result. */
2
- export type DeferredTask = () => void | PromiseLike<unknown>;
3
- export type Defer = (task: DeferredTask) => void;
4
- //# sourceMappingURL=defer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"defer.d.ts","sourceRoot":"","sources":["../../capabilities/defer.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,MAAM,MAAM,YAAY,GAAG,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;AAE5D,MAAM,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=defer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"defer.js","sourceRoot":"","sources":["../../capabilities/defer.ts"],"names":[],"mappings":""}
@@ -1,8 +0,0 @@
1
- import type { CapabilityHost } from './lifecycle.js';
2
- /** Adapt Hono's optional request context to the generic execution host. */
3
- export declare function honoCapabilityHost(c: {
4
- readonly executionCtx?: {
5
- waitUntil(promise: Promise<unknown>): void;
6
- };
7
- }): CapabilityHost | undefined;
8
- //# sourceMappingURL=hono.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hono.d.ts","sourceRoot":"","sources":["../../capabilities/hono.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,CAAC,EAAE;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE;QAAE,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;KAAE,CAAA;CACvE,GAAG,cAAc,GAAG,SAAS,CAQ7B"}
@@ -1,13 +0,0 @@
1
- /** Adapt Hono's optional request context to the generic execution host. */
2
- export function honoCapabilityHost(c) {
3
- try {
4
- const execution = c.executionCtx;
5
- if (!execution)
6
- return undefined;
7
- return { register: (promise) => execution.waitUntil(promise) };
8
- }
9
- catch {
10
- return undefined;
11
- }
12
- }
13
- //# sourceMappingURL=hono.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hono.js","sourceRoot":"","sources":["../../capabilities/hono.ts"],"names":[],"mappings":"AAEA,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,CAElC;IACC,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,CAAC,CAAC,YAAY,CAAA;QAChC,IAAI,CAAC,SAAS;YAAE,OAAO,SAAS,CAAA;QAChC,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAA;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC"}
@@ -1,6 +0,0 @@
1
- export { honoCapabilityHost } from './hono.js';
2
- export { createCapabilityLifecycle, type CapabilityHost, type CapabilityLifecycle, } from './lifecycle.js';
3
- export type { Defer, DeferredTask } from './defer.js';
4
- export type { Capabilities } from './contract.js';
5
- export type { Sleep } from './sleep.js';
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../capabilities/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EACL,yBAAyB,EACzB,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACjD,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA"}
@@ -1,3 +0,0 @@
1
- export { honoCapabilityHost } from './hono.js';
2
- export { createCapabilityLifecycle, } from './lifecycle.js';
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../capabilities/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EACL,yBAAyB,GAG1B,MAAM,gBAAgB,CAAA"}
@@ -1,17 +0,0 @@
1
- import type { Capabilities } from './contract.js';
2
- import type { Sleep } from './sleep.js';
3
- /** Host adapter that keeps a promise alive after the response is returned. */
4
- export type CapabilityHost = {
5
- register(promise: Promise<unknown>): void;
6
- sleep?: Sleep;
7
- };
8
- export type CapabilityLifecycle = {
9
- capabilities: Capabilities;
10
- settle(): Promise<void>;
11
- };
12
- /**
13
- * Create one capability lifecycle. Hosts retain deferred promises; callers without
14
- * a retention host drain them before completing so work is never abandoned.
15
- */
16
- export declare function createCapabilityLifecycle(host?: CapabilityHost): CapabilityLifecycle;
17
- //# sourceMappingURL=lifecycle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../capabilities/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAIvC,8EAA8E;AAC9E,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;IACzC,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,YAAY,CAAA;IAC1B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACxB,CAAA;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,CAAC,EAAE,cAAc,GAAG,mBAAmB,CA6BpF"}
@@ -1,37 +0,0 @@
1
- import { sleep } from './sleep.js';
2
- /**
3
- * Create one capability lifecycle. Hosts retain deferred promises; callers without
4
- * a retention host drain them before completing so work is never abandoned.
5
- */
6
- export function createCapabilityLifecycle(host) {
7
- const pending = [];
8
- return {
9
- capabilities: {
10
- defer(task) {
11
- const promise = Promise.resolve().then(task);
12
- if (host)
13
- host.register(promise);
14
- else
15
- pending.push(promise);
16
- },
17
- sleep: host?.sleep ?? sleep,
18
- },
19
- async settle() {
20
- if (host || pending.length === 0)
21
- return;
22
- let cursor = 0;
23
- while (cursor < pending.length) {
24
- const batch = pending.slice(cursor);
25
- cursor = pending.length;
26
- const results = await Promise.allSettled(batch);
27
- for (const result of results) {
28
- if (result.status === 'rejected') {
29
- // oxlint-disable-next-line no-console
30
- console.error('[capabilities] deferred task failed:', result.reason);
31
- }
32
- }
33
- }
34
- },
35
- };
36
- }
37
- //# sourceMappingURL=lifecycle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../capabilities/lifecycle.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAalC;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAqB;IAC7D,MAAM,OAAO,GAAuB,EAAE,CAAA;IAEtC,OAAO;QACL,YAAY,EAAE;YACZ,KAAK,CAAC,IAAI;gBACR,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC5C,IAAI,IAAI;oBAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;;oBAC3B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC5B,CAAC;YACD,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK;SAC5B;QACD,KAAK,CAAC,MAAM;YACV,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAM;YAExC,IAAI,MAAM,GAAG,CAAC,CAAA;YACd,OAAO,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBACnC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;gBACvB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;gBAC/C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;wBACjC,sCAAsC;wBACtC,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;oBACtE,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -1,4 +0,0 @@
1
- export type Sleep = (durationMs: number) => Promise<void>;
2
- /** Default non-durable sleep used when the host does not provide one. */
3
- export declare function sleep(durationMs: number): Promise<void>;
4
- //# sourceMappingURL=sleep.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../capabilities/sleep.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAEzD,yEAAyE;AACzE,wBAAsB,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7D"}
@@ -1,8 +0,0 @@
1
- /** Default non-durable sleep used when the host does not provide one. */
2
- export async function sleep(durationMs) {
3
- if (!Number.isFinite(durationMs) || durationMs < 0) {
4
- throw new RangeError('Sleep duration must be a finite, non-negative number');
5
- }
6
- await new Promise((resolve) => setTimeout(resolve, durationMs));
7
- }
8
- //# sourceMappingURL=sleep.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../capabilities/sleep.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,UAAkB;IAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,UAAU,CAAC,sDAAsD,CAAC,CAAA;IAC9E,CAAC;IAED,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAA;AACvE,CAAC"}
package/dist/cors.d.ts DELETED
@@ -1,21 +0,0 @@
1
- /**
2
- * CORS configuration and header builder.
3
- *
4
- * Cross-cutting helper consumed by every protocol handler. The shape mirrors
5
- * the standard `Access-Control-*` headers; multi-origin matching belongs in
6
- * framework-level middleware (e.g. Hono's `cors()`), not here.
7
- */
8
- export type CorsConfig = {
9
- /**
10
- * Allowed origin. Use '*' for any, or a single origin string.
11
- *
12
- * Note: HTTP `Access-Control-Allow-Origin` does not support multiple
13
- * comma-separated origins. For multi-origin, implement per-request
14
- * matching at the framework middleware level (e.g., Hono cors()).
15
- */
16
- origin: string;
17
- methods?: string[];
18
- headers?: string[];
19
- };
20
- export declare function buildCorsHeaders(cors: CorsConfig): Record<string, string>;
21
- //# sourceMappingURL=cors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../cors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,UAAU,GAAG;IACvB;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB,CAAA;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQzE"}