@procwire/transport 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +130 -4
  2. package/dist/channel/builder.d.ts +17 -0
  3. package/dist/channel/builder.d.ts.map +1 -1
  4. package/dist/channel/builder.js +34 -0
  5. package/dist/channel/builder.js.map +1 -1
  6. package/dist/channel/index.d.ts +1 -1
  7. package/dist/channel/index.d.ts.map +1 -1
  8. package/dist/channel/index.js +1 -1
  9. package/dist/channel/index.js.map +1 -1
  10. package/dist/channel/quickstart.d.ts.map +1 -1
  11. package/dist/channel/quickstart.js +16 -10
  12. package/dist/channel/quickstart.js.map +1 -1
  13. package/dist/channel/request-channel.d.ts +6 -1
  14. package/dist/channel/request-channel.d.ts.map +1 -1
  15. package/dist/channel/request-channel.js +138 -34
  16. package/dist/channel/request-channel.js.map +1 -1
  17. package/dist/channel/types.d.ts +129 -7
  18. package/dist/channel/types.d.ts.map +1 -1
  19. package/dist/framing/length-prefixed.d.ts +5 -1
  20. package/dist/framing/length-prefixed.d.ts.map +1 -1
  21. package/dist/framing/length-prefixed.js +94 -15
  22. package/dist/framing/length-prefixed.js.map +1 -1
  23. package/dist/framing/line-delimited.d.ts +4 -1
  24. package/dist/framing/line-delimited.d.ts.map +1 -1
  25. package/dist/framing/line-delimited.js +89 -23
  26. package/dist/framing/line-delimited.js.map +1 -1
  27. package/dist/process/handle.d.ts.map +1 -1
  28. package/dist/process/handle.js.map +1 -1
  29. package/dist/process/manager.d.ts +16 -0
  30. package/dist/process/manager.d.ts.map +1 -1
  31. package/dist/process/manager.js +132 -82
  32. package/dist/process/manager.js.map +1 -1
  33. package/dist/process/types.d.ts +110 -1
  34. package/dist/process/types.d.ts.map +1 -1
  35. package/dist/protocol/jsonrpc.d.ts.map +1 -1
  36. package/dist/protocol/jsonrpc.js.map +1 -1
  37. package/dist/protocol/simple.d.ts.map +1 -1
  38. package/dist/protocol/simple.js.map +1 -1
  39. package/dist/serialization/json.d.ts.map +1 -1
  40. package/dist/serialization/json.js.map +1 -1
  41. package/dist/transport/socket-server.d.ts.map +1 -1
  42. package/dist/transport/socket-server.js.map +1 -1
  43. package/dist/transport/socket-transport.d.ts +11 -13
  44. package/dist/transport/socket-transport.d.ts.map +1 -1
  45. package/dist/transport/socket-transport.js +57 -26
  46. package/dist/transport/socket-transport.js.map +1 -1
  47. package/dist/transport/stdio-transport.d.ts +12 -19
  48. package/dist/transport/stdio-transport.d.ts.map +1 -1
  49. package/dist/transport/stdio-transport.js +54 -33
  50. package/dist/transport/stdio-transport.js.map +1 -1
  51. package/dist/utils/index.d.ts +1 -0
  52. package/dist/utils/index.d.ts.map +1 -1
  53. package/dist/utils/index.js +1 -0
  54. package/dist/utils/index.js.map +1 -1
  55. package/dist/utils/metrics.d.ts +6 -0
  56. package/dist/utils/metrics.d.ts.map +1 -0
  57. package/dist/utils/metrics.js +2 -0
  58. package/dist/utils/metrics.js.map +1 -0
  59. package/dist/utils/pipe-path.d.ts +8 -2
  60. package/dist/utils/pipe-path.d.ts.map +1 -1
  61. package/dist/utils/pipe-path.js +27 -4
  62. package/dist/utils/pipe-path.js.map +1 -1
  63. package/dist/utils/platform.d.ts.map +1 -1
  64. package/dist/utils/platform.js +1 -1
  65. package/dist/utils/platform.js.map +1 -1
  66. package/package.json +1 -1
