@fluojs/microservices 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.ko.md +182 -0
- package/README.md +179 -0
- package/dist/decorators.d.ts +51 -0
- package/dist/decorators.d.ts.map +1 -0
- package/dist/decorators.js +106 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/metadata.d.ts +9 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +48 -0
- package/dist/module.d.ts +23 -0
- package/dist/module.d.ts.map +1 -0
- package/dist/module.js +55 -0
- package/dist/service.d.ts +116 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +550 -0
- package/dist/status.d.ts +30 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +79 -0
- package/dist/tokens.d.ts +7 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +4 -0
- package/dist/transports/event-handler-logger.d.ts +3 -0
- package/dist/transports/event-handler-logger.d.ts.map +1 -0
- package/dist/transports/event-handler-logger.js +3 -0
- package/dist/transports/grpc-transport.d.ts +193 -0
- package/dist/transports/grpc-transport.d.ts.map +1 -0
- package/dist/transports/grpc-transport.js +1035 -0
- package/dist/transports/kafka-transport.d.ts +77 -0
- package/dist/transports/kafka-transport.d.ts.map +1 -0
- package/dist/transports/kafka-transport.js +289 -0
- package/dist/transports/mqtt-transport.d.ts +124 -0
- package/dist/transports/mqtt-transport.d.ts.map +1 -0
- package/dist/transports/mqtt-transport.js +460 -0
- package/dist/transports/nats-transport.d.ts +92 -0
- package/dist/transports/nats-transport.d.ts.map +1 -0
- package/dist/transports/nats-transport.js +218 -0
- package/dist/transports/rabbitmq-transport.d.ts +77 -0
- package/dist/transports/rabbitmq-transport.d.ts.map +1 -0
- package/dist/transports/rabbitmq-transport.js +263 -0
- package/dist/transports/redis-streams-transport.d.ts +136 -0
- package/dist/transports/redis-streams-transport.d.ts.map +1 -0
- package/dist/transports/redis-streams-transport.js +482 -0
- package/dist/transports/redis-transport.d.ts +73 -0
- package/dist/transports/redis-transport.d.ts.map +1 -0
- package/dist/transports/redis-transport.js +152 -0
- package/dist/transports/tcp-transport.d.ts +66 -0
- package/dist/transports/tcp-transport.d.ts.map +1 -0
- package/dist/transports/tcp-transport.js +283 -0
- package/dist/types.d.ts +105 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/package.json +105 -0
package/dist/tokens.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Compatibility injection token for the programmatic microservice facade. */
|
|
2
|
+
export const MICROSERVICE = Symbol.for('fluo.microservices.service');
|
|
3
|
+
/** Injection token for the configured transport and runtime module options. */
|
|
4
|
+
export const MICROSERVICE_OPTIONS = Symbol.for('fluo.microservices.options');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-handler-logger.d.ts","sourceRoot":"","sources":["../../src/transports/event-handler-logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE/D,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,2BAA2B,GAAG,SAAS,EAC/C,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,OAAO,GACb,IAAI,CAEN"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import type { MicroserviceTransport, MicroserviceTransportLogger, ServerStreamWriter, TransportBidiStreamHandler, TransportClientStreamHandler, TransportHandler, TransportServerStreamHandler } from '../types.js';
|
|
2
|
+
type DynamicImport = (specifier: string) => Promise<unknown>;
|
|
3
|
+
interface GrpcMetadataLike {
|
|
4
|
+
get(key: string): unknown;
|
|
5
|
+
set(key: string, value: string): void;
|
|
6
|
+
}
|
|
7
|
+
interface GrpcServerCredentialsFactoryLike {
|
|
8
|
+
createInsecure(): unknown;
|
|
9
|
+
}
|
|
10
|
+
interface GrpcServerLike {
|
|
11
|
+
addService(serviceDefinition: unknown, implementation: Record<string, unknown>): void;
|
|
12
|
+
bindAsync(address: string, credentials: unknown, callback: (error: Error | null, port: number) => void): void;
|
|
13
|
+
forceShutdown?(): void;
|
|
14
|
+
start(): void;
|
|
15
|
+
tryShutdown?(callback: (error?: Error) => void): void;
|
|
16
|
+
}
|
|
17
|
+
interface GrpcClientLike {
|
|
18
|
+
close?(): void;
|
|
19
|
+
[methodName: string]: unknown;
|
|
20
|
+
}
|
|
21
|
+
interface GrpcJsLike {
|
|
22
|
+
Metadata: new () => GrpcMetadataLike;
|
|
23
|
+
Server: new () => GrpcServerLike;
|
|
24
|
+
credentials: GrpcServerCredentialsFactoryLike;
|
|
25
|
+
loadPackageDefinition(packageDefinition: unknown): unknown;
|
|
26
|
+
makeGenericClientConstructor(serviceDefinition: unknown, serviceName: string, options?: unknown): new (address: string, credentials: unknown, options?: unknown) => GrpcClientLike;
|
|
27
|
+
status?: {
|
|
28
|
+
CANCELLED?: number;
|
|
29
|
+
DEADLINE_EXCEEDED?: number;
|
|
30
|
+
INTERNAL?: number;
|
|
31
|
+
INVALID_ARGUMENT?: number;
|
|
32
|
+
UNIMPLEMENTED?: number;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
interface ProtoLoaderLike {
|
|
36
|
+
loadSync(protoPath: string, options?: Record<string, unknown>): unknown;
|
|
37
|
+
}
|
|
38
|
+
/** Options for configuring the gRPC microservice transport. */
|
|
39
|
+
export interface GrpcMicroserviceTransportOptions {
|
|
40
|
+
protoPath: string;
|
|
41
|
+
packageName: string;
|
|
42
|
+
url: string;
|
|
43
|
+
services?: readonly string[];
|
|
44
|
+
requestTimeoutMs?: number;
|
|
45
|
+
loaderOptions?: Record<string, unknown>;
|
|
46
|
+
channelOptions?: Record<string, unknown>;
|
|
47
|
+
credentials?: unknown;
|
|
48
|
+
kindMetadataKey?: string;
|
|
49
|
+
messageKindMetadataValue?: string;
|
|
50
|
+
eventKindMetadataValue?: string;
|
|
51
|
+
grpc?: GrpcJsLike;
|
|
52
|
+
protoLoader?: ProtoLoaderLike;
|
|
53
|
+
moduleLoader?: DynamicImport;
|
|
54
|
+
server?: GrpcServerLike;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* gRPC transport for unary, event-style unary, and all streaming microservice patterns.
|
|
58
|
+
*
|
|
59
|
+
* The adapter loads protobuf definitions at runtime, registers service implementations on a gRPC server,
|
|
60
|
+
* and exposes matching unary/server-stream/client-stream/bidi-stream client calls through one transport surface.
|
|
61
|
+
*/
|
|
62
|
+
export declare class GrpcMicroserviceTransport implements MicroserviceTransport {
|
|
63
|
+
private readonly options;
|
|
64
|
+
private bidiStreamHandler;
|
|
65
|
+
private clientStreamHandler;
|
|
66
|
+
private closing;
|
|
67
|
+
private readonly clients;
|
|
68
|
+
private grpc;
|
|
69
|
+
private handler;
|
|
70
|
+
private logger;
|
|
71
|
+
private listening;
|
|
72
|
+
private listenPromise;
|
|
73
|
+
private readonly pending;
|
|
74
|
+
private packageRoot;
|
|
75
|
+
private readonly requestTimeoutMs;
|
|
76
|
+
private readonly server;
|
|
77
|
+
private resolvedServer;
|
|
78
|
+
private serverStreamHandler;
|
|
79
|
+
/**
|
|
80
|
+
* Creates a gRPC transport bound to one protobuf package and server endpoint.
|
|
81
|
+
*
|
|
82
|
+
* @param options Protobuf loading, server binding, and client-call settings for the transport.
|
|
83
|
+
*/
|
|
84
|
+
constructor(options: GrpcMicroserviceTransportOptions);
|
|
85
|
+
setLogger(logger: MicroserviceTransportLogger): void;
|
|
86
|
+
/**
|
|
87
|
+
* Loads protobuf services, registers handlers, and binds the gRPC server.
|
|
88
|
+
*
|
|
89
|
+
* @param handler Runtime callback invoked for inbound unary message and event packets.
|
|
90
|
+
* @returns A promise that resolves once the gRPC server is bound and ready.
|
|
91
|
+
*/
|
|
92
|
+
listen(handler: TransportHandler): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Sends one unary request-response message through gRPC.
|
|
95
|
+
*
|
|
96
|
+
* @param pattern `<Service>.<Method>` pattern identifying the remote unary RPC.
|
|
97
|
+
* @param payload Serializable request payload.
|
|
98
|
+
* @param signal Optional abort signal used to cancel the call.
|
|
99
|
+
* @returns The decoded unary RPC response.
|
|
100
|
+
*/
|
|
101
|
+
send(pattern: string, payload: unknown, signal?: AbortSignal): Promise<unknown>;
|
|
102
|
+
/**
|
|
103
|
+
* Emits one event-style unary call through gRPC.
|
|
104
|
+
*
|
|
105
|
+
* @param pattern `<Service>.<Method>` pattern identifying the remote RPC.
|
|
106
|
+
* @param payload Serializable event payload.
|
|
107
|
+
* @returns A promise that resolves once the remote RPC acknowledges the call.
|
|
108
|
+
*/
|
|
109
|
+
emit(pattern: string, payload: unknown): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* Registers the runtime callback used for inbound server-streaming RPCs.
|
|
112
|
+
*
|
|
113
|
+
* @param handler Runtime callback invoked for inbound server-stream requests.
|
|
114
|
+
*/
|
|
115
|
+
listenServerStreaming(handler: TransportServerStreamHandler): void;
|
|
116
|
+
/**
|
|
117
|
+
* Registers the runtime callback used for inbound client-streaming RPCs.
|
|
118
|
+
*
|
|
119
|
+
* @param handler Runtime callback invoked for inbound client-stream requests.
|
|
120
|
+
*/
|
|
121
|
+
listenClientStreaming(handler: TransportClientStreamHandler): void;
|
|
122
|
+
/**
|
|
123
|
+
* Registers the runtime callback used for inbound bidirectional-streaming RPCs.
|
|
124
|
+
*
|
|
125
|
+
* @param handler Runtime callback invoked for inbound bidi-stream requests.
|
|
126
|
+
*/
|
|
127
|
+
listenBidiStreaming(handler: TransportBidiStreamHandler): void;
|
|
128
|
+
/**
|
|
129
|
+
* Opens an outbound server-streaming call.
|
|
130
|
+
*
|
|
131
|
+
* @param pattern `<Service>.<Method>` pattern identifying the remote server-stream RPC.
|
|
132
|
+
* @param payload Serializable request payload.
|
|
133
|
+
* @param signal Optional abort signal used to cancel the stream.
|
|
134
|
+
* @returns An async iterable of streamed response messages.
|
|
135
|
+
*/
|
|
136
|
+
serverStream(pattern: string, payload: unknown, signal?: AbortSignal): AsyncIterable<unknown>;
|
|
137
|
+
/**
|
|
138
|
+
* Opens an outbound client-streaming call.
|
|
139
|
+
*
|
|
140
|
+
* @param pattern `<Service>.<Method>` pattern identifying the remote client-stream RPC.
|
|
141
|
+
* @param signal Optional abort signal used to cancel the stream.
|
|
142
|
+
* @returns A writer for request messages and a promise for the final response payload.
|
|
143
|
+
*/
|
|
144
|
+
clientStream(pattern: string, signal?: AbortSignal): {
|
|
145
|
+
writer: ServerStreamWriter;
|
|
146
|
+
result: Promise<unknown>;
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* Opens an outbound bidirectional-streaming call.
|
|
150
|
+
*
|
|
151
|
+
* @param pattern `<Service>.<Method>` pattern identifying the remote bidi-stream RPC.
|
|
152
|
+
* @param signal Optional abort signal used to cancel the stream.
|
|
153
|
+
* @returns A response reader paired with a request writer.
|
|
154
|
+
*/
|
|
155
|
+
bidiStream(pattern: string, signal?: AbortSignal): {
|
|
156
|
+
reader: AsyncIterable<unknown>;
|
|
157
|
+
writer: ServerStreamWriter;
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Shuts down the gRPC server and closes any cached service clients.
|
|
161
|
+
*
|
|
162
|
+
* @returns A promise that resolves once shutdown cleanup completes.
|
|
163
|
+
*/
|
|
164
|
+
close(): Promise<void>;
|
|
165
|
+
private buildServiceImplementation;
|
|
166
|
+
private handleInboundUnary;
|
|
167
|
+
private handleInboundServerStream;
|
|
168
|
+
private handleInboundClientStream;
|
|
169
|
+
private handleInboundBidiStream;
|
|
170
|
+
private callUnary;
|
|
171
|
+
private callServerStream;
|
|
172
|
+
private callClientStream;
|
|
173
|
+
private callBidiStream;
|
|
174
|
+
private getServiceRuntime;
|
|
175
|
+
private resolvePackageRoot;
|
|
176
|
+
private resolveTargetServices;
|
|
177
|
+
private resolveServiceConstructor;
|
|
178
|
+
private isServiceConstructor;
|
|
179
|
+
private bindServer;
|
|
180
|
+
private shutdownServer;
|
|
181
|
+
private resolveGrpc;
|
|
182
|
+
private resolveProtoLoader;
|
|
183
|
+
private loadPeerModule;
|
|
184
|
+
private createMetadata;
|
|
185
|
+
private resolveInboundKind;
|
|
186
|
+
private kindMetadataValue;
|
|
187
|
+
private mapGrpcHandlerError;
|
|
188
|
+
private createGrpcError;
|
|
189
|
+
private resolveGrpcStatusCode;
|
|
190
|
+
private logEventHandlerFailure;
|
|
191
|
+
}
|
|
192
|
+
export {};
|
|
193
|
+
//# sourceMappingURL=grpc-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grpc-transport.d.ts","sourceRoot":"","sources":["../../src/transports/grpc-transport.ts"],"names":[],"mappings":"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"}
|