@geekmidas/constructs 10.0.0-alpha.41 → 10.0.0-alpha.43
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/dist/{Cron-CMEGfRs8.d.cts → Cron-DI3nKoic.d.cts} +3 -2
- package/dist/Cron-DI3nKoic.d.cts.map +1 -0
- package/dist/{Cron-D6X4-xjB.d.mts → Cron-uYAHPnp7.d.mts} +3 -2
- package/dist/Cron-uYAHPnp7.d.mts.map +1 -0
- package/dist/{CronBuilder-DB35T5dL.cjs → CronBuilder-BoHzlWU_.cjs} +8 -3
- package/dist/CronBuilder-BoHzlWU_.cjs.map +1 -0
- package/dist/{CronBuilder-Dv0IlZs0.mjs → CronBuilder-CCgt0wCE.mjs} +9 -4
- package/dist/CronBuilder-CCgt0wCE.mjs.map +1 -0
- package/dist/{CronBuilder-O_gvButp.d.mts → CronBuilder-DaSUm2Na.d.mts} +5 -4
- package/dist/CronBuilder-DaSUm2Na.d.mts.map +1 -0
- package/dist/{CronBuilder-CEK7aOqD.d.cts → CronBuilder-g1lZLWyG.d.cts} +5 -4
- package/dist/CronBuilder-g1lZLWyG.d.cts.map +1 -0
- package/dist/{Endpoint-CQAeh1Rh.mjs → Endpoint-BDgmfml0.mjs} +2 -2
- package/dist/{Endpoint-CQAeh1Rh.mjs.map → Endpoint-BDgmfml0.mjs.map} +1 -1
- package/dist/{Endpoint-Dp5AKIXl.d.cts → Endpoint-BkzU6nn1.d.cts} +5 -4
- package/dist/Endpoint-BkzU6nn1.d.cts.map +1 -0
- package/dist/{Endpoint-DtI7heFm.d.mts → Endpoint-BpboleFh.d.mts} +5 -4
- package/dist/Endpoint-BpboleFh.d.mts.map +1 -0
- package/dist/{Endpoint-D1L9qu5C.cjs → Endpoint-wSCHSnqb.cjs} +2 -2
- package/dist/{Endpoint-D1L9qu5C.cjs.map → Endpoint-wSCHSnqb.cjs.map} +1 -1
- package/dist/{EndpointFactory-FeFRmlDZ.d.cts → EndpointFactory-BZZOleQT.d.cts} +4 -4
- package/dist/{EndpointFactory-CgMDvERK.d.mts.map → EndpointFactory-BZZOleQT.d.cts.map} +1 -1
- package/dist/{EndpointFactory-BBdNeaGJ.mjs → EndpointFactory-C9G2pz86.mjs} +3 -3
- package/dist/{EndpointFactory-BBdNeaGJ.mjs.map → EndpointFactory-C9G2pz86.mjs.map} +1 -1
- package/dist/{EndpointFactory-CgMDvERK.d.mts → EndpointFactory-DnNlYflU.d.mts} +4 -4
- package/dist/{EndpointFactory-FeFRmlDZ.d.cts.map → EndpointFactory-DnNlYflU.d.mts.map} +1 -1
- package/dist/{EndpointFactory-BZOCOaK6.cjs → EndpointFactory-G1g1kiqC.cjs} +3 -3
- package/dist/{EndpointFactory-BZOCOaK6.cjs.map → EndpointFactory-G1g1kiqC.cjs.map} +1 -1
- package/dist/Function-DuqGcbOI.d.mts +76 -0
- package/dist/Function-DuqGcbOI.d.mts.map +1 -0
- package/dist/Function-Pu-1kKZz.d.cts +76 -0
- package/dist/Function-Pu-1kKZz.d.cts.map +1 -0
- package/dist/{HonoEndpointAdaptor-Cq99r9H7.cjs → HonoEndpointAdaptor-CBoSm3TM.cjs} +3 -3
- package/dist/{HonoEndpointAdaptor-Cq99r9H7.cjs.map → HonoEndpointAdaptor-CBoSm3TM.cjs.map} +1 -1
- package/dist/{HonoEndpointAdaptor-Aui-x9Lg.mjs → HonoEndpointAdaptor-DL_fCB9O.mjs} +3 -3
- package/dist/{HonoEndpointAdaptor-Aui-x9Lg.mjs.map → HonoEndpointAdaptor-DL_fCB9O.mjs.map} +1 -1
- package/dist/{Queue-Ckmudcm8.cjs → Queue-D5jcw0mu.cjs} +6 -2
- package/dist/Queue-D5jcw0mu.cjs.map +1 -0
- package/dist/{Queue-YmvN2vEP.d.mts → Queue-DlsHRzUp.d.mts} +22 -10
- package/dist/Queue-DlsHRzUp.d.mts.map +1 -0
- package/dist/{Queue-CpQIGB_2.d.cts → Queue-HPyi0e1i.d.cts} +22 -10
- package/dist/Queue-HPyi0e1i.d.cts.map +1 -0
- package/dist/{Queue-C1uDgjxt.mjs → Queue-hwPN-t31.mjs} +6 -2
- package/dist/Queue-hwPN-t31.mjs.map +1 -0
- package/dist/{QueueBuilder-CJNcv4dy.cjs → QueueBuilder-BFQn3OzZ.cjs} +27 -4
- package/dist/QueueBuilder-BFQn3OzZ.cjs.map +1 -0
- package/dist/{QueueBuilder-XuPKZwKH.mjs → QueueBuilder-DCuYdjMw.mjs} +28 -5
- package/dist/QueueBuilder-DCuYdjMw.mjs.map +1 -0
- package/dist/{QueueBuilder-XEnnOWGe.d.cts → QueueBuilder-OSi6LkV9.d.cts} +24 -11
- package/dist/QueueBuilder-OSi6LkV9.d.cts.map +1 -0
- package/dist/{QueueBuilder-CM0WUxfw.d.mts → QueueBuilder-QHsnVt1P.d.mts} +24 -11
- package/dist/QueueBuilder-QHsnVt1P.d.mts.map +1 -0
- package/dist/{Subscriber-B91YSkZt.d.cts → Subscriber-Bpp02cGr.d.cts} +20 -9
- package/dist/Subscriber-Bpp02cGr.d.cts.map +1 -0
- package/dist/{Subscriber-BjHYe5hK.d.mts → Subscriber-CtN9R48-.d.mts} +20 -9
- package/dist/Subscriber-CtN9R48-.d.mts.map +1 -0
- package/dist/{SubscriberBuilder-Duk028pD.cjs → SubscriberBuilder-C2PwqwIl.cjs} +31 -3
- package/dist/SubscriberBuilder-C2PwqwIl.cjs.map +1 -0
- package/dist/{SubscriberBuilder-BhMphk4z.d.mts → SubscriberBuilder-CuCMFpYW.d.mts} +23 -11
- package/dist/SubscriberBuilder-CuCMFpYW.d.mts.map +1 -0
- package/dist/{SubscriberBuilder-DzQUWE08.mjs → SubscriberBuilder-DMFk_Ap1.mjs} +32 -4
- package/dist/SubscriberBuilder-DMFk_Ap1.mjs.map +1 -0
- package/dist/{SubscriberBuilder-BSpQX1JT.d.cts → SubscriberBuilder-g3fAVWgs.d.cts} +23 -11
- package/dist/SubscriberBuilder-g3fAVWgs.d.cts.map +1 -0
- package/dist/adaptors/aws.cjs +20 -4
- package/dist/adaptors/aws.cjs.map +1 -1
- package/dist/adaptors/aws.d.cts +17 -13
- package/dist/adaptors/aws.d.cts.map +1 -1
- package/dist/adaptors/aws.d.mts +17 -13
- package/dist/adaptors/aws.d.mts.map +1 -1
- package/dist/adaptors/aws.mjs +20 -4
- package/dist/adaptors/aws.mjs.map +1 -1
- package/dist/adaptors/hono.cjs +1 -1
- package/dist/adaptors/hono.d.cts +1 -1
- package/dist/adaptors/hono.d.mts +1 -1
- package/dist/adaptors/hono.mjs +1 -1
- package/dist/adaptors/testing.cjs +170 -13
- package/dist/adaptors/testing.cjs.map +1 -1
- package/dist/adaptors/testing.d.cts +38 -21
- package/dist/adaptors/testing.d.cts.map +1 -1
- package/dist/adaptors/testing.d.mts +38 -21
- package/dist/adaptors/testing.d.mts.map +1 -1
- package/dist/adaptors/testing.mjs +170 -13
- package/dist/adaptors/testing.mjs.map +1 -1
- package/dist/{auth-CMwml9QN.d.mts → auth-3OAmK42n.d.cts} +4 -4
- package/dist/{auth-CMwml9QN.d.mts.map → auth-3OAmK42n.d.cts.map} +1 -1
- package/dist/{auth-rVRDjIw_.d.cts → auth-BWbiewHa.d.mts} +4 -4
- package/dist/{auth-rVRDjIw_.d.cts.map → auth-BWbiewHa.d.mts.map} +1 -1
- package/dist/auth.d.cts +1 -1
- package/dist/auth.d.mts +1 -1
- package/dist/{cache-C9a_hVCc.d.cts → cache-CXh6GIgb.d.mts} +3 -3
- package/dist/{cache-C9a_hVCc.d.cts.map → cache-CXh6GIgb.d.mts.map} +1 -1
- package/dist/{cache-CeTMI8LR.d.mts → cache-DnGDGly3.d.cts} +3 -3
- package/dist/{cache-CeTMI8LR.d.mts.map → cache-DnGDGly3.d.cts.map} +1 -1
- package/dist/cache.d.cts +1 -1
- package/dist/cache.d.mts +1 -1
- package/dist/{construct-interface-_3zgxzXl.d.mts → construct-interface-B1AfqRl4.d.cts} +25 -3
- package/dist/{construct-interface-_3zgxzXl.d.mts.map → construct-interface-B1AfqRl4.d.cts.map} +1 -1
- package/dist/{construct-interface-_xi4BPN8.d.cts → construct-interface-DluK3_da.d.mts} +25 -3
- package/dist/{construct-interface-_xi4BPN8.d.cts.map → construct-interface-DluK3_da.d.mts.map} +1 -1
- package/dist/construct-interface.cjs +26 -0
- package/dist/construct-interface.cjs.map +1 -1
- package/dist/construct-interface.d.cts +2 -2
- package/dist/construct-interface.d.mts +2 -2
- package/dist/construct-interface.mjs +26 -1
- package/dist/construct-interface.mjs.map +1 -1
- package/dist/credential.d.cts +1 -1
- package/dist/credential.d.mts +1 -1
- package/dist/crons/index.cjs +1 -1
- package/dist/crons/index.d.cts +2 -2
- package/dist/crons/index.d.mts +2 -2
- package/dist/crons/index.mjs +1 -1
- package/dist/database/kysely.d.cts +1 -1
- package/dist/database/kysely.d.mts +1 -1
- package/dist/email.d.cts +1 -1
- package/dist/email.d.mts +1 -1
- package/dist/endpoints/index.cjs +3 -3
- package/dist/endpoints/index.d.cts +2 -2
- package/dist/endpoints/index.d.mts +2 -2
- package/dist/endpoints/index.mjs +3 -3
- package/dist/{external-api-DS3mujT5.d.mts → external-api-CWY9orcO.d.mts} +2 -2
- package/dist/{external-api-DS3mujT5.d.mts.map → external-api-CWY9orcO.d.mts.map} +1 -1
- package/dist/{external-api-LBfE-q3g.d.cts → external-api-D-5WB-sr.d.cts} +2 -2
- package/dist/{external-api-LBfE-q3g.d.cts.map → external-api-D-5WB-sr.d.cts.map} +1 -1
- package/dist/external-api.d.cts +1 -1
- package/dist/external-api.d.mts +1 -1
- package/dist/file-server.d.cts +1 -1
- package/dist/file-server.d.mts +1 -1
- package/dist/functions/index.cjs +1 -1
- package/dist/functions/index.d.cts +2 -1
- package/dist/functions/index.d.mts +2 -1
- package/dist/functions/index.mjs +1 -1
- package/dist/{functions-ZH60FE7H.cjs → functions-CbP5ZKma.cjs} +15 -3
- package/dist/functions-CbP5ZKma.cjs.map +1 -0
- package/dist/{functions-DCIfCRR-.mjs → functions-Di6n5ltG.mjs} +16 -4
- package/dist/{functions-DCIfCRR-.mjs.map → functions-Di6n5ltG.mjs.map} +1 -1
- package/dist/{index-B0kxstwf.d.cts → index-BuzRvKOQ.d.cts} +9 -71
- package/dist/index-BuzRvKOQ.d.cts.map +1 -0
- package/dist/{index-CjVEjOw0.d.mts → index-CTkKOer4.d.mts} +9 -71
- package/dist/index-CTkKOer4.d.mts.map +1 -0
- package/dist/{kysely-BJ8IQ_1P.d.mts → kysely-Bqov3fwv.d.mts} +3 -3
- package/dist/{kysely-BJ8IQ_1P.d.mts.map → kysely-Bqov3fwv.d.mts.map} +1 -1
- package/dist/{kysely-DVF8wOT4.d.cts → kysely-DTnkZsub.d.cts} +3 -3
- package/dist/{kysely-DVF8wOT4.d.cts.map → kysely-DTnkZsub.d.cts.map} +1 -1
- package/dist/mobile-app.d.cts +1 -1
- package/dist/mobile-app.d.mts +1 -1
- package/dist/object-storage.d.cts +1 -1
- package/dist/object-storage.d.mts +1 -1
- package/dist/queue/index.cjs +2 -2
- package/dist/queue/index.d.cts +2 -2
- package/dist/queue/index.d.mts +2 -2
- package/dist/queue/index.mjs +2 -2
- package/dist/rest-api.cjs +1 -1
- package/dist/rest-api.d.cts +3 -3
- package/dist/rest-api.d.mts +3 -3
- package/dist/rest-api.mjs +1 -1
- package/dist/site.d.cts +1 -1
- package/dist/site.d.mts +1 -1
- package/dist/subscribers/index.cjs +1 -1
- package/dist/subscribers/index.d.cts +2 -2
- package/dist/subscribers/index.d.mts +2 -2
- package/dist/subscribers/index.mjs +1 -1
- package/dist/worker.cjs +26 -10
- package/dist/worker.cjs.map +1 -1
- package/dist/worker.d.cts +38 -22
- package/dist/worker.d.cts.map +1 -1
- package/dist/worker.d.mts +38 -22
- package/dist/worker.d.mts.map +1 -1
- package/dist/worker.mjs +26 -10
- package/dist/worker.mjs.map +1 -1
- package/package.json +31 -31
- package/dist/Cron-CMEGfRs8.d.cts.map +0 -1
- package/dist/Cron-D6X4-xjB.d.mts.map +0 -1
- package/dist/CronBuilder-CEK7aOqD.d.cts.map +0 -1
- package/dist/CronBuilder-DB35T5dL.cjs.map +0 -1
- package/dist/CronBuilder-Dv0IlZs0.mjs.map +0 -1
- package/dist/CronBuilder-O_gvButp.d.mts.map +0 -1
- package/dist/Endpoint-Dp5AKIXl.d.cts.map +0 -1
- package/dist/Endpoint-DtI7heFm.d.mts.map +0 -1
- package/dist/Queue-C1uDgjxt.mjs.map +0 -1
- package/dist/Queue-Ckmudcm8.cjs.map +0 -1
- package/dist/Queue-CpQIGB_2.d.cts.map +0 -1
- package/dist/Queue-YmvN2vEP.d.mts.map +0 -1
- package/dist/QueueBuilder-CJNcv4dy.cjs.map +0 -1
- package/dist/QueueBuilder-CM0WUxfw.d.mts.map +0 -1
- package/dist/QueueBuilder-XEnnOWGe.d.cts.map +0 -1
- package/dist/QueueBuilder-XuPKZwKH.mjs.map +0 -1
- package/dist/Subscriber-B91YSkZt.d.cts.map +0 -1
- package/dist/Subscriber-BjHYe5hK.d.mts.map +0 -1
- package/dist/SubscriberBuilder-BSpQX1JT.d.cts.map +0 -1
- package/dist/SubscriberBuilder-BhMphk4z.d.mts.map +0 -1
- package/dist/SubscriberBuilder-Duk028pD.cjs.map +0 -1
- package/dist/SubscriberBuilder-DzQUWE08.mjs.map +0 -1
- package/dist/functions-ZH60FE7H.cjs.map +0 -1
- package/dist/index-B0kxstwf.d.cts.map +0 -1
- package/dist/index-CjVEjOw0.d.mts.map +0 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { t as StandardSchemaV1 } from "./index-CeEtxDmK.mjs";
|
|
2
2
|
import { c as Topic, l as TopicEvents, u as TopicMessage } from "./Construct-QXnl3VqT.mjs";
|
|
3
|
-
import { c as ServicesOf, r as Consumable } from "./construct-interface-
|
|
4
|
-
import { n as SubscriberHandler, t as Subscriber } from "./Subscriber-
|
|
3
|
+
import { c as ServicesOf, r as Consumable } from "./construct-interface-DluK3_da.mjs";
|
|
4
|
+
import { n as SubscriberHandler, t as Subscriber } from "./Subscriber-CtN9R48-.mjs";
|
|
5
5
|
import { EventPublisher, ExtractPublisherMessage } from "@geekmidas/events";
|
|
6
6
|
import { Service } from "@geekmidas/services";
|
|
7
7
|
import { Logger } from "@geekmidas/logger";
|
|
8
8
|
//#region src/subscribers/SubscriberBuilder.d.ts
|
|
9
|
-
declare class SubscriberBuilder<TServices extends Service[] = [], TLogger extends Logger = Logger, OutSchema extends StandardSchemaV1 | undefined = undefined, TEventPublisher extends EventPublisher<any> | undefined = undefined, TSubscribedEvents extends any[] = []> {
|
|
9
|
+
declare class SubscriberBuilder<TServices extends Service[] = [], TLogger extends Logger = Logger, OutSchema extends StandardSchemaV1 | undefined = undefined, TEventPublisher extends EventPublisher<any> | undefined = undefined, TSubscribedEvents extends any[] = [], TDatabase = undefined, TDatabaseServiceName extends string = string> {
|
|
10
10
|
private _subscribedEvents;
|
|
11
11
|
private _timeout?;
|
|
12
12
|
private outputSchema?;
|
|
@@ -20,6 +20,10 @@ declare class SubscriberBuilder<TServices extends Service[] = [], TLogger extend
|
|
|
20
20
|
*/
|
|
21
21
|
_owner?: string;
|
|
22
22
|
private _topicName?;
|
|
23
|
+
/** What the handler's `db` comes from — the worker's, unless overridden. */
|
|
24
|
+
private _databaseService?;
|
|
25
|
+
/** The edge `.database()` added, so the next one can replace it. */
|
|
26
|
+
private _databaseEdge?;
|
|
23
27
|
constructor();
|
|
24
28
|
/**
|
|
25
29
|
* Bind this subscriber to a {@link Topic}: the subscribable event types (and
|
|
@@ -30,9 +34,9 @@ declare class SubscriberBuilder<TServices extends Service[] = [], TLogger extend
|
|
|
30
34
|
* topic's publisher connection string (least privilege). One that publishes
|
|
31
35
|
* follow-up events depends on the topic it publishes to: `.dependsOn([orders])`.
|
|
32
36
|
*/
|
|
33
|
-
topic<TName extends string, TEvents extends TopicEvents>(topic: Topic<TName, TEvents>): SubscriberBuilder<TServices, TLogger, OutSchema, EventPublisher<TopicMessage<TEvents>>, TSubscribedEvents>;
|
|
37
|
+
topic<TName extends string, TEvents extends TopicEvents>(topic: Topic<TName, TEvents>): SubscriberBuilder<TServices, TLogger, OutSchema, EventPublisher<TopicMessage<TEvents>>, TSubscribedEvents, TDatabase, TDatabaseServiceName>;
|
|
34
38
|
timeout(timeout: number): this;
|
|
35
|
-
output<T extends StandardSchemaV1>(schema: T): SubscriberBuilder<TServices, TLogger, T, TEventPublisher, TSubscribedEvents>;
|
|
39
|
+
output<T extends StandardSchemaV1>(schema: T): SubscriberBuilder<TServices, TLogger, T, TEventPublisher, TSubscribedEvents, TDatabase, TDatabaseServiceName>;
|
|
36
40
|
/**
|
|
37
41
|
* Depend on constructs — a database, a bucket, a mail sender, a queue, a
|
|
38
42
|
* topic.
|
|
@@ -44,12 +48,20 @@ declare class SubscriberBuilder<TServices extends Service[] = [], TLogger extend
|
|
|
44
48
|
* Constructs only. A `Service` does not match the shape, which is what keeps
|
|
45
49
|
* env sniffing confined to `.services()` and the explicit lift.
|
|
46
50
|
*/
|
|
47
|
-
dependsOn<const T extends readonly Consumable[]>(constructs: T): SubscriberBuilder<[...TServices, ...ServicesOf<T>], TLogger, OutSchema, TEventPublisher, TSubscribedEvents>;
|
|
48
|
-
services<T extends Service[]>(services: T): SubscriberBuilder<[...TServices, ...T], TLogger, OutSchema, TEventPublisher, TSubscribedEvents>;
|
|
49
|
-
logger<T extends Logger>(logger: T): SubscriberBuilder<TServices, T, OutSchema, TEventPublisher, TSubscribedEvents>;
|
|
50
|
-
|
|
51
|
-
|
|
51
|
+
dependsOn<const T extends readonly Consumable[]>(constructs: T): SubscriberBuilder<[...TServices, ...ServicesOf<T>], TLogger, OutSchema, TEventPublisher, TSubscribedEvents, TDatabase, TDatabaseServiceName>;
|
|
52
|
+
services<T extends Service[]>(services: T): SubscriberBuilder<[...TServices, ...T], TLogger, OutSchema, TEventPublisher, TSubscribedEvents, TDatabase, TDatabaseServiceName>;
|
|
53
|
+
logger<T extends Logger>(logger: T): SubscriberBuilder<TServices, T, OutSchema, TEventPublisher, TSubscribedEvents, TDatabase, TDatabaseServiceName>;
|
|
54
|
+
/**
|
|
55
|
+
* The database the handler receives as `db`.
|
|
56
|
+
*
|
|
57
|
+
* A subscriber built from a worker already has the worker's, when the
|
|
58
|
+
* worker named one with `.database(db)`; this replaces it — the edge as well
|
|
59
|
+
* as the client — for a consumer that works against a different database.
|
|
60
|
+
*/
|
|
61
|
+
database<T, TDbName extends string>(source: Consumable<TDbName, T> | Service<TDbName, T>): SubscriberBuilder<TServices, TLogger, OutSchema, TEventPublisher, TSubscribedEvents, T, TDbName>;
|
|
62
|
+
subscribe<TEvent extends TEventPublisher extends EventPublisher<any> ? ExtractPublisherMessage<TEventPublisher>['type'] | ExtractPublisherMessage<TEventPublisher>['type'][] : never>(event: TEvent): SubscriberBuilder<TServices, TLogger, OutSchema, TEventPublisher, TEvent extends any[] ? [...TSubscribedEvents, ...TEvent] : [...TSubscribedEvents, TEvent], TDatabase, TDatabaseServiceName>;
|
|
63
|
+
handle(fn: SubscriberHandler<TEventPublisher, TSubscribedEvents, TServices, TLogger, OutSchema, TDatabase>): Subscriber<TServices, TLogger, OutSchema, TEventPublisher, TSubscribedEvents, TDatabase, TDatabaseServiceName>;
|
|
52
64
|
}
|
|
53
65
|
//#endregion
|
|
54
66
|
export { SubscriberBuilder as t };
|
|
55
|
-
//# sourceMappingURL=SubscriberBuilder-
|
|
67
|
+
//# sourceMappingURL=SubscriberBuilder-CuCMFpYW.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriberBuilder-CuCMFpYW.d.mts","names":[],"sources":["../src/subscribers/SubscriberBuilder.ts"],"mappings":";;;;;;;;cAoBa,kBACZ,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,kBAAkB,0CAClB,wBAAwB,6CACxB,sCACA,uBACA;UAEQ;UACA;UACA;UACA;;EAED;UACC;;;;;EAKD;UACC;;UAEA;;UAEA;EAER;;;;;;;;;;EAaA,MAAM,sBAAsB,gBAAgB,aAC3C,OAAO,MAAM,OAAO,WAClB,kBACF,WACA,SACA,WACA,eAAe,aAAa,WAC5B,mBACA,WACA;EAeD,QAAQ;EAIR,OAAO,UAAU,kBAChB,QAAQ,IACN,kBACF,WACA,SACA,GACA,iBACA,mBACA,WACA;;;;;;;;;;;;EAkBD,gBAAgB,mBAAmB,cAClC,YAAY,IACV,sBACE,cAAc,WAAW,KAC7B,SACA,WACA,iBACA,mBACA,WACA;EAyBD,SAAS,UAAU,WAClB,UAAU,IACR,sBACE,cAAc,IAClB,SACA,WACA,iBACA,mBACA,WACA;EAOD,OAAO,UAAU,QAChB,QAAQ,IACN,kBACF,WACA,GACA,WACA,iBACA,mBACA,WACA;;;;;;;;EAYD,SAAS,GAAG,wBACX,QAAQ,WAAW,SAAS,KAAK,QAAQ,SAAS,KAChD,kBACF,WACA,SACA,WACA,iBACA,mBACA,GACA;EAwBD,UACC,eAAe,wBAAwB,sBAElC,wBAAwB,2BACxB,wBAAwB,oCAG7B,OAAO,SACL,kBACF,WACA,SACA,WACA,iBACA,2BACO,sBAAsB,cACtB,mBAAmB,SAC1B,WACA;EAQD,OACC,IAAI,kBACH,iBACA,mBACA,WACA,SACA,WACA,aAEC,WACF,WACA,SACA,WACA,iBACA,mBACA,WACA"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import { t as Construct } from "./Construct-BO1X-kt9.mjs";
|
|
2
|
-
import { idsOf, servicesOf } from "./construct-interface.mjs";
|
|
2
|
+
import { databaseEdges, idsOf, serviceOf, servicesOf } from "./construct-interface.mjs";
|
|
3
3
|
import { t as cloneWith } from "./clone-EKNovYHu.mjs";
|
|
4
4
|
import { DEFAULT_LOGGER } from "@geekmidas/logger/console";
|
|
5
5
|
//#region src/subscribers/Subscriber.ts
|
|
6
|
+
/**
|
|
7
|
+
* A runnable that consumes a topic. Its handler gets `db` when it has a
|
|
8
|
+
* database: the worker's, declared once with `worker.database(db)`, or its own
|
|
9
|
+
* with `.database(other)`.
|
|
10
|
+
*/
|
|
6
11
|
var Subscriber = class extends Construct {
|
|
7
12
|
handler;
|
|
8
13
|
timeout;
|
|
@@ -15,7 +20,7 @@ var Subscriber = class extends Construct {
|
|
|
15
20
|
static isSubscriber(obj) {
|
|
16
21
|
return Boolean(obj && obj.__IS_SUBSCRIBER__ === true && obj.type === "dev.geekmidas.function.subscriber");
|
|
17
22
|
}
|
|
18
|
-
constructor(handler, timeout = 3e4, _subscribedEvents, outputSchema, services = [], logger = DEFAULT_LOGGER, topicName, constructs = []) {
|
|
23
|
+
constructor(handler, timeout = 3e4, _subscribedEvents, outputSchema, services = [], logger = DEFAULT_LOGGER, topicName, constructs = [], databaseService) {
|
|
19
24
|
super("dev.geekmidas.function.subscriber", logger, services, [], outputSchema, timeout, void 0, void 0, constructs);
|
|
20
25
|
this.handler = handler;
|
|
21
26
|
this.timeout = timeout;
|
|
@@ -24,6 +29,7 @@ var Subscriber = class extends Construct {
|
|
|
24
29
|
this.services = services;
|
|
25
30
|
this.logger = logger;
|
|
26
31
|
this.topicName = topicName;
|
|
32
|
+
this.databaseService = databaseService;
|
|
27
33
|
}
|
|
28
34
|
get subscribedEvents() {
|
|
29
35
|
return this._subscribedEvents;
|
|
@@ -45,6 +51,10 @@ var SubscriberBuilder = class {
|
|
|
45
51
|
*/
|
|
46
52
|
_owner;
|
|
47
53
|
_topicName;
|
|
54
|
+
/** What the handler's `db` comes from — the worker's, unless overridden. */
|
|
55
|
+
_databaseService;
|
|
56
|
+
/** The edge `.database()` added, so the next one can replace it. */
|
|
57
|
+
_databaseEdge;
|
|
48
58
|
constructor() {
|
|
49
59
|
this._timeout = 3e4;
|
|
50
60
|
}
|
|
@@ -90,12 +100,30 @@ var SubscriberBuilder = class {
|
|
|
90
100
|
logger(logger) {
|
|
91
101
|
return cloneWith(this, { _logger: logger });
|
|
92
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* The database the handler receives as `db`.
|
|
105
|
+
*
|
|
106
|
+
* A subscriber built from a worker already has the worker's, when the
|
|
107
|
+
* worker named one with `.database(db)`; this replaces it — the edge as well
|
|
108
|
+
* as the client — for a consumer that works against a different database.
|
|
109
|
+
*/
|
|
110
|
+
database(source) {
|
|
111
|
+
return cloneWith(this, {
|
|
112
|
+
_databaseService: serviceOf(source),
|
|
113
|
+
...databaseEdges({
|
|
114
|
+
constructs: this._constructs,
|
|
115
|
+
edge: this._databaseEdge,
|
|
116
|
+
service: this._databaseService,
|
|
117
|
+
services: this._services
|
|
118
|
+
}, source)
|
|
119
|
+
});
|
|
120
|
+
}
|
|
93
121
|
subscribe(event) {
|
|
94
122
|
const eventsToAdd = Array.isArray(event) ? event : [event];
|
|
95
123
|
return cloneWith(this, { _subscribedEvents: [...this._subscribedEvents, ...eventsToAdd] });
|
|
96
124
|
}
|
|
97
125
|
handle(fn) {
|
|
98
|
-
const subscriber = new Subscriber(fn, this._timeout, this._subscribedEvents, this.outputSchema, this._services, this._logger, this._topicName, this._constructs);
|
|
126
|
+
const subscriber = new Subscriber(fn, this._timeout, this._subscribedEvents, this.outputSchema, this._services, this._logger, this._topicName, this._constructs, this._databaseService);
|
|
99
127
|
subscriber.owner = this._owner;
|
|
100
128
|
return subscriber;
|
|
101
129
|
}
|
|
@@ -103,4 +131,4 @@ var SubscriberBuilder = class {
|
|
|
103
131
|
//#endregion
|
|
104
132
|
export { Subscriber as n, SubscriberBuilder as t };
|
|
105
133
|
|
|
106
|
-
//# sourceMappingURL=SubscriberBuilder-
|
|
134
|
+
//# sourceMappingURL=SubscriberBuilder-DMFk_Ap1.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriberBuilder-DMFk_Ap1.mjs","names":[],"sources":["../src/subscribers/Subscriber.ts","../src/subscribers/SubscriberBuilder.ts"],"sourcesContent":["import type {\n\tEventPublisher,\n\tExtractPublisherMessage,\n} from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { DEFAULT_LOGGER } from '@geekmidas/logger/console';\nimport type { InferStandardSchema } from '@geekmidas/schema';\nimport type { Service, ServiceRecord } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { Construct, ConstructType } from '../Construct';\nimport type { DatabaseContext } from '../functions/Function';\n\n// Helper type to extract payload types for subscribed events\ntype ExtractEventPayloads<\n\tTPublisher extends EventPublisher<any> | undefined,\n\tTEventTypes extends any[],\n> = TPublisher extends EventPublisher<any>\n\t? Extract<ExtractPublisherMessage<TPublisher>, { type: TEventTypes[number] }>\n\t: never;\n\n/**\n * A runnable that consumes a topic. Its handler gets `db` when it has a\n * database: the worker's, declared once with `worker.database(db)`, or its own\n * with `.database(other)`.\n */\nexport class Subscriber<\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\t/** The topic's message union — what types the events this subscriber receives. */\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTSubscribedEvents extends\n\t\tExtractPublisherMessage<TEventPublisher>['type'][] = ExtractPublisherMessage<TEventPublisher>['type'][],\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n> extends Construct<\n\tTLogger,\n\tOutSchema,\n\tTServices,\n\tstring,\n\tundefined,\n\tTDatabaseServiceName,\n\tTDatabase\n> {\n\t__IS_SUBSCRIBER__ = true;\n\n\tstatic isSubscriber(\n\t\tobj: any,\n\t): obj is Subscriber<any, any, any, any, any, any> {\n\t\treturn Boolean(\n\t\t\tobj &&\n\t\t\t\tobj.__IS_SUBSCRIBER__ === true &&\n\t\t\t\tobj.type === ConstructType.Subscriber,\n\t\t);\n\t}\n\n\tconstructor(\n\t\tpublic readonly handler: SubscriberHandler<\n\t\t\tTEventPublisher,\n\t\t\tTSubscribedEvents,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTDatabase\n\t\t>,\n\t\tpublic override readonly timeout: number = 30000,\n\t\tprotected _subscribedEvents?: TSubscribedEvents,\n\t\tpublic override readonly outputSchema?: OutSchema,\n\t\tpublic override readonly services: TServices = [] as unknown as TServices,\n\t\tpublic override readonly logger: TLogger = DEFAULT_LOGGER as TLogger,\n\t\t/**\n\t\t * The name of the {@link Topic} this subscriber binds to (via\n\t\t * `worker.topic(topic)`), recorded for the manifest so infra wires the\n\t\t * SNS subscription.\n\t\t */\n\t\tpublic readonly topicName?: string,\n\t\t/**\n\t\t * The construct ids `.dependsOn()` named — last, so no existing positional\n\t\t * argument moves.\n\t\t */\n\t\tconstructs: string[] = [],\n\t\t/**\n\t\t * What the handler's `db` is registered from — after `constructs`, for\n\t\t * the same reason.\n\t\t */\n\t\tdatabaseService?: Service<TDatabaseServiceName, TDatabase>,\n\t) {\n\t\tsuper(\n\t\t\tConstructType.Subscriber,\n\t\t\tlogger,\n\t\t\tservices,\n\t\t\t[],\n\t\t\toutputSchema,\n\t\t\ttimeout,\n\t\t\tundefined, // memorySize\n\t\t\tundefined, // auditorStorageService\n\t\t\tconstructs,\n\t\t);\n\n\t\tthis.databaseService = databaseService;\n\t}\n\n\tget subscribedEvents(): TSubscribedEvents | undefined {\n\t\treturn this._subscribedEvents;\n\t}\n}\n\n// Handler type for subscribers that receives an array of events\nexport type SubscriberHandler<\n\tTEventPublisher extends EventPublisher<any> | undefined,\n\tTSubscribedEvents extends ExtractPublisherMessage<TEventPublisher>['type'][],\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTDatabase = undefined,\n> = (\n\tctx: SubscriberContext<\n\t\tTEventPublisher,\n\t\tTSubscribedEvents,\n\t\tTServices,\n\t\tTLogger,\n\t\tTDatabase\n\t>,\n) => OutSchema extends StandardSchemaV1\n\t? InferStandardSchema<OutSchema> | Promise<InferStandardSchema<OutSchema>>\n\t: any | Promise<any>;\n\n// Context type for subscriber handlers — `db` only when a database is set.\nexport type SubscriberContext<\n\tTEventPublisher extends EventPublisher<any> | undefined,\n\tTSubscribedEvents extends ExtractPublisherMessage<TEventPublisher>['type'][],\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tTDatabase = undefined,\n> = {\n\tevents: ExtractEventPayloads<TEventPublisher, TSubscribedEvents>[];\n\tservices: ServiceRecord<TServices>;\n\tlogger: TLogger;\n} & DatabaseContext<TDatabase>;\n","import type {\n\tEventPublisher,\n\tExtractPublisherMessage,\n} from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { DEFAULT_LOGGER } from '@geekmidas/logger/console';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { cloneWith } from '../clone';\nimport {\n\ttype Consumable,\n\tdatabaseEdges,\n\tidsOf,\n\ttype ServicesOf,\n\tserviceOf,\n\tservicesOf,\n} from '../construct-interface';\nimport type { Topic, TopicEvents, TopicMessage } from '../topic/Topic';\nimport { Subscriber, type SubscriberHandler } from './Subscriber';\n\nexport class SubscriberBuilder<\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTSubscribedEvents extends any[] = [],\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n> {\n\tprivate _subscribedEvents: TSubscribedEvents = [] as any;\n\tprivate _timeout?: number;\n\tprivate outputSchema?: OutSchema;\n\tprivate _services: TServices = [] as Service[] as TServices;\n\t/** The construct ids `.dependsOn()` named — what the manifest records. */\n\tpublic _constructs: string[] = [];\n\tprivate _logger: TLogger = DEFAULT_LOGGER;\n\t/**\n\t * The deploy unit that runs this, by construct id. Seeded by the factory a\n\t * `Worker` hands out, so a subscriber is not owned by its directory.\n\t */\n\tpublic _owner?: string;\n\tprivate _topicName?: string;\n\t/** What the handler's `db` comes from — the worker's, unless overridden. */\n\tprivate _databaseService?: Service<TDatabaseServiceName, TDatabase>;\n\t/** The edge `.database()` added, so the next one can replace it. */\n\tprivate _databaseEdge?: string;\n\n\tconstructor() {\n\t\tthis._timeout = 30000; // Default timeout\n\t}\n\n\t/**\n\t * Bind this subscriber to a {@link Topic}: the subscribable event types (and\n\t * their payloads) come from the topic's contract, and the binding is recorded\n\t * for the manifest, so infra wires the SNS subscription.\n\t *\n\t * A consumer does not publish, so binding a topic does *not* hand it the\n\t * topic's publisher connection string (least privilege). One that publishes\n\t * follow-up events depends on the topic it publishes to: `.dependsOn([orders])`.\n\t */\n\ttopic<TName extends string, TEvents extends TopicEvents>(\n\t\ttopic: Topic<TName, TEvents>,\n\t): SubscriberBuilder<\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tEventPublisher<TopicMessage<TEvents>>,\n\t\tTSubscribedEvents,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\t_topicName: topic.name,\n\t\t}) as unknown as SubscriberBuilder<\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tEventPublisher<TopicMessage<TEvents>>,\n\t\t\tTSubscribedEvents,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\ttimeout(timeout: number): this {\n\t\treturn cloneWith(this, { _timeout: timeout });\n\t}\n\n\toutput<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): SubscriberBuilder<\n\t\tTServices,\n\t\tTLogger,\n\t\tT,\n\t\tTEventPublisher,\n\t\tTSubscribedEvents,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\toutputSchema: schema as unknown as OutSchema,\n\t\t}) as any;\n\t}\n\n\t/**\n\t * Depend on constructs — a database, a bucket, a mail sender, a queue, a\n\t * topic.\n\t *\n\t * It records the edge and dissolves each construct's client into the\n\t * handler's service record under the construct's own id, so\n\t * `.dependsOn([uploads])` is what makes `services.uploads` exist and type.\n\t *\n\t * Constructs only. A `Service` does not match the shape, which is what keeps\n\t * env sniffing confined to `.services()` and the explicit lift.\n\t */\n\tdependsOn<const T extends readonly Consumable[]>(\n\t\tconstructs: T,\n\t): SubscriberBuilder<\n\t\t[...TServices, ...ServicesOf<T>],\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTSubscribedEvents,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\t// Both halves of the edge, from one call and one clone: the services the\n\t\t// handler runs with, and the ids the manifest records. Recording them\n\t\t// separately is what let them drift apart.\n\t\t//\n\t\t// `servicesOf` is the half that validates, so it runs first — recording\n\t\t// ids ahead of it left a caught `NotAConstruct` with `undefined` already\n\t\t// on a `string[]`.\n\t\tconst services = servicesOf(constructs) as unknown as Service[];\n\n\t\treturn cloneWith(this, {\n\t\t\t_services: [...this._services, ...services],\n\t\t\t_constructs: idsOf(constructs, this._constructs),\n\t\t}) as unknown as SubscriberBuilder<\n\t\t\t[...TServices, ...ServicesOf<T>],\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTSubscribedEvents,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\tservices<T extends Service[]>(\n\t\tservices: T,\n\t): SubscriberBuilder<\n\t\t[...TServices, ...T],\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTSubscribedEvents,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\t_services: [...this._services, ...services] as any,\n\t\t}) as any;\n\t}\n\n\tlogger<T extends Logger>(\n\t\tlogger: T,\n\t): SubscriberBuilder<\n\t\tTServices,\n\t\tT,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTSubscribedEvents,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, { _logger: logger as unknown as TLogger }) as any;\n\t}\n\n\t/**\n\t * The database the handler receives as `db`.\n\t *\n\t * A subscriber built from a worker already has the worker's, when the\n\t * worker named one with `.database(db)`; this replaces it — the edge as well\n\t * as the client — for a consumer that works against a different database.\n\t */\n\tdatabase<T, TDbName extends string>(\n\t\tsource: Consumable<TDbName, T> | Service<TDbName, T>,\n\t): SubscriberBuilder<\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTSubscribedEvents,\n\t\tT,\n\t\tTDbName\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\t_databaseService: serviceOf(source),\n\t\t\t...databaseEdges(\n\t\t\t\t{\n\t\t\t\t\tconstructs: this._constructs,\n\t\t\t\t\tedge: this._databaseEdge,\n\t\t\t\t\tservice: this._databaseService as Service | undefined,\n\t\t\t\t\tservices: this._services,\n\t\t\t\t},\n\t\t\t\tsource,\n\t\t\t),\n\t\t}) as unknown as SubscriberBuilder<\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTSubscribedEvents,\n\t\t\tT,\n\t\t\tTDbName\n\t\t>;\n\t}\n\n\tsubscribe<\n\t\tTEvent extends TEventPublisher extends EventPublisher<any>\n\t\t\t?\n\t\t\t\t\t| ExtractPublisherMessage<TEventPublisher>['type']\n\t\t\t\t\t| ExtractPublisherMessage<TEventPublisher>['type'][]\n\t\t\t: never,\n\t>(\n\t\tevent: TEvent,\n\t): SubscriberBuilder<\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEvent extends any[]\n\t\t\t? [...TSubscribedEvents, ...TEvent]\n\t\t\t: [...TSubscribedEvents, TEvent],\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tconst eventsToAdd = Array.isArray(event) ? event : [event];\n\t\treturn cloneWith(this, {\n\t\t\t_subscribedEvents: [...this._subscribedEvents, ...eventsToAdd] as any,\n\t\t}) as any;\n\t}\n\n\thandle(\n\t\tfn: SubscriberHandler<\n\t\t\tTEventPublisher,\n\t\t\tTSubscribedEvents,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTDatabase\n\t\t>,\n\t): Subscriber<\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTSubscribedEvents,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tconst subscriber = new Subscriber(\n\t\t\tfn,\n\t\t\tthis._timeout,\n\t\t\tthis._subscribedEvents,\n\t\t\tthis.outputSchema,\n\t\t\tthis._services,\n\t\t\tthis._logger,\n\t\t\tthis._topicName,\n\t\t\tthis._constructs,\n\t\t\tthis._databaseService,\n\t\t);\n\n\t\t// Which process runs it. Carried from the factory rather than inferred\n\t\t// from the directory the file happens to sit in.\n\t\tsubscriber.owner = this._owner;\n\n\t\t// No reset: `.handle()` reads this builder and leaves it alone, so a\n\t\t// configured base stays usable for the next subscriber.\n\t\treturn subscriber;\n\t}\n}\n"],"mappings":";;;;;;;;;;AAyBA,IAAa,aAAb,cAUU,UAQR;CAcgB;CAQS;CACf;CACe;CACA;CACA;CAMT;CA/BjB,oBAAoB;CAEpB,OAAO,aACN,KACkD;EAClD,OAAO,QACN,OACC,IAAI,sBAAsB,QAC1B,IAAI,SAAA,mCACN;CACD;CAEA,YACC,SAQA,UAA2C,KAC3C,mBACA,cACA,WAA+C,CAAC,GAChD,SAA2C,gBAM3C,WAKA,aAAuB,CAAC,GAKxB,iBACC;EACD,MAAA,qCAEC,QACA,UACA,CAAC,GACD,cACA,SACA,KAAA,GACA,KAAA,GACA,UACD;EAxCgB,KAAA,UAAA;EAQS,KAAA,UAAA;EACf,KAAA,oBAAA;EACe,KAAA,eAAA;EACA,KAAA,WAAA;EACA,KAAA,SAAA;EAMT,KAAA,YAAA;EAwBhB,KAAK,kBAAkB;CACxB;CAEA,IAAI,mBAAkD;EACrD,OAAO,KAAK;CACb;AACD;;;ACrFA,IAAa,oBAAb,MAQE;CACD,oBAA+C,CAAC;CAChD;CACA;CACA,YAA+B,CAAC;;CAEhC,cAA+B,CAAC;CAChC,UAA2B;;;;;CAK3B;CACA;;CAEA;;CAEA;CAEA,cAAc;EACb,KAAK,WAAW;CACjB;;;;;;;;;;CAWA,MACC,OASC;EACD,OAAO,UAAU,MAAM,EACtB,YAAY,MAAM,KACnB,CAAC;CASF;CAEA,QAAQ,SAAuB;EAC9B,OAAO,UAAU,MAAM,EAAE,UAAU,QAAQ,CAAC;CAC7C;CAEA,OACC,QASC;EACD,OAAO,UAAU,MAAM,EACtB,cAAc,OACf,CAAC;CACF;;;;;;;;;;;;CAaA,UACC,YASC;EAQD,MAAM,WAAW,WAAW,UAAU;EAEtC,OAAO,UAAU,MAAM;GACtB,WAAW,CAAC,GAAG,KAAK,WAAW,GAAG,QAAQ;GAC1C,aAAa,MAAM,YAAY,KAAK,WAAW;EAChD,CAAC;CASF;CAEA,SACC,UASC;EACD,OAAO,UAAU,MAAM,EACtB,WAAW,CAAC,GAAG,KAAK,WAAW,GAAG,QAAQ,EAC3C,CAAC;CACF;CAEA,OACC,QASC;EACD,OAAO,UAAU,MAAM,EAAE,SAAS,OAA6B,CAAC;CACjE;;;;;;;;CASA,SACC,QASC;EACD,OAAO,UAAU,MAAM;GACtB,kBAAkB,UAAU,MAAM;GAClC,GAAG,cACF;IACC,YAAY,KAAK;IACjB,MAAM,KAAK;IACX,SAAS,KAAK;IACd,UAAU,KAAK;GAChB,GACA,MACD;EACD,CAAC;CASF;CAEA,UAOC,OAWC;EACD,MAAM,cAAc,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;EACzD,OAAO,UAAU,MAAM,EACtB,mBAAmB,CAAC,GAAG,KAAK,mBAAmB,GAAG,WAAW,EAC9D,CAAC;CACF;CAEA,OACC,IAgBC;EACD,MAAM,aAAa,IAAI,WACtB,IACA,KAAK,UACL,KAAK,mBACL,KAAK,cACL,KAAK,WACL,KAAK,SACL,KAAK,YACL,KAAK,aACL,KAAK,gBACN;EAIA,WAAW,QAAQ,KAAK;EAIxB,OAAO;CACR;AACD"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { t as StandardSchemaV1 } from "./index-CeEtxDmK.cjs";
|
|
2
2
|
import { c as Topic, l as TopicEvents, u as TopicMessage } from "./Construct-BQALFCh2.cjs";
|
|
3
|
-
import { c as ServicesOf, r as Consumable } from "./construct-interface-
|
|
4
|
-
import { n as SubscriberHandler, t as Subscriber } from "./Subscriber-
|
|
3
|
+
import { c as ServicesOf, r as Consumable } from "./construct-interface-B1AfqRl4.cjs";
|
|
4
|
+
import { n as SubscriberHandler, t as Subscriber } from "./Subscriber-Bpp02cGr.cjs";
|
|
5
5
|
import { Logger } from "@geekmidas/logger";
|
|
6
6
|
import { Service } from "@geekmidas/services";
|
|
7
7
|
import { EventPublisher, ExtractPublisherMessage } from "@geekmidas/events";
|
|
8
8
|
//#region src/subscribers/SubscriberBuilder.d.ts
|
|
9
|
-
declare class SubscriberBuilder<TServices extends Service[] = [], TLogger extends Logger = Logger, OutSchema extends StandardSchemaV1 | undefined = undefined, TEventPublisher extends EventPublisher<any> | undefined = undefined, TSubscribedEvents extends any[] = []> {
|
|
9
|
+
declare class SubscriberBuilder<TServices extends Service[] = [], TLogger extends Logger = Logger, OutSchema extends StandardSchemaV1 | undefined = undefined, TEventPublisher extends EventPublisher<any> | undefined = undefined, TSubscribedEvents extends any[] = [], TDatabase = undefined, TDatabaseServiceName extends string = string> {
|
|
10
10
|
private _subscribedEvents;
|
|
11
11
|
private _timeout?;
|
|
12
12
|
private outputSchema?;
|
|
@@ -20,6 +20,10 @@ declare class SubscriberBuilder<TServices extends Service[] = [], TLogger extend
|
|
|
20
20
|
*/
|
|
21
21
|
_owner?: string;
|
|
22
22
|
private _topicName?;
|
|
23
|
+
/** What the handler's `db` comes from — the worker's, unless overridden. */
|
|
24
|
+
private _databaseService?;
|
|
25
|
+
/** The edge `.database()` added, so the next one can replace it. */
|
|
26
|
+
private _databaseEdge?;
|
|
23
27
|
constructor();
|
|
24
28
|
/**
|
|
25
29
|
* Bind this subscriber to a {@link Topic}: the subscribable event types (and
|
|
@@ -30,9 +34,9 @@ declare class SubscriberBuilder<TServices extends Service[] = [], TLogger extend
|
|
|
30
34
|
* topic's publisher connection string (least privilege). One that publishes
|
|
31
35
|
* follow-up events depends on the topic it publishes to: `.dependsOn([orders])`.
|
|
32
36
|
*/
|
|
33
|
-
topic<TName extends string, TEvents extends TopicEvents>(topic: Topic<TName, TEvents>): SubscriberBuilder<TServices, TLogger, OutSchema, EventPublisher<TopicMessage<TEvents>>, TSubscribedEvents>;
|
|
37
|
+
topic<TName extends string, TEvents extends TopicEvents>(topic: Topic<TName, TEvents>): SubscriberBuilder<TServices, TLogger, OutSchema, EventPublisher<TopicMessage<TEvents>>, TSubscribedEvents, TDatabase, TDatabaseServiceName>;
|
|
34
38
|
timeout(timeout: number): this;
|
|
35
|
-
output<T extends StandardSchemaV1>(schema: T): SubscriberBuilder<TServices, TLogger, T, TEventPublisher, TSubscribedEvents>;
|
|
39
|
+
output<T extends StandardSchemaV1>(schema: T): SubscriberBuilder<TServices, TLogger, T, TEventPublisher, TSubscribedEvents, TDatabase, TDatabaseServiceName>;
|
|
36
40
|
/**
|
|
37
41
|
* Depend on constructs — a database, a bucket, a mail sender, a queue, a
|
|
38
42
|
* topic.
|
|
@@ -44,12 +48,20 @@ declare class SubscriberBuilder<TServices extends Service[] = [], TLogger extend
|
|
|
44
48
|
* Constructs only. A `Service` does not match the shape, which is what keeps
|
|
45
49
|
* env sniffing confined to `.services()` and the explicit lift.
|
|
46
50
|
*/
|
|
47
|
-
dependsOn<const T extends readonly Consumable[]>(constructs: T): SubscriberBuilder<[...TServices, ...ServicesOf<T>], TLogger, OutSchema, TEventPublisher, TSubscribedEvents>;
|
|
48
|
-
services<T extends Service[]>(services: T): SubscriberBuilder<[...TServices, ...T], TLogger, OutSchema, TEventPublisher, TSubscribedEvents>;
|
|
49
|
-
logger<T extends Logger>(logger: T): SubscriberBuilder<TServices, T, OutSchema, TEventPublisher, TSubscribedEvents>;
|
|
50
|
-
|
|
51
|
-
|
|
51
|
+
dependsOn<const T extends readonly Consumable[]>(constructs: T): SubscriberBuilder<[...TServices, ...ServicesOf<T>], TLogger, OutSchema, TEventPublisher, TSubscribedEvents, TDatabase, TDatabaseServiceName>;
|
|
52
|
+
services<T extends Service[]>(services: T): SubscriberBuilder<[...TServices, ...T], TLogger, OutSchema, TEventPublisher, TSubscribedEvents, TDatabase, TDatabaseServiceName>;
|
|
53
|
+
logger<T extends Logger>(logger: T): SubscriberBuilder<TServices, T, OutSchema, TEventPublisher, TSubscribedEvents, TDatabase, TDatabaseServiceName>;
|
|
54
|
+
/**
|
|
55
|
+
* The database the handler receives as `db`.
|
|
56
|
+
*
|
|
57
|
+
* A subscriber built from a worker already has the worker's, when the
|
|
58
|
+
* worker named one with `.database(db)`; this replaces it — the edge as well
|
|
59
|
+
* as the client — for a consumer that works against a different database.
|
|
60
|
+
*/
|
|
61
|
+
database<T, TDbName extends string>(source: Consumable<TDbName, T> | Service<TDbName, T>): SubscriberBuilder<TServices, TLogger, OutSchema, TEventPublisher, TSubscribedEvents, T, TDbName>;
|
|
62
|
+
subscribe<TEvent extends TEventPublisher extends EventPublisher<any> ? ExtractPublisherMessage<TEventPublisher>['type'] | ExtractPublisherMessage<TEventPublisher>['type'][] : never>(event: TEvent): SubscriberBuilder<TServices, TLogger, OutSchema, TEventPublisher, TEvent extends any[] ? [...TSubscribedEvents, ...TEvent] : [...TSubscribedEvents, TEvent], TDatabase, TDatabaseServiceName>;
|
|
63
|
+
handle(fn: SubscriberHandler<TEventPublisher, TSubscribedEvents, TServices, TLogger, OutSchema, TDatabase>): Subscriber<TServices, TLogger, OutSchema, TEventPublisher, TSubscribedEvents, TDatabase, TDatabaseServiceName>;
|
|
52
64
|
}
|
|
53
65
|
//#endregion
|
|
54
66
|
export { SubscriberBuilder as t };
|
|
55
|
-
//# sourceMappingURL=SubscriberBuilder-
|
|
67
|
+
//# sourceMappingURL=SubscriberBuilder-g3fAVWgs.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriberBuilder-g3fAVWgs.d.cts","names":[],"sources":["../src/subscribers/SubscriberBuilder.ts"],"mappings":";;;;;;;;cAoBa,kBACZ,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,kBAAkB,0CAClB,wBAAwB,6CACxB,sCACA,uBACA;UAEQ;UACA;UACA;UACA;;EAED;UACC;;;;;EAKD;UACC;;UAEA;;UAEA;EAER;;;;;;;;;;EAaA,MAAM,sBAAsB,gBAAgB,aAC3C,OAAO,MAAM,OAAO,WAClB,kBACF,WACA,SACA,WACA,eAAe,aAAa,WAC5B,mBACA,WACA;EAeD,QAAQ;EAIR,OAAO,UAAU,kBAChB,QAAQ,IACN,kBACF,WACA,SACA,GACA,iBACA,mBACA,WACA;;;;;;;;;;;;EAkBD,gBAAgB,mBAAmB,cAClC,YAAY,IACV,sBACE,cAAc,WAAW,KAC7B,SACA,WACA,iBACA,mBACA,WACA;EAyBD,SAAS,UAAU,WAClB,UAAU,IACR,sBACE,cAAc,IAClB,SACA,WACA,iBACA,mBACA,WACA;EAOD,OAAO,UAAU,QAChB,QAAQ,IACN,kBACF,WACA,GACA,WACA,iBACA,mBACA,WACA;;;;;;;;EAYD,SAAS,GAAG,wBACX,QAAQ,WAAW,SAAS,KAAK,QAAQ,SAAS,KAChD,kBACF,WACA,SACA,WACA,iBACA,mBACA,GACA;EAwBD,UACC,eAAe,wBAAwB,sBAElC,wBAAwB,2BACxB,wBAAwB,oCAG7B,OAAO,SACL,kBACF,WACA,SACA,WACA,iBACA,2BACO,sBAAsB,cACtB,mBAAmB,SAC1B,WACA;EAQD,OACC,IAAI,kBACH,iBACA,mBACA,WACA,SACA,WACA,aAEC,WACF,WACA,SACA,WACA,iBACA,mBACA,WACA"}
|
package/dist/adaptors/aws.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_rolldown_runtime = require("../rolldown-runtime-y5ARvAq5.cjs");
|
|
3
|
-
const require_functions = require("../functions-
|
|
4
|
-
const require_Endpoint = require("../Endpoint-
|
|
3
|
+
const require_functions = require("../functions-CbP5ZKma.cjs");
|
|
4
|
+
const require_Endpoint = require("../Endpoint-wSCHSnqb.cjs");
|
|
5
5
|
const require_surfaceEnv = require("../surfaceEnv-CNimK76p.cjs");
|
|
6
6
|
const require_lazyAccessors = require("../lazyAccessors-hJKGv8Ay.cjs");
|
|
7
7
|
const require_processAudits = require("../processAudits-D_2W5x8k.cjs");
|
|
@@ -625,6 +625,12 @@ var AWSLambdaQueue = class {
|
|
|
625
625
|
this._services = this.queue.services.length > 0 ? await serviceDiscovery.register(this.queue.services) : {};
|
|
626
626
|
return this._services;
|
|
627
627
|
}
|
|
628
|
+
/** The queue's database, registered as functions register theirs. */
|
|
629
|
+
async getDatabase() {
|
|
630
|
+
const service = this.queue.databaseService;
|
|
631
|
+
if (!service) return void 0;
|
|
632
|
+
return (await _geekmidas_services.ServiceDiscovery.getInstance(this.envParser).register([service]))[service.serviceName];
|
|
633
|
+
}
|
|
628
634
|
safeJsonParse(value) {
|
|
629
635
|
try {
|
|
630
636
|
return JSON.parse(value);
|
|
@@ -650,6 +656,7 @@ var AWSLambdaQueue = class {
|
|
|
650
656
|
req: { id: context.awsRequestId }
|
|
651
657
|
});
|
|
652
658
|
const services = await this.getServices();
|
|
659
|
+
const db = await this.getDatabase();
|
|
653
660
|
const schema = this.queue.messageSchema;
|
|
654
661
|
const batchItemFailures = [];
|
|
655
662
|
const messages = [];
|
|
@@ -677,7 +684,8 @@ var AWSLambdaQueue = class {
|
|
|
677
684
|
await this.queue.handler({
|
|
678
685
|
messages,
|
|
679
686
|
services,
|
|
680
|
-
logger
|
|
687
|
+
logger,
|
|
688
|
+
db
|
|
681
689
|
});
|
|
682
690
|
} catch (error) {
|
|
683
691
|
logger.error((0, _geekmidas_errors.wrapError)(error), "Queue handler failed; retrying batch");
|
|
@@ -723,6 +731,12 @@ var AWSLambdaSubscriber = class {
|
|
|
723
731
|
} else this._services = {};
|
|
724
732
|
return this._services;
|
|
725
733
|
}
|
|
734
|
+
/** The subscriber's database, registered as functions register theirs. */
|
|
735
|
+
async getDatabase() {
|
|
736
|
+
const service = this.subscriber.databaseService;
|
|
737
|
+
if (!service) return void 0;
|
|
738
|
+
return (await _geekmidas_services.ServiceDiscovery.getInstance(this.envParser).register([service]))[service.serviceName];
|
|
739
|
+
}
|
|
726
740
|
error() {
|
|
727
741
|
return { onError: (req) => {
|
|
728
742
|
(req.event?.logger || this.subscriber.logger).error(req.error || {}, "Error processing subscriber");
|
|
@@ -745,6 +759,7 @@ var AWSLambdaSubscriber = class {
|
|
|
745
759
|
services() {
|
|
746
760
|
return { before: async (req) => {
|
|
747
761
|
req.event.services = await this.getServices();
|
|
762
|
+
req.event.db = await this.getDatabase();
|
|
748
763
|
} };
|
|
749
764
|
}
|
|
750
765
|
parseEvents() {
|
|
@@ -837,7 +852,8 @@ var AWSLambdaSubscriber = class {
|
|
|
837
852
|
const result = await this.subscriber.handler({
|
|
838
853
|
events: event.events,
|
|
839
854
|
services: event.services,
|
|
840
|
-
logger: event.logger
|
|
855
|
+
logger: event.logger,
|
|
856
|
+
db: event.db
|
|
841
857
|
});
|
|
842
858
|
if (this.subscriber.outputSchema && result) {
|
|
843
859
|
const validationResult = await this.subscriber.outputSchema["~standard"].validate(result);
|