package/README.md CHANGED
@@ -15,6 +15,7 @@ Build production-grade IPC channels with full control over every layer: transpor
15
15
  - **Pluggable serialization** - JSON, MessagePack, Protobuf, Arrow, custom
16
16
  - **Protocol agnostic** - JSON-RPC 2.0, custom protocols
17
17
  - **ProcessManager** - Managed child processes with restart policies
18
+ - **Metrics hooks** - Optional instrumentation for requests, framing, and transports
18
19
 
19
20
  ## Installation
20
21
 
@@ -254,11 +255,13 @@ const framing = new LineDelimitedFraming({
254
255
  ```
255
256
 
256
257
  **Best for**:
258
+
257
259
  - Text protocols (JSON-RPC over stdio)
258
260
  - Human-readable debugging
259
261
  - Simple implementations
260
262
 
261
263
  **Not suitable for**:
264
+
262
265
  - Binary data with embedded newlines
263
266
  - Very large messages (>1MB)
264
267
 
@@ -275,6 +278,7 @@ const framing = new LengthPrefixedFraming({
275
278
  ```
276
279
 
277
280
  **Best for**:
281
+
278
282
  - Binary protocols (MessagePack, Protobuf)
279
283
  - Large messages
280
284
  - High throughput
@@ -358,18 +362,21 @@ const protocol = new JsonRpcProtocol();
358
362
  ```
359
363
 
360
364
  **Request**:
365
+
361
366
  ```json
362
- {"jsonrpc":"2.0","id":1,"method":"add","params":{"a":2,"b":3}}
367
+ { "jsonrpc": "2.0", "id": 1, "method": "add", "params": { "a": 2, "b": 3 } }
363
368
  ```
364
369
 
365
370
  **Response**:
371
+
366
372
  ```json
367
- {"jsonrpc":"2.0","id":1,"result":5}
373
+ { "jsonrpc": "2.0", "id": 1, "result": 5 }
368
374
  ```
369
375
 
370
376
  **Notification** (no response):
377
+
371
378
  ```json
372
- {"jsonrpc":"2.0","method":"log","params":{"message":"Hello"}}
379
+ { "jsonrpc": "2.0", "method": "log", "params": { "message": "Hello" } }
373
380
  ```
374
381
 
375
382
  #### SimpleProtocol
@@ -383,8 +390,9 @@ const protocol = new SimpleProtocol();
383
390
  ```
384
391
 
385
392
  **Message**:
393
+
386
394
  ```json
387
- {"method":"add","params":{"a":2,"b":3}}
395
+ { "method": "add", "params": { "a": 2, "b": 3 } }
388
396
  ```
389
397
 
390
398
  #### Custom Protocols
@@ -566,6 +574,109 @@ if (isWindows()) {
566
574
  const pid = getProcessId();
567
575
  ```
568
576
 
577
+ ## Metrics
578
+
579
+ Metrics are fully opt-in. Provide a `MetricsCollector` implementation and pass it to
580
+ `ChannelBuilder`, `ProcessManager`, or transport options.
581
+
582
+ Collected events include:
583
+
584
+ - `channel.request` counter with `{ method }`
585
+ - `channel.request_latency_ms` histogram with `{ method, status }`
586
+ - `channel.error` counter with `{ type }`
587
+ - `framing.frames` counter and `framing.frame_size_bytes` histogram with `{ direction }`
588
+ - `transport.connect` and `transport.disconnect` counters with `{ transport }`
589
+ - `transport.error` counter with `{ transport, type }`
590
+
591
+ ### Basic wiring
592
+
593
+ ```typescript
594
+ import { ChannelBuilder, ProcessManager, type MetricsCollector } from "@procwire/transport";
595
+
596
+ const metrics: MetricsCollector = {
597
+ incrementCounter(name, value = 1, tags) {
598
+ console.log("counter", name, value, tags);
599
+ },
600
+ recordGauge(name, value, tags) {
601
+ console.log("gauge", name, value, tags);
602
+ },
603
+ recordHistogram(name, value, tags) {
604
+ console.log("histogram", name, value, tags);
605
+ },
606
+ };
607
+
608
+ const manager = new ProcessManager({ metrics });
609
+
610
+ const channel = new ChannelBuilder()
611
+ .withTransport(transport)
612
+ .withFraming(framing)
613
+ .withSerialization(serialization)
614
+ .withProtocol(protocol)
615
+ .withMetrics(metrics)
616
+ .build();
617
+ ```
618
+
619
+ ### Prometheus (prom-client)
620
+
621
+ ```typescript
622
+ import { Counter, Histogram } from "prom-client";
623
+ import type { MetricsCollector } from "@procwire/transport";
624
+
625
+ const counters = new Map<string, Counter<string>>();
626
+ const histograms = new Map<string, Histogram<string>>();
627
+
628
+ const metrics: MetricsCollector = {
629
+ incrementCounter(name, value = 1, tags) {
630
+ if (!counters.has(name)) {
631
+ counters.set(
632
+ name,
633
+ new Counter({
634
+ name,
635
+ help: name,
636
+ labelNames: tags ? Object.keys(tags) : [],
637
+ }),
638
+ );
639
+ }
640
+ counters.get(name)!.inc(tags ?? {}, value);
641
+ },
642
+ recordGauge() {},
643
+ recordHistogram(name, value, tags) {
644
+ if (!histograms.has(name)) {
645
+ histograms.set(
646
+ name,
647
+ new Histogram({
648
+ name,
649
+ help: name,
650
+ labelNames: tags ? Object.keys(tags) : [],
651
+ }),
652
+ );
653
+ }
654
+ histograms.get(name)!.observe(tags ?? {}, value);
655
+ },
656
+ };
657
+ ```
658
+
659
+ ### StatsD (hot-shots)
660
+
661
+ ```typescript
662
+ import type { MetricsCollector } from "@procwire/transport";
663
+ import { StatsD } from "hot-shots";
664
+
665
+ const client = new StatsD();
666
+
667
+ const metrics: MetricsCollector = {
668
+ incrementCounter(name, value = 1, tags) {
669
+ client.increment(name, value, tags);
670
+ },
671
+ recordGauge(name, value, tags) {
672
+ client.gauge(name, value, tags);
673
+ },
674
+ recordHistogram(name, value, tags) {
675
+ client.histogram(name, value, tags);
676
+ },
677
+ };
678
+ ```
679
+
569
680
  ## Platform Notes
570
681
 
571
682
  ### Windows Named Pipes
@@ -576,6 +687,7 @@ const pid = getProcessId();
576
687
  - **Cleanup**: Automatic on server close
577
688
 
578
689
  Example:
690
+
579
691
  ```typescript
580
692
  const path = "\\\\.\\pipe\\my-app-worker-1";
581
693
  ```
@@ -588,6 +700,7 @@ const path = "\\\\.\\pipe\\my-app-worker-1";
588
700
  - **Cleanup**: Manual (remove socket file)
589
701
 
590
702
  Example:
703
+
591
704
  ```typescript
592
705
  const path = "/tmp/my-app-worker-1.sock";
593
706
 
@@ -618,12 +731,14 @@ const path = isWindows()
618
731
  **Symptoms**: `channel.request()` never resolves.
619
732
 
620
733
  **Common causes**:
734
+
621
735
  1. **Framing mismatch**: Parent uses line-delimited, child uses length-prefixed
622
736
  2. **Codec mismatch**: Parent uses JSON, child uses MessagePack
623
737
  3. **Protocol mismatch**: Parent uses JSON-RPC, child uses custom protocol
624
738
  4. **Child not responding**: Child crashed or deadlocked
625
739
 
626
740
  **Solutions**:
741
+
627
742
  - Verify both sides use identical framing/codec/protocol
628
743
  - Check child process stderr for errors
629
744
  - Add timeout to requests: `{ timeout: 5000 }`
@@ -634,11 +749,13 @@ const path = isWindows()
634
749
  **Symptoms**: `SocketTransport.connect()` fails with ECONNREFUSED.
635
750
 
636
751
  **Common causes**:
752
+
637
753
  1. Server not listening yet
638
754
  2. Wrong path
639
755
  3. Stale socket file (Unix)
640
756
 
641
757
  **Solutions**:
758
+
642
759
  ```typescript
643
760
  // Increase connection timeout
644
761
  const transport = new SocketTransport({
@@ -655,10 +772,12 @@ const server = new SocketServer({ unlinkOnListen: true });
655
772
  **Symptoms**: Errors about message size or buffer limits.
656
773
 
657
774
  **Common causes**:
775
+
658
776
  - Message exceeds `maxMessageSize` (length-prefixed)
659
777
  - Line exceeds `maxLineLength` (line-delimited)
660
778
 
661
779
  **Solutions**:
780
+
662
781
  ```typescript
663
782
  // Increase limits
664
783
  const framing = new LengthPrefixedFraming({
@@ -677,11 +796,13 @@ for (const chunk of chunks) {
677
796
  **Symptoms**: `ProcessManager.spawn()` fails or worker exits immediately.
678
797
 
679
798
  **Common causes**:
799
+
680
800
  1. Syntax error in worker code
681
801
  2. Missing dependencies
682
802
  3. Wrong executable path
683
803
 
684
804
  **Solutions**:
805
+
685
806
  - Test worker standalone: `node worker.js`
686
807
  - Check stderr: `startupTimeout` should be long enough
687
808
  - Verify executable path and args
@@ -691,11 +812,13 @@ for (const chunk of chunks) {
691
812
  **Symptoms**: Memory usage grows over time.
692
813
 
693
814
  **Common causes**:
815
+
694
816
  - Unclosed channels
695
817
  - Unremoved event listeners
696
818
  - Buffered data not consumed
697
819
 
698
820
  **Solutions**:
821
+
699
822
  ```typescript
700
823
  // Always close channels
701
824
  try {
@@ -812,6 +935,7 @@ MIT - See [LICENSE](../LICENSE) for details.
812
935
  ## Roadmap
813
936
 
814
937
  ### v0.1.0 (Current)
938
+
815
939
  - Core transport, framing, serialization, protocol layers
816
940
  - Stdio and pipe/socket transports
817
941
  - JSON-RPC 2.0 and simple protocols
@@ -819,6 +943,7 @@ MIT - See [LICENSE](../LICENSE) for details.
819
943
  - Optional codecs: MessagePack, Protobuf, Arrow
820
944
 
821
945
  ### v0.2.0 (Planned)
946
+
822
947
  - HTTP/WebSocket transports
823
948
  - Streaming support
824
949
  - Compression layer (gzip, brotli)
@@ -826,6 +951,7 @@ MIT - See [LICENSE](../LICENSE) for details.
826
951
  - Metrics and monitoring
827
952
 
828
953
  ### v1.0.0 (Future)
954
+
829
955
  - Production-ready stable API
830
956
  - Performance optimizations
831
957
  - Comprehensive docs and examples
@@ -3,6 +3,7 @@ import type { FramingCodec } from "../framing/types.js";
3
3
  import type { SerializationCodec } from "../serialization/types.js";
4
4
  import type { Protocol } from "../protocol/types.js";
5
5
  import type { ResponseAccessor, ChannelMiddleware, Channel } from "./types.js";
6
+ import type { MetricsCollector } from "../utils/metrics.js";
6
7
  /**
7
8
  * Fluent API builder for creating channels.
8
9
  * Provides ergonomic configuration with validation.
@@ -26,8 +27,11 @@ export declare class ChannelBuilder<TReq = unknown, TRes = unknown, TNotif = unk
26
27
  private timeout?;
27
28
  private responseAccessor?;
28
29
  private middleware;
30
+ private metrics?;
29
31
  private maxInboundFrames?;
30
32
  private bufferEarlyNotifications?;
33
+ private pendingRequestPoolSize?;
34
+ private middlewareErrorHandler?;
31
35
  /**
32
36
  * Sets the transport layer.
33
37
  */
@@ -56,6 +60,10 @@ export declare class ChannelBuilder<TReq = unknown, TRes = unknown, TNotif = unk
56
60
  * Adds middleware to the channel.
57
61
  */
58
62
  withMiddleware(middleware: ChannelMiddleware): this;
63
+ /**
64
+ * Sets the metrics collector for channel instrumentation.
65
+ */
66
+ withMetrics(metrics: MetricsCollector): this;
59
67
  /**
60
68
  * Sets the maximum inbound frames limit.
61
69
  */
@@ -65,6 +73,15 @@ export declare class ChannelBuilder<TReq = unknown, TRes = unknown, TNotif = unk
65
73
  * Notifications received before handlers are registered will be buffered.
66
74
  */
67
75
  withBufferEarlyNotifications(size: number): this;
76
+ /**
77
+ * Sets the pending request pool size (0 disables pooling).
78
+ */
79
+ withPendingRequestPoolSize(size: number): this;
80
+ /**
81
+ * Sets the middleware error handler.
82
+ * Called when a middleware hook throws an error.
83
+ */
84
+ withMiddlewareErrorHandler(handler: (hook: string, error: Error) => void): this;
68
85
  /**
69
86
  * Builds and returns the configured channel.
70
87
  * @throws {Error} if required configuration is missing
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/channel/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,OAAO,EAAkB,MAAM,YAAY,CAAC;AAG/F;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAc,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,GAAG,OAAO,EAAE,MAAM,GAAG,OAAO;IAC1E,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,OAAO,CAAC,CAAe;IAC/B,OAAO,CAAC,aAAa,CAAC,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,CAA+B;IAChD,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,wBAAwB,CAAC,CAAS;IAE1C;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAKzC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAKxC;;OAEG;IACH,iBAAiB,CAAC,aAAa,EAAE,kBAAkB,GAAG,IAAI;IAK1D;;OAEG;IACH,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAK3E;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKpC;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAKtD;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAKnD;;OAEG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKvC;;;OAGG;IACH,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhD;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;CAuCrC"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/channel/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,OAAO,EAAkB,MAAM,YAAY,CAAC;AAE/F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAc,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,GAAG,OAAO,EAAE,MAAM,GAAG,OAAO;IAC1E,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,OAAO,CAAC,CAAe;IAC/B,OAAO,CAAC,aAAa,CAAC,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,CAA+B;IAChD,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,OAAO,CAAC,CAAmB;IACnC,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,wBAAwB,CAAC,CAAS;IAC1C,OAAO,CAAC,sBAAsB,CAAC,CAAS;IACxC,OAAO,CAAC,sBAAsB,CAAC,CAAuC;IAEtE;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAKzC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAKxC;;OAEG;IACH,iBAAiB,CAAC,aAAa,EAAE,kBAAkB,GAAG,IAAI;IAK1D;;OAEG;IACH,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAK3E;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKpC;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAKtD;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAKnD;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAK5C;;OAEG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKvC;;;OAGG;IACH,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhD;;OAEG;IACH,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK9C;;;OAGG;IACH,0BAA0B,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAK/E;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;CAgDrC"}
@@ -22,8 +22,11 @@ export class ChannelBuilder {
22
22
  timeout;
23
23
  responseAccessor;
24
24
  middleware = [];
25
+ metrics;
25
26
  maxInboundFrames;
26
27
  bufferEarlyNotifications;
28
+ pendingRequestPoolSize;
29
+ middlewareErrorHandler;
27
30
  /**
28
31
  * Sets the transport layer.
29
32
  */
@@ -73,6 +76,13 @@ export class ChannelBuilder {
73
76
  this.middleware.push(middleware);
74
77
  return this;
75
78
  }
79
+ /**
80
+ * Sets the metrics collector for channel instrumentation.
81
+ */
82
+ withMetrics(metrics) {
83
+ this.metrics = metrics;
84
+ return this;
85
+ }
76
86
  /**
77
87
  * Sets the maximum inbound frames limit.
78
88
  */
@@ -88,6 +98,21 @@ export class ChannelBuilder {
88
98
  this.bufferEarlyNotifications = size;
89
99
  return this;
90
100
  }
101
+ /**
102
+ * Sets the pending request pool size (0 disables pooling).
103
+ */
104
+ withPendingRequestPoolSize(size) {
105
+ this.pendingRequestPoolSize = size;
106
+ return this;
107
+ }
108
+ /**
109
+ * Sets the middleware error handler.
110
+ * Called when a middleware hook throws an error.
111
+ */
112
+ withMiddlewareErrorHandler(handler) {
113
+ this.middlewareErrorHandler = handler;
114
+ return this;
115
+ }
91
116
  /**
92
117
  * Builds and returns the configured channel.
93
118
  * @throws {Error} if required configuration is missing
@@ -120,12 +145,21 @@ export class ChannelBuilder {
120
145
  if (this.middleware.length > 0) {
121
146
  options.middleware = this.middleware;
122
147
  }
148
+ if (this.metrics !== undefined) {
149
+ options.metrics = this.metrics;
150
+ }
123
151
  if (this.maxInboundFrames !== undefined) {
124
152
  options.maxInboundFrames = this.maxInboundFrames;
125
153
  }
126
154
  if (this.bufferEarlyNotifications !== undefined) {
127
155
  options.bufferEarlyNotifications = this.bufferEarlyNotifications;
128
156
  }
157
+ if (this.pendingRequestPoolSize !== undefined) {
158
+ options.pendingRequestPoolSize = this.pendingRequestPoolSize;
159
+ }
160
+ if (this.middlewareErrorHandler !== undefined) {
161
+ options.onMiddlewareError = this.middlewareErrorHandler;
162
+ }
129
163
  return new RequestChannel(options);
130
164
  }
131
165
  }
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/channel/builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/channel/builder.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  export type { Channel, ChannelEvents, ChannelOptions, ChannelServer, ChannelServerOptions, RequestHandler, NotificationHandler, ResponseAccessor, ChannelMiddleware, } from "./types.js";
2
- export { RequestChannel, JsonRpcResponseAccessor, SimpleResponseAccessor } from "./request-channel.js";
2
+ export { RequestChannel, JsonRpcResponseAccessor, SimpleResponseAccessor, } from "./request-channel.js";
3
3
  export { ChannelBuilder } from "./builder.js";
4
4
  export { createStdioChannel, createPipeChannel } from "./quickstart.js";
5
5
  export type { StdioChannelOptions, PipeChannelOptions } from "./quickstart.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/channel/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,OAAO,EACP,aAAa,EACb,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACvG,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACxE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/channel/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,OAAO,EACP,aAAa,EACb,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACxE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  // Implementations
2
- export { RequestChannel, JsonRpcResponseAccessor, SimpleResponseAccessor } from "./request-channel.js";
2
+ export { RequestChannel, JsonRpcResponseAccessor, SimpleResponseAccessor, } from "./request-channel.js";
3
3
  export { ChannelBuilder } from "./builder.js";
4
4
  // Quick start helpers
5
5
  export { createStdioChannel, createPipeChannel } from "./quickstart.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/channel/index.ts"],"names":[],"mappings":"AAaA,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACvG,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,sBAAsB;AACtB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/channel/index.ts"],"names":[],"mappings":"AAaA,kBAAkB;AAClB,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,sBAAsB;AACtB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"quickstart.d.ts","sourceRoot":"","sources":["../../src/channel/quickstart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAQ/E;;GAEG;AACH,MAAM,WAAW,mBACf,SAAQ,IAAI,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;IACrD;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC;IAC9E;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,kBAAkB,CACtC,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAiBlB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,OAAO,CAAC,CAuBlB"}
1
+ {"version":3,"file":"quickstart.d.ts","sourceRoot":"","sources":["../../src/channel/quickstart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAQ/E;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;IACxF;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC;IAC9E;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,kBAAkB,CACtC,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAsBlB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,OAAO,CAAC,CA4BlB"}
@@ -37,15 +37,18 @@ export async function createStdioChannel(executablePath, options) {
37
37
  executablePath,
38
38
  ...options,
39
39
  });
40
- const channel = new ChannelBuilder()
40
+ const builder = new ChannelBuilder()
41
41
  .withTransport(transport)
42
42
  .withFraming(new LineDelimitedFraming())
43
43
  .withSerialization(new JsonCodec())
44
44
  .withProtocol(new JsonRpcProtocol())
45
- .withTimeout(options?.timeout ?? 30000)
46
- .build();
47
- await channel.start();
48
- return channel;
45
+ .withTimeout(options?.timeout ?? 30000);
46
+ if (options?.metrics) {
47
+ builder.withMetrics(options.metrics);
48
+ }
49
+ const builtChannel = builder.build();
50
+ await builtChannel.start();
51
+ return builtChannel;
49
52
  }
50
53
  /**
51
54
  * Creates a ready-to-use pipe/socket channel with sensible defaults.
@@ -91,14 +94,17 @@ export async function createPipeChannel(path, options) {
91
94
  const framing = options?.useLineDelimited
92
95
  ? new LineDelimitedFraming()
93
96
  : new LengthPrefixedFraming();
94
- const channel = new ChannelBuilder()
97
+ const builder = new ChannelBuilder()
95
98
  .withTransport(transport)
96
99
  .withFraming(framing)
97
100
  .withSerialization(new JsonCodec())
98
101
  .withProtocol(new JsonRpcProtocol())
99
- .withTimeout(options?.timeout ?? 30000)
100
- .build();
101
- await channel.start();
102
- return channel;
102
+ .withTimeout(options?.timeout ?? 30000);
103
+ if (options?.metrics) {
104
+ builder.withMetrics(options.metrics);
105
+ }
106
+ const builtChannel = builder.build();
107
+ await builtChannel.start();
108
+ return builtChannel;
103
109
  }
104
110
  //# sourceMappingURL=quickstart.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"quickstart.js","sourceRoot":"","sources":["../../src/channel/quickstart.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA+B9C;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,cAAsB,EACtB,OAA6B;IAE7B,MAAM,SAAS,GAAG,gBAAgB,CAAC,WAAW,CAAC;QAC7C,cAAc;QACd,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE;SACjC,aAAa,CAAC,SAAS,CAAC;SACxB,WAAW,CAAC,IAAI,oBAAoB,EAAE,CAAC;SACvC,iBAAiB,CAAC,IAAI,SAAS,EAAE,CAAC;SAClC,YAAY,CAAC,IAAI,eAAe,EAAE,CAAC;SACnC,WAAW,CAAC,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC;SACtC,KAAK,EAAE,CAAC;IAEX,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IAEtB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,OAA4B;IAE5B,MAAM,gBAAgB,GAA2B,EAAE,IAAI,EAAE,CAAC;IAC1D,IAAI,OAAO,EAAE,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC7C,gBAAgB,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACjE,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAEtE,MAAM,OAAO,GAAG,OAAO,EAAE,gBAAgB;QACvC,CAAC,CAAC,IAAI,oBAAoB,EAAE;QAC5B,CAAC,CAAC,IAAI,qBAAqB,EAAE,CAAC;IAEhC,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE;SACjC,aAAa,CAAC,SAAS,CAAC;SACxB,WAAW,CAAC,OAAO,CAAC;SACpB,iBAAiB,CAAC,IAAI,SAAS,EAAE,CAAC;SAClC,YAAY,CAAC,IAAI,eAAe,EAAE,CAAC;SACnC,WAAW,CAAC,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC;SACtC,KAAK,EAAE,CAAC;IAEX,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IAEtB,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"quickstart.js","sourceRoot":"","sources":["../../src/channel/quickstart.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA8B9C;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,cAAsB,EACtB,OAA6B;IAE7B,MAAM,SAAS,GAAG,gBAAgB,CAAC,WAAW,CAAC;QAC7C,cAAc;QACd,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE;SACjC,aAAa,CAAC,SAAS,CAAC;SACxB,WAAW,CAAC,IAAI,oBAAoB,EAAE,CAAC;SACvC,iBAAiB,CAAC,IAAI,SAAS,EAAE,CAAC;SAClC,YAAY,CAAC,IAAI,eAAe,EAAE,CAAC;SACnC,WAAW,CAAC,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC;IAE1C,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAErC,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;IAE3B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,OAA4B;IAE5B,MAAM,gBAAgB,GAA2B,EAAE,IAAI,EAAE,CAAC;IAC1D,IAAI,OAAO,EAAE,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC7C,gBAAgB,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACjE,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAEtE,MAAM,OAAO,GAAG,OAAO,EAAE,gBAAgB;QACvC,CAAC,CAAC,IAAI,oBAAoB,EAAE;QAC5B,CAAC,CAAC,IAAI,qBAAqB,EAAE,CAAC;IAEhC,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE;SACjC,aAAa,CAAC,SAAS,CAAC;SACxB,WAAW,CAAC,OAAO,CAAC;SACpB,iBAAiB,CAAC,IAAI,SAAS,EAAE,CAAC;SAClC,YAAY,CAAC,IAAI,eAAe,EAAE,CAAC;SACnC,WAAW,CAAC,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC;IAE1C,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAErC,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;IAE3B,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -38,6 +38,9 @@ export declare class RequestChannel<TReq = unknown, TRes = unknown, TNotif = unk
38
38
  private readonly middleware;
39
39
  private readonly maxInboundFrames;
40
40
  private readonly bufferEarlyNotifications;
41
+ private readonly metrics;
42
+ private readonly pendingPool;
43
+ private readonly onMiddlewareError;
41
44
  private readonly events;
42
45
  private readonly pendingRequests;
43
46
  private readonly requestHandlers;
@@ -46,7 +49,6 @@ export declare class RequestChannel<TReq = unknown, TRes = unknown, TNotif = unk
46
49
  private transportDataUnsubscribe;
47
50
  private transportErrorUnsubscribe;
48
51
  private _isConnected;
49
- private inboundFrameCount;
50
52
  constructor(options: ChannelOptions<TReq, TRes, TNotif>);
51
53
  get isConnected(): boolean;
52
54
  /**
@@ -115,6 +117,9 @@ export declare class RequestChannel<TReq = unknown, TRes = unknown, TNotif = unk
115
117
  * Runs middleware hook for all registered middleware.
116
118
  */
117
119
  private runMiddlewareHook;
120
+ private acquirePendingRequest;
121
+ private releasePendingRequest;
122
+ private recordRequestLatency;
118
123
  /**
119
124
  * Emits error event.
120
125
  */
@@ -1 +1 @@
1
- {"version":3,"file":"request-channel.d.ts","sourceRoot":"","sources":["../../src/channel/request-channel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request-channel.d.ts","sourceRoot":"","sources":["../../src/channel/request-channel.ts"],"names":[],"mappings":"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"}