@fluojs/microservices 1.0.2 → 1.0.4
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/README.ko.md +6 -3
- package/README.md +6 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/service.d.ts +1 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +13 -2
- package/dist/status.d.ts +2 -0
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +5 -3
- package/dist/transports/grpc-transport.d.ts +4 -0
- package/dist/transports/grpc-transport.d.ts.map +1 -1
- package/dist/transports/grpc-transport.js +61 -30
- package/dist/transports/kafka-transport.d.ts +1 -0
- package/dist/transports/kafka-transport.d.ts.map +1 -1
- package/dist/transports/kafka-transport.js +44 -20
- package/dist/transports/mqtt-transport.d.ts +3 -0
- package/dist/transports/mqtt-transport.d.ts.map +1 -1
- package/dist/transports/mqtt-transport.js +70 -32
- package/dist/transports/redis-streams-transport.d.ts.map +1 -1
- package/dist/transports/redis-streams-transport.js +7 -0
- package/dist/transports/tcp-transport.d.ts +12 -3
- package/dist/transports/tcp-transport.d.ts.map +1 -1
- package/dist/transports/tcp-transport.js +68 -21
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
package/README.ko.md
CHANGED
|
@@ -90,9 +90,11 @@ await microservice.listen();
|
|
|
90
90
|
- `messageRetentionMaxLen`과 `eventRetentionMaxLen`은 고급 opt-in 설정으로 남아 있습니다. 이를 켜면 Redis가 ACK 전 pending live-stream 엔트리를 먼저 trim할 수 있으므로 broker-managed recovery 보장을 일부 포기하는 운영 판단이 됩니다.
|
|
91
91
|
- RabbitMQ 요청-응답은 기본적으로 인스턴스별 response queue를 사용합니다. 공유 reply topology를 의도적으로 운영할 때만 `responseQueue`를 명시적으로 지정하세요.
|
|
92
92
|
- caller-owned broker collaborator는 shutdown 중에도 caller-owned로 유지됩니다. NATS, Kafka, RabbitMQ transport는 subscription/consumer를 분리하고 in-flight 요청을 reject하지만, 애플리케이션이 넘긴 client, producer, consumer, publisher, 외부 connection 객체를 close/disconnect하지 않습니다.
|
|
93
|
-
- `AbortSignal`을 받는 요청-응답 transport는 이미 abort된 send를 publish 전에 reject하고, 나중에 abort된 in-flight send도 reject합니다. `close()`가 시작된 뒤에는 shutdown 중인 lifecycle에 새 작업을 publish하지 않고 `send()`/`emit()`을 reject
|
|
93
|
+
- `AbortSignal`을 받는 요청-응답 transport는 이미 abort된 send를 publish 전에 reject하고, deferred broker/RPC dispatch 직전 cancellation을 다시 확인하며, 나중에 abort된 in-flight send도 reject합니다. `close()`가 시작된 뒤에는 shutdown 중인 lifecycle에 새 작업을 publish하지 않고 `send()`/`emit()`을 reject하며, 동시 `listen()` 호출은 아직 진행 중인 shutdown 상태를 reset할 수 없습니다.
|
|
94
|
+
- Root `@fluojs/microservices` barrel import와 `TcpMicroserviceTransport` 생성은 `node:net`을 load하지 않습니다. TCP는 `listen()`이 server를 시작하거나 outbound `send()`/`emit()`이 socket을 생성하는 경로에서만 Node networking을 lazy-load합니다. `close()`가 in-flight listen 시도를 기다리는 중 startup이 실패해도 microservice shutdown은 캡처한 listen error를 다시 surface하기 전에 transport cleanup을 시도합니다.
|
|
94
95
|
- TCP는 테스트와 ephemeral listener를 위해 `port: 0`을 허용하고, listen 중에는 OS가 할당한 포트로 outbound `send()`/`emit()`을 라우팅합니다.
|
|
95
|
-
-
|
|
96
|
+
- Platform status snapshot은 transport resource ownership을 보고합니다. TCP와 internally-created gRPC server는 framework-owned listener/client resource로 보고하고, MQTT는 client를 직접 생성한 경우에만 framework ownership을 보고하며, caller-supplied gRPC server와 caller-owned broker collaborator transport는 externally managed로 남습니다.
|
|
97
|
+
- gRPC shutdown은 transport가 server를 직접 생성한 경우 server-level `tryShutdown()`을 사용하고, graceful shutdown을 제공하지 않는 런타임에서만 `forceShutdown()`으로 fallback합니다. Caller-supplied `GrpcMicroserviceTransportOptions.server` 인스턴스는 `close()` 중에도 caller-owned로 유지되며, fluo는 cached outbound client만 닫고 해당 server는 shutdown하지 않습니다. Active unary/streaming call의 AbortSignal 취소는 call-level `cancel()` 또는 stream end 경로를 사용하며, stream이 end/error/early return으로 끝나면 abort listener를 제거합니다.
|
|
96
98
|
- transport logger를 통해 이벤트 핸들러 실패를 기록하는 경로(`RedisPubSubMicroserviceTransport`, `RedisStreamsMicroserviceTransport`, `NatsMicroserviceTransport`, `MqttMicroserviceTransport`, gRPC event emit)는 끝까지 logger-driven observability를 유지합니다. transport logger를 주입하지 않으면 fluo는 해당 실패를 raw `console.error` fallback으로 복제하지 않습니다.
|
|
97
99
|
|
|
98
100
|
## 공통 패턴
|
|
@@ -125,6 +127,7 @@ class FeatureModule {}
|
|
|
125
127
|
Behavioral contract notes:
|
|
126
128
|
|
|
127
129
|
- 이 모듈 경로는 기본 `MicroservicesModule.forRoot(...)` 호출과 동일한 `MICROSERVICE_OPTIONS`, `MicroserviceLifecycleService`, `MICROSERVICE` wiring을 그대로 설치합니다.
|
|
130
|
+
- Top-level `MicroservicesModule.forRoot({ global })`은 built-in module visibility를 제어하고, `module.global`은 module customization object를 사용할 때 같은 visibility 선택을 적용합니다.
|
|
128
131
|
- `module.providers`는 내장 런타임 wiring 뒤에 추가 provider를 붙이고, `module.additionalExports`는 기본 export 토큰을 교체하지 않고 확장합니다.
|
|
129
132
|
- `module.global`을 사용하면 등록 범위를 로컬로 제한할 수 있습니다.
|
|
130
133
|
|
|
@@ -160,7 +163,7 @@ class ManualMicroserviceProvidersModule {}
|
|
|
160
163
|
|
|
161
164
|
### Type export
|
|
162
165
|
|
|
163
|
-
Root barrel은 `Microservice`, `MicroserviceLifecycleState`, `MicroserviceHandlerCounts`, `MicroserviceModuleOptions`, `MicroserviceModuleRegistrationOptions`, `MicroservicePlatformStatusSnapshot`, `MicroserviceStatusAdapterInput`, `MicroserviceTransport`, `MicroserviceTransportCapabilities`, `Pattern`, `ServerStreamWriter`와 `GrpcMicroserviceTransportOptions`, `KafkaMicroserviceTransportOptions`, `MqttMicroserviceTransportOptions`, `NatsMicroserviceTransportOptions`, `RabbitMqMicroserviceTransportOptions`, `RedisPubSubMicroserviceTransportOptions`, `RedisStreamsMicroserviceTransportOptions`, `RedisStreamClientLike` 같은 transport option type을 export합니다.
|
|
166
|
+
Root barrel은 `Microservice`, `MicroserviceLifecycleState`, `MicroserviceHandlerCounts`, `MicroserviceModuleOptions`, `MicroserviceModuleRegistrationOptions`, `MicroservicePlatformStatusSnapshot`, `MicroserviceStatusAdapterInput`, `MicroserviceTransport`, `MicroserviceTransportCapabilities`, `Pattern`, `ServerStreamWriter`와 `GrpcMicroserviceTransportOptions`, `KafkaMicroserviceTransportOptions`, `MqttMicroserviceTransportOptions`, `NatsMicroserviceTransportOptions`, `RabbitMqMicroserviceTransportOptions`, `RedisPubSubMicroserviceTransportOptions`, `RedisStreamsMicroserviceTransportOptions`, `RedisStreamClientLike`, `TcpMicroserviceTransportOptions` 같은 transport option type을 export합니다.
|
|
164
167
|
|
|
165
168
|
### 동작 계약
|
|
166
169
|
|
package/README.md
CHANGED
|
@@ -87,9 +87,11 @@ Microservice handlers fully support fluo's DI scopes. Request-scoped providers a
|
|
|
87
87
|
- `messageRetentionMaxLen` and `eventRetentionMaxLen` remain available as advanced opt-in knobs. Enabling them can trade away broker-managed recovery guarantees because Redis may trim pending live-stream entries before they are acknowledged.
|
|
88
88
|
- RabbitMQ request/reply uses an instance-scoped response queue by default. Pass `responseQueue` explicitly only when you intentionally own and coordinate a shared reply topology.
|
|
89
89
|
- Caller-owned broker collaborators stay caller-owned during shutdown. NATS, Kafka, and RabbitMQ transports detach their subscriptions/consumers and reject in-flight requests, but they do not close or disconnect the client, producer, consumer, publisher, or external connection objects supplied by the application.
|
|
90
|
-
- Request-response transports that accept `AbortSignal` reject already-aborted sends before publishing and reject in-flight sends on later abort. Once `close()` starts, transports reject new `send()`/`emit()` calls instead of publishing work into a shutting-down lifecycle.
|
|
90
|
+
- Request-response transports that accept `AbortSignal` reject already-aborted sends before publishing, re-check cancellation immediately before deferred broker/RPC dispatch, and reject in-flight sends on later abort. Once `close()` starts, transports reject new `send()`/`emit()` calls instead of publishing work into a shutting-down lifecycle, and concurrent `listen()` calls cannot reset a shutdown that is still in progress.
|
|
91
|
+
- Importing the root `@fluojs/microservices` barrel and constructing `TcpMicroserviceTransport` do not load `node:net`; TCP loads Node networking only when `listen()` starts a server or an outbound `send()`/`emit()` constructs a socket. If startup fails while `close()` is waiting on an in-flight listen attempt, microservice shutdown still attempts transport cleanup before surfacing the captured listen error.
|
|
91
92
|
- TCP accepts `port: 0` for tests and ephemeral listeners, then routes outbound `send()`/`emit()` calls through the OS-assigned port while the transport is listening.
|
|
92
|
-
-
|
|
93
|
+
- Platform status snapshots report transport resource ownership: TCP and internally-created gRPC servers report framework-owned listener/client resources, MQTT reports framework ownership only when it creates the client, caller-supplied gRPC servers report caller ownership, and caller-owned broker collaborator transports remain externally managed.
|
|
94
|
+
- gRPC shutdown uses server-level `tryShutdown()` when the transport created the server, and falls back to `forceShutdown()` only for runtimes without graceful shutdown support. Caller-supplied `GrpcMicroserviceTransportOptions.server` instances remain caller-owned during `close()`; fluo closes cached outbound clients but does not shut down that server. AbortSignal cancellation for active unary or streaming calls uses the call-level `cancel()`/stream end path and removes abort listeners when streams end, error, or are returned early.
|
|
93
95
|
- Event-handler failures that flow through the transport logger (`RedisPubSubMicroserviceTransport`, `RedisStreamsMicroserviceTransport`, `NatsMicroserviceTransport`, `MqttMicroserviceTransport`, and gRPC event emits) remain logger-driven. If you do not inject a transport logger, fluo does not mirror those failures through a raw `console.error` fallback.
|
|
94
96
|
|
|
95
97
|
## Common Patterns
|
|
@@ -122,6 +124,7 @@ class FeatureModule {}
|
|
|
122
124
|
Behavioral contract notes:
|
|
123
125
|
|
|
124
126
|
- The module path still installs the same built-in `MICROSERVICE_OPTIONS`, `MicroserviceLifecycleService`, and `MICROSERVICE` wiring as the default `MicroservicesModule.forRoot(...)` call.
|
|
127
|
+
- Top-level `MicroservicesModule.forRoot({ global })` controls the built-in module visibility; `module.global` applies the same visibility choice when using the module customization object.
|
|
125
128
|
- `module.providers` appends extra providers after the built-in runtime wiring, while `module.additionalExports` extends the default exported tokens instead of replacing them.
|
|
126
129
|
- `module.global` lets advanced callers keep the registration local.
|
|
127
130
|
|
|
@@ -157,7 +160,7 @@ class ManualMicroserviceProvidersModule {}
|
|
|
157
160
|
|
|
158
161
|
### Type exports
|
|
159
162
|
|
|
160
|
-
The root barrel exports `Microservice`, `MicroserviceLifecycleState`, `MicroserviceHandlerCounts`, `MicroserviceModuleOptions`, `MicroserviceModuleRegistrationOptions`, `MicroservicePlatformStatusSnapshot`, `MicroserviceStatusAdapterInput`, `MicroserviceTransport`, `MicroserviceTransportCapabilities`, `Pattern`, `ServerStreamWriter`, and transport option types such as `GrpcMicroserviceTransportOptions`, `KafkaMicroserviceTransportOptions`, `MqttMicroserviceTransportOptions`, `NatsMicroserviceTransportOptions`, `RabbitMqMicroserviceTransportOptions`, `RedisPubSubMicroserviceTransportOptions`, `RedisStreamsMicroserviceTransportOptions`, and `
|
|
163
|
+
The root barrel exports `Microservice`, `MicroserviceLifecycleState`, `MicroserviceHandlerCounts`, `MicroserviceModuleOptions`, `MicroserviceModuleRegistrationOptions`, `MicroservicePlatformStatusSnapshot`, `MicroserviceStatusAdapterInput`, `MicroserviceTransport`, `MicroserviceTransportCapabilities`, `Pattern`, `ServerStreamWriter`, and transport option types such as `GrpcMicroserviceTransportOptions`, `KafkaMicroserviceTransportOptions`, `MqttMicroserviceTransportOptions`, `NatsMicroserviceTransportOptions`, `RabbitMqMicroserviceTransportOptions`, `RedisPubSubMicroserviceTransportOptions`, `RedisStreamsMicroserviceTransportOptions`, `RedisStreamClientLike`, and `TcpMicroserviceTransportOptions`.
|
|
161
164
|
|
|
162
165
|
### Behavioral contracts
|
|
163
166
|
|
package/dist/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export { RedisPubSubMicroserviceTransport, type RedisPubSubMicroserviceTransport
|
|
|
9
9
|
export { RedisStreamsMicroserviceTransport, type RedisStreamClientLike, type RedisStreamsMicroserviceTransportOptions, } from './transports/redis-streams-transport.js';
|
|
10
10
|
export { RabbitMqMicroserviceTransport, type RabbitMqMicroserviceTransportOptions, } from './transports/rabbitmq-transport.js';
|
|
11
11
|
export * from './status.js';
|
|
12
|
-
export { TcpMicroserviceTransport } from './transports/tcp-transport.js';
|
|
12
|
+
export { TcpMicroserviceTransport, type TcpMicroserviceTransportOptions } from './transports/tcp-transport.js';
|
|
13
13
|
export { MICROSERVICE } from './tokens.js';
|
|
14
14
|
export type { Microservice, MicroserviceModuleOptions, MicroserviceModuleRegistrationOptions, MicroserviceTransport, Pattern, ServerStreamWriter, } from './types.js';
|
|
15
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACd,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,yBAAyB,EAAE,KAAK,gCAAgC,EAAE,MAAM,gCAAgC,CAAC;AAClH,OAAO,EAAE,0BAA0B,EAAE,KAAK,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AACrH,OAAO,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,KAAK,gCAAgC,EAAE,MAAM,gCAAgC,CAAC;AAClH,OAAO,EAAE,yBAAyB,EAAE,KAAK,gCAAgC,EAAE,MAAM,gCAAgC,CAAC;AAClH,OAAO,EACL,gCAAgC,EAChC,KAAK,uCAAuC,GAC7C,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,iCAAiC,EACjC,KAAK,qBAAqB,EAC1B,KAAK,wCAAwC,GAC9C,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,6BAA6B,EAC7B,KAAK,oCAAoC,GAC1C,MAAM,oCAAoC,CAAC;AAC5C,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACd,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,yBAAyB,EAAE,KAAK,gCAAgC,EAAE,MAAM,gCAAgC,CAAC;AAClH,OAAO,EAAE,0BAA0B,EAAE,KAAK,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AACrH,OAAO,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,KAAK,gCAAgC,EAAE,MAAM,gCAAgC,CAAC;AAClH,OAAO,EAAE,yBAAyB,EAAE,KAAK,gCAAgC,EAAE,MAAM,gCAAgC,CAAC;AAClH,OAAO,EACL,gCAAgC,EAChC,KAAK,uCAAuC,GAC7C,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,iCAAiC,EACjC,KAAK,qBAAqB,EAC1B,KAAK,wCAAwC,GAC9C,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,6BAA6B,EAC7B,KAAK,oCAAoC,GAC1C,MAAM,oCAAoC,CAAC;AAC5C,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,KAAK,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAC/G,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EACV,YAAY,EACZ,yBAAyB,EACzB,qCAAqC,EACrC,qBAAqB,EACrB,OAAO,EACP,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
|
package/dist/service.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Container } from '@fluojs/di';
|
|
2
|
-
import {
|
|
2
|
+
import type { ApplicationLogger, CompiledModule, MicroserviceRuntime, OnApplicationShutdown } from '@fluojs/runtime';
|
|
3
3
|
import type { Microservice, MicroserviceModuleOptions, ServerStreamWriter } from './types.js';
|
|
4
4
|
/**
|
|
5
5
|
* Lifecycle-managed microservice runtime that discovers pattern handlers and binds them to a transport.
|
package/dist/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAY,MAAM,YAAY,CAAC;AACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAY,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAMrH,OAAO,KAAK,EAGV,YAAY,EACZ,yBAAyB,EAEzB,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AA6BpB;;;;;GAKG;AACH,qBACa,4BAA6B,YAAW,YAAY,EAAE,mBAAmB,EAAE,qBAAqB;IASzG,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAXhC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2B;IACvD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAsC;IACvE,OAAO,CAAC,cAAc,CAAmF;IACzG,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAA4B;gBAG9B,gBAAgB,EAAE,SAAS,EAC3B,eAAe,EAAE,SAAS,cAAc,EAAE,EAC1C,MAAM,EAAE,iBAAiB,EACzB,aAAa,EAAE,yBAAyB;IAG3D;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IA2D7B;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BtB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5C;;;;OAIG;IACH,4BAA4B;IAsB5B;;;;;;;OAOG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAIrF;;;;;;OAMG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D;;;;;;;;;OASG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC;IAU7F;;;;;;;;OAQG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG;QAAE,MAAM,EAAE,kBAAkB,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE;IAU7G;;;;;;;;OAQG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG;QAAE,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QAAC,MAAM,EAAE,kBAAkB,CAAA;KAAE;YAUnG,cAAc;YAyBd,oBAAoB;YA+BpB,yBAAyB;YAiCzB,iCAAiC;YAuBjC,oBAAoB;YA4BpB,yBAAyB;YA+BzB,iCAAiC;YAsBjC,kBAAkB;YA+BlB,uBAAuB;YAiCvB,+BAA+B;YAuB/B,qBAAqB;YA8DrB,4BAA4B;IAK1C,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,0BAA0B;IAkClC,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,mBAAmB;YAsCb,aAAa;YAuBb,qBAAqB;YA2BrB,+BAA+B;CAsB9C"}
|
package/dist/service.js
CHANGED
|
@@ -106,13 +106,23 @@ class MicroserviceLifecycleService {
|
|
|
106
106
|
* @returns A promise that resolves once shutdown completes.
|
|
107
107
|
*/
|
|
108
108
|
async close() {
|
|
109
|
+
let listenError;
|
|
109
110
|
if (this.listenPromise) {
|
|
110
|
-
|
|
111
|
+
try {
|
|
112
|
+
await this.listenPromise;
|
|
113
|
+
} catch (error) {
|
|
114
|
+
listenError = error;
|
|
115
|
+
}
|
|
111
116
|
}
|
|
112
117
|
this.lifecycleState = 'stopping';
|
|
113
118
|
try {
|
|
114
119
|
await this.moduleOptions.transport.close();
|
|
115
120
|
this.listening = false;
|
|
121
|
+
if (listenError) {
|
|
122
|
+
this.lifecycleState = 'failed';
|
|
123
|
+
this.lastListenError = listenError instanceof Error ? listenError.message : String(listenError);
|
|
124
|
+
throw listenError;
|
|
125
|
+
}
|
|
116
126
|
this.lifecycleState = 'stopped';
|
|
117
127
|
} catch (error) {
|
|
118
128
|
this.lifecycleState = 'failed';
|
|
@@ -146,7 +156,8 @@ class MicroserviceLifecycleService {
|
|
|
146
156
|
emit: typeof this.moduleOptions.transport.emit === 'function',
|
|
147
157
|
send: typeof this.moduleOptions.transport.send === 'function',
|
|
148
158
|
serverStream: typeof this.moduleOptions.transport.serverStream === 'function'
|
|
149
|
-
}
|
|
159
|
+
},
|
|
160
|
+
transportOwnsResources: this.moduleOptions.transport.ownsResources === true
|
|
150
161
|
});
|
|
151
162
|
}
|
|
152
163
|
|
package/dist/status.d.ts
CHANGED
|
@@ -31,6 +31,8 @@ export interface MicroserviceStatusAdapterInput {
|
|
|
31
31
|
lastListenError?: string;
|
|
32
32
|
lifecycleState: MicroserviceLifecycleState;
|
|
33
33
|
transportCapabilities: MicroserviceTransportCapabilities;
|
|
34
|
+
/** Whether the configured transport owns listener/client resources it must close. */
|
|
35
|
+
transportOwnsResources?: boolean;
|
|
34
36
|
}
|
|
35
37
|
/**
|
|
36
38
|
* Describes the microservice platform status snapshot contract.
|
package/dist/status.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEvG;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE9G;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,aAAa,EAAE,yBAAyB,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,0BAA0B,CAAC;IAC3C,qBAAqB,EAAE,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEvG;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE9G;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,aAAa,EAAE,yBAAyB,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,0BAA0B,CAAC;IAC3C,qBAAqB,EAAE,iCAAiC,CAAC;IACzD,qFAAqF;IACrF,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,kCAAkC;IACjD,SAAS,EAAE,uBAAuB,CAAC;IACnC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAqED;;;;;GAKG;AACH,wBAAgB,wCAAwC,CACtD,KAAK,EAAE,8BAA8B,GACpC,kCAAkC,CAuBpC"}
|
package/dist/status.js
CHANGED
|
@@ -84,6 +84,7 @@ function createHealth(input) {
|
|
|
84
84
|
* @returns The create microservice platform status snapshot result.
|
|
85
85
|
*/
|
|
86
86
|
export function createMicroservicePlatformStatusSnapshot(input) {
|
|
87
|
+
const transportOwnsResources = input.transportOwnsResources ?? false;
|
|
87
88
|
return {
|
|
88
89
|
details: {
|
|
89
90
|
dependencies: ['transport.external'],
|
|
@@ -94,12 +95,13 @@ export function createMicroservicePlatformStatusSnapshot(input) {
|
|
|
94
95
|
lifecycleState: input.lifecycleState,
|
|
95
96
|
transportCapabilities: {
|
|
96
97
|
...input.transportCapabilities
|
|
97
|
-
}
|
|
98
|
+
},
|
|
99
|
+
transportOwnsResources
|
|
98
100
|
},
|
|
99
101
|
health: createHealth(input),
|
|
100
102
|
ownership: {
|
|
101
|
-
externallyManaged:
|
|
102
|
-
ownsResources:
|
|
103
|
+
externallyManaged: !transportOwnsResources,
|
|
104
|
+
ownsResources: transportOwnsResources
|
|
103
105
|
},
|
|
104
106
|
readiness: createReadiness(input)
|
|
105
107
|
};
|
|
@@ -61,8 +61,11 @@ export interface GrpcMicroserviceTransportOptions {
|
|
|
61
61
|
*/
|
|
62
62
|
export declare class GrpcMicroserviceTransport implements MicroserviceTransport {
|
|
63
63
|
private readonly options;
|
|
64
|
+
/** Indicates whether gRPC owns server shutdown in addition to cached client cleanup. */
|
|
65
|
+
readonly ownsResources: boolean;
|
|
64
66
|
private bidiStreamHandler;
|
|
65
67
|
private clientStreamHandler;
|
|
68
|
+
private closePromise;
|
|
66
69
|
private closing;
|
|
67
70
|
private readonly clients;
|
|
68
71
|
private grpc;
|
|
@@ -74,6 +77,7 @@ export declare class GrpcMicroserviceTransport implements MicroserviceTransport
|
|
|
74
77
|
private packageRoot;
|
|
75
78
|
private readonly requestTimeoutMs;
|
|
76
79
|
private readonly server;
|
|
80
|
+
private readonly ownsServer;
|
|
77
81
|
private resolvedServer;
|
|
78
82
|
private serverStreamHandler;
|
|
79
83
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grpc-transport.d.ts","sourceRoot":"","sources":["../../src/transports/grpc-transport.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"grpc-transport.d.ts","sourceRoot":"","sources":["../../src/transports/grpc-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,8 +16,11 @@ const grpcKinds = {
|
|
|
16
16
|
* and exposes matching unary/server-stream/client-stream/bidi-stream client calls through one transport surface.
|
|
17
17
|
*/
|
|
18
18
|
export class GrpcMicroserviceTransport {
|
|
19
|
+
/** Indicates whether gRPC owns server shutdown in addition to cached client cleanup. */
|
|
20
|
+
ownsResources;
|
|
19
21
|
bidiStreamHandler;
|
|
20
22
|
clientStreamHandler;
|
|
23
|
+
closePromise;
|
|
21
24
|
closing = false;
|
|
22
25
|
clients = new Map();
|
|
23
26
|
grpc;
|
|
@@ -29,6 +32,7 @@ export class GrpcMicroserviceTransport {
|
|
|
29
32
|
packageRoot;
|
|
30
33
|
requestTimeoutMs;
|
|
31
34
|
server;
|
|
35
|
+
ownsServer;
|
|
32
36
|
resolvedServer;
|
|
33
37
|
serverStreamHandler;
|
|
34
38
|
|
|
@@ -41,6 +45,8 @@ export class GrpcMicroserviceTransport {
|
|
|
41
45
|
this.options = options;
|
|
42
46
|
this.requestTimeoutMs = options.requestTimeoutMs ?? 3_000;
|
|
43
47
|
this.server = options.server;
|
|
48
|
+
this.ownsServer = !options.server;
|
|
49
|
+
this.ownsResources = this.ownsServer;
|
|
44
50
|
}
|
|
45
51
|
setLogger(logger) {
|
|
46
52
|
this.logger = logger;
|
|
@@ -53,7 +59,12 @@ export class GrpcMicroserviceTransport {
|
|
|
53
59
|
* @returns A promise that resolves once the gRPC server is bound and ready.
|
|
54
60
|
*/
|
|
55
61
|
async listen(handler) {
|
|
56
|
-
this.closing
|
|
62
|
+
if (this.closing) {
|
|
63
|
+
if (this.closePromise) {
|
|
64
|
+
throw new Error('GrpcMicroserviceTransport is closing. Wait for close() to complete before listen().');
|
|
65
|
+
}
|
|
66
|
+
this.closing = false;
|
|
67
|
+
}
|
|
57
68
|
this.handler = handler;
|
|
58
69
|
if (this.listening) {
|
|
59
70
|
return;
|
|
@@ -85,7 +96,9 @@ export class GrpcMicroserviceTransport {
|
|
|
85
96
|
}
|
|
86
97
|
await this.bindServer(server, grpc);
|
|
87
98
|
} catch (error) {
|
|
88
|
-
|
|
99
|
+
if (this.ownsServer) {
|
|
100
|
+
await this.shutdownServer(server);
|
|
101
|
+
}
|
|
89
102
|
throw error;
|
|
90
103
|
}
|
|
91
104
|
this.grpc = grpc;
|
|
@@ -225,39 +238,50 @@ export class GrpcMicroserviceTransport {
|
|
|
225
238
|
* @returns A promise that resolves once shutdown cleanup completes.
|
|
226
239
|
*/
|
|
227
240
|
async close() {
|
|
228
|
-
this.
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
await this.listenPromise;
|
|
241
|
+
if (this.closePromise) {
|
|
242
|
+
await this.closePromise;
|
|
243
|
+
return;
|
|
232
244
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
245
|
+
this.closing = true;
|
|
246
|
+
this.closePromise = (async () => {
|
|
247
|
+
let closeError;
|
|
248
|
+
if (this.listenPromise) {
|
|
249
|
+
await this.listenPromise;
|
|
236
250
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
}
|
|
241
|
-
|
|
251
|
+
try {
|
|
252
|
+
if (this.resolvedServer && this.ownsServer) {
|
|
253
|
+
await this.shutdownServer(this.resolvedServer);
|
|
254
|
+
}
|
|
255
|
+
for (const service of this.clients.values()) {
|
|
256
|
+
try {
|
|
257
|
+
service.client.close?.();
|
|
258
|
+
} catch (error) {
|
|
259
|
+
closeError ??= error;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
} catch (error) {
|
|
263
|
+
closeError ??= error;
|
|
264
|
+
} finally {
|
|
265
|
+
this.handler = undefined;
|
|
266
|
+
this.serverStreamHandler = undefined;
|
|
267
|
+
this.clientStreamHandler = undefined;
|
|
268
|
+
this.bidiStreamHandler = undefined;
|
|
269
|
+
this.listening = false;
|
|
270
|
+
this.resolvedServer = undefined;
|
|
271
|
+
this.clients.clear();
|
|
272
|
+
this.packageRoot = undefined;
|
|
273
|
+
for (const pending of [...this.pending.values()]) {
|
|
274
|
+
pending.reject(new Error('gRPC microservice transport closed before response.'));
|
|
242
275
|
}
|
|
243
276
|
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
} finally {
|
|
247
|
-
this.handler = undefined;
|
|
248
|
-
this.serverStreamHandler = undefined;
|
|
249
|
-
this.clientStreamHandler = undefined;
|
|
250
|
-
this.bidiStreamHandler = undefined;
|
|
251
|
-
this.listening = false;
|
|
252
|
-
this.resolvedServer = undefined;
|
|
253
|
-
this.clients.clear();
|
|
254
|
-
this.packageRoot = undefined;
|
|
255
|
-
for (const pending of [...this.pending.values()]) {
|
|
256
|
-
pending.reject(new Error('gRPC microservice transport closed before response.'));
|
|
277
|
+
if (closeError) {
|
|
278
|
+
throw closeError;
|
|
257
279
|
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
|
|
280
|
+
})();
|
|
281
|
+
try {
|
|
282
|
+
await this.closePromise;
|
|
283
|
+
} finally {
|
|
284
|
+
this.closePromise = undefined;
|
|
261
285
|
}
|
|
262
286
|
}
|
|
263
287
|
buildServiceImplementation(serviceName, serviceConstructor) {
|
|
@@ -471,6 +495,13 @@ export class GrpcMicroserviceTransport {
|
|
|
471
495
|
});
|
|
472
496
|
}
|
|
473
497
|
void Promise.resolve().then(() => {
|
|
498
|
+
if (!this.pending.has(requestId)) {
|
|
499
|
+
return;
|
|
500
|
+
}
|
|
501
|
+
if (signal?.aborted) {
|
|
502
|
+
entry.reject(new Error('gRPC request aborted before dispatch.'));
|
|
503
|
+
return;
|
|
504
|
+
}
|
|
474
505
|
if (this.closing) {
|
|
475
506
|
entry.reject(new Error('gRPC microservice transport closed before response.'));
|
|
476
507
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kafka-transport.d.ts","sourceRoot":"","sources":["../../src/transports/kafka-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE3E,UAAU,iBAAiB;IACzB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5F,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,UAAU,iBAAiB;IACzB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD;AAgBD,gEAAgE;AAChE,MAAM,WAAW,iCAAiC;IAChD,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,qBAAa,0BAA2B,YAAW,qBAAqB;
|
|
1
|
+
{"version":3,"file":"kafka-transport.d.ts","sourceRoot":"","sources":["../../src/transports/kafka-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE3E,UAAU,iBAAiB;IACzB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5F,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,UAAU,iBAAiB;IACzB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD;AAgBD,gEAAgE;AAChE,MAAM,WAAW,iCAAiC;IAChD,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,qBAAa,0BAA2B,YAAW,qBAAqB;IAiB1D,OAAO,CAAC,QAAQ,CAAC,OAAO;IAhBpC,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC;;;;OAIG;gBAC0B,OAAO,EAAE,iCAAiC;IAOvE;;;;;OAKG;IACG,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwDtD;;;;;;;OAOG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAsFrF;;;;;;OAMG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5D;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YA6Cd,kBAAkB;YAkBlB,oBAAoB;YAwCpB,qBAAqB;IAqBnC,OAAO,CAAC,YAAY;CAqCrB"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* replies without leaking cross-request state through the shared producer/consumer pair.
|
|
8
8
|
*/
|
|
9
9
|
export class KafkaMicroserviceTransport {
|
|
10
|
+
closePromise;
|
|
10
11
|
closing = false;
|
|
11
12
|
handler;
|
|
12
13
|
listening = false;
|
|
@@ -37,7 +38,12 @@ export class KafkaMicroserviceTransport {
|
|
|
37
38
|
* @returns A promise that resolves once all subscriptions are active.
|
|
38
39
|
*/
|
|
39
40
|
async listen(handler) {
|
|
40
|
-
this.closing
|
|
41
|
+
if (this.closing) {
|
|
42
|
+
if (this.closePromise) {
|
|
43
|
+
throw new Error('KafkaMicroserviceTransport is closing. Wait for close() to complete before listen().');
|
|
44
|
+
}
|
|
45
|
+
this.closing = false;
|
|
46
|
+
}
|
|
41
47
|
this.handler = handler;
|
|
42
48
|
if (this.listening) {
|
|
43
49
|
return;
|
|
@@ -138,6 +144,13 @@ export class KafkaMicroserviceTransport {
|
|
|
138
144
|
});
|
|
139
145
|
}
|
|
140
146
|
void Promise.resolve().then(async () => {
|
|
147
|
+
if (!this.pending.has(requestId)) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
if (signal?.aborted) {
|
|
151
|
+
entry.reject(new Error('Kafka request aborted before publish.'));
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
141
154
|
if (this.closing) {
|
|
142
155
|
entry.reject(new Error('Kafka microservice transport closed before request dispatch.'));
|
|
143
156
|
return;
|
|
@@ -174,30 +187,41 @@ export class KafkaMicroserviceTransport {
|
|
|
174
187
|
* @returns A promise that resolves once shutdown cleanup completes.
|
|
175
188
|
*/
|
|
176
189
|
async close() {
|
|
177
|
-
this.
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
await this.listenPromise;
|
|
190
|
+
if (this.closePromise) {
|
|
191
|
+
await this.closePromise;
|
|
192
|
+
return;
|
|
181
193
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
194
|
+
this.closing = true;
|
|
195
|
+
this.closePromise = (async () => {
|
|
196
|
+
let closeError;
|
|
197
|
+
if (this.listenPromise) {
|
|
198
|
+
await this.listenPromise;
|
|
199
|
+
}
|
|
200
|
+
try {
|
|
201
|
+
if (this.listening) {
|
|
202
|
+
for (const topic of new Set([this.eventTopic, this.messageTopic, this.responseTopic])) {
|
|
203
|
+
try {
|
|
204
|
+
await this.options.consumer.unsubscribe(topic);
|
|
205
|
+
} catch (error) {
|
|
206
|
+
closeError ??= error;
|
|
207
|
+
}
|
|
189
208
|
}
|
|
190
209
|
}
|
|
210
|
+
} finally {
|
|
211
|
+
this.handler = undefined;
|
|
212
|
+
this.listening = false;
|
|
213
|
+
for (const pending of [...this.pending.values()]) {
|
|
214
|
+
pending.reject(new Error('Kafka microservice transport closed before response.'));
|
|
215
|
+
}
|
|
191
216
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
this.listening = false;
|
|
195
|
-
for (const pending of [...this.pending.values()]) {
|
|
196
|
-
pending.reject(new Error('Kafka microservice transport closed before response.'));
|
|
217
|
+
if (closeError) {
|
|
218
|
+
throw closeError;
|
|
197
219
|
}
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
|
|
220
|
+
})();
|
|
221
|
+
try {
|
|
222
|
+
await this.closePromise;
|
|
223
|
+
} finally {
|
|
224
|
+
this.closePromise = undefined;
|
|
201
225
|
}
|
|
202
226
|
}
|
|
203
227
|
async handleInboundEvent(rawMessage) {
|
|
@@ -53,9 +53,12 @@ export interface MqttMicroserviceTransportOptions {
|
|
|
53
53
|
export declare class MqttMicroserviceTransport implements MicroserviceTransport {
|
|
54
54
|
private readonly options;
|
|
55
55
|
private client;
|
|
56
|
+
private closePromise;
|
|
56
57
|
private closing;
|
|
57
58
|
private handler;
|
|
58
59
|
private readonly internallyOwnedClient;
|
|
60
|
+
/** Indicates whether MQTT owns the client instance it resolves and closes. */
|
|
61
|
+
readonly ownsResources: boolean;
|
|
59
62
|
private logger;
|
|
60
63
|
private listening;
|
|
61
64
|
private listenPromise;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mqtt-transport.d.ts","sourceRoot":"","sources":["../../src/transports/mqtt-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGxG,KAAK,aAAa,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE7D,UAAU,kBAAkB;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,oBAAoB;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,kBAAkB;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,cAAc;IACtB,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/D,GAAG,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI,CAAC;IACzG,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI,CAAC;IACvG,OAAO,CACL,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,GACjC,IAAI,CAAC;IACR,SAAS,CACP,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,GACjC,IAAI,CAAC;IACR,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;CACtE;AAED,UAAU,cAAc;IACtB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,cAAc,CAAC;CACpE;AAsBD,+DAA+D;AAC/D,MAAM,WAAW,gCAAgC;IAC/C,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B;AAED;;;;;GAKG;AACH,qBAAa,yBAA0B,YAAW,qBAAqB;
|
|
1
|
+
{"version":3,"file":"mqtt-transport.d.ts","sourceRoot":"","sources":["../../src/transports/mqtt-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,9 +15,12 @@ const mqttKinds = {
|
|
|
15
15
|
*/
|
|
16
16
|
export class MqttMicroserviceTransport {
|
|
17
17
|
client;
|
|
18
|
+
closePromise;
|
|
18
19
|
closing = false;
|
|
19
20
|
handler;
|
|
20
21
|
internallyOwnedClient;
|
|
22
|
+
/** Indicates whether MQTT owns the client instance it resolves and closes. */
|
|
23
|
+
ownsResources;
|
|
21
24
|
logger;
|
|
22
25
|
listening = false;
|
|
23
26
|
listenPromise;
|
|
@@ -56,6 +59,7 @@ export class MqttMicroserviceTransport {
|
|
|
56
59
|
this.requestTimeoutMs = options.requestTimeoutMs ?? 3_000;
|
|
57
60
|
this.client = options.client;
|
|
58
61
|
this.internallyOwnedClient = !options.client;
|
|
62
|
+
this.ownsResources = this.internallyOwnedClient;
|
|
59
63
|
}
|
|
60
64
|
setLogger(logger) {
|
|
61
65
|
this.logger = logger;
|
|
@@ -68,7 +72,12 @@ export class MqttMicroserviceTransport {
|
|
|
68
72
|
* @returns A promise that resolves once all subscriptions are active.
|
|
69
73
|
*/
|
|
70
74
|
async listen(handler) {
|
|
71
|
-
this.closing
|
|
75
|
+
if (this.closing) {
|
|
76
|
+
if (this.closePromise) {
|
|
77
|
+
throw new Error('MqttMicroserviceTransport is closing. Wait for close() to complete before listen().');
|
|
78
|
+
}
|
|
79
|
+
this.closing = false;
|
|
80
|
+
}
|
|
72
81
|
this.handler = handler;
|
|
73
82
|
if (this.listening) {
|
|
74
83
|
return;
|
|
@@ -175,11 +184,29 @@ export class MqttMicroserviceTransport {
|
|
|
175
184
|
});
|
|
176
185
|
}
|
|
177
186
|
void Promise.resolve().then(async () => {
|
|
187
|
+
if (!this.pending.has(requestId)) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
if (signal?.aborted) {
|
|
191
|
+
entry.reject(new Error('MQTT request aborted before publish.'));
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
178
194
|
if (this.closing) {
|
|
179
195
|
entry.reject(new Error('MQTT microservice transport closed before response.'));
|
|
180
196
|
return;
|
|
181
197
|
}
|
|
182
198
|
const client = await this.resolveClient();
|
|
199
|
+
if (!this.pending.has(requestId)) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
if (signal?.aborted) {
|
|
203
|
+
entry.reject(new Error('MQTT request aborted before publish.'));
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
if (this.closing) {
|
|
207
|
+
entry.reject(new Error('MQTT microservice transport closed before response.'));
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
183
210
|
await this.publish(client, this.messageTopic, frame, {
|
|
184
211
|
qos: this.messageQos,
|
|
185
212
|
retain: this.messageRetain
|
|
@@ -219,44 +246,55 @@ export class MqttMicroserviceTransport {
|
|
|
219
246
|
* @returns A promise that resolves once shutdown cleanup completes.
|
|
220
247
|
*/
|
|
221
248
|
async close() {
|
|
222
|
-
this.
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
await this.listenPromise;
|
|
249
|
+
if (this.closePromise) {
|
|
250
|
+
await this.closePromise;
|
|
251
|
+
return;
|
|
226
252
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
253
|
+
this.closing = true;
|
|
254
|
+
this.closePromise = (async () => {
|
|
255
|
+
let closeError;
|
|
256
|
+
if (this.listenPromise) {
|
|
257
|
+
await this.listenPromise;
|
|
258
|
+
}
|
|
259
|
+
try {
|
|
260
|
+
const client = this.client;
|
|
261
|
+
if (client && this.listening) {
|
|
262
|
+
for (const topic of [this.eventTopic, this.messageTopic, this.replyTopic]) {
|
|
263
|
+
try {
|
|
264
|
+
await this.unsubscribeTopic(client, topic);
|
|
265
|
+
} catch (error) {
|
|
266
|
+
closeError ??= error;
|
|
267
|
+
}
|
|
235
268
|
}
|
|
236
269
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
270
|
+
if (client) {
|
|
271
|
+
client.off?.('message', this.messageListener);
|
|
272
|
+
if (this.internallyOwnedClient) {
|
|
273
|
+
try {
|
|
274
|
+
await this.endClient(client);
|
|
275
|
+
} catch (error) {
|
|
276
|
+
closeError ??= error;
|
|
277
|
+
}
|
|
245
278
|
}
|
|
246
279
|
}
|
|
280
|
+
} finally {
|
|
281
|
+
this.handler = undefined;
|
|
282
|
+
this.listening = false;
|
|
283
|
+
if (this.internallyOwnedClient) {
|
|
284
|
+
this.client = undefined;
|
|
285
|
+
}
|
|
286
|
+
for (const pending of [...this.pending.values()]) {
|
|
287
|
+
pending.reject(new Error('MQTT microservice transport closed before response.'));
|
|
288
|
+
}
|
|
247
289
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
this.listening = false;
|
|
251
|
-
if (this.internallyOwnedClient) {
|
|
252
|
-
this.client = undefined;
|
|
253
|
-
}
|
|
254
|
-
for (const pending of [...this.pending.values()]) {
|
|
255
|
-
pending.reject(new Error('MQTT microservice transport closed before response.'));
|
|
290
|
+
if (closeError) {
|
|
291
|
+
throw closeError;
|
|
256
292
|
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
|
|
293
|
+
})();
|
|
294
|
+
try {
|
|
295
|
+
await this.closePromise;
|
|
296
|
+
} finally {
|
|
297
|
+
this.closePromise = undefined;
|
|
260
298
|
}
|
|
261
299
|
}
|
|
262
300
|
async handleInbound(topic, rawMessage) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-streams-transport.d.ts","sourceRoot":"","sources":["../../src/transports/redis-streams-transport.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"redis-streams-transport.d.ts","sourceRoot":"","sources":["../../src/transports/redis-streams-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -149,6 +149,13 @@ export class RedisStreamsMicroserviceTransport {
|
|
|
149
149
|
});
|
|
150
150
|
}
|
|
151
151
|
void Promise.resolve().then(async () => {
|
|
152
|
+
if (!this.pending.has(requestId)) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
if (signal?.aborted) {
|
|
156
|
+
entry.reject(new Error('Redis Streams request aborted before publish.'));
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
152
159
|
if (this.closing) {
|
|
153
160
|
entry.reject(new Error('Redis Streams microservice transport closed before request dispatch.'));
|
|
154
161
|
return;
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import type { MicroserviceTransport, TransportHandler } from '../types.js';
|
|
2
|
-
|
|
2
|
+
/** Options for configuring the TCP microservice transport. */
|
|
3
|
+
export interface TcpMicroserviceTransportOptions {
|
|
4
|
+
/** Host interface used for listening and outbound loopback connections. */
|
|
3
5
|
host?: string;
|
|
6
|
+
/** Maximum newline-delimited frame size accepted by the transport. */
|
|
4
7
|
maxFrameBytes?: number;
|
|
8
|
+
/** TCP port to bind. Use `0` to request an ephemeral listener port. */
|
|
5
9
|
port: number;
|
|
10
|
+
/** Request timeout for outbound request-response sends. */
|
|
6
11
|
requestTimeoutMs?: number;
|
|
7
12
|
}
|
|
8
13
|
/**
|
|
@@ -13,15 +18,18 @@ interface TcpMicroserviceTransportOptions {
|
|
|
13
18
|
*/
|
|
14
19
|
export declare class TcpMicroserviceTransport implements MicroserviceTransport {
|
|
15
20
|
private readonly options;
|
|
21
|
+
/** Indicates that TCP owns the listener server and active socket resources it closes. */
|
|
22
|
+
readonly ownsResources = true;
|
|
16
23
|
private boundPort;
|
|
17
24
|
private closing;
|
|
18
25
|
private handler;
|
|
19
26
|
private listenPromise;
|
|
27
|
+
private server;
|
|
28
|
+
private serverPromise;
|
|
20
29
|
private readonly sockets;
|
|
21
30
|
private readonly host;
|
|
22
31
|
private readonly maxFrameBytes;
|
|
23
32
|
private readonly requestTimeoutMs;
|
|
24
|
-
private readonly server;
|
|
25
33
|
/**
|
|
26
34
|
* Creates a TCP transport bound to one host/port pair.
|
|
27
35
|
*
|
|
@@ -35,6 +43,7 @@ export declare class TcpMicroserviceTransport implements MicroserviceTransport {
|
|
|
35
43
|
* @returns A promise that resolves once the TCP server is listening.
|
|
36
44
|
*/
|
|
37
45
|
listen(handler: TransportHandler): Promise<void>;
|
|
46
|
+
private startListening;
|
|
38
47
|
/**
|
|
39
48
|
* Emits one fire-and-forget event over the TCP transport.
|
|
40
49
|
*
|
|
@@ -63,9 +72,9 @@ export declare class TcpMicroserviceTransport implements MicroserviceTransport {
|
|
|
63
72
|
private assertAcceptingOutbound;
|
|
64
73
|
private resolveConnectPort;
|
|
65
74
|
private resolveBoundPort;
|
|
75
|
+
private ensureServer;
|
|
66
76
|
private bindSocketParser;
|
|
67
77
|
private writeLine;
|
|
68
78
|
private serializeFrame;
|
|
69
79
|
}
|
|
70
|
-
export {};
|
|
71
80
|
//# sourceMappingURL=tcp-transport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tcp-transport.d.ts","sourceRoot":"","sources":["../../src/transports/tcp-transport.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAmB,MAAM,aAAa,CAAC;AAQ5F,
|
|
1
|
+
{"version":3,"file":"tcp-transport.d.ts","sourceRoot":"","sources":["../../src/transports/tcp-transport.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAmB,MAAM,aAAa,CAAC;AAQ5F,8DAA8D;AAC9D,MAAM,WAAW,+BAA+B;IAC9C,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAID;;;;;GAKG;AACH,qBAAa,wBAAyB,YAAW,qBAAqB;IAoBxD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAnBpC,yFAAyF;IACzF,QAAQ,CAAC,aAAa,QAAQ;IAE9B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAE1C;;;;OAIG;gBAC0B,OAAO,EAAE,+BAA+B;IAMrE;;;;;OAKG;IACG,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YAqBxC,cAAc;IAyB5B;;;;;;OAMG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D;;;;;;;OAOG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAMrF;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YA6Cd,mBAAmB;YA8BnB,cAAc;IA2G5B,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,gBAAgB;YAUV,YAAY;IAyB1B,OAAO,CAAC,gBAAgB;IAyCxB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,cAAc;CASvB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
/** Options for configuring the TCP microservice transport. */
|
|
2
|
+
|
|
2
3
|
const DEFAULT_MAX_FRAME_BYTES = 1_048_576;
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -8,19 +9,18 @@ const DEFAULT_MAX_FRAME_BYTES = 1_048_576;
|
|
|
8
9
|
* simple first-party microservice setups where both sides can share the same framing contract.
|
|
9
10
|
*/
|
|
10
11
|
export class TcpMicroserviceTransport {
|
|
12
|
+
/** Indicates that TCP owns the listener server and active socket resources it closes. */
|
|
13
|
+
ownsResources = true;
|
|
11
14
|
boundPort;
|
|
12
15
|
closing = false;
|
|
13
16
|
handler;
|
|
14
17
|
listenPromise;
|
|
18
|
+
server;
|
|
19
|
+
serverPromise;
|
|
15
20
|
sockets = new Set();
|
|
16
21
|
host;
|
|
17
22
|
maxFrameBytes;
|
|
18
23
|
requestTimeoutMs;
|
|
19
|
-
server = createServer(socket => {
|
|
20
|
-
this.sockets.add(socket);
|
|
21
|
-
this.bindSocketParser(socket, async packet => this.handleInboundPacket(socket, packet));
|
|
22
|
-
socket.once('close', () => this.sockets.delete(socket));
|
|
23
|
-
});
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* Creates a TCP transport bound to one host/port pair.
|
|
@@ -45,25 +45,35 @@ export class TcpMicroserviceTransport {
|
|
|
45
45
|
throw new Error('TcpMicroserviceTransport is closing. Wait for close() to complete before listen().');
|
|
46
46
|
}
|
|
47
47
|
this.handler = handler;
|
|
48
|
-
if (this.
|
|
48
|
+
if (this.listenPromise) {
|
|
49
|
+
await this.listenPromise;
|
|
49
50
|
return;
|
|
50
51
|
}
|
|
51
|
-
|
|
52
|
+
this.listenPromise = this.startListening();
|
|
53
|
+
try {
|
|
52
54
|
await this.listenPromise;
|
|
55
|
+
} finally {
|
|
56
|
+
this.listenPromise = undefined;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async startListening() {
|
|
60
|
+
const server = await this.ensureServer();
|
|
61
|
+
if (this.closing) {
|
|
62
|
+
throw new Error('TcpMicroserviceTransport is closing. Wait for close() to complete before listen().');
|
|
63
|
+
}
|
|
64
|
+
if (server.listening) {
|
|
53
65
|
return;
|
|
54
66
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
67
|
+
await new Promise((resolve, reject) => {
|
|
68
|
+
server.once('error', reject);
|
|
69
|
+
server.listen(this.options.port, this.host, () => {
|
|
70
|
+
server.off('error', reject);
|
|
59
71
|
this.boundPort = this.resolveBoundPort();
|
|
60
72
|
resolve();
|
|
61
73
|
});
|
|
62
74
|
});
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
} finally {
|
|
66
|
-
this.listenPromise = undefined;
|
|
75
|
+
if (this.closing) {
|
|
76
|
+
throw new Error('TcpMicroserviceTransport is closing. Wait for close() to complete before listen().');
|
|
67
77
|
}
|
|
68
78
|
}
|
|
69
79
|
|
|
@@ -109,19 +119,27 @@ export class TcpMicroserviceTransport {
|
|
|
109
119
|
*/
|
|
110
120
|
async close() {
|
|
111
121
|
this.closing = true;
|
|
122
|
+
let listenError;
|
|
112
123
|
if (this.listenPromise) {
|
|
113
|
-
|
|
124
|
+
try {
|
|
125
|
+
await this.listenPromise;
|
|
126
|
+
} catch (error) {
|
|
127
|
+
listenError = error;
|
|
128
|
+
}
|
|
114
129
|
}
|
|
115
130
|
for (const socket of this.sockets) {
|
|
116
131
|
socket.destroy();
|
|
117
132
|
}
|
|
118
133
|
this.sockets.clear();
|
|
119
|
-
if (!this.server
|
|
134
|
+
if (!this.server?.listening) {
|
|
120
135
|
this.boundPort = undefined;
|
|
136
|
+
if (listenError) {
|
|
137
|
+
throw listenError;
|
|
138
|
+
}
|
|
121
139
|
return;
|
|
122
140
|
}
|
|
123
141
|
await new Promise((resolve, reject) => {
|
|
124
|
-
this.server
|
|
142
|
+
this.server?.close(error => {
|
|
125
143
|
if (error) {
|
|
126
144
|
reject(error);
|
|
127
145
|
return;
|
|
@@ -130,6 +148,9 @@ export class TcpMicroserviceTransport {
|
|
|
130
148
|
});
|
|
131
149
|
});
|
|
132
150
|
this.boundPort = undefined;
|
|
151
|
+
if (listenError) {
|
|
152
|
+
throw listenError;
|
|
153
|
+
}
|
|
133
154
|
}
|
|
134
155
|
async handleInboundPacket(socket, packet) {
|
|
135
156
|
if (!this.handler) {
|
|
@@ -163,6 +184,9 @@ export class TcpMicroserviceTransport {
|
|
|
163
184
|
}
|
|
164
185
|
async sendWirePacket(packet, signal) {
|
|
165
186
|
const serializedPacket = this.serializeFrame(packet);
|
|
187
|
+
const {
|
|
188
|
+
Socket
|
|
189
|
+
} = await import('node:net');
|
|
166
190
|
return await new Promise((resolve, reject) => {
|
|
167
191
|
const socket = new Socket();
|
|
168
192
|
let settled = false;
|
|
@@ -255,7 +279,7 @@ export class TcpMicroserviceTransport {
|
|
|
255
279
|
if (this.closing) {
|
|
256
280
|
throw new Error(`TcpMicroserviceTransport is closing. Wait for close() to complete before ${operation}().`);
|
|
257
281
|
}
|
|
258
|
-
if (!this.server
|
|
282
|
+
if (!this.server?.listening || typeof this.boundPort !== 'number') {
|
|
259
283
|
throw new Error(`TcpMicroserviceTransport is not listening. Call listen() before ${operation}().`);
|
|
260
284
|
}
|
|
261
285
|
}
|
|
@@ -266,12 +290,35 @@ export class TcpMicroserviceTransport {
|
|
|
266
290
|
return this.options.port;
|
|
267
291
|
}
|
|
268
292
|
resolveBoundPort() {
|
|
269
|
-
const address = this.server
|
|
293
|
+
const address = this.server?.address();
|
|
270
294
|
if (address && typeof address === 'object') {
|
|
271
295
|
return address.port;
|
|
272
296
|
}
|
|
273
297
|
return this.options.port;
|
|
274
298
|
}
|
|
299
|
+
async ensureServer() {
|
|
300
|
+
if (this.server) {
|
|
301
|
+
return this.server;
|
|
302
|
+
}
|
|
303
|
+
this.serverPromise ??= (async () => {
|
|
304
|
+
const {
|
|
305
|
+
createServer
|
|
306
|
+
} = await import('node:net');
|
|
307
|
+
const server = createServer(socket => {
|
|
308
|
+
this.sockets.add(socket);
|
|
309
|
+
this.bindSocketParser(socket, async packet => this.handleInboundPacket(socket, packet));
|
|
310
|
+
socket.once('close', () => this.sockets.delete(socket));
|
|
311
|
+
});
|
|
312
|
+
this.server = server;
|
|
313
|
+
return server;
|
|
314
|
+
})();
|
|
315
|
+
try {
|
|
316
|
+
return await this.serverPromise;
|
|
317
|
+
} catch (error) {
|
|
318
|
+
this.serverPromise = undefined;
|
|
319
|
+
throw error;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
275
322
|
bindSocketParser(socket, onPacket) {
|
|
276
323
|
let buffer = '';
|
|
277
324
|
let bufferBytes = 0;
|
package/dist/types.d.ts
CHANGED
|
@@ -67,6 +67,8 @@ export interface MicroserviceTransport {
|
|
|
67
67
|
listenBidiStreaming?(handler: TransportBidiStreamHandler): void;
|
|
68
68
|
listenClientStreaming?(handler: TransportClientStreamHandler): void;
|
|
69
69
|
listenServerStreaming?(handler: TransportServerStreamHandler): void;
|
|
70
|
+
/** Whether this transport closes or destroys runtime resources it creates. */
|
|
71
|
+
readonly ownsResources?: boolean;
|
|
70
72
|
setLogger?(logger: MicroserviceTransportLogger): void;
|
|
71
73
|
send(pattern: string, payload: unknown, signal?: AbortSignal): Promise<unknown>;
|
|
72
74
|
serverStream?(pattern: string, payload: unknown, signal?: AbortSignal): AsyncIterable<unknown>;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"grpc",
|
|
14
14
|
"mqtt"
|
|
15
15
|
],
|
|
16
|
-
"version": "1.0.
|
|
16
|
+
"version": "1.0.4",
|
|
17
17
|
"private": false,
|
|
18
18
|
"license": "MIT",
|
|
19
19
|
"repository": {
|
|
@@ -68,9 +68,9 @@
|
|
|
68
68
|
"dist"
|
|
69
69
|
],
|
|
70
70
|
"dependencies": {
|
|
71
|
-
"@fluojs/core": "^1.0.
|
|
72
|
-
"@fluojs/di": "^1.0
|
|
73
|
-
"@fluojs/runtime": "^1.1.
|
|
71
|
+
"@fluojs/core": "^1.0.3",
|
|
72
|
+
"@fluojs/di": "^1.1.0",
|
|
73
|
+
"@fluojs/runtime": "^1.1.8"
|
|
74
74
|
},
|
|
75
75
|
"peerDependencies": {
|
|
76
76
|
"@grpc/grpc-js": "^1.0.0",
|