@superdurable/dex 1.8.0 → 1.10.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.
@@ -1,9 +1,24 @@
1
1
  import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
2
- import { type CallOptions, type ChannelCredentials, Client, type ClientOptions, type ClientReadableStream, type ClientUnaryCall, type handleServerStreamingCall, type handleUnaryCall, type Metadata, type ServiceError, type UntypedServiceImplementation } from "@grpc/grpc-js";
2
+ import { type CallOptions, type ChannelCredentials, Client, type ClientDuplexStream, type ClientOptions, type ClientReadableStream, type ClientUnaryCall, type handleBidiStreamingCall, type handleServerStreamingCall, type handleUnaryCall, type Metadata, type ServiceError, type UntypedServiceImplementation } from "@grpc/grpc-js";
3
3
  import { Duration } from "./google/protobuf/duration.js";
4
4
  import { Empty } from "./google/protobuf/empty.js";
5
5
  import { NullValue } from "./google/protobuf/struct.js";
6
6
  export declare const protobufPackage = "dex";
7
+ /** Explains why a Worker declined a task. */
8
+ export declare enum PollWorkerTaskRejectReason {
9
+ /** POLL_WORKER_TASK_REJECT_REASON_UNSPECIFIED - No rejection reason was supplied. */
10
+ POLL_WORKER_TASK_REJECT_REASON_UNSPECIFIED = 0,
11
+ /** POLL_WORKER_TASK_REJECT_REASON_NO_CAPACITY - All Worker execution slots are occupied. */
12
+ POLL_WORKER_TASK_REJECT_REASON_NO_CAPACITY = 1,
13
+ UNRECOGNIZED = -1
14
+ }
15
+ /** Distinguishes absence of a Worker from loss of an assigned Worker. */
16
+ export declare enum DispatchTaskErrorReason {
17
+ DISPATCH_TASK_ERROR_REASON_UNSPECIFIED = 0,
18
+ DISPATCH_TASK_ERROR_REASON_NO_WORKER_AVAILABLE = 1,
19
+ DISPATCH_TASK_ERROR_REASON_WORKER_DISCONNECTED = 2,
20
+ UNRECOGNIZED = -1
21
+ }
7
22
  export declare enum IndexType {
8
23
  INDEX_TYPE_UNSPECIFIED = 0,
9
24
  /** INDEX_TYPE_KEYWORD - Default for string/object when type is omitted. */
@@ -199,6 +214,200 @@ export interface ServerInfo {
199
214
  /** Newest protocol version implemented by this Server. */
200
215
  currentProtocolVersion: number;
201
216
  }
217
+ /** Carries one Worker frame on a pull stream. Register must be the first frame. */
218
+ export interface PollWorkerTaskRequest {
219
+ frame: //
220
+ /** Starts this queue stream; no other frame may precede registration. */
221
+ {
222
+ $case: "register";
223
+ value: PollWorkerTaskRegister;
224
+ } | //
225
+ /** Reports task progress or its final result. */
226
+ {
227
+ $case: "taskFrame";
228
+ value: PollWorkerTaskFrame;
229
+ } | //
230
+ /** Declines an assigned task when the Worker has no capacity. */
231
+ {
232
+ $case: "reject";
233
+ value: PollWorkerTaskReject;
234
+ } | //
235
+ /** Acknowledges a server liveness check. */
236
+ {
237
+ $case: "pong";
238
+ value: PollWorkerTaskPong;
239
+ } | undefined;
240
+ }
241
+ /** Registers one queue stream for a Worker process. */
242
+ export interface PollWorkerTaskRegister {
243
+ /** Names this stream's queue: app_worker_id or one declared flow_type. */
244
+ queue: string;
245
+ /** Identifies this Worker process across reconnects; a restart uses a new ID. */
246
+ appWorkerId: string;
247
+ /** Lists the Flow types this Worker can execute. */
248
+ flowTypes: string[];
249
+ /** Identifies the SDK implementation for diagnostics. */
250
+ sdkName: string;
251
+ /** Identifies the SDK release for diagnostics. */
252
+ sdkVersion: string;
253
+ }
254
+ /** Carries a task's heartbeat, stream write, result, or Worker error. */
255
+ export interface PollWorkerTaskFrame {
256
+ /** Matches the task_id sent by Dex on this stream. */
257
+ taskId: string;
258
+ output: //
259
+ /** Includes heartbeat, stream write, and final result variants. */
260
+ {
261
+ $case: "waitFor";
262
+ value: InvokeWaitForMethodOutput;
263
+ } | //
264
+ /** Includes heartbeat, stream write, and final result variants. */
265
+ {
266
+ $case: "execute";
267
+ value: InvokeExecuteMethodOutput;
268
+ } | //
269
+ /** Completes an RPC task. */
270
+ {
271
+ $case: "rpc";
272
+ value: InvokeWorkerRPCResponse;
273
+ } | //
274
+ /** Ends the task with a Worker error. */
275
+ {
276
+ $case: "workerError";
277
+ value: WorkerErrorResponse;
278
+ } | undefined;
279
+ }
280
+ /** Declines a task so Dex can assign it to another available Worker stream. */
281
+ export interface PollWorkerTaskReject {
282
+ /** Matches the declined task on this stream. */
283
+ taskId: string;
284
+ /** Explains why the Worker cannot accept the task. */
285
+ reason: PollWorkerTaskRejectReason;
286
+ }
287
+ /** Acknowledges a server Ping on the same stream. */
288
+ export interface PollWorkerTaskPong {
289
+ }
290
+ /** Carries one server frame on a pull stream. */
291
+ export interface PollWorkerTaskResponse {
292
+ frame: //
293
+ /** Confirms that Dex accepted this stream's queue registration. */
294
+ {
295
+ $case: "registered";
296
+ value: PollWorkerTaskRegistered;
297
+ } | //
298
+ /** Assigns work to the registered Worker. */
299
+ {
300
+ $case: "task";
301
+ value: PollWorkerTask;
302
+ } | //
303
+ /** Requests cancellation of the assigned task. */
304
+ {
305
+ $case: "cancelTask";
306
+ value: PollWorkerTaskCancelTask;
307
+ } | //
308
+ /** Requests a reconnect after the current task finishes. */
309
+ {
310
+ $case: "reconnect";
311
+ value: PollWorkerTaskReconnect;
312
+ } | //
313
+ /** Checks whether an idle stream remains responsive. */
314
+ {
315
+ $case: "ping";
316
+ value: PollWorkerTaskPing;
317
+ } | undefined;
318
+ }
319
+ /** Confirms that Dex accepted the queue registration. */
320
+ export interface PollWorkerTaskRegistered {
321
+ }
322
+ /** Assigns one task to this stream until its final result, error, or rejection. */
323
+ export interface PollWorkerTask {
324
+ /** Identifies the assignment for result and cancellation frames. */
325
+ taskId: string;
326
+ /** Bounds task execution, including Worker processing time. */
327
+ deadline: Date | undefined;
328
+ request: //
329
+ /** Runs a Step's WaitFor method. */
330
+ {
331
+ $case: "waitFor";
332
+ value: InvokeWaitForMethodRequest;
333
+ } | //
334
+ /** Runs a Step's Execute method. */
335
+ {
336
+ $case: "execute";
337
+ value: InvokeExecuteMethodRequest;
338
+ } | //
339
+ /** Runs a Worker RPC. */
340
+ {
341
+ $case: "rpc";
342
+ value: InvokeWorkerRPCRequest;
343
+ } | undefined;
344
+ }
345
+ /** Requests cancellation of the task currently assigned to this stream. */
346
+ export interface PollWorkerTaskCancelTask {
347
+ /** Matches the task currently assigned on this stream. */
348
+ taskId: string;
349
+ }
350
+ /** Asks the Worker to finish its task and reconnect for queue ownership changes or shutdown. */
351
+ export interface PollWorkerTaskReconnect {
352
+ /** Explains why Dex needs a new queue stream. */
353
+ reason: string;
354
+ }
355
+ /** Checks that an idle pull stream remains responsive. */
356
+ export interface PollWorkerTaskPing {
357
+ }
358
+ /** Describes one task dispatched to a Dex task queue. */
359
+ export interface DispatchTaskRequest {
360
+ /** Selects the initial queue: a sticky Worker ID or a Flow type. */
361
+ queue: string;
362
+ /** Names the Flow type queue after a sticky wait expires. */
363
+ fallbackQueue: string;
364
+ /** Identifies the Flow for Worker affinity within a Flow type queue. */
365
+ flowId: string;
366
+ /** Limits waiting on a sticky queue before trying fallback_queue. */
367
+ stickyWait: Duration | undefined;
368
+ /** Limits total waiting for a Worker to accept the task. */
369
+ dispatchWait: Duration | undefined;
370
+ /** Bounds task execution, including Worker processing time. */
371
+ deadline: Date | undefined;
372
+ /** Identifies this dispatch across Worker and server streams. */
373
+ taskId: string;
374
+ request: {
375
+ $case: "waitFor";
376
+ value: InvokeWaitForMethodRequest;
377
+ } | {
378
+ $case: "execute";
379
+ value: InvokeExecuteMethodRequest;
380
+ } | {
381
+ $case: "rpc";
382
+ value: InvokeWorkerRPCRequest;
383
+ } | undefined;
384
+ }
385
+ /** Relays Worker output, then ends with a result, Worker error, or dispatch error. */
386
+ export interface DispatchTaskResponse {
387
+ output: {
388
+ $case: "waitFor";
389
+ value: InvokeWaitForMethodOutput;
390
+ } | {
391
+ $case: "execute";
392
+ value: InvokeExecuteMethodOutput;
393
+ } | {
394
+ $case: "rpc";
395
+ value: InvokeWorkerRPCResponse;
396
+ } | {
397
+ $case: "workerError";
398
+ value: WorkerErrorResponse;
399
+ } | {
400
+ $case: "dispatchError";
401
+ value: DispatchTaskError;
402
+ } | undefined;
403
+ /** Identifies the Worker that produced the final result or Worker error. */
404
+ servedByAppWorkerId: string;
405
+ }
406
+ /** Reports a failure before Dex receives a Worker result. */
407
+ export interface DispatchTaskError {
408
+ reason: DispatchTaskErrorReason;
409
+ detail: string;
410
+ }
202
411
  export interface Value {
203
412
  kind: //
204
413
  /** Hydrate from blob storage, then replace with string_value. */
@@ -360,6 +569,8 @@ export interface WorkerTarget {
360
569
  /** Plaintext gRPC dial target, not an HTTP URL. */
361
570
  address: string;
362
571
  isHeadlessAddress: boolean;
572
+ /** Routes work through a connected pull Worker; mutually exclusive with address. */
573
+ isPullMode: boolean;
363
574
  }
364
575
  export interface StartFlowRequest {
365
576
  flowId: string;
@@ -926,6 +1137,8 @@ export interface WorkerErrorResponse {
926
1137
  errorType: string;
927
1138
  stackTrace: string;
928
1139
  retryAfterSeconds: number;
1140
+ /** Pull Workers set the gRPC code push mode would return; push mode uses its transport status. */
1141
+ grpcStatus: number;
929
1142
  }
930
1143
  export interface InternalActivityError {
931
1144
  serverDetail: string;
@@ -1259,6 +1472,8 @@ export interface ContinueAsNewDump {
1259
1472
  /** Stored values only; index metadata remains in backend search attributes. */
1260
1473
  attributes: KV[];
1261
1474
  pendingAttributeSyncItems: AttributeSyncItem[];
1475
+ /** Retains the last serving Worker's sticky queue across a Flow continuation. */
1476
+ dexTaskQueue: string;
1262
1477
  }
1263
1478
  export interface ContinueAsNewDump_ChannelReceivedEntry {
1264
1479
  key: string;
@@ -1280,8 +1495,6 @@ export interface InterpreterWorkflowInput {
1280
1495
  isResumeFromContinueAsNew: boolean;
1281
1496
  continueAsNewInput: ContinueAsNewInput | undefined;
1282
1497
  timeoutHandlerOptions: FlowTimeoutHandlerOptions | undefined;
1283
- /** Tenant of a multi-tenant Flow, set at start and copied to SubFlows. Empty in single-tenant mode. */
1284
- tenantId: string;
1285
1498
  }
1286
1499
  export interface InterpreterWorkflowOutput {
1287
1500
  stepCompletionOutputs: StepCompletionOutput[];
@@ -1295,17 +1508,27 @@ export interface BlobStoreCleanupWorkflowOutput {
1295
1508
  export interface InvokeWaitForMethodActivityInput {
1296
1509
  workerTarget: WorkerTarget | undefined;
1297
1510
  request: InvokeWaitForMethodRequest | undefined;
1298
- /** Tenant of the dispatching Flow; empty in single-tenant mode. */
1299
- tenantId: string;
1511
+ /** Selects the sticky Worker queue; empty selects the request's Flow type queue. */
1512
+ dexTaskQueue: string;
1513
+ /** Limits total waiting for a pull Worker to accept this attempt. */
1514
+ dispatchWait: Duration | undefined;
1515
+ /** Limits waiting on the sticky queue before the Flow type queue. */
1516
+ stickyWait: Duration | undefined;
1300
1517
  }
1301
1518
  export interface InvokeWaitForMethodActivityOutput {
1302
1519
  response: InvokeWaitForMethodResponse | undefined;
1520
+ /** Identifies the Worker that completed this pull task for sticky routing. */
1521
+ servedByAppWorkerId: string;
1303
1522
  }
1304
1523
  export interface InvokeExecuteMethodActivityInput {
1305
1524
  workerTarget: WorkerTarget | undefined;
1306
1525
  request: InvokeExecuteMethodRequest | undefined;
1307
- /** Tenant of the dispatching Flow; empty in single-tenant mode. */
1308
- tenantId: string;
1526
+ /** Selects the sticky Worker queue; empty selects the request's Flow type queue. */
1527
+ dexTaskQueue: string;
1528
+ /** Limits total waiting for a pull Worker to accept this attempt. */
1529
+ dispatchWait: Duration | undefined;
1530
+ /** Limits waiting on the sticky queue before the Flow type queue. */
1531
+ stickyWait: Duration | undefined;
1309
1532
  }
1310
1533
  export interface RecoveryErrorInfo {
1311
1534
  detail: string;
@@ -1320,6 +1543,8 @@ export interface InternalLocalStepActivityFailure {
1320
1543
  }
1321
1544
  export interface InvokeExecuteMethodActivityOutput {
1322
1545
  response: InvokeExecuteMethodResponse | undefined;
1546
+ /** Identifies the Worker that completed this pull task for sticky routing. */
1547
+ servedByAppWorkerId: string;
1323
1548
  }
1324
1549
  export interface DumpFlowForContinueAsNewActivityInput {
1325
1550
  request: ContinueAsNewDumpRequest | undefined;
@@ -1330,13 +1555,13 @@ export interface DumpFlowForContinueAsNewActivityOutput {
1330
1555
  export interface InvokeWorkerRPCActivityInput {
1331
1556
  rpcPrep: PrepareRpcQueryResponse | undefined;
1332
1557
  request: InvokeRPCRequest | undefined;
1333
- /** Tenant of the Flow; empty in single-tenant mode. */
1334
- tenantId: string;
1335
1558
  }
1336
1559
  export interface InvokeWorkerRPCActivityOutput {
1337
1560
  response: InvokeWorkerRPCResponse | undefined;
1338
1561
  /** Correlates this local Activity result with its InvokeRpc Update. */
1339
1562
  requestId: string;
1563
+ /** Identifies the Worker that completed this pull task for sticky routing. */
1564
+ servedByAppWorkerId: string;
1340
1565
  }
1341
1566
  export interface CleanupBlobStoreActivityInput {
1342
1567
  storeId: string;
@@ -1359,8 +1584,6 @@ export interface StartSubFlowActivityInput {
1359
1584
  parentFlowConfig: FlowConfig | undefined;
1360
1585
  /** Source Step; activity context supplies parent Flow and run IDs. */
1361
1586
  parentStepExecutionId: string;
1362
- /** Tenant of the parent Flow, inherited by the SubFlow; empty in single-tenant mode. */
1363
- tenantId: string;
1364
1587
  }
1365
1588
  export interface StartSubFlowActivityOutput {
1366
1589
  immediateFlowResult: FlowResult | undefined;
@@ -1422,6 +1645,8 @@ export interface PrepareRpcQueryResponse {
1422
1645
  loadedAttributeMapInstances: string[];
1423
1646
  loadedChannelNames: string[];
1424
1647
  loadedChannelMapInstances: string[];
1648
+ /** Selects the last Worker queue for RPC dispatch. */
1649
+ dexTaskQueue: string;
1425
1650
  }
1426
1651
  export interface PrepareRpcQueryResponse_ChannelInfosEntry {
1427
1652
  key: string;
@@ -1467,6 +1692,20 @@ export interface StepExecutionNumbers {
1467
1692
  numbers: number[];
1468
1693
  }
1469
1694
  export declare const ServerInfo: MessageFns<ServerInfo>;
1695
+ export declare const PollWorkerTaskRequest: MessageFns<PollWorkerTaskRequest>;
1696
+ export declare const PollWorkerTaskRegister: MessageFns<PollWorkerTaskRegister>;
1697
+ export declare const PollWorkerTaskFrame: MessageFns<PollWorkerTaskFrame>;
1698
+ export declare const PollWorkerTaskReject: MessageFns<PollWorkerTaskReject>;
1699
+ export declare const PollWorkerTaskPong: MessageFns<PollWorkerTaskPong>;
1700
+ export declare const PollWorkerTaskResponse: MessageFns<PollWorkerTaskResponse>;
1701
+ export declare const PollWorkerTaskRegistered: MessageFns<PollWorkerTaskRegistered>;
1702
+ export declare const PollWorkerTask: MessageFns<PollWorkerTask>;
1703
+ export declare const PollWorkerTaskCancelTask: MessageFns<PollWorkerTaskCancelTask>;
1704
+ export declare const PollWorkerTaskReconnect: MessageFns<PollWorkerTaskReconnect>;
1705
+ export declare const PollWorkerTaskPing: MessageFns<PollWorkerTaskPing>;
1706
+ export declare const DispatchTaskRequest: MessageFns<DispatchTaskRequest>;
1707
+ export declare const DispatchTaskResponse: MessageFns<DispatchTaskResponse>;
1708
+ export declare const DispatchTaskError: MessageFns<DispatchTaskError>;
1470
1709
  export declare const Value: MessageFns<Value>;
1471
1710
  export declare const EncodedObject: MessageFns<EncodedObject>;
1472
1711
  export declare const AttributeWrite: MessageFns<AttributeWrite>;
@@ -2073,6 +2312,79 @@ export declare const WorkerServiceClient: {
2073
2312
  service: typeof WorkerServiceService;
2074
2313
  serviceName: string;
2075
2314
  };
2315
+ /** Hosted by Dex server; pull Workers open one queue stream for at most one task at a time. */
2316
+ export type WorkerTaskServiceService = typeof WorkerTaskServiceService;
2317
+ export declare const WorkerTaskServiceService: {
2318
+ /** Exchanges registration, task, result, and control frames for one Dex task queue. */
2319
+ readonly pollWorkerTask: {
2320
+ readonly path: "/dex.WorkerTaskService/PollWorkerTask";
2321
+ readonly requestStream: true;
2322
+ readonly responseStream: true;
2323
+ readonly requestSerialize: (value: PollWorkerTaskRequest) => Buffer;
2324
+ readonly requestDeserialize: (value: Buffer) => PollWorkerTaskRequest;
2325
+ readonly responseSerialize: (value: PollWorkerTaskResponse) => Buffer;
2326
+ readonly responseDeserialize: (value: Buffer) => PollWorkerTaskResponse;
2327
+ };
2328
+ };
2329
+ export interface WorkerTaskServiceServer extends UntypedServiceImplementation {
2330
+ /** Exchanges registration, task, result, and control frames for one Dex task queue. */
2331
+ pollWorkerTask: handleBidiStreamingCall<PollWorkerTaskRequest, PollWorkerTaskResponse>;
2332
+ }
2333
+ export interface WorkerTaskServiceClient extends Client {
2334
+ /** Exchanges registration, task, result, and control frames for one Dex task queue. */
2335
+ pollWorkerTask(): ClientDuplexStream<PollWorkerTaskRequest, PollWorkerTaskResponse>;
2336
+ pollWorkerTask(options: Partial<CallOptions>): ClientDuplexStream<PollWorkerTaskRequest, PollWorkerTaskResponse>;
2337
+ pollWorkerTask(metadata: Metadata, options?: Partial<CallOptions>): ClientDuplexStream<PollWorkerTaskRequest, PollWorkerTaskResponse>;
2338
+ }
2339
+ export declare const WorkerTaskServiceClient: {
2340
+ new (address: string, credentials: ChannelCredentials, options?: Partial<ClientOptions>): WorkerTaskServiceClient;
2341
+ service: typeof WorkerTaskServiceService;
2342
+ serviceName: string;
2343
+ };
2344
+ /** Hosted on the internal listener; server instances route tasks and Worker streams to queue owners. */
2345
+ export type MatchingServiceService = typeof MatchingServiceService;
2346
+ export declare const MatchingServiceService: {
2347
+ /** Streams Worker output frames and a final result or dispatch error. */
2348
+ readonly dispatchTask: {
2349
+ readonly path: "/dex.MatchingService/DispatchTask";
2350
+ readonly requestStream: false;
2351
+ readonly responseStream: true;
2352
+ readonly requestSerialize: (value: DispatchTaskRequest) => Buffer;
2353
+ readonly requestDeserialize: (value: Buffer) => DispatchTaskRequest;
2354
+ readonly responseSerialize: (value: DispatchTaskResponse) => Buffer;
2355
+ readonly responseDeserialize: (value: Buffer) => DispatchTaskResponse;
2356
+ };
2357
+ /** Proxies a Worker's queue stream from its receiving instance to the queue owner. */
2358
+ readonly forwardPollWorkerTask: {
2359
+ readonly path: "/dex.MatchingService/ForwardPollWorkerTask";
2360
+ readonly requestStream: true;
2361
+ readonly responseStream: true;
2362
+ readonly requestSerialize: (value: PollWorkerTaskRequest) => Buffer;
2363
+ readonly requestDeserialize: (value: Buffer) => PollWorkerTaskRequest;
2364
+ readonly responseSerialize: (value: PollWorkerTaskResponse) => Buffer;
2365
+ readonly responseDeserialize: (value: Buffer) => PollWorkerTaskResponse;
2366
+ };
2367
+ };
2368
+ export interface MatchingServiceServer extends UntypedServiceImplementation {
2369
+ /** Streams Worker output frames and a final result or dispatch error. */
2370
+ dispatchTask: handleServerStreamingCall<DispatchTaskRequest, DispatchTaskResponse>;
2371
+ /** Proxies a Worker's queue stream from its receiving instance to the queue owner. */
2372
+ forwardPollWorkerTask: handleBidiStreamingCall<PollWorkerTaskRequest, PollWorkerTaskResponse>;
2373
+ }
2374
+ export interface MatchingServiceClient extends Client {
2375
+ /** Streams Worker output frames and a final result or dispatch error. */
2376
+ dispatchTask(request: DispatchTaskRequest, options?: Partial<CallOptions>): ClientReadableStream<DispatchTaskResponse>;
2377
+ dispatchTask(request: DispatchTaskRequest, metadata?: Metadata, options?: Partial<CallOptions>): ClientReadableStream<DispatchTaskResponse>;
2378
+ /** Proxies a Worker's queue stream from its receiving instance to the queue owner. */
2379
+ forwardPollWorkerTask(): ClientDuplexStream<PollWorkerTaskRequest, PollWorkerTaskResponse>;
2380
+ forwardPollWorkerTask(options: Partial<CallOptions>): ClientDuplexStream<PollWorkerTaskRequest, PollWorkerTaskResponse>;
2381
+ forwardPollWorkerTask(metadata: Metadata, options?: Partial<CallOptions>): ClientDuplexStream<PollWorkerTaskRequest, PollWorkerTaskResponse>;
2382
+ }
2383
+ export declare const MatchingServiceClient: {
2384
+ new (address: string, credentials: ChannelCredentials, options?: Partial<ClientOptions>): MatchingServiceClient;
2385
+ service: typeof MatchingServiceService;
2386
+ serviceName: string;
2387
+ };
2076
2388
  /** Server-internal only (interpreter CAN activity → API). Not SDK-facing. */
2077
2389
  export type InternalServiceService = typeof InternalServiceService;
2078
2390
  export declare const InternalServiceService: {