@mark1russell7/service 0.5.0 → 0.5.2

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/build/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { a as backoffDelay, i as backoffBand, n as DelayBand, o as backoffProblems, r as Jitter, t as Backoff } from "./backoff-B-jGWVDm.js";
2
2
  import { a as realClock, i as platformClock, n as Clock, r as PlatformClockOptions, t as Cancel } from "./clock-D-38uH_z.js";
3
3
  import { Heartbeat, HeartbeatOptions, detectionTime, heartbeat } from "./heartbeat.js";
4
- import { $ as heartbeatDetection, A as LifecycleEvent, B as Gate, C as ProbeAnswer, D as Outcome, E as CheckFn, F as CooperativeFloor, G as Transport, H as RepeatSignal, I as Coupling, J as Span, K as FailsBy, L as Dependency, M as Recorder, N as Check, O as Result, P as Controller, Q as failSpan, R as ExitCodes, S as HealthVerdict, T as StartOptions, U as ServiceDescription, V as Phase, W as Step, X as asDebounce, Y as Timing, Z as asWindow, _ as RequestOptions, _t as Operation, a as PhaseContext, at as ExitSignal, b as CheckVerdict, c as STAGES, ct as PROCESS_TRIGGERS, d as TransportImpl, dt as ProcessTrigger, et as recoverSpan, f as cooperativeAbortAt, ft as isExitCode, g as RequestFn, gt as Idempotency, h as RequestEvent, ht as processPortOf, i as LifecycleState, it as EXIT_SIGNALS, j as MachineName, l as ShutdownOptions, lt as ProcessHost, m as RequestEnd, mt as nodeProcess, n as HealthServer, nt as RoutePattern, o as PhaseWork, ot as ExitTrigger, p as stageRank, pt as isExitSignal, q as Poll, r as Lifecycle, rt as RouteRequest, s as RunOptions, st as HostStream, t as DependencyHandle, tt as OperationOf, u as Stage, ut as ProcessPort, v as RequestStream, vt as mayReissue, w as ProbeKind, x as Health, y as RequestWork, z as FORMAT } from "./lifecycle-DIj4YGmO.js";
5
- import { a as WatchdogSpec, c as Profile, d as kubernetes, f as localDev, i as Watchdog, l as daemon, n as ServiceBuilder, o as watchdog, r as service, s as PodTiming, t as ControllerBuilder, u as ephemeral } from "./builder-B_q-JeW8.js";
4
+ import { $ as failSpan, A as LifecycleEvent, B as Gate, C as ProbeAnswer, Ct as Operation, D as Outcome, E as CheckFn, F as CooperativeFloor, G as Step, H as Phase, I as Coupling, J as Poll, K as Transport, L as Dependency, M as Recorder, N as Check, O as Result, P as Controller, Q as asWindow, R as ExitCodes, S as HealthVerdict, St as Idempotency, T as StartOptions, U as RepeatSignal, V as MessageTrigger, W as ServiceDescription, X as Timing, Y as Span, Z as asDebounce, _ as RequestOptions, _t as isExitSignal, a as PhaseContext, at as EXIT_SIGNALS, b as CheckVerdict, bt as nodeProcess, c as STAGES, ct as ExitTrigger, d as TransportImpl, dt as PROCESS_TRIGGERS, et as heartbeatDetection, f as cooperativeAbortAt, ft as ProcessHost, g as RequestFn, gt as isExitCode, h as RequestEvent, ht as embeddedProcess, i as LifecycleState, it as RouteRequest, j as MachineName, l as ShutdownOptions, lt as HostStream, m as RequestEnd, mt as ProcessTrigger, n as HealthServer, nt as OperationOf, o as PhaseWork, ot as EmbeddedProcess, p as stageRank, pt as ProcessPort, q as FailsBy, r as Lifecycle, rt as RoutePattern, s as RunOptions, st as ExitSignal, t as DependencyHandle, tt as recoverSpan, u as Stage, ut as MessageShape, v as RequestStream, vt as isMessageShape, w as ProbeKind, wt as mayReissue, x as Health, xt as processPortOf, y as RequestWork, yt as matchesMessage, z as FORMAT } from "./lifecycle-DjEpgpRk.js";
5
+ import { a as WatchdogSpec, c as Profile, d as kubernetes, f as localDev, i as Watchdog, l as daemon, n as ServiceBuilder, o as watchdog, r as service, s as PodTiming, t as ControllerBuilder, u as ephemeral } from "./builder-BzjhWk2E.js";
6
6
  import { Extent, Quantity } from "@mark1russell7/quantity";
