@astrale-os/kernel-server 0.4.12 → 0.4.14
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.
- package/dist/app/create.d.ts +3 -3
- package/dist/app/create.d.ts.map +1 -1
- package/dist/app/create.js +8 -7
- package/dist/app/create.js.map +1 -1
- package/dist/app/index.d.ts +1 -1
- package/dist/app/index.d.ts.map +1 -1
- package/dist/app/multiplexed.d.ts +11 -11
- package/dist/app/multiplexed.d.ts.map +1 -1
- package/dist/app/multiplexed.js +16 -15
- package/dist/app/multiplexed.js.map +1 -1
- package/dist/app/ws-upgrade.d.ts +7 -8
- package/dist/app/ws-upgrade.d.ts.map +1 -1
- package/dist/app/ws-upgrade.js +10 -9
- package/dist/app/ws-upgrade.js.map +1 -1
- package/dist/capabilities/contract.d.ts +8 -0
- package/dist/capabilities/contract.d.ts.map +1 -0
- package/dist/capabilities/contract.js +2 -0
- package/dist/capabilities/contract.js.map +1 -0
- package/dist/capabilities/defer.d.ts +4 -0
- package/dist/capabilities/defer.d.ts.map +1 -0
- package/dist/capabilities/defer.js +2 -0
- package/dist/capabilities/defer.js.map +1 -0
- package/dist/capabilities/hono.d.ts +8 -0
- package/dist/capabilities/hono.d.ts.map +1 -0
- package/dist/capabilities/hono.js +13 -0
- package/dist/capabilities/hono.js.map +1 -0
- package/dist/capabilities/index.d.ts +6 -0
- package/dist/capabilities/index.d.ts.map +1 -0
- package/dist/capabilities/index.js +3 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/capabilities/lifecycle.d.ts +17 -0
- package/dist/capabilities/lifecycle.d.ts.map +1 -0
- package/dist/capabilities/lifecycle.js +37 -0
- package/dist/capabilities/lifecycle.js.map +1 -0
- package/dist/capabilities/sleep.d.ts +4 -0
- package/dist/capabilities/sleep.d.ts.map +1 -0
- package/dist/capabilities/sleep.js +8 -0
- package/dist/capabilities/sleep.js.map +1 -0
- package/dist/envelope/batch.d.ts +3 -2
- package/dist/envelope/batch.d.ts.map +1 -1
- package/dist/envelope/batch.js +9 -3
- package/dist/envelope/batch.js.map +1 -1
- package/dist/envelope/http.d.ts +7 -6
- package/dist/envelope/http.d.ts.map +1 -1
- package/dist/envelope/http.js +17 -13
- package/dist/envelope/http.js.map +1 -1
- package/dist/envelope/ws.d.ts +6 -3
- package/dist/envelope/ws.d.ts.map +1 -1
- package/dist/envelope/ws.js +15 -9
- package/dist/envelope/ws.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/invocation/dispatch.d.ts +32 -0
- package/dist/invocation/dispatch.d.ts.map +1 -0
- package/dist/invocation/dispatch.js +68 -0
- package/dist/invocation/dispatch.js.map +1 -0
- package/dist/invocation/dispatcher.d.ts +19 -0
- package/dist/invocation/dispatcher.d.ts.map +1 -0
- package/dist/invocation/dispatcher.js +9 -0
- package/dist/invocation/dispatcher.js.map +1 -0
- package/dist/invocation/index.d.ts +3 -0
- package/dist/invocation/index.d.ts.map +1 -0
- package/dist/invocation/index.js +3 -0
- package/dist/invocation/index.js.map +1 -0
- package/dist/routed/handler.d.ts +5 -3
- package/dist/routed/handler.d.ts.map +1 -1
- package/dist/routed/handler.js +11 -7
- package/dist/routed/handler.js.map +1 -1
- package/package.json +3 -3
package/dist/envelope/batch.js
CHANGED
|
@@ -6,11 +6,12 @@
|
|
|
6
6
|
* collected into an array. Notifications are dropped from the response;
|
|
7
7
|
* streams and binary results are rejected (those need their own connection).
|
|
8
8
|
*/
|
|
9
|
-
import { KERNEL_ERROR_CODES, decodeKernelRequest,
|
|
9
|
+
import { KERNEL_ERROR_CODES, decodeKernelRequest, encodeKernelError, encodeKernelRedirect, encodeKernelResponse, isBinaryResult, } from '@astrale-os/kernel-api';
|
|
10
|
+
import { dispatchInvocation } from '../invocation/index.js';
|
|
10
11
|
import { toBody } from '../render/index.js';
|
|
11
12
|
import {} from './codec.js';
|
|
12
13
|
import { extractCredential } from './credential.js';
|
|
13
|
-
export async function handleBatch(raw,
|
|
14
|
+
export async function handleBatch(raw, dispatcher, codecEntry, req, corsHeaders, host) {
|
|
14
15
|
if (raw.length === 0) {
|
|
15
16
|
return errorResponse(codecEntry, { code: KERNEL_ERROR_CODES.INVALID_REQUEST, message: 'Empty batch' }, corsHeaders, 400);
|
|
16
17
|
}
|
|
@@ -43,7 +44,12 @@ export async function handleBatch(raw, kernel, codecEntry, req, corsHeaders) {
|
|
|
43
44
|
else {
|
|
44
45
|
cred = auth.credential;
|
|
45
46
|
}
|
|
46
|
-
const res = await
|
|
47
|
+
const res = await dispatchInvocation(dispatcher, {
|
|
48
|
+
path: request.method,
|
|
49
|
+
credential: cred,
|
|
50
|
+
params: request.params,
|
|
51
|
+
...(request.self === undefined ? {} : { self: request.self }),
|
|
52
|
+
}, isAck ? { ack: true } : { id: request.id }, host);
|
|
47
53
|
if (res.kind === 'ack')
|
|
48
54
|
return;
|
|
49
55
|
if (res.kind === 'stream') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../../envelope/batch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../../envelope/batch.ts"],"names":[],"mappings":"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"}
|
package/dist/envelope/http.d.ts
CHANGED
|
@@ -6,12 +6,13 @@
|
|
|
6
6
|
* Routes single requests, batches, acks, streams, and binary results.
|
|
7
7
|
*
|
|
8
8
|
* The dispatcher is built once with `(cors, options)` and then invoked per
|
|
9
|
-
* request with `(req,
|
|
10
|
-
* multi-instance servers reuse the same
|
|
9
|
+
* request with `(req, dispatcher)`. Single-instance servers bind once at startup;
|
|
10
|
+
* multi-instance servers reuse the same HTTP handler across all dispatchers with
|
|
11
11
|
* zero per-request allocation.
|
|
12
12
|
*/
|
|
13
|
-
import type {
|
|
13
|
+
import type { CapabilityHost } from '../capabilities/index.js';
|
|
14
14
|
import type { CorsConfig } from '../cors.js';
|
|
15
|
+
import type { Dispatcher } from '../invocation/index.js';
|
|
15
16
|
export type KernelDispatcherOptions = {
|
|
16
17
|
/**
|
|
17
18
|
* Optional function to extract host placeholder values from the incoming
|
|
@@ -22,9 +23,9 @@ export type KernelDispatcherOptions = {
|
|
|
22
23
|
};
|
|
23
24
|
/**
|
|
24
25
|
* Build a kernel-envelope HTTP dispatcher. Call once at startup; the returned
|
|
25
|
-
* function takes `(req,
|
|
26
|
-
* is supplied per request so a single
|
|
26
|
+
* function takes `(req, dispatcher)` and produces a Response. The dispatcher
|
|
27
|
+
* is supplied per request so a single HTTP handler can serve many instances
|
|
27
28
|
* (multi-instance hosting).
|
|
28
29
|
*/
|
|
29
|
-
export declare function createKernelDispatcher(cors: CorsConfig, options?: KernelDispatcherOptions): (req: Request,
|
|
30
|
+
export declare function createKernelDispatcher(cors: CorsConfig, options?: KernelDispatcherOptions): (req: Request, dispatcher: Dispatcher, host?: CapabilityHost) => Promise<Response>;
|
|
30
31
|
//# sourceMappingURL=http.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../envelope/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../envelope/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAcH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAWxD,MAAM,MAAM,uBAAuB,GAAG;IACpC;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAA;CAC7D,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,uBAA4B,GACpC,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,QAAQ,CAAC,CAwIpF"}
|
package/dist/envelope/http.js
CHANGED
|
@@ -6,12 +6,13 @@
|
|
|
6
6
|
* Routes single requests, batches, acks, streams, and binary results.
|
|
7
7
|
*
|
|
8
8
|
* The dispatcher is built once with `(cors, options)` and then invoked per
|
|
9
|
-
* request with `(req,
|
|
10
|
-
* multi-instance servers reuse the same
|
|
9
|
+
* request with `(req, dispatcher)`. Single-instance servers bind once at startup;
|
|
10
|
+
* multi-instance servers reuse the same HTTP handler across all dispatchers with
|
|
11
11
|
* zero per-request allocation.
|
|
12
12
|
*/
|
|
13
|
-
import { KERNEL_ERROR_CODES, decodeKernelRequest,
|
|
13
|
+
import { KERNEL_ERROR_CODES, decodeKernelRequest, encodeKernelError, encodeKernelRedirect, encodeKernelResponse, isBatch, isBinaryResult, } from '@astrale-os/kernel-api';
|
|
14
14
|
import { buildCorsHeaders } from '../cors.js';
|
|
15
|
+
import { dispatchInvocation } from '../invocation/index.js';
|
|
15
16
|
import { buildBinaryResponse, toBody } from '../render/index.js';
|
|
16
17
|
import { handleBatch } from './batch.js';
|
|
17
18
|
import { resolveRequestCodec, resolveResponseCodec } from './codec.js';
|
|
@@ -19,14 +20,14 @@ import { extractCredential } from './credential.js';
|
|
|
19
20
|
import { buildKernelStreamResponse } from './sse.js';
|
|
20
21
|
/**
|
|
21
22
|
* Build a kernel-envelope HTTP dispatcher. Call once at startup; the returned
|
|
22
|
-
* function takes `(req,
|
|
23
|
-
* is supplied per request so a single
|
|
23
|
+
* function takes `(req, dispatcher)` and produces a Response. The dispatcher
|
|
24
|
+
* is supplied per request so a single HTTP handler can serve many instances
|
|
24
25
|
* (multi-instance hosting).
|
|
25
26
|
*/
|
|
26
27
|
export function createKernelDispatcher(cors, options = {}) {
|
|
27
28
|
const corsHeaders = buildCorsHeaders(cors);
|
|
28
29
|
const hostParamsFn = options.hostParams;
|
|
29
|
-
return async (req,
|
|
30
|
+
return async (req, dispatcher, host) => {
|
|
30
31
|
if (req.method === 'OPTIONS') {
|
|
31
32
|
return new Response(null, { status: 204, headers: corsHeaders });
|
|
32
33
|
}
|
|
@@ -51,7 +52,7 @@ export function createKernelDispatcher(cors, options = {}) {
|
|
|
51
52
|
const responseCodec = resolveResponseCodec(req.headers.get('accept'), requestCodec);
|
|
52
53
|
// 4. Batch?
|
|
53
54
|
if (isBatch(raw)) {
|
|
54
|
-
return handleBatch(raw,
|
|
55
|
+
return handleBatch(raw, dispatcher, responseCodec, req, corsHeaders, host);
|
|
55
56
|
}
|
|
56
57
|
// 5. Decode envelope
|
|
57
58
|
let request;
|
|
@@ -86,16 +87,19 @@ export function createKernelDispatcher(cors, options = {}) {
|
|
|
86
87
|
}
|
|
87
88
|
cred = auth.credential;
|
|
88
89
|
}
|
|
89
|
-
// 7.
|
|
90
|
-
const isStream = request.stream === true || req.headers.get('accept')?.includes('text/event-stream') === true;
|
|
91
|
-
// 8. Dispatch — host params merged at lowest priority (body wins).
|
|
90
|
+
// 7. Dispatch — host params merged at lowest priority (body wins).
|
|
92
91
|
const mergedParams = {
|
|
93
92
|
...hostParams,
|
|
94
|
-
...
|
|
93
|
+
...request.params,
|
|
95
94
|
};
|
|
96
95
|
const isAck = request.id === undefined;
|
|
97
|
-
const result = await
|
|
98
|
-
|
|
96
|
+
const result = await dispatchInvocation(dispatcher, {
|
|
97
|
+
path: request.method,
|
|
98
|
+
credential: cred,
|
|
99
|
+
params: mergedParams,
|
|
100
|
+
...(request.self === undefined ? {} : { self: request.self }),
|
|
101
|
+
}, isAck ? { ack: true } : { id: request.id }, host);
|
|
102
|
+
// 8. Render result
|
|
99
103
|
switch (result.kind) {
|
|
100
104
|
case 'ack':
|
|
101
105
|
return new Response(null, { status: 204, headers: corsHeaders });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../envelope/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../envelope/http.ts"],"names":[],"mappings":"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"}
|
package/dist/envelope/ws.d.ts
CHANGED
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
* delivered as a single stream chunk + end frame; ReadableStream bodies are
|
|
11
11
|
* marked TODO and rejected with INTERNAL_ERROR for now.
|
|
12
12
|
*/
|
|
13
|
-
import type { Codec
|
|
13
|
+
import type { Codec } from '@astrale-os/kernel-api';
|
|
14
|
+
import type { CapabilityHost } from '../capabilities/index.js';
|
|
15
|
+
import type { Dispatcher } from '../invocation/index.js';
|
|
14
16
|
export interface WebSocketLike {
|
|
15
17
|
send(data: string | Uint8Array): void;
|
|
16
18
|
close(code?: number, reason?: string): void;
|
|
@@ -19,8 +21,9 @@ export interface WebSocketLike {
|
|
|
19
21
|
export declare class KernelWsConnection {
|
|
20
22
|
private readonly ws;
|
|
21
23
|
private readonly codec;
|
|
22
|
-
private readonly
|
|
23
|
-
|
|
24
|
+
private readonly dispatcher;
|
|
25
|
+
private readonly host?;
|
|
26
|
+
constructor(ws: WebSocketLike, codec: Codec, dispatcher: Dispatcher, host?: CapabilityHost | undefined);
|
|
24
27
|
start(): void;
|
|
25
28
|
handleMessage(data: string | ArrayBuffer | Uint8Array): void;
|
|
26
29
|
private processMessage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../envelope/ws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../envelope/ws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAiC,MAAM,wBAAwB,CAAA;AAelF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAMxD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAA;IACrC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAMD,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IAJxB,YACmB,EAAE,EAAE,aAAa,EACjB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,IAAI,CAAC,EAAE,cAAc,YAAA,EACpC;IAEJ,KAAK,IAAI,IAAI,CAEZ;IAED,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,IAAI,CAK3D;YAEa,cAAc;YA6Fd,UAAU;IAcxB,OAAO,CAAC,SAAS;IAKjB,WAAW,IAAI,IAAI,CAElB;IAED,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAG9B;CACF"}
|
package/dist/envelope/ws.js
CHANGED
|
@@ -10,17 +10,20 @@
|
|
|
10
10
|
* delivered as a single stream chunk + end frame; ReadableStream bodies are
|
|
11
11
|
* marked TODO and rejected with INTERNAL_ERROR for now.
|
|
12
12
|
*/
|
|
13
|
-
import { KERNEL_ERROR_CODES, classifyError, decodeKernelRequest,
|
|
13
|
+
import { KERNEL_ERROR_CODES, classifyError, decodeKernelRequest, encodeKernelError, encodeKernelRedirect, encodeKernelResponse, encodeStreamChunk, encodeStreamEnd, encodeStreamError, isBinaryResult, } from '@astrale-os/kernel-api';
|
|
14
|
+
import { dispatchInvocation } from '../invocation/index.js';
|
|
14
15
|
const WS_OPEN = 1;
|
|
15
16
|
// ─── Connection ─────────────────────────────────────────────────────────────
|
|
16
17
|
export class KernelWsConnection {
|
|
17
18
|
ws;
|
|
18
19
|
codec;
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
dispatcher;
|
|
21
|
+
host;
|
|
22
|
+
constructor(ws, codec, dispatcher, host) {
|
|
21
23
|
this.ws = ws;
|
|
22
24
|
this.codec = codec;
|
|
23
|
-
this.
|
|
25
|
+
this.dispatcher = dispatcher;
|
|
26
|
+
this.host = host;
|
|
24
27
|
}
|
|
25
28
|
start() {
|
|
26
29
|
/* no-op — protocol-level ping handled by transport */
|
|
@@ -59,12 +62,15 @@ export class KernelWsConnection {
|
|
|
59
62
|
}
|
|
60
63
|
// 3. Credential — fixed `creds` top-level field on each frame.
|
|
61
64
|
const cred = request.creds ?? '';
|
|
62
|
-
// 4.
|
|
63
|
-
const isStream = request.stream === true;
|
|
64
|
-
// 5. Dispatch
|
|
65
|
+
// 4. Dispatch
|
|
65
66
|
const isAck = request.id === undefined;
|
|
66
|
-
const result = await
|
|
67
|
-
|
|
67
|
+
const result = await dispatchInvocation(this.dispatcher, {
|
|
68
|
+
path: request.method,
|
|
69
|
+
credential: cred,
|
|
70
|
+
params: request.params,
|
|
71
|
+
...(request.self === undefined ? {} : { self: request.self }),
|
|
72
|
+
}, isAck ? { ack: true } : { id: request.id }, this.host);
|
|
73
|
+
// 5. Send result
|
|
68
74
|
switch (result.kind) {
|
|
69
75
|
case 'ack':
|
|
70
76
|
return;
|
package/dist/envelope/ws.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../envelope/ws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../envelope/ws.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
export { createKernelApp, type KernelAppConfig, type WsAdapter } from './app/create.js';
|
|
2
|
-
export { createMultiplexedKernelApp, type MultiplexedKernelAppConfig, type
|
|
2
|
+
export { createMultiplexedKernelApp, type MultiplexedKernelAppConfig, type DispatcherResolver, } from './app/multiplexed.js';
|
|
3
3
|
export { walkDomain, type ServerHost, type MountedFunction, type MountedRoute, type MountPlan, } from './plan/index.js';
|
|
4
4
|
export { buildCorsHeaders, type CorsConfig } from './cors.js';
|
|
5
5
|
export { createKernelDispatcher, type KernelDispatcherOptions } from './envelope/http.js';
|
|
6
6
|
export { KernelWsConnection, type WebSocketLike } from './envelope/ws.js';
|
|
7
|
+
export { createCapabilityLifecycle, honoCapabilityHost, type CapabilityHost, type CapabilityLifecycle, type Defer, type DeferredTask, type Capabilities, type Sleep, } from './capabilities/index.js';
|
|
8
|
+
export { dispatchInvocation, executeInvocation, kernelDispatcher, type Invocation, type InvocationPath, type InvocationReply, type InvocationResponse, type Dispatcher, } from './invocation/index.js';
|
|
7
9
|
export { createRouteHandler, type RouteHandlerConfig } from './routed/index.js';
|
|
8
10
|
export { mountJwks, mountInstanceJwks, mountIssuerRegistry, mountInstanceIssuerRegistry, type JwksKeys, type MultiplexedJwks, type JwksConfig, type InstanceJwksConfig, type IssuerRegistryConfig, type InstanceIssuerRegistryConfig, } from './jwks/index.js';
|
|
9
|
-
export {
|
|
10
|
-
export type { DispatchResponse, DispatchOptions } from '@astrale-os/kernel-api';
|
|
11
|
+
export { classifyError } from '@astrale-os/kernel-api';
|
|
11
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACvF,OAAO,EACL,0BAA0B,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACvF,OAAO,EACL,0BAA0B,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,GACxB,MAAM,sBAAsB,CAAA;AAI7B,OAAO,EACL,UAAU,EACV,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,SAAS,GACf,MAAM,iBAAiB,CAAA;AAIxB,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAA;AAI7D,OAAO,EAAE,sBAAsB,EAAE,KAAK,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AACzF,OAAO,EAAE,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,KAAK,EACV,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,KAAK,GACX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,UAAU,GAChB,MAAM,uBAAuB,CAAA;AAI9B,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAI/E,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,mBAAmB,EACnB,2BAA2B,EAC3B,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,GAClC,MAAM,iBAAiB,CAAA;AAIxB,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -8,10 +8,12 @@ export { buildCorsHeaders } from './cors.js';
|
|
|
8
8
|
// ─── Kernel envelope dispatcher ──────────────────────────────────────────────
|
|
9
9
|
export { createKernelDispatcher } from './envelope/http.js';
|
|
10
10
|
export { KernelWsConnection } from './envelope/ws.js';
|
|
11
|
+
export { createCapabilityLifecycle, honoCapabilityHost, } from './capabilities/index.js';
|
|
12
|
+
export { dispatchInvocation, executeInvocation, kernelDispatcher, } from './invocation/index.js';
|
|
11
13
|
// ─── Routed HTTP handler (per-route) ─────────────────────────────────────────
|
|
12
14
|
export { createRouteHandler } from './routed/index.js';
|
|
13
15
|
// ─── JWKS (OIDC Discovery + JSON Web Key Set) ───────────────────────────────
|
|
14
16
|
export { mountJwks, mountInstanceJwks, mountIssuerRegistry, mountInstanceIssuerRegistry, } from './jwks/index.js';
|
|
15
17
|
// ─── Dispatch (for custom integrations) ──────────────────────────────────────
|
|
16
|
-
export {
|
|
18
|
+
export { classifyError } from '@astrale-os/kernel-api';
|
|
17
19
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,OAAO,EAAE,eAAe,EAAwC,MAAM,iBAAiB,CAAA;AACvF,OAAO,EACL,0BAA0B,GAG3B,MAAM,sBAAsB,CAAA;AAE7B,gFAAgF;AAEhF,OAAO,EACL,UAAU,GAKX,MAAM,iBAAiB,CAAA;AAExB,gFAAgF;AAEhF,OAAO,EAAE,gBAAgB,EAAmB,MAAM,WAAW,CAAA;AAE7D,gFAAgF;AAEhF,OAAO,EAAE,sBAAsB,EAAgC,MAAM,oBAAoB,CAAA;AACzF,OAAO,EAAE,kBAAkB,EAAsB,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,OAAO,EAAE,eAAe,EAAwC,MAAM,iBAAiB,CAAA;AACvF,OAAO,EACL,0BAA0B,GAG3B,MAAM,sBAAsB,CAAA;AAE7B,gFAAgF;AAEhF,OAAO,EACL,UAAU,GAKX,MAAM,iBAAiB,CAAA;AAExB,gFAAgF;AAEhF,OAAO,EAAE,gBAAgB,EAAmB,MAAM,WAAW,CAAA;AAE7D,gFAAgF;AAEhF,OAAO,EAAE,sBAAsB,EAAgC,MAAM,oBAAoB,CAAA;AACzF,OAAO,EAAE,kBAAkB,EAAsB,MAAM,kBAAkB,CAAA;AACzE,OAAO,EACL,yBAAyB,EACzB,kBAAkB,GAOnB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GAMjB,MAAM,uBAAuB,CAAA;AAE9B,gFAAgF;AAEhF,OAAO,EAAE,kBAAkB,EAA2B,MAAM,mBAAmB,CAAA;AAE/E,+EAA+E;AAE/E,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,mBAAmB,EACnB,2BAA2B,GAO5B,MAAM,iBAAiB,CAAA;AAExB,gFAAgF;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { CallRedirection, DispatchResult, KernelErrorPayload, RequestId } from '@astrale-os/kernel-api';
|
|
2
|
+
import type { CapabilityHost } from '../capabilities/index.js';
|
|
3
|
+
import type { Invocation, Dispatcher } from './dispatcher.js';
|
|
4
|
+
export type InvocationResponse = {
|
|
5
|
+
kind: 'success';
|
|
6
|
+
id: RequestId;
|
|
7
|
+
data: unknown;
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'error';
|
|
10
|
+
id: RequestId;
|
|
11
|
+
error: KernelErrorPayload;
|
|
12
|
+
} | {
|
|
13
|
+
kind: 'stream';
|
|
14
|
+
id: RequestId;
|
|
15
|
+
generator: AsyncGenerator<unknown>;
|
|
16
|
+
} | {
|
|
17
|
+
kind: 'redirect';
|
|
18
|
+
id: RequestId;
|
|
19
|
+
redirection: CallRedirection;
|
|
20
|
+
} | {
|
|
21
|
+
kind: 'ack';
|
|
22
|
+
};
|
|
23
|
+
export type InvocationReply = {
|
|
24
|
+
ack: true;
|
|
25
|
+
} | {
|
|
26
|
+
id: RequestId;
|
|
27
|
+
};
|
|
28
|
+
/** Execute one invocation with unconditional, host-adapted capabilities. */
|
|
29
|
+
export declare function executeInvocation(dispatcher: Dispatcher, invocation: Invocation, host?: CapabilityHost): Promise<DispatchResult>;
|
|
30
|
+
/** Add request correlation, acknowledgement, and error classification. */
|
|
31
|
+
export declare function dispatchInvocation(dispatcher: Dispatcher, invocation: Invocation, reply: InvocationReply, host?: CapabilityHost): Promise<InvocationResponse>;
|
|
32
|
+
//# sourceMappingURL=dispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../invocation/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,SAAS,EACV,MAAM,wBAAwB,CAAA;AAI/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAI7D,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,kBAAkB,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,eAAe,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAA;AAEnB,MAAM,MAAM,eAAe,GAAG;IAAE,GAAG,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,SAAS,CAAA;CAAE,CAAA;AAE/D,4EAA4E;AAC5E,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,cAAc,CAAC,CAgBzB;AAED,0EAA0E;AAC1E,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,eAAe,EACtB,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,kBAAkB,CAAC,CA+B7B"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { classifyError } from '@astrale-os/kernel-api';
|
|
2
|
+
import { createCapabilityLifecycle } from '../capabilities/index.js';
|
|
3
|
+
/** Execute one invocation with unconditional, host-adapted capabilities. */
|
|
4
|
+
export async function executeInvocation(dispatcher, invocation, host) {
|
|
5
|
+
const lifecycle = createCapabilityLifecycle(host);
|
|
6
|
+
try {
|
|
7
|
+
const result = await dispatcher.invoke(invocation, lifecycle.capabilities);
|
|
8
|
+
if (result.kind === 'stream') {
|
|
9
|
+
return {
|
|
10
|
+
kind: 'stream',
|
|
11
|
+
generator: settleStream(result.generator, lifecycle.settle),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
await lifecycle.settle();
|
|
15
|
+
return result;
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
await lifecycle.settle();
|
|
19
|
+
throw error;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/** Add request correlation, acknowledgement, and error classification. */
|
|
23
|
+
export async function dispatchInvocation(dispatcher, invocation, reply, host) {
|
|
24
|
+
if ('ack' in reply) {
|
|
25
|
+
const lifecycle = createCapabilityLifecycle(host);
|
|
26
|
+
const background = Promise.resolve().then(async () => {
|
|
27
|
+
try {
|
|
28
|
+
await dispatcher.invoke(invocation, lifecycle.capabilities);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
// There is no response channel for acknowledged invocations.
|
|
32
|
+
// oxlint-disable-next-line no-console
|
|
33
|
+
console.error(`[invocation] Ack-mode error (${pathToString(invocation.path)}):`, error);
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
await lifecycle.settle();
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
host?.register(background);
|
|
40
|
+
return { kind: 'ack' };
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const result = await executeInvocation(dispatcher, invocation, host);
|
|
44
|
+
switch (result.kind) {
|
|
45
|
+
case 'value':
|
|
46
|
+
return { kind: 'success', id: reply.id, data: result.value };
|
|
47
|
+
case 'stream':
|
|
48
|
+
return { kind: 'stream', id: reply.id, generator: result.generator };
|
|
49
|
+
case 'redirect':
|
|
50
|
+
return { kind: 'redirect', id: reply.id, redirection: result.redirection };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
return { kind: 'error', id: reply.id, error: classifyError(error) };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async function* settleStream(generator, settle) {
|
|
58
|
+
try {
|
|
59
|
+
yield* generator;
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
await settle();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function pathToString(path) {
|
|
66
|
+
return typeof path === 'string' ? path : path.raw;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../invocation/dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { DispatchResult, KernelAPI } from '@astrale-os/kernel-api';
|
|
2
|
+
import type { CredentialInput, Path } from '@astrale-os/kernel-core';
|
|
3
|
+
import type { Capabilities } from '../capabilities/index.js';
|
|
4
|
+
/** Accepts canonical strings and any Path implementation exposing its raw form. */
|
|
5
|
+
export type InvocationPath = string | Pick<Path, 'raw'>;
|
|
6
|
+
/** A transport-neutral call entering a hosted Astrale dispatcher. */
|
|
7
|
+
export type Invocation = {
|
|
8
|
+
path: InvocationPath;
|
|
9
|
+
credential: CredentialInput;
|
|
10
|
+
params: unknown;
|
|
11
|
+
self?: string;
|
|
12
|
+
};
|
|
13
|
+
/** The sole invocation contract required by kernel-server transports. */
|
|
14
|
+
export type Dispatcher = {
|
|
15
|
+
invoke(invocation: Invocation, caps: Capabilities): Promise<DispatchResult>;
|
|
16
|
+
};
|
|
17
|
+
/** Adapt a canonical kernel dispatcher to the narrower hosting contract. */
|
|
18
|
+
export declare function kernelDispatcher(kernel: Pick<KernelAPI, 'dispatch'>): Dispatcher;
|
|
19
|
+
//# sourceMappingURL=dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../invocation/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAE5D,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AAEvD,qEAAqE;AACrE,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,cAAc,CAAA;IACpB,UAAU,EAAE,eAAe,CAAA;IAC3B,MAAM,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,yEAAyE;AACzE,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;CAC5E,CAAA;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,UAAU,CAMhF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Adapt a canonical kernel dispatcher to the narrower hosting contract. */
|
|
2
|
+
export function kernelDispatcher(kernel) {
|
|
3
|
+
return {
|
|
4
|
+
invoke({ path, credential, params, self }) {
|
|
5
|
+
return kernel.dispatch(typeof path === 'string' ? path : path.raw, credential, params, self);
|
|
6
|
+
},
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../invocation/dispatcher.ts"],"names":[],"mappings":"AAqBA,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB,CAAC,MAAmC;IAClE,OAAO;QACL,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;YACvC,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;QAC9F,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../invocation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,kBAAkB,GACxB,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../invocation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,GAGlB,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,gBAAgB,GAIjB,MAAM,iBAAiB,CAAA"}
|
package/dist/routed/handler.d.ts
CHANGED
|
@@ -11,14 +11,16 @@
|
|
|
11
11
|
* for consistency with kernel HTTP. The HTTP status comes from the error code
|
|
12
12
|
* table (`kernelErrorHttpStatus`).
|
|
13
13
|
*/
|
|
14
|
-
import type {
|
|
14
|
+
import type { RouteBinding } from '@astrale-os/kernel-api';
|
|
15
15
|
import type { AuthPolicy } from '@astrale-os/kernel-api/routed';
|
|
16
|
+
import type { CapabilityHost } from '../capabilities/index.js';
|
|
16
17
|
import type { CorsConfig } from '../cors.js';
|
|
18
|
+
import type { Dispatcher } from '../invocation/index.js';
|
|
17
19
|
export type RouteHandlerConfig = {
|
|
18
20
|
/** The full kernel method name to dispatch (e.g. `Task.read`). */
|
|
19
21
|
method: string;
|
|
20
22
|
route: RouteBinding;
|
|
21
|
-
|
|
23
|
+
dispatcher: Dispatcher;
|
|
22
24
|
cors: CorsConfig;
|
|
23
25
|
/**
|
|
24
26
|
* Optional host placeholder extractor — returned values are merged into
|
|
@@ -32,5 +34,5 @@ export type RouteHandlerConfig = {
|
|
|
32
34
|
/**
|
|
33
35
|
* Build a Hono-compatible handler for a single route binding.
|
|
34
36
|
*/
|
|
35
|
-
export declare function createRouteHandler(config: RouteHandlerConfig): (req: Request, pathParams: Record<string, string
|
|
37
|
+
export declare function createRouteHandler(config: RouteHandlerConfig): (req: Request, pathParams: Record<string, string>, host?: CapabilityHost) => Promise<Response>;
|
|
36
38
|
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../routed/handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../routed/handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAiC,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAS/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AA2BxD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,YAAY,CAAA;IACnB,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,UAAU,CAAA;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAA;IAC5D,kFAAkF;IAClF,IAAI,CAAC,EAAE,UAAU,CAAA;CAClB,CAAA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,GACzB,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,QAAQ,CAAC,CAuGhG"}
|
package/dist/routed/handler.js
CHANGED
|
@@ -11,8 +11,9 @@
|
|
|
11
11
|
* for consistency with kernel HTTP. The HTTP status comes from the error code
|
|
12
12
|
* table (`kernelErrorHttpStatus`).
|
|
13
13
|
*/
|
|
14
|
-
import { KERNEL_ERROR_CODES,
|
|
14
|
+
import { KERNEL_ERROR_CODES, isBinaryResult, jsonCodec, kernelErrorHttpStatus, } from '@astrale-os/kernel-api';
|
|
15
15
|
import { buildCorsHeaders } from '../cors.js';
|
|
16
|
+
import { dispatchInvocation } from '../invocation/index.js';
|
|
16
17
|
import { buildBinaryResponse, toBody } from '../render/index.js';
|
|
17
18
|
import { readCredential } from './credential.js';
|
|
18
19
|
import { decodeRouteRequest } from './params.js';
|
|
@@ -36,7 +37,7 @@ function errorResponse(error, corsHeaders) {
|
|
|
36
37
|
export function createRouteHandler(config) {
|
|
37
38
|
const corsHeaders = buildCorsHeaders(config.cors);
|
|
38
39
|
const hostParamsFn = config.hostParams;
|
|
39
|
-
return async (req, pathParams) => {
|
|
40
|
+
return async (req, pathParams, host) => {
|
|
40
41
|
if (req.method === 'OPTIONS') {
|
|
41
42
|
return new Response(null, { status: 204, headers: corsHeaders });
|
|
42
43
|
}
|
|
@@ -74,12 +75,15 @@ export function createRouteHandler(config) {
|
|
|
74
75
|
// Configurable via route.credential. Defaults to Authorization header.
|
|
75
76
|
const credSource = config.route.credential ?? { in: 'header', name: 'authorization' };
|
|
76
77
|
const credential = readCredential(req, credSource);
|
|
77
|
-
// 3.
|
|
78
|
-
const isStream = req.headers.get('accept')?.includes('text/event-stream') === true;
|
|
79
|
-
// 4. Dispatch
|
|
78
|
+
// 3. Dispatch
|
|
80
79
|
const requestId = crypto.randomUUID();
|
|
81
|
-
const result = await
|
|
82
|
-
|
|
80
|
+
const result = await dispatchInvocation(config.dispatcher, {
|
|
81
|
+
path: config.method,
|
|
82
|
+
credential,
|
|
83
|
+
params,
|
|
84
|
+
...(decoded.self === undefined ? {} : { self: decoded.self }),
|
|
85
|
+
}, { id: requestId }, host);
|
|
86
|
+
// 4. Render
|
|
83
87
|
switch (result.kind) {
|
|
84
88
|
case 'ack':
|
|
85
89
|
return new Response(null, { status: 204, headers: corsHeaders });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../routed/handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EACL,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../routed/handler.ts"],"names":[],"mappings":"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"}
|