@btravstack/amqp-worker 0.31.0 → 0.33.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.
package/README.md CHANGED
@@ -183,10 +183,9 @@ workspace reuses. Nothing else here does.
183
183
 
184
184
  ## Options
185
185
 
186
- `AmqpModule(name)({...})` takes `amqp()`'s options plus `handlers` and the
187
- module lists (`imports`, `provides`, `exports`, `needs`). The `amqp()`
188
- primitive does not take `handlers` as an option — it **needs** the handlers
189
- provider on its own port, which is how the composition root supplies it:
186
+ `AmqpModule(name)({...})` takes the starter's options plus `handlers` and the
187
+ module lists (`imports`, `provides`, `exports`, `needs`). It is the only way to
188
+ compose the starter, which is not exported:
190
189
 
191
190
  | Option | What it is |
192
191
  | ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -215,6 +214,10 @@ there is no second timeout in the process to keep in step. Each delivery is one
215
214
  unit, `traceId` the publisher's `messageId`. The rest is on the
216
215
  [documentation site](https://btravstack.github.io/btravstack/reference/amqp-worker).
217
216
 
217
+ `AmqpModule` automatically exports publicly available `Logger` and `HealthChecks`
218
+ ports, including whole-module re-exports and providers declared at the root.
219
+ It keeps private infrastructure hidden and business exports explicit.
220
+
218
221
  ## License
219
222
 
220
223
  [MIT](./LICENSE) © Benoit TRAVERS
package/dist/index.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ let _btravstack_core = require("@btravstack/core");
2
3
  let _btravstack_di = require("@btravstack/di");
3
4
  let _amqp_contract_worker = require("@amqp-contract/worker");
4
5
  let _btravstack_config = require("@btravstack/config");
5
- let _btravstack_core = require("@btravstack/core");
6
6
  let unthrown = require("unthrown");
7
7
  let node_crypto = require("node:crypto");
8
8
  //#region src/broker-log.ts
@@ -173,7 +173,7 @@ const metaFor = (raw) => {
173
173
  //#endregion
174
174
  //#region src/amqp-runtime.ts
175
175
  /**
176
- * The broker, as a service: `amqp()` binds it from `AMQP_URL` (default
176
+ * The broker, as a service: the starter binds it from `AMQP_URL` (default
177
177
  * `amqp://127.0.0.1:5672`) and `AMQP_CONNECT_TIMEOUT_MS` (default `5_000`)
178
178
  * unless pinned, and anything else in the graph may read it — a publisher
179
179
  * sharing the consumer's broker, say.
@@ -185,7 +185,7 @@ var AmqpConfig = class extends (0, _btravstack_di.Port)("AmqpConfig") {};
185
185
  * be reported, not sat on.
186
186
  */
187
187
  const DEFAULT_CONNECT_TIMEOUT_MS = 5e3;
188
- /** The runtime's port: what `amqp()` provides, and what the module `start` boots must export. */
188
+ /** The runtime's port: what the starter provides, and what `AmqpModule` exports for `start` to boot. */
189
189
  var AmqpRuntime = class extends _btravstack_core.RuntimePort {};
190
190
  /**
191
191
  * The handlers' port — one id, the starter's own, which an application never
@@ -313,10 +313,16 @@ const AmqpModule = (name) => (options) => {
313
313
  const provides = options.provides ?? [];
314
314
  const exports = options.exports ?? [];
315
315
  const starter = amqp(options);
316
+ const rootImports = [...imports, starter];
317
+ const rootProvides = [handlers, ...provides];
316
318
  return (0, _btravstack_di.Module)(name)({
317
- imports: [...imports, starter],
318
- provides: [handlers, ...provides],
319
- exports: [AmqpRuntime, ...exports],
319
+ imports: rootImports,
320
+ provides: rootProvides,
321
+ exports: [
322
+ AmqpRuntime,
323
+ ...(0, _btravstack_core.infrastructureExports)(rootImports, rootProvides),
324
+ ...exports
325
+ ],
320
326
  needs: options.needs ?? []
321
327
  });
322
328
  };
@@ -327,4 +333,3 @@ exports.AmqpHandlers = AmqpHandlers;
327
333
  exports.AmqpMessage = AmqpMessage;
328
334
  exports.AmqpModule = AmqpModule;
329
335
  exports.AmqpRuntime = AmqpRuntime;
330
- exports.amqp = amqp;
package/dist/index.d.cts CHANGED
@@ -88,7 +88,7 @@ type AmqpInfo = {
88
88
  };
89
89
  declare const AmqpConfig_base: import("@btravstack/di").PortClass<"AmqpConfig">;
90
90
  /**
91
- * The broker, as a service: `amqp()` binds it from `AMQP_URL` (default
91
+ * The broker, as a service: the starter binds it from `AMQP_URL` (default
92
92
  * `amqp://127.0.0.1:5672`) and `AMQP_CONNECT_TIMEOUT_MS` (default `5_000`)
93
93
  * unless pinned, and anything else in the graph may read it — a publisher
94
94
  * sharing the consumer's broker, say.
@@ -98,7 +98,7 @@ export declare class AmqpConfig extends AmqpConfig_base<{
98
98
  /** How long `create` waits for the connection and topology setup before failing. */
99
99
  readonly connectTimeoutMs: number;
100
100
  }> {}
101
- /** The runtime's port: what `amqp()` provides, and what the module `start` boots must export. */
101
+ /** The runtime's port: what the starter provides, and what `AmqpModule` exports for `start` to boot. */
102
102
  export declare class AmqpRuntime extends RuntimePort<Runtime<never, AmqpInfo>> {}
103
103
  /** The needs a bound `unit.message` module still owes, less the delivery the fork's seed discharges. */
104
104
  type UnitNeedsOf$1<Unit> = UnitNeedsOf<Unit, AmqpMessageInstance>;
@@ -127,7 +127,7 @@ type AmqpOptions<TContract extends AnyAmqpContract, Unit extends AnyUnitModule |
127
127
  readonly contract: TContract;
128
128
  } & AmqpTuning<Unit>;