7
7
  import { replay } from "@mark1russell7/algebra/replay";
8
8
  import { Machine } from "@mark1russell7/algebra";
@@ -86,7 +86,8 @@ export declare const verdictOf: (rule: Rule, bind: Binding, evaluated: readonly
86
86
  * The scenario binds the symbols of the platform (preStop, grace, the probes of the kubelet,
87
87
  * propagation) and of each dependency (its failover time, the idle close of its server). Thus the
88
88
  * service gives the inequalities, and the scenario gives the values. A rule about a client
89
- * applies one time for each dependency.
89
+ * applies one time for each dependency. A rule about a consumer applies one time for each consumer
90
+ * and each worker.
90
91
  */
91
92
  /** A scenario gives the values of the platform and of each dependency, by the `symbol@hop` of the law. */
92
93
  interface Scenario {
@@ -103,6 +104,8 @@ interface Scenario {
103
104
  };
104
105
  /** These are the values of each dependency, by its name: failover_time@dependency, server_idle_close@server. */
105
106
  readonly dependencies?: Readonly<Record<string, Readonly<Record<string, Extent>>>> | undefined;
107
+ /** These are the values of the source of each consumer and worker, by its name and by the `symbol@hop` of the law: lease_duration@broker. */
108
+ readonly transports?: Readonly<Record<string, Readonly<Record<string, Extent>>>> | undefined;
106
109
  }
107
110
  /** A finding is the verdict of one rule for one scope: the service, or the client of a dependency. */
108
111
  interface Finding {
@@ -125,12 +128,246 @@ export declare const serviceBindings: (svc: ServiceDescription, scenario: Scenar
125
128
  /** This identifier is the rule of the findings about a field that the declaration does not give. */
126
129
  export declare const DECLARATION_RULE = "declaration";
127
130
  /**
128
- * This function applies each service rule to a declaration and a scenario: one time for the
129
- * service, and one time for each client. It also gives a finding for each necessary field that the
130
- * description does not give (`DECLARATION_RULE`).
131
+ * This function applies each service rule to a declaration and a scenario. A rule applies one time
132
+ * for the service, for each client, or for each consumer and worker. The function also gives a
133
+ * finding for each necessary field that the description does not give (`DECLARATION_RULE`).
131
134
  */
132
135
  export declare const lint: (svc: ServiceDescription, scenario: Scenario, rules: readonly Rule[]) => Finding[];
133
136
  //#endregion
137
+ //#region src/units.d.ts
138
+ /**
139
+ * A unit request names the route of each unit of work in the request tracking of the service. Then
140
+ * the service admits, counts, drains and cuts each unit as it does each request (`life.request`).
141
+ * The controller declares the route, thus its idempotency tells if a cut unit can go again.
142
+ */
143
+ interface UnitRequest<U> {
144
+ /** This name is the controller that declares the route. */
145
+ readonly controller: string;
146
+ /** This name is the route of each unit, or a function that gives it from the unit. A route can match a route pattern. */
147
+ readonly route: string | ((unit: U) => string);
148
+ /** This function gives the detail of a unit, for the function of a route pattern. */
149
+ readonly detail?: ((unit: U) => unknown) | undefined;
150
+ }
151
+ //#endregion
152
+ //#region src/worker.d.ts
153
+ /**
154
+ * These are the knobs of a worker loop, by the names of the ordering law where the law has them.
155
+ * The loop has no defaults, thus each knob is necessary. A bound that nobody gives is "infinite".
156
+ */
157
+ interface WorkerKnobs {
158
+ /**
159
+ * This time is the sleep of a lane, from the end of one iteration to the start of the next. A
160
+ * time without a bound starts the next iteration only at `wake()`.
161
+ */
162
+ readonly worker_sleep: Extent;
163
+ /**
164
+ * This time is the most that one iteration can take. At it, the loop aborts the signal of the
165
+ * iteration, and a throw after it is a failure. The law reads it as `unit_processing_time@consumer` (O20).
166
+ */
167
+ readonly unit_processing_time: Extent;
168
+ /** This time is the delay after the first failure in sequence. The delay is two times longer after each failure, with a jitter up to this time. */
169
+ readonly retry_base: Quantity;
170
+ /** This time is the most that one delay can be, before its jitter. */
171
+ readonly retry_cap: Quantity;
172
+ /** This time bounds the close: the end of the iterations after their abort, and then the teardown. */
173
+ readonly close_bound: Quantity;
174
+ /** This count (the unit `count`) is the number of lanes. Each lane does its iterations one at a time. */
175
+ readonly concurrency: Quantity;
176
+ /** The other knobs go to the declaration, for example `lease_duration@broker`. The loop does not read them. */
177
+ readonly [knob: string]: Extent;
178
+ }
179
+ /** An iteration context is what the loop gives each iteration. */
180
+ interface IterationContext<S> {
181
+ /** This signal aborts at the cooperative abort of the drain, at the bound of the iteration, and at the close. */
182
+ readonly signal: AbortSignal;
183
+ /** This signal aborts when the intake stops. A long iteration can end at it in its own way. */
184
+ readonly intake: AbortSignal;
185
+ /** This value is the state that the setup gave, or undefined without a setup. */
186
+ readonly state: S;
187
+ /** This number is the lane of the iteration, from 0. */
188
+ readonly lane: number;
189
+ /** This count is the number of failures in sequence of the lane before this iteration. */
190
+ readonly failures: number;
191
+ /** This lifecycle is the lifecycle that the loop got at its start. */
192
+ readonly life: Lifecycle;
193
+ }
194
+ /** These options make a worker loop. Each function can give a promise. */
195
+ interface WorkerLoopOptions<S> {
196
+ /** This function makes the state of the loop at its start, for example a connection. Its signal is the signal of the service. */
197
+ readonly setup?: ((signal: AbortSignal) => S | PromiseLike<S>) | undefined;
198
+ /**
199
+ * This function does one iteration. When it gives `"more"`, the next iteration of its lane starts
200
+ * after a zero sleep on the clock. A throw is a failure, and the lane then waits its backoff.
201
+ */
202
+ readonly iteration: (context: IterationContext<S>) => unknown;
203
+ /** This function releases the state at the close. It occurs each time that the setup started, with undefined after a failed setup. */
204
+ readonly teardown?: ((state: S | undefined) => void | PromiseLike<void>) | undefined;
205
+ /** This clock is the clock of the lifecycle. The sleeps, the backoffs and the bounds use it. The default is `realClock`. */
206
+ readonly clock?: Clock | undefined;
207
+ /** This function gives the random numbers of the jitter, from 0 up to 1. The default is `Math.random`. */
208
+ readonly random?: (() => number) | undefined;
209
+ /**
210
+ * This route puts each iteration through `life.request`: the service then admits it, counts it,
211
+ * drains it and can cut it. The unit of a route function is the number of the lane.
212
+ */
213
+ readonly request?: UnitRequest<number> | undefined;
214
+ /** This function receives each failure, with the count of failures in sequence of its lane. A refusal of the service is a failure too. */
215
+ readonly onError?: ((error: unknown, failures: number) => void) | undefined;
216
+ }
217
+ /** A worker loop is a transport of the lifecycle whose work is a loop of iterations (S6 A10). */
218
+ interface WorkerLoop extends TransportImpl {
219
+ /** These knobs go to the declaration of the worker: `svc.worker(name, loop.knobs, loop)`. */
220
+ readonly knobs: WorkerKnobs;
221
+ /**
222
+ * This method ends the sleep of each lane at once, for example when new work is ready. It does
223
+ * not end a backoff. It gives false after the intake stops.
224
+ */
225
+ wake(): boolean;
226
+ /** This method gives the problems of the knobs in a declaration: the close bound and the bound of an iteration against the caps. */
227
+ problems(description: ServiceDescription): string[];
228
+ }
229
+ /**
230
+ * This function makes a worker loop as a transport (S6 A10). It has a setup, an iteration and a
231
+ * teardown, and each lane does its iterations one at a time.
232
+ * - The start does the setup. A failed setup gets its teardown, and the start throws.
233
+ * - The first iteration of each lane comes after the startup ends. Each sleep and each backoff is on the clock.
234
+ * - `stopIntake` starts no new iteration, and it ends each sleep and each backoff.
235
+ * - `drain` waits for each iteration in flight until the deadline, and gives it the cooperative
236
+ * abort. A throw after that abort is not a failure.
237
+ * - `close` aborts each iteration, waits for its end, and does the teardown, all in `close_bound`.
238
+ */
239
+ export declare const workerLoop: <S = undefined>(knobs: WorkerKnobs, options: WorkerLoopOptions<S>) => WorkerLoop;
240
+ //#endregion
241
+ //#region src/queue.d.ts
242
+ /**
243
+ * These are the knobs of a queue drain, by the names of the ordering law where the law has them.
244
+ * The drain has no defaults, thus each knob is necessary. A bound that nobody gives is "infinite".
245
+ */
246
+ interface QueueKnobs {
247
+ /** This time is the wait after a take that gives no job, before the next take. A time without a bound waits for `wake()`. */
248
+ readonly queue_poll_interval: Extent;
249
+ /**
250
+ * This time is the most that one job can take. At it, the drain aborts the signal of the job, and
251
+ * a throw after it is a failure. The law reads it as `unit_processing_time@consumer` (O20).
252
+ */
253
+ readonly unit_processing_time: Extent;
254
+ /** This time is the delay after the first failed take in sequence, or after a refusal of the service. The delay is two times longer after each one. */
255
+ readonly retry_base: Quantity;
256
+ /** This time is the most that one delay can be, before its jitter. */
257
+ readonly retry_cap: Quantity;
258
+ /** This time bounds the close: the end of the jobs after their abort, and then the close of the source. */
259
+ readonly close_bound: Quantity;
260
+ /** This count (the unit `count`) is the most jobs in flight at one time. A count without a bound takes each job that comes. */
261
+ readonly concurrency: Extent;
262
+ /** The other knobs go to the declaration, for example `lease_duration@broker`. The drain does not read them. */
263
+ readonly [knob: string]: Extent;
264
+ }
265
+ /**
266
+ * A job source gives the jobs of a queue drain:
267
+ * - A function takes the next job, or gives null when no job is ready. Its signal aborts when the intake stops.
268
+ * - An async iterable gives the jobs in sequence. The drain asks for the next job only when it has a free slot.
269
+ * At the stop of the intake, the drain ends the iterator through `return()`.
270
+ */
271
+ type JobSource<J> = ((signal: AbortSignal) => J | null | undefined | PromiseLike<J | null | undefined>) | AsyncIterable<J>;
272
+ /**
273
+ * A job action is what the drain does with a job that failed:
274
+ * - `requeue`: the job goes back on the queue.
275
+ * - `reject`: the job leaves the queue without a success, for example to the dead-letter route of the queue.
276
+ * - `ack`: the job leaves the queue, as a poison message does.
277
+ */
278
+ type JobAction = "requeue" | "reject" | "ack";
279
+ /** A job failure is a job whose handler failed, with the count of its deliveries, 1 at the first. */
280
+ interface JobFailure<J> {
281
+ readonly job: J;
282
+ readonly error: unknown;
283
+ readonly delivery: number;
284
+ }
285
+ /** A redelivery policy gives the action for a job that failed. The queue declares it, and it has no default (S6 A11). */
286
+ type RedeliveryPolicy<J> = (failure: JobFailure<J>) => JobAction;
287
+ /**
288
+ * A requeue cause tells why a job goes back on the queue:
289
+ * - `failed`: the redelivery policy sent it back after a failure.
290
+ * - `unstarted`: the drain took the job and did not start it, because its intake stopped or the service refused it.
291
+ * - `cut`: the shutdown cut the job, and its route declares that it can go again.
292
+ */
293
+ type RequeueCause = "failed" | "unstarted" | "cut";
294
+ /** A job settle is how the drain tells the queue the end of each job. Each function can give a promise. */
295
+ interface JobSettle<J> {
296
+ /** This function removes the job from the queue: a success, or the action `ack`. */
297
+ ack(job: J): void | PromiseLike<void>;
298
+ /** This function puts the job back on the queue, or hands it back to the queue at the stop. */
299
+ requeue(job: J, cause: RequeueCause): void | PromiseLike<void>;
300
+ /** This function removes the job from the queue without a success: the action `reject`, or a cut job that cannot go again. */
301
+ reject(job: J, error: unknown): void | PromiseLike<void>;
302
+ /**
303
+ * This function gives the count of deliveries of a job from the queue, 1 at the first. The queue
304
+ * knows it, for example `x-delivery-count` of RabbitMQ or `ApproximateReceiveCount` of SQS. A
305
+ * queue in memory counts for itself. The drain has no default, because a broker gives a new object at each delivery.
306
+ */
307
+ delivery(job: J): number;
308
+ }
309
+ /** A job context is what the drain gives the handler of each job. */
310
+ interface JobContext {
311
+ /** This signal aborts at the cooperative abort of the drain, at the bound of the job, and at the close. */
312
+ readonly signal: AbortSignal;
313
+ /** This signal aborts when the intake stops. */
314
+ readonly intake: AbortSignal;
315
+ /** This count is the delivery of the job, 1 at the first. */
316
+ readonly delivery: number;
317
+ /** This lifecycle is the lifecycle that the drain got at its start. */
318
+ readonly life: Lifecycle;
319
+ }
320
+ /** These options make a queue drain. Each function can give a promise. */
321
+ interface QueueDrainOptions<J> {
322
+ readonly source: JobSource<J>;
323
+ /** This function does one job. A throw is a failure, and the redelivery policy then gives its action. */
324
+ readonly handle: (job: J, context: JobContext) => unknown;
325
+ readonly settle: JobSettle<J>;
326
+ /** This policy gives the action for each failed job. `redeliverOnce` gives the policy of S6 A11. */
327
+ readonly redelivery: RedeliveryPolicy<J>;
328
+ /** This function closes the source at the close, after the jobs end: for example, it closes a channel. */
329
+ readonly close?: (() => void | PromiseLike<void>) | undefined;
330
+ /** This clock is the clock of the lifecycle. The polls, the backoffs and the bounds use it. The default is `realClock`. */
331
+ readonly clock?: Clock | undefined;
332
+ /** This function gives the random numbers of the jitter, from 0 up to 1. The default is `Math.random`. */
333
+ readonly random?: (() => number) | undefined;
334
+ /**
335
+ * This route puts each job through `life.request`: the service then admits it, counts it, drains
336
+ * it and can cut it. The idempotency of the route tells if a cut job goes back on the queue.
337
+ */
338
+ readonly request?: UnitRequest<J> | undefined;
339
+ /**
340
+ * This function receives each failure: of a take, of a job, of a settle and of a policy. It also
341
+ * receives the end of a source while the intake is open. The job is undefined for a take and for that end.
342
+ */
343
+ readonly onError?: ((error: unknown, job: J | undefined) => void) | undefined;
344
+ }
345
+ /** A queue drain is a transport of the lifecycle whose work is the jobs of a queue (S6 A11). */
346
+ interface QueueDrain extends TransportImpl {
347
+ /** These knobs go to the declaration of the consumer: `svc.consumer(name, drain.knobs, drain)`. */
348
+ readonly knobs: QueueKnobs;
349
+ /** This method ends the wait of a poll at once, for example when a job comes. It gives false after the intake stops. */
350
+ wake(): boolean;
351
+ /** This method gives the problems of the knobs in a declaration: the close bound and the bound of a job against the caps. */
352
+ problems(description: ServiceDescription): string[];
353
+ }
354
+ /**
355
+ * This function gives the redelivery policy of S6 A11. A poison message gets `ack`. Each other job
356
+ * goes back on the queue after its first failure, one time. After a later failure, `then` gives the
357
+ * action: the declared policy of the queue.
358
+ */
359
+ export declare const redeliverOnce: <J>(then: JobAction | RedeliveryPolicy<J>, poison?: (error: unknown, job: J) => boolean) => RedeliveryPolicy<J>;
360
+ /**
361
+ * This function makes a queue drain as a transport (S6 A11). One taker takes the jobs from the
362
+ * source while a slot is free, and each job operates in its slot.
363
+ * - A success gets `ack`. A failure gets the action of the redelivery policy.
364
+ * - `stopIntake` takes no new job, and a job that the drain took and did not start goes back (`requeue`, `unstarted`).
365
+ * - `drain` waits for each job in flight until the deadline, and gives it the cooperative abort.
366
+ * - `close` aborts each job, waits for its end, and closes the source, all in `close_bound`. A job
367
+ * that does not end in the bound gets `reject`.
368
+ */
369
+ export declare const queueDrain: <J>(knobs: QueueKnobs, options: QueueDrainOptions<J>) => QueueDrain;
370
+ //#endregion
134
371
  //#region src/machines.d.ts
135
372
  /**
136
373
  * The startup gate opens one time. The lifecycle moves it from `closed` to `starting` while its
@@ -171,5 +408,5 @@ export declare const drainMachine: (description: ServiceDescription) => Machine;
171
408
  /** These are the static machines of the runtime, by the name that their events carry. */
172
409
  export declare const MACHINES: Readonly<Record<Exclude<MachineName, "drain" | "client">, Machine>>;
173
410
  //#endregion
174
- export { type Backoff, type Binding, type Bound, type Cancel, type Check, type CheckFn, type CheckVerdict, type Clock, type Controller, type ControllerBuilder, type CooperativeFloor, type Coupling, type DelayBand, type Dependency, type DependencyHandle, EXIT_SIGNALS, type Evaluated, type ExitCodes, type ExitSignal, type ExitTrigger, FORMAT, type FailsBy, type Finding, type Gate, type Health, type HealthServer, type HealthVerdict, type Heartbeat, type HeartbeatOptions, type HostStream, type Idempotency, type Inequality, type Jitter, type Lifecycle, type LifecycleEvent, type LifecycleState, type MachineName, type Operation, type OperationOf, type Outcome, PROCESS_TRIGGERS, type Phase, type PhaseContext, type PhaseWork, type PlatformClockOptions, type PodTiming, type Poll, type ProbeAnswer, type ProbeKind, type ProcessHost, type ProcessPort, type ProcessTrigger, type Profile, type Recorder, type RepeatSignal, type RequestEnd, type RequestEvent, type RequestFn, type RequestOptions, type RequestStream, type RequestWork, type Result, type RoutePattern, type RouteRequest, type Rule, type RunOptions, STAGES, type Scenario, type ServiceBuilder, type ServiceDescription, type ShutdownOptions, type Side, type Span, type Stage, type StartOptions, type Step, type Term, type Timing, type Transport, type TransportImpl, type Verdict, type Watchdog, type WatchdogSpec, asDebounce, asWindow, backoffBand, backoffDelay, backoffProblems, cooperativeAbortAt, daemon, detectionTime, ephemeral, failSpan, heartbeat, heartbeatDetection, isExitCode, isExitSignal, kubernetes, localDev, mayReissue, nodeProcess, platformClock, processPortOf, realClock, recoverSpan, replay, service, stageRank, watchdog };
411
+ export { type Backoff, type Binding, type Bound, type Cancel, type Check, type CheckFn, type CheckVerdict, type Clock, type Controller, type ControllerBuilder, type CooperativeFloor, type Coupling, type DelayBand, type Dependency, type DependencyHandle, EXIT_SIGNALS, type EmbeddedProcess, type Evaluated, type ExitCodes, type ExitSignal, type ExitTrigger, FORMAT, type FailsBy, type Finding, type Gate, type Health, type HealthServer, type HealthVerdict, type Heartbeat, type HeartbeatOptions, type HostStream, type Idempotency, type Inequality, type IterationContext, type Jitter, type JobAction, type JobContext, type JobFailure, type JobSettle, type JobSource, type Lifecycle, type LifecycleEvent, type LifecycleState, type MachineName, type MessageShape, type MessageTrigger, type Operation, type OperationOf, type Outcome, PROCESS_TRIGGERS, type Phase, type PhaseContext, type PhaseWork, type PlatformClockOptions, type PodTiming, type Poll, type ProbeAnswer, type ProbeKind, type ProcessHost, type ProcessPort, type ProcessTrigger, type Profile, type QueueDrain, type QueueDrainOptions, type QueueKnobs, type Recorder, type RedeliveryPolicy, type RepeatSignal, type RequestEnd, type RequestEvent, type RequestFn, type RequestOptions, type RequestStream, type RequestWork, type RequeueCause, type Result, type RoutePattern, type RouteRequest, type Rule, type RunOptions, STAGES, type Scenario, type ServiceBuilder, type ServiceDescription, type ShutdownOptions, type Side, type Span, type Stage, type StartOptions, type Step, type Term, type Timing, type Transport, type TransportImpl, type UnitRequest, type Verdict, type Watchdog, type WatchdogSpec, type WorkerKnobs, type WorkerLoop, type WorkerLoopOptions, asDebounce, asWindow, backoffBand, backoffDelay, backoffProblems, cooperativeAbortAt, daemon, detectionTime, embeddedProcess, ephemeral, failSpan, heartbeat, heartbeatDetection, isExitCode, isExitSignal, isMessageShape, kubernetes, localDev, matchesMessage, mayReissue, nodeProcess, platformClock, processPortOf, realClock, recoverSpan, replay, service, stageRank, watchdog };
175
412
  //# sourceMappingURL=index.d.ts.map