@service-bridge/node 0.1.3

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 (51) hide show
  1. package/README.md +854 -0
  2. package/biome.json +28 -0
  3. package/bun.lock +249 -0
  4. package/dist/express.d.ts +51 -0
  5. package/dist/express.js +129 -0
  6. package/dist/fastify.d.ts +43 -0
  7. package/dist/fastify.js +122 -0
  8. package/dist/index.js +34410 -0
  9. package/dist/trace.d.ts +19 -0
  10. package/http/dist/express.d.ts +51 -0
  11. package/http/dist/express.d.ts.map +1 -0
  12. package/http/dist/express.test.d.ts +2 -0
  13. package/http/dist/express.test.d.ts.map +1 -0
  14. package/http/dist/fastify.d.ts +43 -0
  15. package/http/dist/fastify.d.ts.map +1 -0
  16. package/http/dist/fastify.test.d.ts +2 -0
  17. package/http/dist/fastify.test.d.ts.map +1 -0
  18. package/http/dist/index.d.ts +7 -0
  19. package/http/dist/index.d.ts.map +1 -0
  20. package/http/dist/trace.d.ts +19 -0
  21. package/http/dist/trace.d.ts.map +1 -0
  22. package/http/dist/trace.test.d.ts +2 -0
  23. package/http/dist/trace.test.d.ts.map +1 -0
  24. package/http/package.json +48 -0
  25. package/http/src/express.test.ts +125 -0
  26. package/http/src/express.ts +209 -0
  27. package/http/src/fastify.test.ts +142 -0
  28. package/http/src/fastify.ts +159 -0
  29. package/http/src/index.ts +10 -0
  30. package/http/src/sdk-augment.d.ts +11 -0
  31. package/http/src/servicebridge.d.ts +23 -0
  32. package/http/src/trace.test.ts +97 -0
  33. package/http/src/trace.ts +56 -0
  34. package/http/tsconfig.json +17 -0
  35. package/http/tsconfig.test.json +6 -0
  36. package/package.json +65 -0
  37. package/sdk/dist/generated/servicebridge-package-definition.d.ts +4709 -0
  38. package/sdk/dist/grpc-client.d.ts +304 -0
  39. package/sdk/dist/grpc-client.test.d.ts +1 -0
  40. package/sdk/dist/index.d.ts +2 -0
  41. package/sdk/package.json +30 -0
  42. package/sdk/scripts/generate-proto.ts +65 -0
  43. package/sdk/src/generated/servicebridge-package-definition.ts +5198 -0
  44. package/sdk/src/grpc-client.d.ts +305 -0
  45. package/sdk/src/grpc-client.d.ts.map +1 -0
  46. package/sdk/src/grpc-client.test.ts +422 -0
  47. package/sdk/src/grpc-client.ts +2924 -0
  48. package/sdk/src/index.d.ts +3 -0
  49. package/sdk/src/index.d.ts.map +1 -0
  50. package/sdk/src/index.ts +29 -0
  51. package/sdk/tsconfig.json +13 -0