129
129
  /**
130
- * What an AMQP deployment tunes, shared verbatim by `amqp()` and `AmqpModule` —
130
+ * What an AMQP deployment tunes, shared verbatim by the starter and `AmqpModule` —
131
131
  * spelled once so the two cannot drift, which is what a second copy of an
132
132
  * option list always eventually does.
133
133
  */
@@ -156,15 +156,6 @@ type AmqpTuning<Unit extends AnyUnitModule | undefined = undefined> = {
156
156
  readonly message?: Unit;
157
157
  };
158
158
  };
159
- /**
160
- * The AMQP starter: a module providing the runtime and its configuration (bound
161
- * from `AMQP_URL` unless pinned), built over the handlers the application
162
- * provides on the starter's own handlers port — the module's one need. Import
163
- * it next to the application, provide the handlers, export `AmqpRuntime`.
164
- *
165
- * With `url` pinned the module reads nothing from the environment.
166
- */
167
- export declare const amqp: <TContract extends AnyAmqpContract, Unit extends AnyUnitModule | undefined = undefined>(options: AmqpOptions<TContract, Unit>) => Module<AmqpRuntime | AmqpConfig, ConfigInvalid, EnvReading<never, "AMQP_URL" | "AMQP_CONNECT_TIMEOUT_MS"> | HandlersInstanceOf<TContract> | UnitNeedsOf$1<Unit>>;
168
159
  /** One piece of the handlers record — what `AmqpHandler(contract, key)(…)` returns, as the composing form consumes it. */
