@astrale-os/kernel-server 0.4.16 → 0.5.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/capture.d.ts +3 -0
- package/dist/capture.d.ts.map +1 -0
- package/dist/capture.js +10 -0
- package/dist/capture.js.map +1 -0
- package/dist/cors/cors.d.ts +22 -0
- package/dist/cors/cors.d.ts.map +1 -0
- package/dist/cors/cors.js +136 -0
- package/dist/cors/cors.js.map +1 -0
- package/dist/cors/index.d.ts +3 -0
- package/dist/cors/index.d.ts.map +1 -0
- package/dist/cors/index.js +2 -0
- package/dist/cors/index.js.map +1 -0
- package/dist/cors/types.d.ts +12 -0
- package/dist/cors/types.d.ts.map +1 -0
- package/dist/cors/types.js +2 -0
- package/dist/cors/types.js.map +1 -0
- package/dist/errors/availability.d.ts +11 -0
- package/dist/errors/availability.d.ts.map +1 -0
- package/dist/errors/availability.js +15 -0
- package/dist/errors/availability.js.map +1 -0
- package/dist/errors/classify.d.ts +4 -0
- package/dist/errors/classify.d.ts.map +1 -0
- package/dist/errors/classify.js +254 -0
- package/dist/errors/classify.js.map +1 -0
- package/dist/errors/index.d.ts +5 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +5 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/request-body.d.ts +8 -0
- package/dist/errors/request-body.d.ts.map +1 -0
- package/dist/errors/request-body.js +15 -0
- package/dist/errors/request-body.js.map +1 -0
- package/dist/errors/response-body.d.ts +5 -0
- package/dist/errors/response-body.d.ts.map +1 -0
- package/dist/errors/response-body.js +9 -0
- package/dist/errors/response-body.js.map +1 -0
- package/dist/index.d.ts +4 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -18
- package/dist/index.js.map +1 -1
- package/dist/installation/handler.d.ts +10 -0
- package/dist/installation/handler.d.ts.map +1 -0
- package/dist/installation/handler.js +126 -0
- package/dist/installation/handler.js.map +1 -0
- package/dist/installation/index.d.ts +3 -0
- package/dist/installation/index.d.ts.map +1 -0
- package/dist/installation/index.js +2 -0
- package/dist/installation/index.js.map +1 -0
- package/dist/installation/types.d.ts +12 -0
- package/dist/installation/types.d.ts.map +1 -0
- package/dist/installation/types.js +2 -0
- package/dist/installation/types.js.map +1 -0
- package/dist/invocation/context.d.ts +7 -0
- package/dist/invocation/context.d.ts.map +1 -0
- package/dist/invocation/context.js +62 -0
- package/dist/invocation/context.js.map +1 -0
- package/dist/invocation/index.d.ts +2 -2
- package/dist/invocation/index.d.ts.map +1 -1
- package/dist/invocation/index.js +1 -2
- package/dist/invocation/index.js.map +1 -1
- package/dist/invocation/types.d.ts +34 -0
- package/dist/invocation/types.d.ts.map +1 -0
- package/dist/invocation/types.js +2 -0
- package/dist/invocation/types.js.map +1 -0
- package/dist/issuer/index.d.ts +3 -0
- package/dist/issuer/index.d.ts.map +1 -0
- package/dist/issuer/index.js +2 -0
- package/dist/issuer/index.js.map +1 -0
- package/dist/issuer/routes.d.ts +13 -0
- package/dist/issuer/routes.d.ts.map +1 -0
- package/dist/issuer/routes.js +138 -0
- package/dist/issuer/routes.js.map +1 -0
- package/dist/issuer/types.d.ts +11 -0
- package/dist/issuer/types.d.ts.map +1 -0
- package/dist/issuer/types.js +2 -0
- package/dist/issuer/types.js.map +1 -0
- package/dist/lifecycle/active.d.ts +40 -0
- package/dist/lifecycle/active.d.ts.map +1 -0
- package/dist/lifecycle/active.js +200 -0
- package/dist/lifecycle/active.js.map +1 -0
- package/dist/lifecycle/index.d.ts +2 -0
- package/dist/lifecycle/index.d.ts.map +1 -0
- package/dist/lifecycle/index.js +2 -0
- package/dist/lifecycle/index.js.map +1 -0
- package/dist/publication/index.d.ts +3 -0
- package/dist/publication/index.d.ts.map +1 -0
- package/dist/publication/index.js +2 -0
- package/dist/publication/index.js.map +1 -0
- package/dist/publication/snapshot.d.ts +14 -0
- package/dist/publication/snapshot.d.ts.map +1 -0
- package/dist/publication/snapshot.js +30 -0
- package/dist/publication/snapshot.js.map +1 -0
- package/dist/publication/types.d.ts +19 -0
- package/dist/publication/types.d.ts.map +1 -0
- package/dist/publication/types.js +2 -0
- package/dist/publication/types.js.map +1 -0
- package/dist/routes/index.d.ts +2 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +2 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/routes.d.ts +24 -0
- package/dist/routes/routes.d.ts.map +1 -0
- package/dist/routes/routes.js +438 -0
- package/dist/routes/routes.js.map +1 -0
- package/dist/server.d.ts +5 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +226 -0
- package/dist/server.js.map +1 -0
- package/dist/transport/body.d.ts +5 -0
- package/dist/transport/body.d.ts.map +1 -0
- package/dist/transport/body.js +51 -0
- package/dist/transport/body.js.map +1 -0
- package/dist/transport/codecs.d.ts +5 -0
- package/dist/transport/codecs.d.ts.map +1 -0
- package/dist/transport/codecs.js +6 -0
- package/dist/transport/codecs.js.map +1 -0
- package/dist/transport/credential.d.ts +11 -0
- package/dist/transport/credential.d.ts.map +1 -0
- package/dist/transport/credential.js +29 -0
- package/dist/transport/credential.js.map +1 -0
- package/dist/transport/http/handler.d.ts +16 -0
- package/dist/transport/http/handler.d.ts.map +1 -0
- package/dist/transport/http/handler.js +170 -0
- package/dist/transport/http/handler.js.map +1 -0
- package/dist/transport/http/index.d.ts +3 -0
- package/dist/transport/http/index.d.ts.map +1 -0
- package/dist/transport/http/index.js +3 -0
- package/dist/transport/http/index.js.map +1 -0
- package/dist/transport/http/render.d.ts +29 -0
- package/dist/transport/http/render.d.ts.map +1 -0
- package/dist/transport/http/render.js +277 -0
- package/dist/transport/http/render.js.map +1 -0
- package/dist/transport/index.d.ts +10 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +9 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/router.d.ts +5 -0
- package/dist/transport/router.d.ts.map +1 -0
- package/dist/transport/router.js +5 -0
- package/dist/transport/router.js.map +1 -0
- package/dist/transport/stream-error.d.ts +4 -0
- package/dist/transport/stream-error.d.ts.map +1 -0
- package/dist/transport/stream-error.js +14 -0
- package/dist/transport/stream-error.js.map +1 -0
- package/dist/transport/types.d.ts +29 -0
- package/dist/transport/types.d.ts.map +1 -0
- package/dist/transport/types.js +2 -0
- package/dist/transport/types.js.map +1 -0
- package/dist/transport/websocket/index.d.ts +3 -0
- package/dist/transport/websocket/index.d.ts.map +1 -0
- package/dist/transport/websocket/index.js +3 -0
- package/dist/transport/websocket/index.js.map +1 -0
- package/dist/transport/websocket/session.d.ts +19 -0
- package/dist/transport/websocket/session.d.ts.map +1 -0
- package/dist/transport/websocket/session.js +328 -0
- package/dist/transport/websocket/session.js.map +1 -0
- package/dist/transport/websocket/upgrade.d.ts +19 -0
- package/dist/transport/websocket/upgrade.d.ts.map +1 -0
- package/dist/transport/websocket/upgrade.js +46 -0
- package/dist/transport/websocket/upgrade.js.map +1 -0
- package/dist/types.d.ts +62 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +9 -11
- package/dist/app/create.d.ts +0 -48
- package/dist/app/create.d.ts.map +0 -1
- package/dist/app/create.js +0 -108
- package/dist/app/create.js.map +0 -1
- package/dist/app/index.d.ts +0 -4
- package/dist/app/index.d.ts.map +0 -1
- package/dist/app/index.js +0 -4
- package/dist/app/index.js.map +0 -1
- package/dist/app/multiplexed.d.ts +0 -53
- package/dist/app/multiplexed.d.ts.map +0 -1
- package/dist/app/multiplexed.js +0 -64
- package/dist/app/multiplexed.js.map +0 -1
- package/dist/app/ws-upgrade.d.ts +0 -34
- package/dist/app/ws-upgrade.d.ts.map +0 -1
- package/dist/app/ws-upgrade.js +0 -94
- package/dist/app/ws-upgrade.js.map +0 -1
- package/dist/capabilities/contract.d.ts +0 -8
- package/dist/capabilities/contract.d.ts.map +0 -1
- package/dist/capabilities/contract.js +0 -2
- package/dist/capabilities/contract.js.map +0 -1
- package/dist/capabilities/defer.d.ts +0 -4
- package/dist/capabilities/defer.d.ts.map +0 -1
- package/dist/capabilities/defer.js +0 -2
- package/dist/capabilities/defer.js.map +0 -1
- package/dist/capabilities/hono.d.ts +0 -8
- package/dist/capabilities/hono.d.ts.map +0 -1
- package/dist/capabilities/hono.js +0 -13
- package/dist/capabilities/hono.js.map +0 -1
- package/dist/capabilities/index.d.ts +0 -6
- package/dist/capabilities/index.d.ts.map +0 -1
- package/dist/capabilities/index.js +0 -3
- package/dist/capabilities/index.js.map +0 -1
- package/dist/capabilities/lifecycle.d.ts +0 -17
- package/dist/capabilities/lifecycle.d.ts.map +0 -1
- package/dist/capabilities/lifecycle.js +0 -37
- package/dist/capabilities/lifecycle.js.map +0 -1
- package/dist/capabilities/sleep.d.ts +0 -4
- package/dist/capabilities/sleep.d.ts.map +0 -1
- package/dist/capabilities/sleep.js +0 -8
- package/dist/capabilities/sleep.js.map +0 -1
- package/dist/cors.d.ts +0 -21
- package/dist/cors.d.ts.map +0 -1
- package/dist/cors.js +0 -17
- package/dist/cors.js.map +0 -1
- package/dist/envelope/batch.d.ts +0 -13
- package/dist/envelope/batch.d.ts.map +0 -1
- package/dist/envelope/batch.js +0 -96
- package/dist/envelope/batch.js.map +0 -1
- package/dist/envelope/codec.d.ts +0 -26
- package/dist/envelope/codec.d.ts.map +0 -1
- package/dist/envelope/codec.js +0 -52
- package/dist/envelope/codec.js.map +0 -1
- package/dist/envelope/credential.d.ts +0 -20
- package/dist/envelope/credential.d.ts.map +0 -1
- package/dist/envelope/credential.js +0 -32
- package/dist/envelope/credential.js.map +0 -1
- package/dist/envelope/http.d.ts +0 -31
- package/dist/envelope/http.d.ts.map +0 -1
- package/dist/envelope/http.js +0 -132
- package/dist/envelope/http.js.map +0 -1
- package/dist/envelope/sse.d.ts +0 -11
- package/dist/envelope/sse.d.ts.map +0 -1
- package/dist/envelope/sse.js +0 -73
- package/dist/envelope/sse.js.map +0 -1
- package/dist/envelope/ws.d.ts +0 -35
- package/dist/envelope/ws.d.ts.map +0 -1
- package/dist/envelope/ws.js +0 -142
- package/dist/envelope/ws.js.map +0 -1
- package/dist/invocation/dispatch.d.ts +0 -32
- package/dist/invocation/dispatch.d.ts.map +0 -1
- package/dist/invocation/dispatch.js +0 -68
- package/dist/invocation/dispatch.js.map +0 -1
- package/dist/invocation/dispatcher.d.ts +0 -19
- package/dist/invocation/dispatcher.d.ts.map +0 -1
- package/dist/invocation/dispatcher.js +0 -9
- package/dist/invocation/dispatcher.js.map +0 -1
- package/dist/jwks/discovery.d.ts +0 -40
- package/dist/jwks/discovery.d.ts.map +0 -1
- package/dist/jwks/discovery.js +0 -113
- package/dist/jwks/discovery.js.map +0 -1
- package/dist/jwks/index.d.ts +0 -3
- package/dist/jwks/index.d.ts.map +0 -1
- package/dist/jwks/index.js +0 -3
- package/dist/jwks/index.js.map +0 -1
- package/dist/jwks/issuers.d.ts +0 -47
- package/dist/jwks/issuers.d.ts.map +0 -1
- package/dist/jwks/issuers.js +0 -76
- package/dist/jwks/issuers.js.map +0 -1
- package/dist/jwks/keys.d.ts +0 -44
- package/dist/jwks/keys.d.ts.map +0 -1
- package/dist/jwks/keys.js +0 -56
- package/dist/jwks/keys.js.map +0 -1
- package/dist/plan/host-params.d.ts +0 -13
- package/dist/plan/host-params.d.ts.map +0 -1
- package/dist/plan/host-params.js +0 -23
- package/dist/plan/host-params.js.map +0 -1
- package/dist/plan/host.d.ts +0 -24
- package/dist/plan/host.d.ts.map +0 -1
- package/dist/plan/host.js +0 -24
- package/dist/plan/host.js.map +0 -1
- package/dist/plan/index.d.ts +0 -4
- package/dist/plan/index.d.ts.map +0 -1
- package/dist/plan/index.js +0 -4
- package/dist/plan/index.js.map +0 -1
- package/dist/plan/walk.d.ts +0 -51
- package/dist/plan/walk.d.ts.map +0 -1
- package/dist/plan/walk.js +0 -110
- package/dist/plan/walk.js.map +0 -1
- package/dist/render/binary.d.ts +0 -19
- package/dist/render/binary.d.ts.map +0 -1
- package/dist/render/binary.js +0 -33
- package/dist/render/binary.js.map +0 -1
- package/dist/render/body.d.ts +0 -10
- package/dist/render/body.d.ts.map +0 -1
- package/dist/render/body.js +0 -17
- package/dist/render/body.js.map +0 -1
- package/dist/render/index.d.ts +0 -3
- package/dist/render/index.d.ts.map +0 -1
- package/dist/render/index.js +0 -3
- package/dist/render/index.js.map +0 -1
- package/dist/routed/credential.d.ts +0 -10
- package/dist/routed/credential.d.ts.map +0 -1
- package/dist/routed/credential.js +0 -55
- package/dist/routed/credential.js.map +0 -1
- package/dist/routed/handler.d.ts +0 -38
- package/dist/routed/handler.d.ts.map +0 -1
- package/dist/routed/handler.js +0 -123
- package/dist/routed/handler.js.map +0 -1
- package/dist/routed/index.d.ts +0 -5
- package/dist/routed/index.d.ts.map +0 -1
- package/dist/routed/index.js +0 -5
- package/dist/routed/index.js.map +0 -1
- package/dist/routed/params.d.ts +0 -40
- package/dist/routed/params.d.ts.map +0 -1
- package/dist/routed/params.js +0 -146
- package/dist/routed/params.js.map +0 -1
- package/dist/routed/stream.d.ts +0 -21
- package/dist/routed/stream.d.ts.map +0 -1
- package/dist/routed/stream.js +0 -69
- package/dist/routed/stream.js.map +0 -1
package/dist/cors.js
DELETED
|
@@ -1,17 +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 function buildCorsHeaders(cors) {
|
|
9
|
-
const origin = cors.origin;
|
|
10
|
-
return {
|
|
11
|
-
'access-control-allow-origin': origin,
|
|
12
|
-
'access-control-allow-methods': (cors.methods ?? ['POST', 'OPTIONS']).join(', '),
|
|
13
|
-
'access-control-allow-headers': (cors.headers ?? ['content-type', 'authorization']).join(', '),
|
|
14
|
-
'access-control-expose-headers': 'x-binary-result',
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=cors.js.map
|
package/dist/cors.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cors.js","sourceRoot":"","sources":["../cors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,MAAM,UAAU,gBAAgB,CAAC,IAAgB;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC1B,OAAO;QACL,6BAA6B,EAAE,MAAM;QACrC,8BAA8B,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAChF,8BAA8B,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9F,+BAA+B,EAAE,iBAAiB;KACnD,CAAA;AACH,CAAC"}
|
package/dist/envelope/batch.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Kernel envelope batch processing.
|
|
3
|
-
*
|
|
4
|
-
* A batch is an array of kernel envelope requests delivered in a single HTTP
|
|
5
|
-
* POST. Each is dispatched independently and the encoded responses are
|
|
6
|
-
* collected into an array. Notifications are dropped from the response;
|
|
7
|
-
* streams and binary results are rejected (those need their own connection).
|
|
8
|
-
*/
|
|
9
|
-
import type { CapabilityHost } from '../capabilities/index.js';
|
|
10
|
-
import type { Dispatcher } from '../invocation/index.js';
|
|
11
|
-
import { type CodecEntry } from './codec.js';
|
|
12
|
-
export declare function handleBatch(raw: unknown[], dispatcher: Dispatcher, codecEntry: CodecEntry, req: Request, corsHeaders: Record<string, string>, host?: CapabilityHost): Promise<Response>;
|
|
13
|
-
//# sourceMappingURL=batch.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../../envelope/batch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAIxD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAG5C,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EAAE,EACd,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,OAAO,EACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,QAAQ,CAAC,CAuFnB"}
|
package/dist/envelope/batch.js
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Kernel envelope batch processing.
|
|
3
|
-
*
|
|
4
|
-
* A batch is an array of kernel envelope requests delivered in a single HTTP
|
|
5
|
-
* POST. Each is dispatched independently and the encoded responses are
|
|
6
|
-
* collected into an array. Notifications are dropped from the response;
|
|
7
|
-
* streams and binary results are rejected (those need their own connection).
|
|
8
|
-
*/
|
|
9
|
-
import { KERNEL_ERROR_CODES, decodeKernelRequest, encodeKernelError, encodeKernelRedirect, encodeKernelResponse, isBinaryResult, } from '@astrale-os/kernel-api';
|
|
10
|
-
import { dispatchInvocation } from '../invocation/index.js';
|
|
11
|
-
import { toBody } from '../render/index.js';
|
|
12
|
-
import {} from './codec.js';
|
|
13
|
-
import { extractCredential } from './credential.js';
|
|
14
|
-
export async function handleBatch(raw, dispatcher, codecEntry, req, corsHeaders, host) {
|
|
15
|
-
if (raw.length === 0) {
|
|
16
|
-
return errorResponse(codecEntry, { code: KERNEL_ERROR_CODES.INVALID_REQUEST, message: 'Empty batch' }, corsHeaders, 400);
|
|
17
|
-
}
|
|
18
|
-
const auth = await extractCredential(req);
|
|
19
|
-
const results = Array.from({ length: raw.length }, () => null);
|
|
20
|
-
await Promise.all(raw.map(async (item, i) => {
|
|
21
|
-
let request;
|
|
22
|
-
try {
|
|
23
|
-
request = decodeKernelRequest(item);
|
|
24
|
-
}
|
|
25
|
-
catch (e) {
|
|
26
|
-
results[i] = encodeKernelError(null, {
|
|
27
|
-
code: KERNEL_ERROR_CODES.INVALID_REQUEST,
|
|
28
|
-
message: e instanceof Error ? e.message : 'Invalid request',
|
|
29
|
-
});
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
const isAck = request.id === undefined;
|
|
33
|
-
let cred;
|
|
34
|
-
if (request.creds !== undefined) {
|
|
35
|
-
cred = request.creds;
|
|
36
|
-
}
|
|
37
|
-
else if (!auth.ok) {
|
|
38
|
-
results[i] = encodeKernelError(request.id ?? null, {
|
|
39
|
-
code: KERNEL_ERROR_CODES.AUTH_INVALID,
|
|
40
|
-
message: `Unsupported Authorization scheme: ${auth.scheme}`,
|
|
41
|
-
});
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
cred = auth.credential;
|
|
46
|
-
}
|
|
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);
|
|
53
|
-
if (res.kind === 'ack')
|
|
54
|
-
return;
|
|
55
|
-
if (res.kind === 'stream') {
|
|
56
|
-
results[i] = encodeKernelError(request.id, {
|
|
57
|
-
code: KERNEL_ERROR_CODES.INVALID_REQUEST,
|
|
58
|
-
message: 'Streaming is not supported inside a batch',
|
|
59
|
-
});
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
if (res.kind === 'redirect') {
|
|
63
|
-
results[i] = encodeKernelRedirect(res.id, res.redirection);
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
if (res.kind === 'success') {
|
|
67
|
-
if (isBinaryResult(res.data)) {
|
|
68
|
-
results[i] = encodeKernelError(res.id, {
|
|
69
|
-
code: KERNEL_ERROR_CODES.INVALID_REQUEST,
|
|
70
|
-
message: 'Binary result is not supported inside a batch',
|
|
71
|
-
});
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
results[i] = encodeKernelResponse(res.id, res.data);
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
results[i] = encodeKernelError(res.id, res.error);
|
|
78
|
-
}));
|
|
79
|
-
const encoded = results.filter((r) => r !== null);
|
|
80
|
-
if (encoded.length === 0) {
|
|
81
|
-
return new Response(null, { status: 204, headers: corsHeaders });
|
|
82
|
-
}
|
|
83
|
-
const bytes = codecEntry.codec.encode(encoded);
|
|
84
|
-
return new Response(toBody(bytes), {
|
|
85
|
-
status: 200,
|
|
86
|
-
headers: { ...corsHeaders, 'content-type': codecEntry.kernelType },
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
function errorResponse(codecEntry, error, corsHeaders, httpStatus) {
|
|
90
|
-
const bytes = codecEntry.codec.encode(encodeKernelError(null, error));
|
|
91
|
-
return new Response(toBody(bytes), {
|
|
92
|
-
status: httpStatus,
|
|
93
|
-
headers: { ...corsHeaders, 'content-type': codecEntry.kernelType },
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
//# sourceMappingURL=batch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../../envelope/batch.ts"],"names":[],"mappings":"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"}
|
package/dist/envelope/codec.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Built-in kernel codecs and content-type negotiation.
|
|
3
|
-
*
|
|
4
|
-
* The kernel envelope speaks two codecs: JSON (text) and MsgPack (binary).
|
|
5
|
-
* HTTP transports negotiate via `Content-Type` / `Accept`; WS transports
|
|
6
|
-
* pick a codec at upgrade time via the `?codec=` query parameter.
|
|
7
|
-
*/
|
|
8
|
-
import type { Codec } from '@astrale-os/kernel-api';
|
|
9
|
-
export type CodecEntry = {
|
|
10
|
-
name: 'json' | 'msgpack';
|
|
11
|
-
codec: Codec;
|
|
12
|
-
kernelType: string;
|
|
13
|
-
};
|
|
14
|
-
export declare const DEFAULT_KERNEL_CODEC: {
|
|
15
|
-
readonly name: 'json';
|
|
16
|
-
readonly codec: Codec;
|
|
17
|
-
readonly kernelType: "application/vnd.astrale.kernel+json";
|
|
18
|
-
};
|
|
19
|
-
export declare const BUILTIN_KERNEL_CODECS: CodecEntry[];
|
|
20
|
-
/** Pick the request codec from a Content-Type header. JSON is the default. */
|
|
21
|
-
export declare function resolveRequestCodec(contentType: string | null): CodecEntry | null;
|
|
22
|
-
/** Pick the response codec from an Accept header, defaulting to the request codec. */
|
|
23
|
-
export declare function resolveResponseCodec(accept: string | null, requestCodec: CodecEntry): CodecEntry;
|
|
24
|
-
/** Pick the WS frame codec from the upgrade request's `?codec=` query parameter. */
|
|
25
|
-
export declare function negotiateWsCodec(req: Request): Codec | null;
|
|
26
|
-
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../envelope/codec.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AASnD,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AACvF,eAAO,MAAM,oBAAoB;aAC/B,IAAI,EAAE,MAAM;aACZ,KAAK;aACL,UAAU;CACF,CAAA;AAEV,eAAO,MAAM,qBAAqB,EAAE,UAAU,EAG7C,CAAA;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,GAAG,IAAI,CASjF;AAED,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,YAAY,EAAE,UAAU,GAAG,UAAU,CAShG;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,GAAG,IAAI,CAO3D"}
|
package/dist/envelope/codec.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Built-in kernel codecs and content-type negotiation.
|
|
3
|
-
*
|
|
4
|
-
* The kernel envelope speaks two codecs: JSON (text) and MsgPack (binary).
|
|
5
|
-
* HTTP transports negotiate via `Content-Type` / `Accept`; WS transports
|
|
6
|
-
* pick a codec at upgrade time via the `?codec=` query parameter.
|
|
7
|
-
*/
|
|
8
|
-
import { KERNEL_CONTENT_TYPE_JSON, KERNEL_CONTENT_TYPE_MSGPACK, jsonCodec, msgpackCodec, } from '@astrale-os/kernel-api';
|
|
9
|
-
export const DEFAULT_KERNEL_CODEC = {
|
|
10
|
-
name: 'json',
|
|
11
|
-
codec: jsonCodec,
|
|
12
|
-
kernelType: KERNEL_CONTENT_TYPE_JSON,
|
|
13
|
-
};
|
|
14
|
-
export const BUILTIN_KERNEL_CODECS = [
|
|
15
|
-
DEFAULT_KERNEL_CODEC,
|
|
16
|
-
{ name: 'msgpack', codec: msgpackCodec, kernelType: KERNEL_CONTENT_TYPE_MSGPACK },
|
|
17
|
-
];
|
|
18
|
-
/** Pick the request codec from a Content-Type header. JSON is the default. */
|
|
19
|
-
export function resolveRequestCodec(contentType) {
|
|
20
|
-
if (!contentType)
|
|
21
|
-
return BUILTIN_KERNEL_CODECS[0]; // default to JSON for convenience
|
|
22
|
-
const lower = contentType.toLowerCase();
|
|
23
|
-
for (const entry of BUILTIN_KERNEL_CODECS) {
|
|
24
|
-
if (lower.includes(entry.kernelType) || lower.includes(entry.codec.contentType)) {
|
|
25
|
-
return entry;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
/** Pick the response codec from an Accept header, defaulting to the request codec. */
|
|
31
|
-
export function resolveResponseCodec(accept, requestCodec) {
|
|
32
|
-
if (!accept || accept === '*/*' || accept.includes('text/event-stream'))
|
|
33
|
-
return requestCodec;
|
|
34
|
-
const lower = accept.toLowerCase();
|
|
35
|
-
for (const entry of BUILTIN_KERNEL_CODECS) {
|
|
36
|
-
if (lower.includes(entry.kernelType) || lower.includes(entry.codec.contentType)) {
|
|
37
|
-
return entry;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return requestCodec;
|
|
41
|
-
}
|
|
42
|
-
/** Pick the WS frame codec from the upgrade request's `?codec=` query parameter. */
|
|
43
|
-
export function negotiateWsCodec(req) {
|
|
44
|
-
const url = new URL(req.url);
|
|
45
|
-
const requested = url.searchParams.get('codec') ?? DEFAULT_KERNEL_CODEC.name;
|
|
46
|
-
for (const entry of BUILTIN_KERNEL_CODECS) {
|
|
47
|
-
if (entry.name === requested)
|
|
48
|
-
return entry.codec;
|
|
49
|
-
}
|
|
50
|
-
return null;
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=codec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../envelope/codec.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,SAAS,EACT,YAAY,GACb,MAAM,wBAAwB,CAAA;AAG/B,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,SAAS;IAChB,UAAU,EAAE,wBAAwB;CAC5B,CAAA;AAEV,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,oBAAoB;IACpB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,2BAA2B,EAAE;CAClF,CAAA;AAED,8EAA8E;AAC9E,MAAM,UAAU,mBAAmB,CAAC,WAA0B;IAC5D,IAAI,CAAC,WAAW;QAAE,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAA,CAAC,kCAAkC;IACpF,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,CAAA;IACvC,KAAK,MAAM,KAAK,IAAI,qBAAqB,EAAE,CAAC;QAC1C,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YAChF,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,oBAAoB,CAAC,MAAqB,EAAE,YAAwB;IAClF,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAAE,OAAO,YAAY,CAAA;IAC5F,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;IAClC,KAAK,MAAM,KAAK,IAAI,qBAAqB,EAAE,CAAC;QAC1C,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YAChF,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IACD,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAA;IAC5E,KAAK,MAAM,KAAK,IAAI,qBAAqB,EAAE,CAAC;QAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,KAAK,CAAA;IAClD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTTP `Authorization` header → bare kernel credential, at the transport edge.
|
|
3
|
-
*
|
|
4
|
-
* The core types credentials by content and is transport-agnostic; the canonical channel is the
|
|
5
|
-
* envelope `creds` field (forwarded as-is). This only normalizes the HTTP fallback: per RFC 7235
|
|
6
|
-
* (`auth-scheme [ 1*SP credentials ]`) we strip a known scheme so `dispatch` gets the same bare
|
|
7
|
-
* credential whatever the transport. `SCHEMES` is the extension point — a request-bound scheme like
|
|
8
|
-
* DPoP would verify its proof here before forwarding the token.
|
|
9
|
-
*/
|
|
10
|
-
/** Outcome of reading the credential from `Authorization`. */
|
|
11
|
-
export type AuthExtraction = {
|
|
12
|
-
readonly ok: true;
|
|
13
|
-
readonly credential: string;
|
|
14
|
-
} | {
|
|
15
|
-
readonly ok: false;
|
|
16
|
-
readonly scheme: string;
|
|
17
|
-
};
|
|
18
|
-
/** Extract the bare credential from a request's `Authorization` header. Absent → `{ ok, credential: '' }`. */
|
|
19
|
-
export declare function extractCredential(req: Request): Promise<AuthExtraction>;
|
|
20
|
-
//# sourceMappingURL=credential.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"credential.d.ts","sourceRoot":"","sources":["../../envelope/credential.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,8DAA8D;AAC9D,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAcnD,8GAA8G;AAC9G,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAa7E"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTTP `Authorization` header → bare kernel credential, at the transport edge.
|
|
3
|
-
*
|
|
4
|
-
* The core types credentials by content and is transport-agnostic; the canonical channel is the
|
|
5
|
-
* envelope `creds` field (forwarded as-is). This only normalizes the HTTP fallback: per RFC 7235
|
|
6
|
-
* (`auth-scheme [ 1*SP credentials ]`) we strip a known scheme so `dispatch` gets the same bare
|
|
7
|
-
* credential whatever the transport. `SCHEMES` is the extension point — a request-bound scheme like
|
|
8
|
-
* DPoP would verify its proof here before forwarding the token.
|
|
9
|
-
*/
|
|
10
|
-
/** Supported schemes (lowercased → handler). Add `dpop` etc. here; the core never learns the scheme. */
|
|
11
|
-
const SCHEMES = {
|
|
12
|
-
bearer: (credentials) => credentials, // RFC 6750: the credentials ARE the token
|
|
13
|
-
// dpop: async (credentials, req) => ((await verifyDpopProof(req, credentials)) ? credentials : null),
|
|
14
|
-
};
|
|
15
|
-
/** `auth-scheme` is a `token` (no whitespace); credentials follow after `1*SP`. */
|
|
16
|
-
const SCHEME_SPLIT = /^(\S+)[ \t]+([\s\S]+)$/;
|
|
17
|
-
/** Extract the bare credential from a request's `Authorization` header. Absent → `{ ok, credential: '' }`. */
|
|
18
|
-
export async function extractCredential(req) {
|
|
19
|
-
const header = req.headers.get('authorization')?.trim();
|
|
20
|
-
if (!header)
|
|
21
|
-
return { ok: true, credential: '' };
|
|
22
|
-
const match = SCHEME_SPLIT.exec(header);
|
|
23
|
-
if (!match)
|
|
24
|
-
return { ok: true, credential: header }; // bare token (legacy/shell convention)
|
|
25
|
-
const scheme = match[1].toLowerCase();
|
|
26
|
-
const handler = SCHEMES[scheme];
|
|
27
|
-
if (!handler)
|
|
28
|
-
return { ok: false, scheme };
|
|
29
|
-
const credential = await handler(match[2].trim(), req);
|
|
30
|
-
return credential === null ? { ok: false, scheme } : { ok: true, credential };
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=credential.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"credential.js","sourceRoot":"","sources":["../../envelope/credential.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,wGAAwG;AACxG,MAAM,OAAO,GAA4C;IACvD,MAAM,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,0CAA0C;IAChF,sGAAsG;CACvG,CAAA;AAED,mFAAmF;AACnF,MAAM,YAAY,GAAG,wBAAwB,CAAA;AAE7C,8GAA8G;AAC9G,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAY;IAClD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,CAAA;IACvD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAA;IAEhD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA,CAAC,uCAAuC;IAE3F,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,CAAA;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC/B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;IAE1C,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAA;IACvD,OAAO,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;AAC/E,CAAC"}
|
package/dist/envelope/http.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Kernel envelope HTTP dispatcher — POST / (universal RPC envelope).
|
|
3
|
-
*
|
|
4
|
-
* Speaks the kernel envelope directly. Hardcodes JSON + MsgPack codecs.
|
|
5
|
-
* Resolves codec from `Content-Type` (request) and `Accept` (response).
|
|
6
|
-
* Routes single requests, batches, acks, streams, and binary results.
|
|
7
|
-
*
|
|
8
|
-
* The dispatcher is built once with `(cors, options)` and then invoked per
|
|
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
|
-
* zero per-request allocation.
|
|
12
|
-
*/
|
|
13
|
-
import type { CapabilityHost } from '../capabilities/index.js';
|
|
14
|
-
import type { CorsConfig } from '../cors.js';
|
|
15
|
-
import type { Dispatcher } from '../invocation/index.js';
|
|
16
|
-
export type KernelDispatcherOptions = {
|
|
17
|
-
/**
|
|
18
|
-
* Optional function to extract host placeholder values from the incoming
|
|
19
|
-
* request. Returned values are merged into params at the lowest priority.
|
|
20
|
-
* Return null to reject the request with 404.
|
|
21
|
-
*/
|
|
22
|
-
hostParams?: (req: Request) => Record<string, string> | null;
|
|
23
|
-
};
|
|
24
|
-
/**
|
|
25
|
-
* Build a kernel-envelope HTTP dispatcher. Call once at startup; the returned
|
|
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
|
|
28
|
-
* (multi-instance hosting).
|
|
29
|
-
*/
|
|
30
|
-
export declare function createKernelDispatcher(cors: CorsConfig, options?: KernelDispatcherOptions): (req: Request, dispatcher: Dispatcher, host?: CapabilityHost) => Promise<Response>;
|
|
31
|
-
//# sourceMappingURL=http.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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
DELETED
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Kernel envelope HTTP dispatcher — POST / (universal RPC envelope).
|
|
3
|
-
*
|
|
4
|
-
* Speaks the kernel envelope directly. Hardcodes JSON + MsgPack codecs.
|
|
5
|
-
* Resolves codec from `Content-Type` (request) and `Accept` (response).
|
|
6
|
-
* Routes single requests, batches, acks, streams, and binary results.
|
|
7
|
-
*
|
|
8
|
-
* The dispatcher is built once with `(cors, options)` and then invoked per
|
|
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
|
-
* zero per-request allocation.
|
|
12
|
-
*/
|
|
13
|
-
import { KERNEL_ERROR_CODES, decodeKernelRequest, encodeKernelError, encodeKernelRedirect, encodeKernelResponse, isBatch, isBinaryResult, } from '@astrale-os/kernel-api';
|
|
14
|
-
import { buildCorsHeaders } from '../cors.js';
|
|
15
|
-
import { dispatchInvocation } from '../invocation/index.js';
|
|
16
|
-
import { buildBinaryResponse, toBody } from '../render/index.js';
|
|
17
|
-
import { handleBatch } from './batch.js';
|
|
18
|
-
import { resolveRequestCodec, resolveResponseCodec } from './codec.js';
|
|
19
|
-
import { extractCredential } from './credential.js';
|
|
20
|
-
import { buildKernelStreamResponse } from './sse.js';
|
|
21
|
-
/**
|
|
22
|
-
* Build a kernel-envelope HTTP dispatcher. Call once at startup; the returned
|
|
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
|
|
25
|
-
* (multi-instance hosting).
|
|
26
|
-
*/
|
|
27
|
-
export function createKernelDispatcher(cors, options = {}) {
|
|
28
|
-
const corsHeaders = buildCorsHeaders(cors);
|
|
29
|
-
const hostParamsFn = options.hostParams;
|
|
30
|
-
return async (req, dispatcher, host) => {
|
|
31
|
-
if (req.method === 'OPTIONS') {
|
|
32
|
-
return new Response(null, { status: 204, headers: corsHeaders });
|
|
33
|
-
}
|
|
34
|
-
if (req.method !== 'POST') {
|
|
35
|
-
return new Response(null, { status: 405, headers: corsHeaders });
|
|
36
|
-
}
|
|
37
|
-
// 1. Resolve request codec
|
|
38
|
-
const requestCodec = resolveRequestCodec(req.headers.get('content-type'));
|
|
39
|
-
if (!requestCodec) {
|
|
40
|
-
return new Response(JSON.stringify({ error: `Unsupported Content-Type: ${req.headers.get('content-type')}` }), { status: 415, headers: { ...corsHeaders, 'content-type': 'application/json' } });
|
|
41
|
-
}
|
|
42
|
-
// 2. Decode body
|
|
43
|
-
let raw;
|
|
44
|
-
try {
|
|
45
|
-
const bytes = new Uint8Array(await req.arrayBuffer());
|
|
46
|
-
raw = requestCodec.codec.decode(bytes);
|
|
47
|
-
}
|
|
48
|
-
catch {
|
|
49
|
-
return errorResponse(requestCodec, null, { code: KERNEL_ERROR_CODES.PARSE_ERROR, message: 'Parse error: invalid encoding' }, corsHeaders);
|
|
50
|
-
}
|
|
51
|
-
// 3. Resolve response codec (honor Accept)
|
|
52
|
-
const responseCodec = resolveResponseCodec(req.headers.get('accept'), requestCodec);
|
|
53
|
-
// 4. Batch?
|
|
54
|
-
if (isBatch(raw)) {
|
|
55
|
-
return handleBatch(raw, dispatcher, responseCodec, req, corsHeaders, host);
|
|
56
|
-
}
|
|
57
|
-
// 5. Decode envelope
|
|
58
|
-
let request;
|
|
59
|
-
try {
|
|
60
|
-
request = decodeKernelRequest(raw);
|
|
61
|
-
}
|
|
62
|
-
catch (e) {
|
|
63
|
-
return errorResponse(responseCodec, null, {
|
|
64
|
-
code: KERNEL_ERROR_CODES.INVALID_REQUEST,
|
|
65
|
-
message: e instanceof Error ? e.message : 'Invalid request',
|
|
66
|
-
}, corsHeaders);
|
|
67
|
-
}
|
|
68
|
-
// 5b. Host params (multi-tenant placeholders) — merged at lowest priority.
|
|
69
|
-
let hostParams = {};
|
|
70
|
-
if (hostParamsFn) {
|
|
71
|
-
const extracted = hostParamsFn(req);
|
|
72
|
-
if (extracted === null) {
|
|
73
|
-
return new Response('Host not recognised', { status: 404, headers: corsHeaders });
|
|
74
|
-
}
|
|
75
|
-
hostParams = extracted;
|
|
76
|
-
}
|
|
77
|
-
// 6. Credential — `creds` (envelope) is the canonical raw channel; the `Authorization` header is
|
|
78
|
-
// the fallback, scheme-stripped at the edge (see ./authorization). The core gets a bare token.
|
|
79
|
-
let cred = request.creds;
|
|
80
|
-
if (cred === undefined) {
|
|
81
|
-
const auth = await extractCredential(req);
|
|
82
|
-
if (!auth.ok) {
|
|
83
|
-
return errorResponse(responseCodec, request.id ?? null, {
|
|
84
|
-
code: KERNEL_ERROR_CODES.AUTH_INVALID,
|
|
85
|
-
message: `Unsupported Authorization scheme: ${auth.scheme}`,
|
|
86
|
-
}, corsHeaders);
|
|
87
|
-
}
|
|
88
|
-
cred = auth.credential;
|
|
89
|
-
}
|
|
90
|
-
// 7. Dispatch — host params merged at lowest priority (body wins).
|
|
91
|
-
const mergedParams = {
|
|
92
|
-
...hostParams,
|
|
93
|
-
...request.params,
|
|
94
|
-
};
|
|
95
|
-
const isAck = request.id === undefined;
|
|
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
|
|
103
|
-
switch (result.kind) {
|
|
104
|
-
case 'ack':
|
|
105
|
-
return new Response(null, { status: 204, headers: corsHeaders });
|
|
106
|
-
case 'success': {
|
|
107
|
-
if (isBinaryResult(result.data)) {
|
|
108
|
-
return buildBinaryResponse(result.data, corsHeaders);
|
|
109
|
-
}
|
|
110
|
-
return writeEnvelope(responseCodec, encodeKernelResponse(result.id, result.data), corsHeaders);
|
|
111
|
-
}
|
|
112
|
-
case 'error':
|
|
113
|
-
return writeEnvelope(responseCodec, encodeKernelError(result.id, result.error), corsHeaders);
|
|
114
|
-
case 'redirect':
|
|
115
|
-
return writeEnvelope(responseCodec, encodeKernelRedirect(result.id, result.redirection), corsHeaders);
|
|
116
|
-
case 'stream':
|
|
117
|
-
return buildKernelStreamResponse(result.id, result.generator, corsHeaders);
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
// ─── Local helpers ──────────────────────────────────────────────────────────
|
|
122
|
-
function writeEnvelope(codecEntry, payload, corsHeaders, status = 200) {
|
|
123
|
-
const bytes = codecEntry.codec.encode(payload);
|
|
124
|
-
return new Response(toBody(bytes), {
|
|
125
|
-
status,
|
|
126
|
-
headers: { ...corsHeaders, 'content-type': codecEntry.kernelType },
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
function errorResponse(codecEntry, id, error, corsHeaders, httpStatus = 200) {
|
|
130
|
-
return writeEnvelope(codecEntry, encodeKernelError(id ?? null, error), corsHeaders, httpStatus);
|
|
131
|
-
}
|
|
132
|
-
//# sourceMappingURL=http.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../envelope/http.ts"],"names":[],"mappings":"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"}
|
package/dist/envelope/sse.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SSE response framed with kernel stream events.
|
|
3
|
-
*
|
|
4
|
-
* Each chunk is wrapped in `{stream:{id,index,data}}` (kernel envelope stream
|
|
5
|
-
* frames). On a clean end the response emits a `{stream:{id,end:true}}` frame;
|
|
6
|
-
* on error a `{stream:{id,error}}` frame. Setup failures from the first
|
|
7
|
-
* iteration become a 500 response.
|
|
8
|
-
*/
|
|
9
|
-
import type { RequestId } from '@astrale-os/kernel-api';
|
|
10
|
-
export declare function buildKernelStreamResponse(id: RequestId, generator: AsyncGenerator<unknown>, corsHeaders: Record<string, string>): Promise<Response>;
|
|
11
|
-
//# sourceMappingURL=sse.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../envelope/sse.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AASvD,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,SAAS,EACb,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,EAClC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,OAAO,CAAC,QAAQ,CAAC,CAoEnB"}
|
package/dist/envelope/sse.js
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SSE response framed with kernel stream events.
|
|
3
|
-
*
|
|
4
|
-
* Each chunk is wrapped in `{stream:{id,index,data}}` (kernel envelope stream
|
|
5
|
-
* frames). On a clean end the response emits a `{stream:{id,end:true}}` frame;
|
|
6
|
-
* on error a `{stream:{id,error}}` frame. Setup failures from the first
|
|
7
|
-
* iteration become a 500 response.
|
|
8
|
-
*/
|
|
9
|
-
import { classifyError, encodeStreamChunk, encodeStreamEnd, encodeStreamError, } from '@astrale-os/kernel-api';
|
|
10
|
-
export async function buildKernelStreamResponse(id, generator, corsHeaders) {
|
|
11
|
-
// Eagerly pull the first chunk so setup failures become proper HTTP errors.
|
|
12
|
-
let first;
|
|
13
|
-
try {
|
|
14
|
-
first = await generator.next();
|
|
15
|
-
}
|
|
16
|
-
catch (err) {
|
|
17
|
-
const error = classifyError(err);
|
|
18
|
-
const frame = encodeStreamError(id, error);
|
|
19
|
-
return new Response(`data: ${JSON.stringify(frame)}\n\n`, {
|
|
20
|
-
status: 500,
|
|
21
|
-
headers: {
|
|
22
|
-
...corsHeaders,
|
|
23
|
-
'content-type': 'text/event-stream',
|
|
24
|
-
'cache-control': 'no-cache',
|
|
25
|
-
},
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
const encoder = new TextEncoder();
|
|
29
|
-
let cancelled = false;
|
|
30
|
-
const stream = new ReadableStream({
|
|
31
|
-
async start(controller) {
|
|
32
|
-
try {
|
|
33
|
-
let index = 0;
|
|
34
|
-
if (!first.done) {
|
|
35
|
-
controller.enqueue(encoder.encode(`data: ${JSON.stringify(encodeStreamChunk(id, index++, first.value))}\n\n`));
|
|
36
|
-
}
|
|
37
|
-
for await (const chunk of generator) {
|
|
38
|
-
if (cancelled)
|
|
39
|
-
break;
|
|
40
|
-
controller.enqueue(encoder.encode(`data: ${JSON.stringify(encodeStreamChunk(id, index++, chunk))}\n\n`));
|
|
41
|
-
}
|
|
42
|
-
if (!cancelled) {
|
|
43
|
-
controller.enqueue(encoder.encode(`data: ${JSON.stringify(encodeStreamEnd(id))}\n\n`));
|
|
44
|
-
}
|
|
45
|
-
controller.close();
|
|
46
|
-
}
|
|
47
|
-
catch (err) {
|
|
48
|
-
try {
|
|
49
|
-
const error = classifyError(err);
|
|
50
|
-
controller.enqueue(encoder.encode(`data: ${JSON.stringify(encodeStreamError(id, error))}\n\n`));
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
// swallow
|
|
54
|
-
}
|
|
55
|
-
controller.close();
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
cancel() {
|
|
59
|
-
cancelled = true;
|
|
60
|
-
generator.return(undefined).catch(() => { });
|
|
61
|
-
},
|
|
62
|
-
});
|
|
63
|
-
return new Response(stream, {
|
|
64
|
-
status: 200,
|
|
65
|
-
headers: {
|
|
66
|
-
...corsHeaders,
|
|
67
|
-
'content-type': 'text/event-stream',
|
|
68
|
-
'cache-control': 'no-cache',
|
|
69
|
-
connection: 'keep-alive',
|
|
70
|
-
},
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
//# sourceMappingURL=sse.js.map
|
package/dist/envelope/sse.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../envelope/sse.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,GAClB,MAAM,wBAAwB,CAAA;AAE/B,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,EAAa,EACb,SAAkC,EAClC,WAAmC;IAEnC,4EAA4E;IAC5E,IAAI,KAA8B,CAAA;IAClC,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAA;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;QAChC,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QAC1C,OAAO,IAAI,QAAQ,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE;YACxD,MAAM,EAAE,GAAG;YACX,OAAO,EAAE;gBACP,GAAG,WAAW;gBACd,cAAc,EAAE,mBAAmB;gBACnC,eAAe,EAAE,UAAU;aAC5B;SACF,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;IACjC,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;QAChC,KAAK,CAAC,KAAK,CAAC,UAAU;YACpB,IAAI,CAAC;gBACH,IAAI,KAAK,GAAG,CAAC,CAAA;gBACb,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBAChB,UAAU,CAAC,OAAO,CAChB,OAAO,CAAC,MAAM,CACZ,SAAS,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAC3E,CACF,CAAA;gBACH,CAAC;gBACD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;oBACpC,IAAI,SAAS;wBAAE,MAAK;oBACpB,UAAU,CAAC,OAAO,CAChB,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CACrF,CAAA;gBACH,CAAC;gBACD,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;gBACxF,CAAC;gBACD,UAAU,CAAC,KAAK,EAAE,CAAA;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;oBAChC,UAAU,CAAC,OAAO,CAChB,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAC5E,CAAA;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,UAAU;gBACZ,CAAC;gBACD,UAAU,CAAC,KAAK,EAAE,CAAA;YACpB,CAAC;QACH,CAAC;QACD,MAAM;YACJ,SAAS,GAAG,IAAI,CAAA;YAChB,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAC7C,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE;QAC1B,MAAM,EAAE,GAAG;QACX,OAAO,EAAE;YACP,GAAG,WAAW;YACd,cAAc,EAAE,mBAAmB;YACnC,eAAe,EAAE,UAAU;YAC3B,UAAU,EAAE,YAAY;SACzB;KACF,CAAC,CAAA;AACJ,CAAC"}
|
package/dist/envelope/ws.d.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Kernel envelope WS connection — universal RPC envelope over WebSockets.
|
|
3
|
-
*
|
|
4
|
-
* Each frame is a kernel envelope. Codec is fixed for the lifetime of the
|
|
5
|
-
* connection (negotiated at upgrade via `?codec=`). Stream responses use
|
|
6
|
-
* kernel stream framing (`{stream:{id,index,data}}`). Per-message credentials
|
|
7
|
-
* live in the top-level `creds` field.
|
|
8
|
-
*
|
|
9
|
-
* Binary output mode is partially supported: small Uint8Array bodies are
|
|
10
|
-
* delivered as a single stream chunk + end frame; ReadableStream bodies are
|
|
11
|
-
* marked TODO and rejected with INTERNAL_ERROR for now.
|
|
12
|
-
*/
|
|
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';
|
|
16
|
-
export interface WebSocketLike {
|
|
17
|
-
send(data: string | Uint8Array): void;
|
|
18
|
-
close(code?: number, reason?: string): void;
|
|
19
|
-
readonly readyState: number;
|
|
20
|
-
}
|
|
21
|
-
export declare class KernelWsConnection {
|
|
22
|
-
private readonly ws;
|
|
23
|
-
private readonly codec;
|
|
24
|
-
private readonly dispatcher;
|
|
25
|
-
private readonly host?;
|
|
26
|
-
constructor(ws: WebSocketLike, codec: Codec, dispatcher: Dispatcher, host?: CapabilityHost | undefined);
|
|
27
|
-
start(): void;
|
|
28
|
-
handleMessage(data: string | ArrayBuffer | Uint8Array): void;
|
|
29
|
-
private processMessage;
|
|
30
|
-
private sendStream;
|
|
31
|
-
private sendFrame;
|
|
32
|
-
handleClose(): void;
|
|
33
|
-
handleError(error: Error): void;
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=ws.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|