@enkaku/server 0.14.0 → 0.14.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.
@@ -1 +1 @@
1
- {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/handlers/channel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EACnB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,KAAK,EAGV,cAAc,EAGf,MAAM,aAAa,CAAA;AAGpB,MAAM,MAAM,gBAAgB,CAC1B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,QAAQ,GAAG,MAAM,IACjE,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAEnE,wBAAgB,aAAa,CAC3B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,EAEzC,GAAG,EAAE,cAAc,CAAC,QAAQ,CAAC,EAC7B,GAAG,EAAE,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,GACzC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CA6FvB"}
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/handlers/channel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EACnB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,KAAK,EAGV,cAAc,EAGf,MAAM,aAAa,CAAA;AAGpB,MAAM,MAAM,gBAAgB,CAC1B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,QAAQ,GAAG,MAAM,IACjE,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAEnE,wBAAgB,aAAa,CAC3B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,EAEzC,GAAG,EAAE,cAAc,CAAC,QAAQ,CAAC,EAC7B,GAAG,EAAE,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,GACzC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFvB"}
@@ -31,7 +31,7 @@ export function handleChannel(ctx, msg) {
31
31
  });
32
32
  ctx.controllers[msg.payload.rid] = controller;
33
33
  const receiveStream = createPipe();
34
- receiveStream.readable.pipeTo(writeTo(async (val)=>{
34
+ const pipePromise = receiveStream.readable.pipeTo(writeTo(async (val)=>{
35
35
  if (controller.signal.aborted) {
36
36
  return;
37
37
  }
@@ -51,6 +51,7 @@ export function handleChannel(ctx, msg) {
51
51
  val
52
52
  });
53
53
  }));
54
+ // @ts-expect-error type instantiation too deep
54
55
  const readable = sendStream.readable.pipeThrough(tap((value)=>{
55
56
  if (activeSpan != null) {
56
57
  activeSpan.addEvent('channel.message.received', {
@@ -70,17 +71,11 @@ export function handleChannel(ctx, msg) {
70
71
  signal: controller.signal,
71
72
  writable: receiveStream.writable
72
73
  };
73
- // Wrap execution to ensure stream cleanup on handler crash
74
- return (async ()=>{
75
- try {
76
- // @ts-expect-error context and handler types
77
- await executeHandler(ctx, msg.payload, ()=>handler(handlerContext));
78
- } finally{
79
- try {
80
- await receiveStream.writable.close();
81
- } catch {
82
- // Stream may already be closed
83
- }
84
- }
85
- })();
74
+ return executeHandler({
75
+ context: ctx,
76
+ payload: msg.payload,
77
+ // @ts-expect-error handler context types
78
+ execute: ()=>handler(handlerContext),
79
+ beforeEnd: ()=>receiveStream.drain(pipePromise)
80
+ });
86
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/handlers/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAE3F,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,aAAa,CAAA;AAGjE,MAAM,MAAM,gBAAgB,CAC1B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,QAAQ,GAAG,MAAM,IACjE,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAEnE,wBAAgB,aAAa,CAC3B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,EAEzC,GAAG,EAAE,cAAc,CAAC,QAAQ,CAAC,EAC7B,GAAG,EAAE,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,GACzC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BvB"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/handlers/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAE3F,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,aAAa,CAAA;AAGjE,MAAM,MAAM,gBAAgB,CAC1B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,QAAQ,GAAG,MAAM,IACjE,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAEnE,wBAAgB,aAAa,CAC3B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,EAEzC,GAAG,EAAE,cAAc,CAAC,QAAQ,CAAC,EAC7B,GAAG,EAAE,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,GACzC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCvB"}
@@ -24,6 +24,10 @@ export function handleRequest(ctx, msg) {
24
24
  param: msg.payload.prm,
25
25
  signal: controller.signal
26
26
  };
27
- // @ts-expect-error context and handler types
28
- return executeHandler(ctx, msg.payload, ()=>handler(handlerContext));
27
+ return executeHandler({
28
+ context: ctx,
29
+ payload: msg.payload,
30
+ // @ts-expect-error handler context types
31
+ execute: ()=>handler(handlerContext)
32
+ });
29
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/handlers/stream.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,aAAa,EACb,kBAAkB,EAClB,eAAe,EAChB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,KAAK,EAAE,cAAc,EAA8B,MAAM,aAAa,CAAA;AAG7E,MAAM,MAAM,eAAe,CACzB,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,QAAQ,GAAG,MAAM,IACjE,aAAa,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAElE,wBAAgB,YAAY,CAC1B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,EACzC,GAAG,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAqEjG"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/handlers/stream.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,aAAa,EACb,kBAAkB,EAClB,eAAe,EAChB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,KAAK,EAAE,cAAc,EAA8B,MAAM,aAAa,CAAA;AAG7E,MAAM,MAAM,eAAe,CACzB,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,QAAQ,GAAG,MAAM,IACjE,aAAa,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAElE,wBAAgB,YAAY,CAC1B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,EACzC,GAAG,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CA+DjG"}
@@ -23,7 +23,7 @@ export function handleStream(ctx, msg) {
23
23
  const controller = new AbortController();
24
24
  ctx.controllers[msg.payload.rid] = controller;
25
25
  const receiveStream = createPipe();
26
- receiveStream.readable.pipeTo(writeTo(async (val)=>{
26
+ const pipePromise = receiveStream.readable.pipeTo(writeTo(async (val)=>{
27
27
  if (controller.signal.aborted) {
28
28
  return;
29
29
  }
@@ -49,17 +49,11 @@ export function handleStream(ctx, msg) {
49
49
  signal: controller.signal,
50
50
  writable: receiveStream.writable
51
51
  };
52
- // Wrap execution to ensure stream cleanup on handler crash
53
- return (async ()=>{
54
- try {
55
- // @ts-expect-error context and handler types
56
- await executeHandler(ctx, msg.payload, ()=>handler(handlerContext));
57
- } finally{
58
- try {
59
- await receiveStream.writable.close();
60
- } catch {
61
- // Stream may already be closed
62
- }
63
- }
64
- })();
52
+ return executeHandler({
53
+ context: ctx,
54
+ payload: msg.payload,
55
+ // @ts-expect-error handler context types
56
+ execute: ()=>handler(handlerContext),
57
+ beforeEnd: ()=>receiveStream.drain(pipePromise)
58
+ });
65
59
  }
package/lib/utils.d.ts CHANGED
@@ -1,4 +1,14 @@
1
- import type { ProtocolDefinition, RequestPayloadOf } from '@enkaku/protocol';
2
- import type { HandlerContext, ResultType } from './types.js';
3
- export declare function executeHandler<Protocol extends ProtocolDefinition, Procedure extends keyof Protocol & string, Result extends ResultType<Protocol, Procedure> = ResultType<Protocol, Procedure>>(context: HandlerContext<Protocol>, payload: RequestPayloadOf<Procedure, Protocol[Procedure]>, execute: () => Result | Promise<Result>): Promise<void>;
1
+ import type { ProtocolDefinition } from '@enkaku/protocol';
2
+ import type { HandlerContext } from './types.js';
3
+ export type ExecuteHandlerParams<Protocol extends ProtocolDefinition> = {
4
+ context: HandlerContext<Protocol>;
5
+ payload: {
6
+ typ: string;
7
+ prc: string;
8
+ rid: string;
9
+ };
10
+ execute: () => unknown;
11
+ beforeEnd?: () => Promise<void>;
12
+ };
13
+ export declare function executeHandler<Protocol extends ProtocolDefinition>(params: ExecuteHandlerParams<Protocol>): Promise<void>;
4
14
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAGhG,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAO5D,wBAAsB,cAAc,CAClC,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,EACzC,MAAM,SAAS,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,EAEhF,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC,EACjC,OAAO,EAAE,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,EACzD,OAAO,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC,CA6Cf"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAG9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAMhD,MAAM,MAAM,oBAAoB,CAAC,QAAQ,SAAS,kBAAkB,IAAI;IACtE,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAA;IACjC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAClD,OAAO,EAAE,MAAM,OAAO,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAChC,CAAA;AAED,wBAAsB,cAAc,CAAC,QAAQ,SAAS,kBAAkB,EACtE,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACrC,OAAO,CAAC,IAAI,CAAC,CAoDf"}
package/lib/utils.js CHANGED
@@ -3,11 +3,14 @@ import { HandlerError } from './error.js';
3
3
  function canSend(signal) {
4
4
  return !signal.aborted || signal.reason === 'Close';
5
5
  }
6
- // @ts-expect-error type instantiation too deep
7
- export async function executeHandler(context, payload, execute) {
6
+ export async function executeHandler(params) {
7
+ const { context, payload, execute, beforeEnd } = params;
8
8
  const controller = context.controllers[payload.rid];
9
9
  try {
10
10
  const val = await toPromise(execute);
11
+ if (beforeEnd != null) {
12
+ await beforeEnd();
13
+ }
11
14
  if (canSend(controller.signal)) {
12
15
  context.logger.trace('send result to {type} {procedure} with ID {rid}: {result}', {
13
16
  type: payload.typ,
@@ -22,6 +25,9 @@ export async function executeHandler(context, payload, execute) {
22
25
  });
23
26
  }
24
27
  } catch (cause) {
28
+ if (beforeEnd != null) {
29
+ await beforeEnd();
30
+ }
25
31
  const error = HandlerError.from(cause, {
26
32
  code: 'EK01',
27
33
  message: 'Handler execution failed'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enkaku/server",
3
- "version": "0.14.0",
3
+ "version": "0.14.1",
4
4
  "license": "MIT",
5
5
  "homepage": "https://enkaku.dev",
6
6
  "description": "Server logic for Enkaku RPC",
@@ -25,15 +25,15 @@
25
25
  ],
26
26
  "sideEffects": false,
27
27
  "dependencies": {
28
- "@enkaku/async": "^0.14.0",
29
28
  "@enkaku/capability": "^0.14.0",
30
- "@enkaku/otel": "^0.14.0",
29
+ "@enkaku/async": "^0.14.0",
31
30
  "@enkaku/log": "^0.14.0",
31
+ "@enkaku/otel": "^0.14.0",
32
32
  "@enkaku/protocol": "^0.14.0",
33
- "@enkaku/stream": "^0.14.0",
34
- "@enkaku/event": "^0.14.0",
35
- "@enkaku/schema": "^0.14.0",
36
- "@enkaku/token": "^0.14.0"
33
+ "@enkaku/token": "^0.14.0",
34
+ "@enkaku/stream": "^0.14.1",
35
+ "@enkaku/event": "^0.14.1",
36
+ "@enkaku/schema": "^0.14.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@enkaku/transport": "^0.14.0"