169
160
  type PieceOf<C extends AnyAmqpContract> = { readonly [K in HandlerKeyOf<C>]: {
170
161
  readonly port: HandlerPortOf<C, K>;
@@ -246,7 +237,7 @@ type AmqpStarter<TContract extends AnyAmqpContract, Unit extends AnyUnitModule |
246
237
  type Imports<I extends readonly AnyModule[], TContract extends AnyAmqpContract, Unit extends AnyUnitModule | undefined> = readonly [...I, AmqpStarter<TContract, Unit>];
247
238
  /** The handlers provider plus the application's own — the tuple `Module(name)` is handed. */
248
239
  type Provides<P extends readonly AnyProvider[], TContract extends AnyAmqpContract, HandlersError, HandlersNeeds> = readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P];
249
- type AmqpModuleOptions<TContract extends AnyAmqpContract, HandlersError, HandlersNeeds, Declared, Unit extends AnyUnitModule | undefined, I extends readonly AnyModule[], P extends readonly AnyProvider[], X extends readonly Exportable<Imports<I, TContract, Unit>, Provides<P, TContract, HandlersError, HandlersNeeds>>[], N extends readonly AnyPort[]> = AmqpTuning<Unit> & {
240
+ type AmqpModuleOptions<TContract extends AnyAmqpContract, HandlersError, HandlersNeeds, Declared, Unit extends AnyUnitModule | undefined, I extends readonly AnyModule[], P extends readonly AnyProvider[], X extends readonly Exportable<Imports<I, TContract, Unit>, Provides<P, TContract, HandlersError, HandlersNeeds>>[], N extends readonly AnyPort[] | undefined> = AmqpTuning<Unit> & {
250
241
  readonly contract: TContract;
251
242
  /**
252
243
  * The application's handlers — what `AmqpHandlers(contract)(…)` returns for
@@ -259,7 +250,7 @@ type AmqpModuleOptions<TContract extends AnyAmqpContract, HandlersError, Handler
259
250
  };
260
251
  readonly imports?: I;
261
252
  readonly provides?: P;
262
- /** The application's own exports; `AmqpRuntime` is added, since `start` resolves it. */
253
+ /** The application's own exports; `AmqpRuntime` and visible kernel infrastructure are added. */
263
254
  readonly exports?: X;
264
255
  /**
265
256
  * What this root's OWN providers expect from outside. di's gate is re-stated
@@ -283,6 +274,6 @@ type AmqpModuleOptions<TContract extends AnyAmqpContract, HandlersError, Handler
283
274
  * await runMain(OrderAmqpWorker);
284
275
  * ```
285
276
  */
286
- export declare const AmqpModule: <const Name extends string>(name: Name) => <TContract extends AnyAmqpContract, HandlersError, HandlersNeeds, Declared = never, Unit extends AnyUnitModule | undefined = undefined, const I extends readonly AnyModule[] = [], const P extends readonly AnyProvider[] = [], const X extends readonly Exportable<Imports<I, TContract, Unit>, Provides<P, TContract, HandlersError, HandlersNeeds>>[] = [], const N extends readonly AnyPort[] = []>(options: AmqpModuleOptions<TContract, HandlersError, HandlersNeeds, Declared, Unit, I, P, X, N>) => Module<(Extract<(readonly [typeof AmqpRuntime, ...X])[number], AnyModule> extends (infer T) ? T extends Extract<(readonly [typeof AmqpRuntime, ...X])[number], AnyModule> ? T extends Module<infer X_1, infer E, infer N_1> ? readonly [X_1, E, N_1] : never : never : never)[0] | ((readonly [typeof AmqpRuntime, ...X])[number] extends (infer E_1) ? E_1 extends AnyPort ? InstanceType<E_1> : E_1 extends AnyProvider ? InstanceType<E_1["port"]> : never : never), ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_1) ? T_1 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_1 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never)[1] | ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T_2) ? T_2 extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T_2 extends Module<infer X_1, infer E, infer N_1> ? readonly [X_1, E, N_1] : never : never : never)[1], Exclude<((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_3) ? T_3 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_3 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never)[2], ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T_4) ? T_4 extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T_4 extends Module<infer X_1, infer E, infer N_1> ? readonly [X_1, E, N_1] : never : never : never)[0] | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_3) ? T_3 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_3 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never)[0]> | Exclude<((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T_4) ? T_4 extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T_4 extends Module<infer X_1, infer E, infer N_1> ? readonly [X_1, E, N_1] : never : never : never)[2], ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T_4) ? T_4 extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T_4 extends Module<infer X_1, infer E, infer N_1> ? readonly [X_1, E, N_1] : never : never : never)[0] | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_3) ? T_3 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_3 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never)[0]>>;
277
+ export declare const AmqpModule: <const Name extends string>(name: Name) => <TContract extends AnyAmqpContract, HandlersError, HandlersNeeds, Declared = never, Unit extends AnyUnitModule | undefined = undefined, const I extends readonly AnyModule[] = [], const P extends readonly AnyProvider[] = [], const X extends readonly Exportable<Imports<I, TContract, Unit>, Provides<P, TContract, HandlersError, HandlersNeeds>>[] = [], const N extends readonly AnyPort[] | undefined = undefined>(options: AmqpModuleOptions<TContract, HandlersError, HandlersNeeds, Declared, Unit, I, P, X, N>) => Module<(Extract<(readonly [typeof AmqpRuntime, ...((import("@btravstack/core").HealthChecks extends ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T) ? T extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_1) ? T_1 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").HealthChecks : never) | (import("@btravstack/core").Logger extends ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T) ? T extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_1) ? T_1 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").Logger : never))[], ...X])[number], AnyModule> extends (infer T_2) ? T_2 extends Extract<(readonly [typeof AmqpRuntime, ...((import("@btravstack/core").HealthChecks extends ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T) ? T extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_1) ? T_1 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").HealthChecks : never) | (import("@btravstack/core").Logger extends ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T) ? T extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_1) ? T_1 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").Logger : never))[], ...X])[number], AnyModule> ? T_2 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[0] | ((readonly [typeof AmqpRuntime, ...((import("@btravstack/core").HealthChecks extends ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T) ? T extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_1) ? T_1 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").HealthChecks : never) | (import("@btravstack/core").Logger extends ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T) ? T extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_1) ? T_1 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").Logger : never))[], ...X])[number] extends (infer E_1) ? E_1 extends AnyPort ? InstanceType<E_1> : E_1 extends AnyProvider ? InstanceType<E_1["port"]> : never : never), ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_3) ? T_3 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_3 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never)[1] | ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T_4) ? T_4 extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T_4 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[1], Exclude<((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_5) ? T_5 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_5 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never)[2], ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T_6) ? T_6 extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T_6 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[0] | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_5) ? T_5 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_5 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never)[0]> | Exclude<((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T_6) ? T_6 extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T_6 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[2], ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T_6) ? T_6 extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T_6 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[0] | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_5) ? T_5 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_5 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never)[0]>>;
287
278
  //#endregion