@@ -0,0 +1,305 @@
1
+ export interface TraceCtx {
2
+ traceId: string;
3
+ spanId: string;
4
+ }
5
+ export declare function getTraceContext(): TraceCtx | undefined;
6
+ export declare function runWithTraceContext<T>(ctx: TraceCtx, fn: () => T): T;
7
+ /** Тип поля Protobuf-сообщения */
8
+ export type RpcFieldType = "string" | "int32" | "int64" | "uint32" | "uint64" | "float" | "double" | "bool" | "bytes";
9
+ /** Определение одного поля схемы */
10
+ export interface RpcFieldDef {
11
+ /** Тип поля */
12
+ type: RpcFieldType;
13
+ /** Уникальный номер поля (field number в proto) */
14
+ id: number;
15
+ /** Повторяющееся поле (массив) */
16
+ repeated?: boolean;
17
+ }
18
+ /** Схема сообщения: имя поля → определение */
19
+ export type RpcSchema = Record<string, RpcFieldDef>;
20
+ /** Входная и выходная схемы для RPC-функции */
21
+ export interface RpcSchemaOpts {
22
+ input?: RpcSchema;
23
+ output?: RpcSchema;
24
+ }
25
+ export interface RetryPolicy {
26
+ retries?: number;
27
+ retryDelay?: number;
28
+ }
29
+ export type WorkerTransport = "tls";
30
+ export interface WorkerTLSOpts {
31
+ caCert?: string | Buffer;
32
+ cert?: string | Buffer;
33
+ key?: string | Buffer;
34
+ serverName?: string;
35
+ }
36
+ export interface ServiceBridgeOpts extends RetryPolicy {
37
+ timeout?: number;
38
+ /** @deprecated No longer used — discovery is now lazy via LookupFunction. */
39
+ discoveryTimeout?: number;
40
+ /**
41
+ * How often (ms) each SbResolver re-polls LookupFunction to discover new replicas.
42
+ * Dead replicas are detected instantly by gRPC subchannel health monitoring.
43
+ * Default: 10 000 ms.
44
+ */
45
+ discoveryRefreshMs?: number;
46
+ queueMaxSize?: number;
47
+ queueOverflow?: "drop-oldest" | "drop-newest" | "error";
48
+ heartbeatIntervalMs?: number;
49
+ workerTransport?: WorkerTransport;
50
+ /**
51
+ * Explicit mTLS cert materials for the worker gRPC server.
52
+ * When omitted, they are provisioned automatically from the server on `serve()`:
53
+ * the SDK generates a key pair locally and posts the public key to
54
+ * `POST /api/tls/provision` — the private key never leaves the process.
55
+ */
56
+ workerTLS?: WorkerTLSOpts;
57
+ /**
58
+ * Base URL for the HTTP admin API used for auto-provisioning and management.
59
+ * Defaults to the gRPC host on port 14444 (e.g. "http://127.0.0.1:14444").
60
+ */
61
+ adminUrl?: string;
62
+ /**
63
+ * When `true` (default), automatically patches `console.log / .info / .warn / .error / .debug`
64
+ * so that all console output is also shipped to ServiceBridge as structured log entries.
65
+ * Original console output is preserved (pass-through).
66
+ * Set to `false` to opt out.
67
+ */
68
+ captureLogs?: boolean;
69
+ }
70
+ export interface RpcOpts extends RetryPolicy {
71
+ timeout?: number;
72
+ traceId?: string;
73
+ parentSpanId?: string;
74
+ }
75
+ export interface EventOpts {
76
+ traceId?: string;
77
+ parentSpanId?: string;
78
+ idempotencyKey?: string;
79
+ headers?: Record<string, string>;
80
+ }
81
+ export interface HandleEventOpts {
82
+ concurrency?: number;
83
+ prefetch?: number;
84
+ groupName?: string;
85
+ retryPolicyJson?: string;
86
+ /** Server-side filter expression. Syntax: comma-separated AND conditions.
87
+ * Examples: "status=paid", "amount>100", "status=paid,amount>100", "region!=us-east" */
88
+ filterExpr?: string;
89
+ }
90
+ export interface HandleRpcOpts {
91
+ timeout?: number;
92
+ retryable?: boolean;
93
+ concurrency?: number;
94
+ /** Схема для авто-валидации и бинарного кодирования payload */
95
+ schema?: RpcSchemaOpts;
96
+ /**
97
+ * Whitelist of service names allowed to call this function.
98
+ * When set, the worker rejects Handle requests from services not in this list.
99
+ * Corresponds to the allowed_callers field on the service key.
100
+ * When mTLS is used, the x-caller-service header is cryptographically backed by the cert CN.
101
+ */
102
+ allowedCallers?: string[];
103
+ }
104
+ export interface ServeOpts {
105
+ host?: string;
106
+ instanceId?: string;
107
+ weight?: number;
108
+ transport?: WorkerTransport;
109
+ tls?: WorkerTLSOpts;
110
+ }
111
+ export interface ScheduleOpts {
112
+ cron?: string;
113
+ delay?: number;
114
+ timezone?: string;
115
+ misfire?: "fire_now" | "skip";
116
+ via?: "event" | "rpc" | "workflow";
117
+ retryPolicyJson?: string;
118
+ }
119
+ /** StreamWriter allows handlers to push incremental chunks during execution. */
120
+ export interface StreamWriter {
121
+ /**
122
+ * Append a chunk to the run's named stream.
123
+ * @param data - any JSON-serializable value
124
+ * @param key - stream key (default: "default"). Use named keys for multiple streams
125
+ * (e.g. "output", "log", "progress").
126
+ */
127
+ write(data: unknown, key?: string): Promise<void>;
128
+ /**
129
+ * Signal completion of a named stream (optional — server closes automatically when the run ends).
130
+ */
131
+ end(key?: string): Promise<void>;
132
+ }
133
+ export interface EventContext {
134
+ traceId: string;
135
+ spanId: string;
136
+ refs: Record<string, string>;
137
+ retry(delayMs?: number): void;
138
+ reject(reason: string): void;
139
+ /** Real-time stream writer. Use ctx.stream.write(data) to push chunks to subscribers. */
140
+ stream: StreamWriter;
141
+ }
142
+ /** Context passed as optional second argument to RPC handlers. */
143
+ export interface RpcContext {
144
+ traceId: string;
145
+ spanId: string;
146
+ /** Real-time stream writer. Use ctx.stream.write(data) to push chunks to subscribers. */
147
+ stream: StreamWriter;
148
+ }
149
+ type EventHandler = (payload: unknown, ctx: EventContext) => void | Promise<void>;
150
+ type FnHandler = (payload: unknown, ctx?: RpcContext) => unknown | Promise<unknown>;
151
+ export interface HttpSpan {
152
+ traceId: string;
153
+ spanId: string;
154
+ end(opts: {
155
+ statusCode?: number;
156
+ success?: boolean;
157
+ error?: string;
158
+ }): void;
159
+ }
160
+ export interface RunStreamEvent {
161
+ type: "chunk" | "run_complete";
162
+ runId: string;
163
+ key: string;
164
+ sequence: number;
165
+ data: unknown;
166
+ runStatus?: string;
167
+ }
168
+ export interface WatchRunOpts {
169
+ /** Filter by stream key. Empty = all keys. Default: "default". */
170
+ key?: string;
171
+ /** Replay chunks with sequence strictly greater than this value. 0 = full replay. */
172
+ fromSequence?: number;
173
+ }
174
+ export type ServiceBridgeErrorSeverity = "fatal" | "retriable" | "ignorable";
175
+ export declare class ServiceBridgeError extends Error {
176
+ code?: number;
177
+ component: string;
178
+ operation: string;
179
+ severity: ServiceBridgeErrorSeverity;
180
+ retryable: boolean;
181
+ cause?: unknown;
182
+ constructor(opts: {
183
+ message: string;
184
+ code?: number;
185
+ component: string;
186
+ operation: string;
187
+ severity: ServiceBridgeErrorSeverity;
188
+ cause?: unknown;
189
+ });
190
+ }
191
+ /**
192
+ * A single node in a workflow DAG.
193
+ *
194
+ * - `id` — unique step identifier; used in `deps` of other steps.
195
+ * - `deps` — IDs of steps that must succeed before this step runs.
196
+ * Empty array (default) = root step; receives the workflow input directly.
197
+ * - `if` — optional filter expression (same syntax as event filters).
198
+ * If it evaluates to false the step is skipped.
199
+ */
200
+ export type WorkflowStep = {
201
+ id: string;
202
+ type: "rpc";
203
+ ref: string;
204
+ deps?: string[];
205
+ if?: string;
206
+ timeoutMs?: number;
207
+ } | {
208
+ id: string;
209
+ type: "event";
210
+ ref: string;
211
+ deps?: string[];
212
+ if?: string;
213
+ } | {
214
+ id: string;
215
+ type: "event_wait";
216
+ ref: string;
217
+ deps?: string[];
218
+ if?: string;
219
+ timeoutMs?: number;
220
+ } | {
221
+ id: string;
222
+ type: "sleep";
223
+ durationMs: number;
224
+ deps?: string[];
225
+ if?: string;
226
+ } | {
227
+ id: string;
228
+ type: "workflow";
229
+ ref: string;
230
+ deps?: string[];
231
+ if?: string;
232
+ };
233
+ export interface ServiceBridgeService {
234
+ rpc<T = unknown>(fn: string, payload?: unknown, opts?: RpcOpts): Promise<T>;
235
+ event(topic: string, payload?: unknown, opts?: EventOpts): Promise<string>;
236
+ job(target: string, opts: ScheduleOpts): Promise<string>;
237
+ workflow(name: string, steps: WorkflowStep[]): Promise<string>;
238
+ cancelWorkflowRun(runId: string): Promise<void>;
239
+ /**
240
+ * Регистрирует обработчик RPC-функции.
241
+ * Если передан `opts.schema`, payload автоматически валидируется и
242
+ * кодируется/декодируется в бинарный Protobuf-формат вместо JSON.
243
+ * Схема также публикуется в server registry и используется вызывающей стороной.
244
+ */
245
+ handleRpc(fn: string, handler: FnHandler, opts?: HandleRpcOpts): ServiceBridgeService;
246
+ handleEvent(pattern: string, handler: EventHandler, opts?: HandleEventOpts): ServiceBridgeService;
247
+ serve(opts?: ServeOpts): Promise<void>;
248
+ stop(): void;
249
+ startHttpSpan(opts: {
250
+ method: string;
251
+ path: string;
252
+ traceId?: string;
253
+ parentSpanId?: string;
254
+ }): HttpSpan;
255
+ /**
256
+ * Register an HTTP endpoint in the ServiceBridge catalog.
257
+ * Call this once per route after your HTTP server is configured.
258
+ * The Express and Fastify adapters call this automatically — you only need
259
+ * this when integrating a different HTTP framework.
260
+ *
261
+ * @example
262
+ * await sb.registerHttpEndpoint({ method: 'GET', route: '/users/:id' });
263
+ */
264
+ registerHttpEndpoint(opts: {
265
+ /** HTTP method: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS */
266
+ method: string;
267
+ /** Route pattern including parameter placeholders, e.g. "/users/:id" */
268
+ route: string;
269
+ /** Stable identifier for this process instance. Defaults to a per-SDK UUID. */
270
+ instanceId?: string;
271
+ /** Address where this service can be reached, e.g. "http://10.0.0.1:3000" */
272
+ endpoint?: string;
273
+ /** Service names allowed to call this endpoint (RBAC). Default: [] (all allowed) */
274
+ allowedCallers?: string[];
275
+ }): Promise<void>;
276
+ /**
277
+ * Subscribe to a run's real-time stream.
278
+ * Replays existing chunks then forwards new ones until the run completes or the caller breaks.
279
+ *
280
+ * @example
281
+ * const stream = sb.watchRun(runId, { key: "output" });
282
+ * for await (const chunk of stream) {
283
+ * process.stdout.write(chunk.data.token);
284
+ * }
285
+ */
286
+ watchRun(runId: string, opts?: WatchRunOpts): AsyncIterable<RunStreamEvent>;
287
+ /** @internal Used by captureConsole to forward intercepted log lines. */
288
+ readonly _log: (level: string, msg: string, attrs?: Record<string, string>) => void;
289
+ }
290
+ export declare function servicebridge(url: string, serviceKey: string, service?: string, globalOpts?: ServiceBridgeOpts): ServiceBridgeService;
291
+ /**
292
+ * Intercepts `console.log / .info / .warn / .error / .debug` so that every
293
+ * call is **also** shipped to ServiceBridge as a structured log entry.
294
+ *
295
+ * Original console output is preserved (pass-through) — nothing changes on
296
+ * the terminal side. Trace correlation works automatically via AsyncLocalStorage.
297
+ *
298
+ * @example
299
+ * const svc = servicebridge("localhost:14445", "my-key", "orders");
300
+ * captureConsole(svc); // call once at startup
301
+ * console.log("order created"); // appears on stdout AND in ServiceBridge
302
+ */
303
+ export declare function captureConsole(svc: ServiceBridgeService): void;
304
+ export {};
305
+ //# sourceMappingURL=grpc-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grpc-client.d.ts","sourceRoot":"","sources":["grpc-client.ts"],"names":[],"mappings":"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"}