288
279
  export type { AmqpConnectionOptions, AmqpInfo, AmqpMessageOf, AmqpMessagePortOf, AmqpModuleOptions, AmqpOptions, HandlerPortOf, HandlersInstanceOf, HandlersPortOf };
package/dist/index.d.mts CHANGED
@@ -1,7 +1,7 @@
1
+ import { AnyUnitModule, Refuse, Runtime, RuntimePort, UnitGate, UnitNeedsOf, UnitRecordOf } from "@btravstack/core";
1
2
  import { AnyModule, AnyPort, AnyProvider, Exportable, Module, NeedsGate, PortClassOf, PortInstance, Provider, ServiceOf } from "@btravstack/di";
2
3
  import { ConsumerOptions, TypedAmqpWorker, WorkerInferHandlers } from "@amqp-contract/worker";
3
4
  import { ConfigInvalid, EnvReading } from "@btravstack/config";
4
- import { AnyUnitModule, Refuse, Runtime, RuntimePort, UnitGate, UnitNeedsOf, UnitRecordOf } from "@btravstack/core";
5
5
  //#region src/handler.d.ts
6
6
  /** The consumer and rpc names `C` declares — the keys of its handlers record. */
7
7
  type HandlerKeyOf<C extends AnyAmqpContract> = keyof WorkerInferHandlers<C> & string;
@@ -88,7 +88,7 @@ type AmqpInfo = {
88
88
  };
89
89
  declare const AmqpConfig_base: import("@btravstack/di").PortClass<"AmqpConfig">;
90
90
  /**
91
- * The broker, as a service: `amqp()` binds it from `AMQP_URL` (default
91
+ * The broker, as a service: the starter binds it from `AMQP_URL` (default
92
92
  * `amqp://127.0.0.1:5672`) and `AMQP_CONNECT_TIMEOUT_MS` (default `5_000`)
93
93
  * unless pinned, and anything else in the graph may read it — a publisher
94
94
  * sharing the consumer's broker, say.
@@ -98,7 +98,7 @@ export declare class AmqpConfig extends AmqpConfig_base<{
98
98
  /** How long `create` waits for the connection and topology setup before failing. */
99
99
  readonly connectTimeoutMs: number;
100
100
  }> {}
101
- /** The runtime's port: what `amqp()` provides, and what the module `start` boots must export. */
101
+ /** The runtime's port: what the starter provides, and what `AmqpModule` exports for `start` to boot. */
102
102
  export declare class AmqpRuntime extends RuntimePort<Runtime<never, AmqpInfo>> {}
103
103
  /** The needs a bound `unit.message` module still owes, less the delivery the fork's seed discharges. */
104
104
  type UnitNeedsOf$1<Unit> = UnitNeedsOf<Unit, AmqpMessageInstance>;
@@ -127,7 +127,7 @@ type AmqpOptions<TContract extends AnyAmqpContract, Unit extends AnyUnitModule |
127
127
  readonly contract: TContract;
128
128
  } & AmqpTuning<Unit>;
129
129
  /**
130
- * What an AMQP deployment tunes, shared verbatim by `amqp()` and `AmqpModule` —
130
+ * What an AMQP deployment tunes, shared verbatim by the starter and `AmqpModule` —
131
131
  * spelled once so the two cannot drift, which is what a second copy of an
132
132
  * option list always eventually does.
133
133
  */
@@ -156,15 +156,6 @@ type AmqpTuning<Unit extends AnyUnitModule | undefined = undefined> = {
156
156
  readonly message?: Unit;
157
157
  };
158
158
  };
159
- /**
160
- * The AMQP starter: a module providing the runtime and its configuration (bound
161
- * from `AMQP_URL` unless pinned), built over the handlers the application
162
- * provides on the starter's own handlers port — the module's one need. Import
163
- * it next to the application, provide the handlers, export `AmqpRuntime`.
164
- *
165
- * With `url` pinned the module reads nothing from the environment.
166
- */
167
- export declare const amqp: <TContract extends AnyAmqpContract, Unit extends AnyUnitModule | undefined = undefined>(options: AmqpOptions<TContract, Unit>) => Module<AmqpRuntime | AmqpConfig, ConfigInvalid, EnvReading<never, "AMQP_URL" | "AMQP_CONNECT_TIMEOUT_MS"> | HandlersInstanceOf<TContract> | UnitNeedsOf$1<Unit>>;
168
159
  /** One piece of the handlers record — what `AmqpHandler(contract, key)(…)` returns, as the composing form consumes it. */
169
160
  type PieceOf<C extends AnyAmqpContract> = { readonly [K in HandlerKeyOf<C>]: {
170
161
  readonly port: HandlerPortOf<C, K>;
@@ -246,7 +237,7 @@ type AmqpStarter<TContract extends AnyAmqpContract, Unit extends AnyUnitModule |
246
237
  type Imports<I extends readonly AnyModule[], TContract extends AnyAmqpContract, Unit extends AnyUnitModule | undefined> = readonly [...I, AmqpStarter<TContract, Unit>];
247
238
  /** The handlers provider plus the application's own — the tuple `Module(name)` is handed. */
248
239
  type Provides<P extends readonly AnyProvider[], TContract extends AnyAmqpContract, HandlersError, HandlersNeeds> = readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P];
249
- type AmqpModuleOptions<TContract extends AnyAmqpContract, HandlersError, HandlersNeeds, Declared, Unit extends AnyUnitModule | undefined, I extends readonly AnyModule[], P extends readonly AnyProvider[], X extends readonly Exportable<Imports<I, TContract, Unit>, Provides<P, TContract, HandlersError, HandlersNeeds>>[], N extends readonly AnyPort[]> = AmqpTuning<Unit> & {
240
+ type AmqpModuleOptions<TContract extends AnyAmqpContract, HandlersError, HandlersNeeds, Declared, Unit extends AnyUnitModule | undefined, I extends readonly AnyModule[], P extends readonly AnyProvider[], X extends readonly Exportable<Imports<I, TContract, Unit>, Provides<P, TContract, HandlersError, HandlersNeeds>>[], N extends readonly AnyPort[] | undefined> = AmqpTuning<Unit> & {
250
241
  readonly contract: TContract;
251
242
  /**
252
243
  * The application's handlers — what `AmqpHandlers(contract)(…)` returns for
@@ -259,7 +250,7 @@ type AmqpModuleOptions<TContract extends AnyAmqpContract, HandlersError, Handler
259
250
  };
260
251
  readonly imports?: I;
261
252
  readonly provides?: P;
262
- /** The application's own exports; `AmqpRuntime` is added, since `start` resolves it. */
253
+ /** The application's own exports; `AmqpRuntime` and visible kernel infrastructure are added. */
263
254
  readonly exports?: X;
264
255
  /**
265
256
  * What this root's OWN providers expect from outside. di's gate is re-stated
@@ -283,6 +274,6 @@ type AmqpModuleOptions<TContract extends AnyAmqpContract, HandlersError, Handler
283
274
  * await runMain(OrderAmqpWorker);
284
275
  * ```
285
276
  */
286
- export declare const AmqpModule: <const Name extends string>(name: Name) => <TContract extends AnyAmqpContract, HandlersError, HandlersNeeds, Declared = never, Unit extends AnyUnitModule | undefined = undefined, const I extends readonly AnyModule[] = [], const P extends readonly AnyProvider[] = [], const X extends readonly Exportable<Imports<I, TContract, Unit>, Provides<P, TContract, HandlersError, HandlersNeeds>>[] = [], const N extends readonly AnyPort[] = []>(options: AmqpModuleOptions<TContract, HandlersError, HandlersNeeds, Declared, Unit, I, P, X, N>) => Module<(Extract<(readonly [typeof AmqpRuntime, ...X])[number], AnyModule> extends (infer T) ? T extends Extract<(readonly [typeof AmqpRuntime, ...X])[number], AnyModule> ? T extends Module<infer X_1, infer E, infer N_1> ? readonly [X_1, E, N_1] : never : never : never)[0] | ((readonly [typeof AmqpRuntime, ...X])[number] extends (infer E_1) ? E_1 extends AnyPort ? InstanceType<E_1> : E_1 extends AnyProvider ? InstanceType<E_1["port"]> : never : never), ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_1) ? T_1 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_1 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never)[1] | ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T_2) ? T_2 extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T_2 extends Module<infer X_1, infer E, infer N_1> ? readonly [X_1, E, N_1] : never : never : never)[1], Exclude<((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_3) ? T_3 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_3 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never)[2], ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T_4) ? T_4 extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T_4 extends Module<infer X_1, infer E, infer N_1> ? readonly [X_1, E, N_1] : never : never : never)[0] | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_3) ? T_3 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_3 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never)[0]> | Exclude<((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T_4) ? T_4 extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T_4 extends Module<infer X_1, infer E, infer N_1> ? readonly [X_1, E, N_1] : never : never : never)[2], ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T_4) ? T_4 extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T_4 extends Module<infer X_1, infer E, infer N_1> ? readonly [X_1, E, N_1] : never : never : never)[0] | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_3) ? T_3 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_3 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never)[0]>>;
277
+ export declare const AmqpModule: <const Name extends string>(name: Name) => <TContract extends AnyAmqpContract, HandlersError, HandlersNeeds, Declared = never, Unit extends AnyUnitModule | undefined = undefined, const I extends readonly AnyModule[] = [], const P extends readonly AnyProvider[] = [], const X extends readonly Exportable<Imports<I, TContract, Unit>, Provides<P, TContract, HandlersError, HandlersNeeds>>[] = [], const N extends readonly AnyPort[] | undefined = undefined>(options: AmqpModuleOptions<TContract, HandlersError, HandlersNeeds, Declared, Unit, I, P, X, N>) => Module<(Extract<(readonly [typeof AmqpRuntime, ...((import("@btravstack/core").HealthChecks extends ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T) ? T extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_1) ? T_1 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").HealthChecks : never) | (import("@btravstack/core").Logger extends ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T) ? T extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_1) ? T_1 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").Logger : never))[], ...X])[number], AnyModule> extends (infer T_2) ? T_2 extends Extract<(readonly [typeof AmqpRuntime, ...((import("@btravstack/core").HealthChecks extends ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T) ? T extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_1) ? T_1 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").HealthChecks : never) | (import("@btravstack/core").Logger extends ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T) ? T extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_1) ? T_1 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").Logger : never))[], ...X])[number], AnyModule> ? T_2 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[0] | ((readonly [typeof AmqpRuntime, ...((import("@btravstack/core").HealthChecks extends ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T) ? T extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_1) ? T_1 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").HealthChecks : never) | (import("@btravstack/core").Logger extends ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T) ? T extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_1) ? T_1 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").Logger : never))[], ...X])[number] extends (infer E_1) ? E_1 extends AnyPort ? InstanceType<E_1> : E_1 extends AnyProvider ? InstanceType<E_1["port"]> : never : never), ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_3) ? T_3 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_3 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never)[1] | ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T_4) ? T_4 extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T_4 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[1], Exclude<((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_5) ? T_5 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_5 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never)[2], ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T_6) ? T_6 extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T_6 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[0] | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_5) ? T_5 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_5 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never)[0]> | Exclude<((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T_6) ? T_6 extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T_6 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[2], ((readonly [...I, AmqpStarter<TContract, Unit>])[number] extends (infer T_6) ? T_6 extends (readonly [...I, AmqpStarter<TContract, Unit>])[number] ? T_6 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[0] | ((readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] extends (infer T_5) ? T_5 extends (readonly [Provider<HandlersInstanceOf<TContract>, HandlersError, HandlersNeeds>, ...P])[number] ? T_5 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never)[0]>>;
287
278
  //#endregion
288
279
  export type { AmqpConnectionOptions, AmqpInfo, AmqpMessageOf, AmqpMessagePortOf, AmqpModuleOptions, AmqpOptions, HandlerPortOf, HandlersInstanceOf, HandlersPortOf };
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
+ import { Observers, RuntimePort, RuntimeStartFailed, composeByPrefix, dispatchUnit, infrastructureExports, mintPiece, noObserverMember, observe, releasedBy, traceIdOfTraceparent, withUnitRecord } from "@btravstack/core";
1
2
  import { Module, Port, Provider } from "@btravstack/di";
2
3
  import { TypedAmqpWorker } from "@amqp-contract/worker";
3
4
  import { Config, Env } from "@btravstack/config";
4
- import { Observers, RuntimePort, RuntimeStartFailed, composeByPrefix, dispatchUnit, mintPiece, noObserverMember, observe, releasedBy, traceIdOfTraceparent, withUnitRecord } from "@btravstack/core";
5
5
  import { P } from "unthrown";
6
6
  import { randomUUID } from "node:crypto";
7
7
  //#region src/broker-log.ts
@@ -172,7 +172,7 @@ const metaFor = (raw) => {
172
172
  //#endregion
173
173
  //#region src/amqp-runtime.ts
174
174
  /**
175
- * The broker, as a service: `amqp()` binds it from `AMQP_URL` (default
175
+ * The broker, as a service: the starter binds it from `AMQP_URL` (default
176
176
  * `amqp://127.0.0.1:5672`) and `AMQP_CONNECT_TIMEOUT_MS` (default `5_000`)
177
177
  * unless pinned, and anything else in the graph may read it — a publisher
178
178
  * sharing the consumer's broker, say.
@@ -184,7 +184,7 @@ var AmqpConfig = class extends Port("AmqpConfig") {};
184
184
  * be reported, not sat on.
185
185
  */
186
186
  const DEFAULT_CONNECT_TIMEOUT_MS = 5e3;
187
- /** The runtime's port: what `amqp()` provides, and what the module `start` boots must export. */
187
+ /** The runtime's port: what the starter provides, and what `AmqpModule` exports for `start` to boot. */
188
188
  var AmqpRuntime = class extends RuntimePort {};
189
189
  /**
190
190
  * The handlers' port — one id, the starter's own, which an application never
@@ -312,12 +312,18 @@ const AmqpModule = (name) => (options) => {
312
312
  const provides = options.provides ?? [];
313
313
  const exports = options.exports ?? [];
314
314
  const starter = amqp(options);
315
+ const rootImports = [...imports, starter];
316
+ const rootProvides = [handlers, ...provides];
315
317
  return Module(name)({
316
- imports: [...imports, starter],
317
- provides: [handlers, ...provides],
318
- exports: [AmqpRuntime, ...exports],
318
+ imports: rootImports,
319
+ provides: rootProvides,
320
+ exports: [
321
+ AmqpRuntime,
322
+ ...infrastructureExports(rootImports, rootProvides),
323
+ ...exports
324
+ ],
319
325
  needs: options.needs ?? []
320
326
  });
321
327
  };
322
328
  //#endregion
323
- export { AmqpConfig, AmqpHandler, AmqpHandlers, AmqpMessage, AmqpModule, AmqpRuntime, amqp };
329
+ export { AmqpConfig, AmqpHandler, AmqpHandlers, AmqpMessage, AmqpModule, AmqpRuntime };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@btravstack/amqp-worker",
3
- "version": "0.31.0",
3
+ "version": "0.33.0",
4
4
  "description": "The AMQP starter for @btravstack/core: the handlers as a port, one unit per delivery, and a drain the kernel's deadline releases",
5
5
  "keywords": [
6
6
  "amqp",
@@ -47,11 +47,11 @@
47
47
  "@amqp-contract/contract": "3.0.0-beta.11",
48
48
  "@amqp-contract/testing": "3.0.0-beta.11",
49
49
  "@amqp-contract/worker": "3.0.0-beta.11",
50
- "@btravstack/config": "0.31.0",
51
- "@btravstack/core": "0.31.0",
52
- "@btravstack/di": "0.31.0",
50
+ "@btravstack/config": "0.33.0",
51
+ "@btravstack/core": "0.33.0",
52
+ "@btravstack/di": "0.33.0",
53
53
  "@btravstack/internal-test-infra": "0.0.0",
54
- "@btravstack/testing": "0.31.0",
54
+ "@btravstack/testing": "0.33.0",
55
55
  "@btravstack/tsconfig": "0.4.0",
56
56
  "@opentelemetry/api": "1.9.1",
57
57
  "@types/node": "26.6.4",
@@ -66,9 +66,9 @@
66
66
  },
67
67
  "peerDependencies": {
68
68
  "@amqp-contract/worker": "^3.0.0-beta.7",
69
- "@btravstack/config": "^0.31.0",
70
- "@btravstack/core": "^0.31.0",
71
- "@btravstack/di": "^0.31.0",
69
+ "@btravstack/config": "^0.33.0",
70
+ "@btravstack/core": "^0.33.0",
71
+ "@btravstack/di": "^0.33.0",
72
72
  "@opentelemetry/api": "^1",
73
73
  "unthrown": "^5.7.0"
74
74
  },