@geekmidas/constructs 10.0.0-alpha.4 → 10.0.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/dist/{Cron-B2OFsfDM.d.cts → Cron-DmQ8vQ4b.d.cts} +10 -2
  2. package/dist/Cron-DmQ8vQ4b.d.cts.map +1 -0
  3. package/dist/{Cron-ByxdOfpE.d.mts → Cron-dh4rUgib.d.mts} +10 -2
  4. package/dist/Cron-dh4rUgib.d.mts.map +1 -0
  5. package/dist/{CronBuilder-LSJMfqnq.d.cts → CronBuilder-BquXDbDI.d.cts} +3 -3
  6. package/dist/{CronBuilder-BL0AP6fs.d.mts.map → CronBuilder-BquXDbDI.d.cts.map} +1 -1
  7. package/dist/{CronBuilder-BL0AP6fs.d.mts → CronBuilder-CGgY2080.d.mts} +3 -3
  8. package/dist/{CronBuilder-LSJMfqnq.d.cts.map → CronBuilder-CGgY2080.d.mts.map} +1 -1
  9. package/dist/{CronBuilder-CdibiHNB.mjs → CronBuilder-CYKT5RiO.mjs} +11 -2
  10. package/dist/CronBuilder-CYKT5RiO.mjs.map +1 -0
  11. package/dist/{CronBuilder-DyUr6nYz.cjs → CronBuilder-Da0C0edR.cjs} +11 -2
  12. package/dist/CronBuilder-Da0C0edR.cjs.map +1 -0
  13. package/dist/{Endpoint-2Wg7T7Cq.d.mts → Endpoint-BjWKinFA.d.mts} +2 -2
  14. package/dist/{Endpoint-2Wg7T7Cq.d.mts.map → Endpoint-BjWKinFA.d.mts.map} +1 -1
  15. package/dist/{Endpoint-Dij_wOcc.mjs → Endpoint-DCQPMdUX.mjs} +2 -2
  16. package/dist/{Endpoint-Dij_wOcc.mjs.map → Endpoint-DCQPMdUX.mjs.map} +1 -1
  17. package/dist/{Endpoint-DODn1RhN.cjs → Endpoint-DcWXE-SZ.cjs} +2 -2
  18. package/dist/{Endpoint-DODn1RhN.cjs.map → Endpoint-DcWXE-SZ.cjs.map} +1 -1
  19. package/dist/{Endpoint-DrD8a1yH.d.cts → Endpoint-dav89W6-.d.cts} +2 -2
  20. package/dist/Endpoint-dav89W6-.d.cts.map +1 -0
  21. package/dist/{EndpointFactory-BHFMmFkV.cjs → EndpointFactory-CdWB7wPw.cjs} +3 -3
  22. package/dist/{EndpointFactory-BHFMmFkV.cjs.map → EndpointFactory-CdWB7wPw.cjs.map} +1 -1
  23. package/dist/{EndpointFactory-b4ituq-s.mjs → EndpointFactory-CjV8F_lJ.mjs} +3 -3
  24. package/dist/{EndpointFactory-b4ituq-s.mjs.map → EndpointFactory-CjV8F_lJ.mjs.map} +1 -1
  25. package/dist/{HonoEndpointAdaptor-De6IlBZe.cjs → HonoEndpointAdaptor-DtL9j19R.cjs} +2 -2
  26. package/dist/{HonoEndpointAdaptor-De6IlBZe.cjs.map → HonoEndpointAdaptor-DtL9j19R.cjs.map} +1 -1
  27. package/dist/{HonoEndpointAdaptor-BM2jbWht.mjs → HonoEndpointAdaptor-P1ahhZHu.mjs} +2 -2
  28. package/dist/{HonoEndpointAdaptor-BM2jbWht.mjs.map → HonoEndpointAdaptor-P1ahhZHu.mjs.map} +1 -1
  29. package/dist/adaptors/aws.cjs +2 -2
  30. package/dist/adaptors/aws.d.cts +3 -3
  31. package/dist/adaptors/aws.d.mts +3 -3
  32. package/dist/adaptors/aws.mjs +2 -2
  33. package/dist/adaptors/hono.cjs +3 -3
  34. package/dist/adaptors/hono.d.cts +4 -4
  35. package/dist/adaptors/hono.d.mts +4 -4
  36. package/dist/adaptors/hono.mjs +3 -3
  37. package/dist/adaptors/testing.cjs +3 -3
  38. package/dist/adaptors/testing.d.cts +2 -2
  39. package/dist/adaptors/testing.d.mts +2 -2
  40. package/dist/adaptors/testing.mjs +3 -3
  41. package/dist/crons/index.cjs +66 -5
  42. package/dist/crons/index.cjs.map +1 -1
  43. package/dist/crons/index.d.cts +34 -10
  44. package/dist/crons/index.d.cts.map +1 -1
  45. package/dist/crons/index.d.mts +34 -10
  46. package/dist/crons/index.d.mts.map +1 -1
  47. package/dist/crons/index.mjs +65 -5
  48. package/dist/crons/index.mjs.map +1 -1
  49. package/dist/endpoints/index.cjs +3 -3
  50. package/dist/endpoints/index.d.cts +3 -3
  51. package/dist/endpoints/index.d.mts +3 -3
  52. package/dist/endpoints/index.mjs +3 -3
  53. package/dist/functions/index.cjs +2 -3
  54. package/dist/functions/index.d.cts +2 -2
  55. package/dist/functions/index.d.mts +2 -2
  56. package/dist/functions/index.mjs +2 -2
  57. package/dist/{functions-Ck21Uyq0.mjs → functions-14lpEFL4.mjs} +10 -6
  58. package/dist/functions-14lpEFL4.mjs.map +1 -0
  59. package/dist/{functions-DJJA7VGc.cjs → functions-i_la-N5r.cjs} +9 -11
  60. package/dist/functions-i_la-N5r.cjs.map +1 -0
  61. package/dist/{index-B8g8POkr.d.cts → index-Bd5FqCoe.d.cts} +3 -3
  62. package/dist/{index-BxHDdy6a.d.mts.map → index-Bd5FqCoe.d.cts.map} +1 -1
  63. package/dist/index-BknhM6Ux.d.mts +31 -0
  64. package/dist/index-BknhM6Ux.d.mts.map +1 -0
  65. package/dist/index-CBSfrowv.d.cts +31 -0
  66. package/dist/index-CBSfrowv.d.cts.map +1 -0
  67. package/dist/{index-AIfVzkhi.d.cts → index-D24Xm79M.d.cts} +10 -9
  68. package/dist/index-D24Xm79M.d.cts.map +1 -0
  69. package/dist/{index-CubPzHd9.d.mts → index-_ajboYxK.d.mts} +10 -9
  70. package/dist/index-_ajboYxK.d.mts.map +1 -0
  71. package/dist/{index-BxHDdy6a.d.mts → index-lAO9egTb.d.mts} +3 -3
  72. package/dist/{index-B8g8POkr.d.cts.map → index-lAO9egTb.d.mts.map} +1 -1
  73. package/dist/queue/index.d.cts +2 -2
  74. package/dist/queue/index.d.cts.map +1 -1
  75. package/dist/queue/index.d.mts +2 -2
  76. package/dist/rest-api.cjs +3 -3
  77. package/dist/rest-api.d.cts +3 -3
  78. package/dist/rest-api.d.mts +9 -9
  79. package/dist/rest-api.d.mts.map +1 -1
  80. package/dist/rest-api.mjs +3 -3
  81. package/dist/subscribers/index.cjs +1 -7
  82. package/dist/subscribers/index.d.cts +1 -9
  83. package/dist/subscribers/index.d.mts +1 -9
  84. package/dist/subscribers/index.mjs +1 -6
  85. package/dist/topic/index.d.cts +2 -30
  86. package/dist/topic/index.d.mts +2 -30
  87. package/dist/worker.cjs +98 -23
  88. package/dist/worker.cjs.map +1 -1
  89. package/dist/worker.d.cts +83 -32
  90. package/dist/worker.d.cts.map +1 -1
  91. package/dist/worker.d.mts +82 -32
  92. package/dist/worker.d.mts.map +1 -1
  93. package/dist/worker.mjs +98 -23
  94. package/dist/worker.mjs.map +1 -1
  95. package/package.json +30 -30
  96. package/dist/Cron-B2OFsfDM.d.cts.map +0 -1
  97. package/dist/Cron-ByxdOfpE.d.mts.map +0 -1
  98. package/dist/CronBuilder-CdibiHNB.mjs.map +0 -1
  99. package/dist/CronBuilder-DyUr6nYz.cjs.map +0 -1
  100. package/dist/Endpoint-DrD8a1yH.d.cts.map +0 -1
  101. package/dist/functions-Ck21Uyq0.mjs.map +0 -1
  102. package/dist/functions-DJJA7VGc.cjs.map +0 -1
  103. package/dist/index-AIfVzkhi.d.cts.map +0 -1
  104. package/dist/index-CubPzHd9.d.mts.map +0 -1
  105. package/dist/subscribers/index.cjs.map +0 -1
  106. package/dist/subscribers/index.d.cts.map +0 -1
  107. package/dist/subscribers/index.d.mts.map +0 -1
  108. package/dist/subscribers/index.mjs.map +0 -1
  109. package/dist/topic/index.d.cts.map +0 -1
  110. package/dist/topic/index.d.mts.map +0 -1
package/dist/worker.mjs CHANGED
@@ -1,9 +1,9 @@
1
1
  import "./Construct-BD5neF7w.mjs";
2
2
  import { edgeTo } from "./construct-interface-Z4CpS8tK.mjs";
3
- import { FunctionBuilder } from "./functions-Ck21Uyq0.mjs";
3
+ import { FunctionBuilder } from "./functions-14lpEFL4.mjs";
4
4
  import "./clone-DblgEZZa.mjs";
5
5
  import { envParserFor } from "./surfaceEnv-C3Ktahea.mjs";
6
- import { CronBuilder } from "./CronBuilder-CdibiHNB.mjs";
6
+ import { CronBuilder } from "./CronBuilder-CYKT5RiO.mjs";
7
7
  import { SubscriberBuilder } from "./SubscriberBuilder-BjkbeT9l.mjs";
8
8
  import { canonicalId } from "@geekmidas/manifest";
9
9
  import { DEFAULT_LOGGER } from "@geekmidas/logger/console";
@@ -15,7 +15,12 @@ var Worker = class Worker {
15
15
  logger;
16
16
  /** Always defined, and normally the default. */
17
17
  envParser;
18
- constructor(id, config = {}, dependencies = []) {
18
+ /**
19
+ * Where this worker's schedules live, when it has crons and a server runs
20
+ * them. `undefined` until `.database(…)` says.
21
+ */
22
+ scheduleStore;
23
+ constructor(id, config = {}, dependencies = [], scheduleStore) {
19
24
  this.config = config;
20
25
  this.dependencies = dependencies;
21
26
  const canonical = canonicalId(id);
@@ -25,37 +30,107 @@ var Worker = class Worker {
25
30
  id: canonical,
26
31
  envParser: config.envParser
27
32
  } : void 0);
33
+ this.scheduleStore = scheduleStore;
28
34
  }
29
35
  /**
30
- * This worker's cron factory, carrying its logger.
36
+ * The database this worker keeps its schedules in.
37
+ *
38
+ * Only a server target uses it. On AWS a cron is an EventBridge rule
39
+ * invoking a Lambda and nothing here is consulted — but a server has nothing
40
+ * firing its crons except itself, and a process that schedules in memory
41
+ * fires every job once per replica while reporting that all is well.
42
+ *
43
+ * So the store is declared rather than discovered. It could have been
44
+ * inferred — from a database the app happens to declare, or from the events
45
+ * backend when that backend is pg-boss — and both would work until an app
46
+ * had two databases, or moved its events to SNS, at which point the
47
+ * schedules would quietly move or stop. Naming it is one line and cannot
48
+ * drift.
31
49
  *
32
- * `export const c = crons.logger(logger)` written once and hung off the
33
- * thing that runs it, so a cron file opens with the schedule rather than
34
- * with an import of a logger it has to know the path to.
50
+ * @example
51
+ * ```ts
52
+ * export const jobs = new Worker('Jobs', { logger }).database(database);
53
+ * ```
35
54
  */
36
- get crons() {
37
- return this.own(new CronBuilder().logger(this.logger));
55
+ database(source) {
56
+ return new Worker(this.id, this.config, [...this.dependencies, edgeTo(source)], source);
38
57
  }
39
58
  /**
40
- * This worker's subscriber factory, carrying its logger.
59
+ * A scheduled runnable.
41
60
  *
42
- * Chain `.publisher(…)` before `.subscribe([…])`: the event names are typed
43
- * from the publisher's message union, so there is nothing to spell twice.
61
+ * @example `worker.cron('rate(1 day)').handle(async ({ logger }) => { … })`
44
62
  */
45
- get subscribers() {
46
- return this.own(new SubscriberBuilder().logger(this.logger));
63
+ cron(schedule) {
64
+ return this.own(new CronBuilder().logger(this.logger)).schedule(schedule);
47
65
  }
48
- /** This worker's function factory, carrying its logger. */
49
- get functions() {
50
- return this.own(new FunctionBuilder().logger(this.logger));
66
+ /**
67
+ * A runnable that consumes a topic.
68
+ *
69
+ * Binding is not publishing: a consumer is handed the topic's event types
70
+ * and no connection string it could publish with. Chain `.publishes(…)` when
71
+ * the handler emits follow-up events, which is the only reason it would need
72
+ * one.
73
+ *
74
+ * @example `worker.topic(users).subscribe(['user.created']).handle(…)`
75
+ */
76
+ topic(topic) {
77
+ return this.own(new SubscriberBuilder().logger(this.logger)).topic(topic);
51
78
  }
52
79
  /**
53
- * Sugar for the common case, the way `api.get()` is for `api.endpoints`.
80
+ * A runnable that consumes events typed from a publisher service.
54
81
  *
55
- * @example `worker.cron('rate(1 day)').handle(async ({ logger }) => { … })`
82
+ * The older of the two ways to bind a subscriber, kept for a project whose
83
+ * events come from a hand-written publisher rather than a `Topic`
84
+ * construct. `topic()` is the one to reach for: it types the events the same
85
+ * way and hands the consumer no connection string it could publish with.
56
86
  */
57
- cron(schedule) {
58
- return this.crons.schedule(schedule);
87
+ publisher(service) {
88
+ return this.own(new SubscriberBuilder().logger(this.logger)).publisher(service);
89
+ }
90
+ /**
91
+ * Everything below builds a function — the runnable with no schedule and no
92
+ * topic, invoked by something else.
93
+ *
94
+ * These sit on the worker rather than behind a `functions` namespace because
95
+ * the namespace was a hop that said nothing: `worker.functions.input(…)`
96
+ * names a collection to reach one member of it. What kind of runnable is
97
+ * being built is decided by which of these is called first — a schedule
98
+ * makes a cron, a topic makes a subscriber, and anything else makes a
99
+ * function.
100
+ */
101
+ input(schema) {
102
+ return this.functions.input(schema);
103
+ }
104
+ output(schema) {
105
+ return this.functions.output(schema);
106
+ }
107
+ timeout(ms) {
108
+ return this.functions.timeout(ms);
109
+ }
110
+ memorySize(mb) {
111
+ return this.functions.memorySize(mb);
112
+ }
113
+ dependsOn(constructs) {
114
+ return this.functions.dependsOn(constructs);
115
+ }
116
+ services(services) {
117
+ return this.functions.services(services);
118
+ }
119
+ /**
120
+ * A function with no input schema — the shortest runnable there is.
121
+ *
122
+ * @example `worker.handle(async ({ logger }) => { … })`
123
+ */
124
+ handle(...args) {
125
+ return this.schemalessFunction().handle(...args);
126
+ }
127
+ /** The builder `handle` delegates to, named so its type can be referred to. */
128
+ schemalessFunction() {
129
+ return this.functions;
130
+ }
131
+ /** The function builder the delegating methods above are built on. */
132
+ get functions() {
133
+ return this.own(new FunctionBuilder().logger(this.logger));
59
134
  }
60
135
  /**
61
136
  * Resources and surfaces this worker calls.
@@ -64,7 +139,7 @@ var Worker = class Worker {
64
139
  * environment and its access, the same distinction `RestApi.calls()` draws.
65
140
  */
66
141
  calls(constructs) {
67
- return new Worker(this.id, this.config, [...this.dependencies, ...constructs.map(edgeTo)]);
142
+ return new Worker(this.id, this.config, [...this.dependencies, ...constructs.map(edgeTo)], this.scheduleStore);
68
143
  }
69
144
  /**
70
145
  * Stamps this worker's id onto a builder, so everything built from it says
@@ -72,13 +147,13 @@ var Worker = class Worker {
72
147
  */
73
148
  own(builder) {
74
149
  builder._owner = this.id;
150
+ builder._scheduleStore = this.scheduleStore;
75
151
  return builder;
76
152
  }
77
153
  declare() {
78
154
  return [{
79
155
  kind: "worker",
80
156
  id: this.id,
81
- ...this.config.app ? { app: this.config.app } : {},
82
157
  ...this.dependencies.length ? { dependencies: this.dependencies } : {},
83
158
  provides: []
84
159
  }];
@@ -1 +1 @@
1
- {"version":3,"file":"worker.mjs","names":["id: ConstructName<TName>","config: WorkerConfig","dependencies: readonly Dependency[]","schedule: ScheduleExpression","constructs: readonly Declarable[]","builder: T"],"sources":["../src/worker.ts"],"sourcesContent":["/**\n * A process with no port.\n *\n * `RestApi` is the process that answers HTTP. This is the one that does not —\n * the thing that runs a schedule, drains a queue, consumes a topic. Until it\n * existed, those had nowhere to say they belonged: a cron declared a schedule\n * and nothing else, and which container ran it was decided by the directory the\n * file sat in. A glob owned it.\n *\n * The cost of that shows up in the scaffolds. `gkm init --template worker` —\n * a project that is background jobs and nothing else — declared\n * `new RestApi('Api', { defaultAuthorizer: 'none', logger })`: an HTTP surface\n * with no HTTP on it, written because it was the only construct that made an\n * app exist and the only way to get a logger into the generated runtime.\n *\n * It takes no authorizer, and that is the tell that these are two constructs\n * rather than one with a flag: a `RestApi` needs one because an HTTP surface\n * can ship open by omission, and nothing reaches a worker from outside.\n *\n * @example\n * ```ts\n * // constructs/worker.ts\n * import { Worker } from '@geekmidas/constructs/worker';\n * import { logger } from './logger.js';\n *\n * export const worker = new Worker('Worker', { logger }).calls([database]);\n *\n * // crons/cleanup.ts\n * import { worker } from '@acme/constructs/worker.js';\n *\n * export const cleanup = worker\n * .cron('rate(1 day)')\n * .handle(async ({ logger }) => { … });\n * ```\n */\n\nimport type { EnvironmentParser } from '@geekmidas/envkit';\nimport type { Logger } from '@geekmidas/logger';\nimport { DEFAULT_LOGGER } from '@geekmidas/logger/console';\nimport {\n\ttype AppSpec,\n\ttype ConstructName,\n\tcanonicalId,\n\ttype Declaration,\n\ttype Dependency,\n} from '@geekmidas/manifest';\nimport { type Declarable, edgeTo } from './construct-interface';\nimport type { ScheduleExpression } from './crons/Cron';\nimport { CronBuilder } from './crons/CronBuilder';\nimport { envParserFor } from './endpoints/surfaceEnv';\nimport { FunctionBuilder } from './functions/FunctionBuilder';\nimport { SubscriberBuilder } from './subscribers/SubscriberBuilder';\n\nexport interface WorkerConfig {\n\t/**\n\t * Where its source lives and how it is run.\n\t *\n\t * Normally omitted, like every other app's: `Worker` means `apps/worker`\n\t * where that directory exists and the project root otherwise. Write one only\n\t * for a layout that genuinely differs.\n\t */\n\tapp?: AppSpec;\n\t/**\n\t * The logger everything built from this worker runs with.\n\t *\n\t * The actual logger, not a path to one — the same reason `RestApi` takes\n\t * one. Every cron and subscriber in a scaffolded project used to open with\n\t * `import { logger } from '…/constructs/logger.js'`, which is the line this\n\t * removes.\n\t */\n\tlogger?: Logger;\n\t/**\n\t * The environment parser everything built from this worker runs with.\n\t *\n\t * Defaults to `process.env` merged with the credentials `gkm dev` injected,\n\t * which is what an application's own `config/env.ts` always was.\n\t */\n\tenvParser?: EnvironmentParser<{}>;\n}\n\nexport class Worker<TName extends string = string>\n\timplements Declarable<TName>\n{\n\treadonly id: TName;\n\n\t/** Always defined — the worker's own, or the console logger. */\n\treadonly logger: Logger;\n\n\t/** Always defined, and normally the default. */\n\treadonly envParser: EnvironmentParser<{}>;\n\n\tconstructor(\n\t\tid: ConstructName<TName>,\n\t\tprivate readonly config: WorkerConfig = {},\n\t\t/** Internal: how `.calls()` carries edges into the copy it returns. */\n\t\tprivate readonly dependencies: readonly Dependency[] = [],\n\t) {\n\t\tconst canonical = canonicalId(id as string);\n\n\t\tthis.id = canonical as TName;\n\t\tthis.logger = config.logger ?? DEFAULT_LOGGER;\n\t\tthis.envParser = envParserFor(\n\t\t\tconfig.envParser\n\t\t\t\t? { id: canonical, envParser: config.envParser }\n\t\t\t\t: undefined,\n\t\t);\n\t}\n\n\t/**\n\t * This worker's cron factory, carrying its logger.\n\t *\n\t * `export const c = crons.logger(logger)` written once and hung off the\n\t * thing that runs it, so a cron file opens with the schedule rather than\n\t * with an import of a logger it has to know the path to.\n\t */\n\tget crons() {\n\t\treturn this.own(new CronBuilder().logger(this.logger));\n\t}\n\n\t/**\n\t * This worker's subscriber factory, carrying its logger.\n\t *\n\t * Chain `.publisher(…)` before `.subscribe([…])`: the event names are typed\n\t * from the publisher's message union, so there is nothing to spell twice.\n\t */\n\tget subscribers() {\n\t\treturn this.own(new SubscriberBuilder().logger(this.logger));\n\t}\n\n\t/** This worker's function factory, carrying its logger. */\n\tget functions() {\n\t\treturn this.own(new FunctionBuilder().logger(this.logger));\n\t}\n\n\t/**\n\t * Sugar for the common case, the way `api.get()` is for `api.endpoints`.\n\t *\n\t * @example `worker.cron('rate(1 day)').handle(async ({ logger }) => { … })`\n\t */\n\tcron(schedule: ScheduleExpression) {\n\t\treturn this.crons.schedule(schedule);\n\t}\n\n\t/**\n\t * Resources and surfaces this worker calls.\n\t *\n\t * Not `.dependsOn()`: this records the edge that derives the worker's\n\t * environment and its access, the same distinction `RestApi.calls()` draws.\n\t */\n\tcalls(constructs: readonly Declarable[]): Worker<TName> {\n\t\treturn new Worker<TName>(this.id as ConstructName<TName>, this.config, [\n\t\t\t...this.dependencies,\n\t\t\t...constructs.map(edgeTo),\n\t\t]);\n\t}\n\n\t/**\n\t * Stamps this worker's id onto a builder, so everything built from it says\n\t * which process runs it.\n\t */\n\tprivate own<T extends { _owner?: string }>(builder: T): T {\n\t\tbuilder._owner = this.id;\n\n\t\treturn builder;\n\t}\n\n\tdeclare(): Declaration[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\tkind: 'worker',\n\t\t\t\tid: this.id,\n\t\t\t\t...(this.config.app ? { app: this.config.app } : {}),\n\t\t\t\t...(this.dependencies.length\n\t\t\t\t\t? { dependencies: this.dependencies }\n\t\t\t\t\t: {}),\n\t\t\t\t// Nothing calls a worker, so it publishes no address.\n\t\t\t\tprovides: [],\n\t\t\t},\n\t\t];\n\t}\n}\n"],"mappings":";;;;;;;;;;;AAgFA,IAAa,SAAb,MAAa,OAEb;CACC,AAAS;;CAGT,AAAS;;CAGT,AAAS;CAET,YACCA,IACiBC,SAAuB,CAAE,GAEzBC,eAAsC,CAAE,GACxD;EAHgB;EAEA;EAEjB,MAAM,YAAY,YAAY,GAAa;AAE3C,OAAK,KAAK;AACV,OAAK,SAAS,OAAO,UAAU;AAC/B,OAAK,YAAY,aAChB,OAAO,YACJ;GAAE,IAAI;GAAW,WAAW,OAAO;EAAW,WAEjD;CACD;;;;;;;;CASD,IAAI,QAAQ;AACX,SAAO,KAAK,IAAI,IAAI,cAAc,OAAO,KAAK,OAAO,CAAC;CACtD;;;;;;;CAQD,IAAI,cAAc;AACjB,SAAO,KAAK,IAAI,IAAI,oBAAoB,OAAO,KAAK,OAAO,CAAC;CAC5D;;CAGD,IAAI,YAAY;AACf,SAAO,KAAK,IAAI,IAAI,kBAAkB,OAAO,KAAK,OAAO,CAAC;CAC1D;;;;;;CAOD,KAAKC,UAA8B;AAClC,SAAO,KAAK,MAAM,SAAS,SAAS;CACpC;;;;;;;CAQD,MAAMC,YAAkD;AACvD,SAAO,IAAI,OAAc,KAAK,IAA4B,KAAK,QAAQ,CACtE,GAAG,KAAK,cACR,GAAG,WAAW,IAAI,OAAO,AACzB;CACD;;;;;CAMD,AAAQ,IAAmCC,SAAe;AACzD,UAAQ,SAAS,KAAK;AAEtB,SAAO;CACP;CAED,UAAyB;AACxB,SAAO,CACN;GACC,MAAM;GACN,IAAI,KAAK;GACT,GAAI,KAAK,OAAO,MAAM,EAAE,KAAK,KAAK,OAAO,IAAK,IAAG,CAAE;GACnD,GAAI,KAAK,aAAa,SACnB,EAAE,cAAc,KAAK,aAAc,IACnC,CAAE;GAEL,UAAU,CAAE;EACZ,CACD;CACD;AACD"}
1
+ {"version":3,"file":"worker.mjs","names":["id: ConstructName<TName>","config: WorkerConfig","dependencies: readonly Dependency[]","scheduleStore?: Consumable<string, unknown>","source: Consumable<TDbName, T>","schedule: ScheduleExpression","topic: Topic<TTopicName, TEvents>","service: Service<TPubName, T> | Consumable<TPubName, T>","schema: T","ms: number","mb: number","constructs: T","services: T","constructs: readonly Declarable[]","builder: T"],"sources":["../src/worker.ts"],"sourcesContent":["/**\n * A process with no port.\n *\n * `RestApi` is the process that answers HTTP. This is the one that does not —\n * the thing that runs a schedule, drains a queue, consumes a topic. Until it\n * existed, those had nowhere to say they belonged: a cron declared a schedule\n * and nothing else, and which container ran it was decided by the directory the\n * file sat in. A glob owned it.\n *\n * The cost of that shows up in the scaffolds. `gkm init --template worker` —\n * a project that is background jobs and nothing else — declared\n * `new RestApi('Api', { defaultAuthorizer: 'none', logger })`: an HTTP surface\n * with no HTTP on it, written because it was the only construct that made an\n * app exist and the only way to get a logger into the generated runtime.\n *\n * It takes no authorizer, and that is the tell that these are two constructs\n * rather than one with a flag: a `RestApi` needs one because an HTTP surface\n * can ship open by omission, and nothing reaches a worker from outside.\n *\n * ## Crons on a server target need a database\n *\n * A cron becomes an EventBridge rule on AWS and nothing here is consulted. A\n * server has nothing firing its crons but itself, and a process that schedules\n * in memory fires every job once per replica while reporting success — so the\n * schedule is kept in Postgres, and the worker says which one with\n * `.database(db)`.\n *\n * A worker with crons and no `.database(…)` schedules nothing on a server\n * target and says so at startup. That is a limitation of workers today rather\n * than a design: the store could be a cache, or something the target\n * provisions, and Postgres is what exists.\n *\n * It is not an app. A worker names the process that runs its crons and\n * subscribers, and that process is the app's server — the same one the\n * endpoints run in, minus the HTTP surface. Giving a worker a container of its\n * own made a second thing to build, deploy and keep alive for work that was\n * always going to run somewhere already. Declare as many as the shape of the\n * work wants: they are groupings, not deployments.\n *\n * @example\n * ```ts\n * // constructs/worker.ts\n * import { Worker } from '@geekmidas/constructs/worker';\n * import { logger } from './logger.js';\n *\n * export const worker = new Worker('Worker', { logger }).calls([database]);\n *\n * // crons/cleanup.ts\n * import { worker } from '@acme/constructs/worker.js';\n *\n * export const cleanup = worker\n * .cron('rate(1 day)')\n * .handle(async ({ logger }) => { … });\n * ```\n */\n\nimport type { EnvironmentParser } from '@geekmidas/envkit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { DEFAULT_LOGGER } from '@geekmidas/logger/console';\nimport {\n\ttype ConstructName,\n\tcanonicalId,\n\ttype Declaration,\n\ttype Dependency,\n} from '@geekmidas/manifest';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport {\n\ttype Consumable,\n\ttype Declarable,\n\tedgeTo,\n} from './construct-interface';\nimport type { ScheduleExpression } from './crons/Cron';\nimport { CronBuilder } from './crons/CronBuilder';\nimport { envParserFor } from './endpoints/surfaceEnv';\nimport { FunctionBuilder } from './functions/FunctionBuilder';\nimport { SubscriberBuilder } from './subscribers/SubscriberBuilder';\nimport type { Topic, TopicEvents } from './topic/Topic';\n\nexport interface WorkerConfig {\n\t/**\n\t * The logger everything built from this worker runs with.\n\t *\n\t * The actual logger, not a path to one — the same reason `RestApi` takes\n\t * one. Every cron and subscriber in a scaffolded project used to open with\n\t * `import { logger } from '…/constructs/logger.js'`, which is the line this\n\t * removes.\n\t */\n\tlogger?: Logger;\n\t/**\n\t * The environment parser everything built from this worker runs with.\n\t *\n\t * Defaults to `process.env` merged with the credentials `gkm dev` injected,\n\t * which is what an application's own `config/env.ts` always was.\n\t */\n\tenvParser?: EnvironmentParser<{}>;\n}\n\nexport class Worker<TName extends string = string>\n\timplements Declarable<TName>\n{\n\treadonly id: TName;\n\n\t/** Always defined — the worker's own, or the console logger. */\n\treadonly logger: Logger;\n\n\t/** Always defined, and normally the default. */\n\treadonly envParser: EnvironmentParser<{}>;\n\n\t/**\n\t * Where this worker's schedules live, when it has crons and a server runs\n\t * them. `undefined` until `.database(…)` says.\n\t */\n\treadonly scheduleStore?: Consumable<string, unknown>;\n\n\tconstructor(\n\t\tid: ConstructName<TName>,\n\t\tprivate readonly config: WorkerConfig = {},\n\t\t/** Internal: how `.calls()` carries edges into the copy it returns. */\n\t\tprivate readonly dependencies: readonly Dependency[] = [],\n\t\tscheduleStore?: Consumable<string, unknown>,\n\t) {\n\t\tconst canonical = canonicalId(id as string);\n\n\t\tthis.id = canonical as TName;\n\t\tthis.logger = config.logger ?? DEFAULT_LOGGER;\n\t\tthis.envParser = envParserFor(\n\t\t\tconfig.envParser\n\t\t\t\t? { id: canonical, envParser: config.envParser }\n\t\t\t\t: undefined,\n\t\t);\n\t\tthis.scheduleStore = scheduleStore;\n\t}\n\n\t/**\n\t * The database this worker keeps its schedules in.\n\t *\n\t * Only a server target uses it. On AWS a cron is an EventBridge rule\n\t * invoking a Lambda and nothing here is consulted — but a server has nothing\n\t * firing its crons except itself, and a process that schedules in memory\n\t * fires every job once per replica while reporting that all is well.\n\t *\n\t * So the store is declared rather than discovered. It could have been\n\t * inferred — from a database the app happens to declare, or from the events\n\t * backend when that backend is pg-boss — and both would work until an app\n\t * had two databases, or moved its events to SNS, at which point the\n\t * schedules would quietly move or stop. Naming it is one line and cannot\n\t * drift.\n\t *\n\t * @example\n\t * ```ts\n\t * export const jobs = new Worker('Jobs', { logger }).database(database);\n\t * ```\n\t */\n\tdatabase<T, TDbName extends string>(\n\t\tsource: Consumable<TDbName, T>,\n\t): Worker<TName> {\n\t\treturn new Worker<TName>(\n\t\t\tthis.id as ConstructName<TName>,\n\t\t\tthis.config,\n\t\t\t[...this.dependencies, edgeTo(source)],\n\t\t\tsource as unknown as Consumable<string, unknown>,\n\t\t);\n\t}\n\n\t/**\n\t * A scheduled runnable.\n\t *\n\t * @example `worker.cron('rate(1 day)').handle(async ({ logger }) => { … })`\n\t */\n\tcron(schedule: ScheduleExpression) {\n\t\treturn this.own(new CronBuilder().logger(this.logger)).schedule(schedule);\n\t}\n\n\t/**\n\t * A runnable that consumes a topic.\n\t *\n\t * Binding is not publishing: a consumer is handed the topic's event types\n\t * and no connection string it could publish with. Chain `.publishes(…)` when\n\t * the handler emits follow-up events, which is the only reason it would need\n\t * one.\n\t *\n\t * @example `worker.topic(users).subscribe(['user.created']).handle(…)`\n\t */\n\ttopic<TTopicName extends string, TEvents extends TopicEvents>(\n\t\ttopic: Topic<TTopicName, TEvents>,\n\t) {\n\t\treturn this.own(new SubscriberBuilder().logger(this.logger)).topic(topic);\n\t}\n\n\t/**\n\t * A runnable that consumes events typed from a publisher service.\n\t *\n\t * The older of the two ways to bind a subscriber, kept for a project whose\n\t * events come from a hand-written publisher rather than a `Topic`\n\t * construct. `topic()` is the one to reach for: it types the events the same\n\t * way and hands the consumer no connection string it could publish with.\n\t */\n\tpublisher<T extends EventPublisher<any>, TPubName extends string>(\n\t\tservice: Service<TPubName, T> | Consumable<TPubName, T>,\n\t) {\n\t\treturn this.own(new SubscriberBuilder().logger(this.logger)).publisher(\n\t\t\tservice as never,\n\t\t);\n\t}\n\n\t/**\n\t * Everything below builds a function — the runnable with no schedule and no\n\t * topic, invoked by something else.\n\t *\n\t * These sit on the worker rather than behind a `functions` namespace because\n\t * the namespace was a hop that said nothing: `worker.functions.input(…)`\n\t * names a collection to reach one member of it. What kind of runnable is\n\t * being built is decided by which of these is called first — a schedule\n\t * makes a cron, a topic makes a subscriber, and anything else makes a\n\t * function.\n\t */\n\tinput<T extends ComposableStandardSchema>(schema: T) {\n\t\treturn this.functions.input(schema);\n\t}\n\n\toutput<T extends StandardSchemaV1>(schema: T) {\n\t\treturn this.functions.output(schema);\n\t}\n\n\ttimeout(ms: number) {\n\t\treturn this.functions.timeout(ms);\n\t}\n\n\tmemorySize(mb: number) {\n\t\treturn this.functions.memorySize(mb);\n\t}\n\n\tdependsOn<const T extends readonly Consumable[]>(constructs: T) {\n\t\treturn this.functions.dependsOn(constructs);\n\t}\n\n\tservices<T extends Service[]>(services: T) {\n\t\treturn this.functions.services(services);\n\t}\n\n\t/**\n\t * A function with no input schema — the shortest runnable there is.\n\t *\n\t * @example `worker.handle(async ({ logger }) => { … })`\n\t */\n\thandle(\n\t\t...args: Parameters<\n\t\t\tReturnType<Worker<TName>['schemalessFunction']>['handle']\n\t\t>\n\t) {\n\t\treturn this.schemalessFunction().handle(...args);\n\t}\n\n\t/** The builder `handle` delegates to, named so its type can be referred to. */\n\tprivate schemalessFunction() {\n\t\treturn this.functions;\n\t}\n\n\t/** The function builder the delegating methods above are built on. */\n\tprivate get functions() {\n\t\treturn this.own(new FunctionBuilder().logger(this.logger));\n\t}\n\n\t/**\n\t * Resources and surfaces this worker calls.\n\t *\n\t * Not `.dependsOn()`: this records the edge that derives the worker's\n\t * environment and its access, the same distinction `RestApi.calls()` draws.\n\t */\n\tcalls(constructs: readonly Declarable[]): Worker<TName> {\n\t\treturn new Worker<TName>(\n\t\t\tthis.id as ConstructName<TName>,\n\t\t\tthis.config,\n\t\t\t[...this.dependencies, ...constructs.map(edgeTo)],\n\t\t\tthis.scheduleStore,\n\t\t);\n\t}\n\n\t/**\n\t * Stamps this worker's id onto a builder, so everything built from it says\n\t * which process runs it.\n\t */\n\tprivate own<T extends { _owner?: string; _scheduleStore?: unknown }>(\n\t\tbuilder: T,\n\t): T {\n\t\tbuilder._owner = this.id;\n\t\tbuilder._scheduleStore = this.scheduleStore;\n\n\t\treturn builder;\n\t}\n\n\tdeclare(): Declaration[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\tkind: 'worker',\n\t\t\t\tid: this.id,\n\t\t\t\t...(this.dependencies.length\n\t\t\t\t\t? { dependencies: this.dependencies }\n\t\t\t\t\t: {}),\n\t\t\t\t// Nothing calls a worker, so it publishes no address.\n\t\t\t\tprovides: [],\n\t\t\t},\n\t\t];\n\t}\n}\n"],"mappings":";;;;;;;;;;;AAoGA,IAAa,SAAb,MAAa,OAEb;CACC,AAAS;;CAGT,AAAS;;CAGT,AAAS;;;;;CAMT,AAAS;CAET,YACCA,IACiBC,SAAuB,CAAE,GAEzBC,eAAsC,CAAE,GACzDC,eACC;EAJgB;EAEA;EAGjB,MAAM,YAAY,YAAY,GAAa;AAE3C,OAAK,KAAK;AACV,OAAK,SAAS,OAAO,UAAU;AAC/B,OAAK,YAAY,aAChB,OAAO,YACJ;GAAE,IAAI;GAAW,WAAW,OAAO;EAAW,WAEjD;AACD,OAAK,gBAAgB;CACrB;;;;;;;;;;;;;;;;;;;;;CAsBD,SACCC,QACgB;AAChB,SAAO,IAAI,OACV,KAAK,IACL,KAAK,QACL,CAAC,GAAG,KAAK,cAAc,OAAO,OAAO,AAAC,GACtC;CAED;;;;;;CAOD,KAAKC,UAA8B;AAClC,SAAO,KAAK,IAAI,IAAI,cAAc,OAAO,KAAK,OAAO,CAAC,CAAC,SAAS,SAAS;CACzE;;;;;;;;;;;CAYD,MACCC,OACC;AACD,SAAO,KAAK,IAAI,IAAI,oBAAoB,OAAO,KAAK,OAAO,CAAC,CAAC,MAAM,MAAM;CACzE;;;;;;;;;CAUD,UACCC,SACC;AACD,SAAO,KAAK,IAAI,IAAI,oBAAoB,OAAO,KAAK,OAAO,CAAC,CAAC,UAC5D,QACA;CACD;;;;;;;;;;;;CAaD,MAA0CC,QAAW;AACpD,SAAO,KAAK,UAAU,MAAM,OAAO;CACnC;CAED,OAAmCA,QAAW;AAC7C,SAAO,KAAK,UAAU,OAAO,OAAO;CACpC;CAED,QAAQC,IAAY;AACnB,SAAO,KAAK,UAAU,QAAQ,GAAG;CACjC;CAED,WAAWC,IAAY;AACtB,SAAO,KAAK,UAAU,WAAW,GAAG;CACpC;CAED,UAAiDC,YAAe;AAC/D,SAAO,KAAK,UAAU,UAAU,WAAW;CAC3C;CAED,SAA8BC,UAAa;AAC1C,SAAO,KAAK,UAAU,SAAS,SAAS;CACxC;;;;;;CAOD,OACC,GAAG,MAGF;AACD,SAAO,KAAK,oBAAoB,CAAC,OAAO,GAAG,KAAK;CAChD;;CAGD,AAAQ,qBAAqB;AAC5B,SAAO,KAAK;CACZ;;CAGD,IAAY,YAAY;AACvB,SAAO,KAAK,IAAI,IAAI,kBAAkB,OAAO,KAAK,OAAO,CAAC;CAC1D;;;;;;;CAQD,MAAMC,YAAkD;AACvD,SAAO,IAAI,OACV,KAAK,IACL,KAAK,QACL,CAAC,GAAG,KAAK,cAAc,GAAG,WAAW,IAAI,OAAO,AAAC,GACjD,KAAK;CAEN;;;;;CAMD,AAAQ,IACPC,SACI;AACJ,UAAQ,SAAS,KAAK;AACtB,UAAQ,iBAAiB,KAAK;AAE9B,SAAO;CACP;CAED,UAAyB;AACxB,SAAO,CACN;GACC,MAAM;GACN,IAAI,KAAK;GACT,GAAI,KAAK,aAAa,SACnB,EAAE,cAAc,KAAK,aAAc,IACnC,CAAE;GAEL,UAAU,CAAE;EACZ,CACD;CACD;AACD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geekmidas/constructs",
3
- "version": "10.0.0-alpha.4",
3
+ "version": "10.0.0-alpha.6",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "exports": {
@@ -245,13 +245,13 @@
245
245
  "lodash.uniqby": "~4.7.0",
246
246
  "openapi-types": "~12.1.3",
247
247
  "qs": "~6.16.0",
248
- "@geekmidas/envkit": "^10.0.0-alpha.4",
249
- "@geekmidas/errors": "^10.0.0-alpha.4",
250
- "@geekmidas/events": "^10.0.0-alpha.4",
251
- "@geekmidas/logger": "^10.0.0-alpha.4",
252
- "@geekmidas/manifest": "^10.0.0-alpha.4",
253
- "@geekmidas/schema": "^10.0.0-alpha.4",
254
- "@geekmidas/services": "^10.0.0-alpha.4"
248
+ "@geekmidas/envkit": "^10.0.0-alpha.6",
249
+ "@geekmidas/errors": "^10.0.0-alpha.6",
250
+ "@geekmidas/events": "^10.0.0-alpha.6",
251
+ "@geekmidas/logger": "^10.0.0-alpha.6",
252
+ "@geekmidas/manifest": "^10.0.0-alpha.6",
253
+ "@geekmidas/schema": "^10.0.0-alpha.6",
254
+ "@geekmidas/services": "^10.0.0-alpha.6"
255
255
  },
256
256
  "devDependencies": {
257
257
  "@types/lodash.compact": "~3.0.9",
@@ -266,20 +266,20 @@
266
266
  "msw": "~2.15.0",
267
267
  "pg": "~8.23.0",
268
268
  "zod": "~4.6.5",
269
- "@geekmidas/audit": "^10.0.0-alpha.4",
270
- "@geekmidas/auth": "10.0.0-alpha.4",
271
- "@geekmidas/cache": "^10.0.0-alpha.4",
272
- "@geekmidas/db": "^10.0.0-alpha.4",
273
- "@geekmidas/emailkit": "^10.0.0-alpha.4",
274
- "@geekmidas/envkit": "^10.0.0-alpha.4",
275
- "@geekmidas/errors": "^10.0.0-alpha.4",
276
- "@geekmidas/events": "^10.0.0-alpha.4",
277
- "@geekmidas/logger": "^10.0.0-alpha.4",
278
- "@geekmidas/rate-limit": "^10.0.0-alpha.4",
279
- "@geekmidas/schema": "^10.0.0-alpha.4",
280
- "@geekmidas/services": "^10.0.0-alpha.4",
281
- "@geekmidas/telescope": "10.0.0-alpha.4",
282
- "@geekmidas/testkit": "^10.0.0-alpha.4"
269
+ "@geekmidas/audit": "^10.0.0-alpha.6",
270
+ "@geekmidas/auth": "10.0.0-alpha.6",
271
+ "@geekmidas/cache": "^10.0.0-alpha.6",
272
+ "@geekmidas/db": "^10.0.0-alpha.6",
273
+ "@geekmidas/emailkit": "^10.0.0-alpha.6",
274
+ "@geekmidas/envkit": "^10.0.0-alpha.6",
275
+ "@geekmidas/errors": "^10.0.0-alpha.6",
276
+ "@geekmidas/events": "^10.0.0-alpha.6",
277
+ "@geekmidas/logger": "^10.0.0-alpha.6",
278
+ "@geekmidas/rate-limit": "^10.0.0-alpha.6",
279
+ "@geekmidas/schema": "^10.0.0-alpha.6",
280
+ "@geekmidas/services": "^10.0.0-alpha.6",
281
+ "@geekmidas/telescope": "10.0.0-alpha.6",
282
+ "@geekmidas/testkit": "^10.0.0-alpha.6"
283
283
  },
284
284
  "peerDependencies": {
285
285
  "@middy/core": ">=7.9.2",
@@ -289,14 +289,14 @@
289
289
  "kysely": "~0.29.6",
290
290
  "msw": ">=2.15.0",
291
291
  "pg": ">=8.23.0",
292
- "@geekmidas/audit": "^10.0.0-alpha.4",
293
- "@geekmidas/auth": "10.0.0-alpha.4",
294
- "@geekmidas/cache": "^10.0.0-alpha.4",
295
- "@geekmidas/db": "^10.0.0-alpha.4",
296
- "@geekmidas/emailkit": "^10.0.0-alpha.4",
297
- "@geekmidas/rate-limit": "^10.0.0-alpha.4",
298
- "@geekmidas/storage": "^10.0.0-alpha.4",
299
- "@geekmidas/telescope": "10.0.0-alpha.4"
292
+ "@geekmidas/audit": "^10.0.0-alpha.6",
293
+ "@geekmidas/auth": "10.0.0-alpha.6",
294
+ "@geekmidas/cache": "^10.0.0-alpha.6",
295
+ "@geekmidas/db": "^10.0.0-alpha.6",
296
+ "@geekmidas/emailkit": "^10.0.0-alpha.6",
297
+ "@geekmidas/rate-limit": "^10.0.0-alpha.6",
298
+ "@geekmidas/storage": "^10.0.0-alpha.6",
299
+ "@geekmidas/telescope": "10.0.0-alpha.6"
300
300
  },
301
301
  "peerDependenciesMeta": {
302
302
  "@geekmidas/audit": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"Cron-B2OFsfDM.d.cts","names":[],"sources":["../src/crons/Cron.ts"],"sourcesContent":[],"mappings":";;;;;;;;;cAUa,oBACG,oEACG,gCACF,SAAS,0BACP,kEACM,8KAIf,SACT,QACA,WACA,SACA,WACA,iBACA,+CAGA,WACA,sBACA,kCACA,gBAAgB,QAAQ,WAAW,SAAS,WAAW;wBAahC;EAlCX,OAAI,MAAA,CAAA,GAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAuBgB,IAvBhB,CAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,CAAA;EAAA,WAAA,CAAA,EAAA,EAgCX,eAhCW,CAgCK,MAhCL,EAgCa,SAhCb,EAgCwB,OAhCxB,EAgCiC,SAhCjC,EAgC4C,SAhC5C,CAAA,EAAA,OAAA,CAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAkCO,kBAlCP,GAAA,SAAA,EAAA,KAAA,CAAA,EAmCP,MAnCO,EAAA,YAAA,CAAA,EAoCA,SApCA,EAAA,QAAA,CAAA,EAqCL,SArCK,EAAA,MAAA,CAAA,EAsCN,OAtCM,EAAA,gBAAA,CAAA,EAuCI,OAvCJ,CAuCY,0BAvCZ,EAuCwC,eAvCxC,CAAA,EAAA,MAAA,CAAA,EAAA,GAAA,EAAA,EAAA,UAAA,CAAA,EAAA,MAAA,EAAA,eAAA,CAAA,EA0CG,OA1CH,CA0CW,oBA1CX,EA0CiC,SA1CjC,CAAA;EAAA;;;;EAGe,UACb,CAAA,EAAA,MAAA,EAAA;EAAgB,IACV,QAAA,CAAA,CAAA,EA6DR,kBA7DQ,GAAA,SAAA;;AAMxB,KA4DW,cAAA,GA5DX,QAAA,MAAA,GAAA;KA8DI,UAAA,GA7DJ,GAAA,GAAA,MAAA,GAAA,GAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,KAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,MAAA;KAuEI,QAAA,GAtEJ,GAAA,GAAA,MAAA,GAAA,GAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,KAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,MAAA;KAgFI,OAAA,GA/EJ,GAAA,GAAA,MAAA,GAAA,GAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,KAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,MAAA;KAyFI,SAAA,GAxFJ,GAAA,GAAA,MAAA,GAAA,GAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,KAAA,MAAA,EAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,MAAA;KA6GI,WAAA,GA1GJ,GAAA,GAAA,MAAA,GAAA,GAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,KAAA,MAAA,EAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,MAAA;AACA,KA0HW,cAAA,GA1HX,QA2HQ,UA3HR,IA2HsB,QA3HtB,IA2HkC,OA3HlC,IA2H6C,SA3H7C,IA2H0D,WA3H1D,GAAA;AACA,KA4HW,kBAAA,GAAqB,cA5HhC,GA4HiD,cA5HjD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Cron-ByxdOfpE.d.mts","names":[],"sources":["../src/crons/Cron.ts"],"sourcesContent":[],"mappings":";;;;;;;;;cAUa,oBACG,oEACG,gCACF,SAAS,0BACP,kEACM,8KAIf,SACT,QACA,WACA,SACA,WACA,iBACA,+CAGA,WACA,sBACA,kCACA,gBAAgB,QAAQ,WAAW,SAAS,WAAW;wBAahC;EAlCX,OAAI,MAAA,CAAA,GAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAuBgB,IAvBhB,CAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,CAAA;EAAA,WAAA,CAAA,EAAA,EAgCX,eAhCW,CAgCK,MAhCL,EAgCa,SAhCb,EAgCwB,OAhCxB,EAgCiC,SAhCjC,EAgC4C,SAhC5C,CAAA,EAAA,OAAA,CAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAkCO,kBAlCP,GAAA,SAAA,EAAA,KAAA,CAAA,EAmCP,MAnCO,EAAA,YAAA,CAAA,EAoCA,SApCA,EAAA,QAAA,CAAA,EAqCL,SArCK,EAAA,MAAA,CAAA,EAsCN,OAtCM,EAAA,gBAAA,CAAA,EAuCI,OAvCJ,CAuCY,0BAvCZ,EAuCwC,eAvCxC,CAAA,EAAA,MAAA,CAAA,EAAA,GAAA,EAAA,EAAA,UAAA,CAAA,EAAA,MAAA,EAAA,eAAA,CAAA,EA0CG,OA1CH,CA0CW,oBA1CX,EA0CiC,SA1CjC,CAAA;EAAA;;;;EAGe,UACb,CAAA,EAAA,MAAA,EAAA;EAAgB,IACV,QAAA,CAAA,CAAA,EA6DR,kBA7DQ,GAAA,SAAA;;AAMxB,KA4DW,cAAA,GA5DX,QAAA,MAAA,GAAA;KA8DI,UAAA,GA7DJ,GAAA,GAAA,MAAA,GAAA,GAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,KAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,MAAA;KAuEI,QAAA,GAtEJ,GAAA,GAAA,MAAA,GAAA,GAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,KAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,MAAA;KAgFI,OAAA,GA/EJ,GAAA,GAAA,MAAA,GAAA,GAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,KAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,MAAA;KAyFI,SAAA,GAxFJ,GAAA,GAAA,MAAA,GAAA,GAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,KAAA,MAAA,EAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,MAAA;KA6GI,WAAA,GA1GJ,GAAA,GAAA,MAAA,GAAA,GAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,KAAA,MAAA,EAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,GAAA,MAAA,IAAA,MAAA,EAAA,GAAA,MAAA;AACA,KA0HW,cAAA,GA1HX,QA2HQ,UA3HR,IA2HsB,QA3HtB,IA2HkC,OA3HlC,IA2H6C,SA3H7C,IA2H0D,WA3H1D,GAAA;AACA,KA4HW,kBAAA,GAAqB,cA5HhC,GA4HiD,cA5HjD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CronBuilder-CdibiHNB.mjs","names":["obj: any","fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>","timeout?: number","_schedule?: ScheduleExpression","input?: TInput","outputSchema?: OutSchema","services: TServices","logger?: TLogger","publisherService?: Service<TEventPublisherServiceName, TEventPublisher>","events: any[]","memorySize?: number","databaseService?: Service<TDatabaseServiceName, TDatabase>","constructs: string[]","memorySize: number","_expression: ScheduleExpression","schema: T","constructs: T","s: Service","services: T","logger: T","publisher: Service<TName, T>","source: Consumable<TName, T> | Service<TName, T>","fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>"],"sources":["../src/crons/Cron.ts","../src/crons/CronBuilder.ts"],"sourcesContent":["import type { AuditableAction } from '@geekmidas/audit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\n\nimport { ConstructType } from '../Construct';\nimport { Function, type FunctionHandler } from '../functions';\n\nexport class Cron<\n\tTInput extends ComposableStandardSchema | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n> extends Function<\n\tTInput,\n\tTServices,\n\tTLogger,\n\tOutSchema,\n\tTEventPublisher,\n\tTEventPublisherServiceName,\n\tundefined,\n\tstring,\n\tTDatabase,\n\tTDatabaseServiceName,\n\tAuditableAction<string, unknown>,\n\tFunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>\n> {\n\tstatic isCron(obj: any): obj is Cron<any, any, any, any> {\n\t\treturn Boolean(\n\t\t\tobj &&\n\t\t\t\t(obj as Function).__IS_FUNCTION__ === true &&\n\t\t\t\tobj.type === ConstructType.Cron,\n\t\t);\n\t}\n\n\tconstructor(\n\t\tfn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n\t\ttimeout?: number,\n\t\tprotected _schedule?: ScheduleExpression,\n\t\tinput?: TInput,\n\t\toutputSchema?: OutSchema,\n\t\tservices: TServices = [] as unknown as TServices,\n\t\tlogger?: TLogger,\n\t\tpublisherService?: Service<TEventPublisherServiceName, TEventPublisher>,\n\t\tevents: any[] = [],\n\t\tmemorySize?: number,\n\t\tdatabaseService?: Service<TDatabaseServiceName, TDatabase>,\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) {\n\t\tsuper(\n\t\t\tfn,\n\t\t\ttimeout,\n\t\t\tConstructType.Cron,\n\t\t\tinput,\n\t\t\toutputSchema,\n\t\t\tservices,\n\t\t\tlogger,\n\t\t\tpublisherService,\n\t\t\tevents,\n\t\t\tmemorySize,\n\t\t\tundefined, // auditorStorageService\n\t\t\tdatabaseService,\n\t\t\tconstructs,\n\t\t);\n\t}\n\n\tget schedule(): ScheduleExpression | undefined {\n\t\treturn this._schedule;\n\t}\n}\n\nexport type RateExpression = `rate(${string})`;\n\ntype CronMinute =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| `${number},${number}`\n\t| string; // Allow more complex patterns\n\ntype CronHour =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| `${number},${number}`\n\t| string; // Allow more complex patterns\n\ntype CronDay =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| `${number},${number}`\n\t| string; // Allow more complex patterns\n\ntype CronMonth =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| 'JAN'\n\t| 'FEB'\n\t| 'MAR'\n\t| 'APR'\n\t| 'MAY'\n\t| 'JUN'\n\t| 'JUL'\n\t| 'AUG'\n\t| 'SEP'\n\t| 'OCT'\n\t| 'NOV'\n\t| 'DEC'\n\t| string; // Allow more complex patterns\n\ntype CronWeekday =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| 'SUN'\n\t| 'MON'\n\t| 'TUE'\n\t| 'WED'\n\t| 'THU'\n\t| 'FRI'\n\t| 'SAT'\n\t| `${string}-${string}` // Allow patterns like MON-FRI\n\t| string; // Allow more complex patterns\n\nexport type CronExpression =\n\t`cron(${CronMinute} ${CronHour} ${CronDay} ${CronMonth} ${CronWeekday})`;\n\nexport type ScheduleExpression = RateExpression | CronExpression;\n","import type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { cloneWith } from '../clone';\nimport {\n\ttype Consumable,\n\tidsOf,\n\ttype ServicesOf,\n\tserviceOf,\n\tservicesOf,\n} from '../construct-interface';\nimport { FunctionBuilder, type FunctionHandler } from '../functions';\nimport { Cron, type ScheduleExpression } from './Cron';\n\nexport class CronBuilder<\n\tTInput extends ComposableStandardSchema,\n\tTServices extends Service[],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n> extends FunctionBuilder<\n\tTInput,\n\tOutSchema,\n\tTServices,\n\tTLogger,\n\tTEventPublisher,\n\tTEventPublisherServiceName,\n\tundefined,\n\tstring,\n\tTDatabase,\n\tTDatabaseServiceName\n> {\n\tprivate _schedule?: ScheduleExpression;\n\n\tconstructor() {\n\t\tsuper(ConstructType.Cron);\n\t}\n\n\toverride memorySize(memorySize: number): this {\n\t\treturn cloneWith(this, { _memorySize: memorySize });\n\t}\n\n\tschedule(\n\t\t_expression: ScheduleExpression,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, { _schedule: _expression });\n\t}\n\n\toverride input<T extends ComposableStandardSchema>(\n\t\tschema: T,\n\t): CronBuilder<\n\t\tT,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\tinputSchema: schema as unknown as TInput,\n\t\t}) as unknown as CronBuilder<\n\t\t\tT,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride output<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tT,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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 unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tT,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\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\toverride dependsOn<const T extends readonly Consumable[]>(\n\t\tconstructs: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\t[...TServices, ...ServicesOf<T>],\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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: uniqBy(\n\t\t\t\t[...this._services, ...services],\n\t\t\t\t(s: Service) => s.serviceName,\n\t\t\t),\n\t\t\t_constructs: idsOf(constructs, this._constructs),\n\t\t}) as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\t[...TServices, ...ServicesOf<T>],\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride services<T extends Service[]>(\n\t\tservices: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\t[...TServices, ...T],\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\t_services: uniqBy(\n\t\t\t\t[...this._services, ...services],\n\t\t\t\t(s) => s.serviceName,\n\t\t\t) as TServices,\n\t\t}) as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\t[...TServices, ...T],\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride logger<T extends Logger>(\n\t\tlogger: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tT,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\t_logger: logger as unknown as TLogger,\n\t\t}) as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tT,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride publisher<T extends EventPublisher<any>, TName extends string>(\n\t\tpublisher: Service<TName, T>,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tT,\n\t\tTName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\t_publisher: publisher as unknown as Service<\n\t\t\t\tTEventPublisherServiceName,\n\t\t\t\tTEventPublisher\n\t\t\t>,\n\t\t}) as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tT,\n\t\t\tTName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\t/**\n\t * Set the database service for this cron job.\n\t * The database will be available in the handler context as `db`.\n\t */\n\toverride database<T, TName extends string>(\n\t\tsource: Consumable<TName, T> | Service<TName, T>,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tT,\n\t\tTName\n\t> {\n\t\tconst service = serviceOf(source);\n\n\t\treturn cloneWith(this, {\n\t\t\t_databaseService: service as unknown as Service<\n\t\t\t\tTDatabaseServiceName,\n\t\t\t\tTDatabase\n\t\t\t>,\n\t\t}) as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tT,\n\t\t\tTName\n\t\t>;\n\t}\n\n\toverride handle(\n\t\tfn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n\t): Cron<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tconst cron = new Cron(\n\t\t\tfn,\n\t\t\tthis._timeout,\n\t\t\tthis._schedule,\n\t\t\tthis.inputSchema,\n\t\t\tthis.outputSchema,\n\t\t\tthis._services,\n\t\t\tthis._logger,\n\t\t\tthis._publisher,\n\t\t\tthis._events,\n\t\t\tthis._memorySize,\n\t\t\tthis._databaseService,\n\t\t\tthis._constructs,\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\tcron.owner = this._owner;\n\n\t\t// No reset. `.handle()` reads this builder and leaves it alone, so a\n\t\t// configured base — `const fn = f.logger(log).timeout(60_000)` — keeps\n\t\t// its configuration for every construct built from it. The reset that\n\t\t// used to be here wiped the base on first use, which made a base usable\n\t\t// exactly once, and quietly reverted the logger to the default.\n\n\t\treturn cron;\n\t}\n}\n"],"mappings":";;;;;;AAUA,IAAa,OAAb,cASU,SAaR;CACD,OAAO,OAAOA,KAA2C;AACxD,SAAO,QACN,OACE,IAAiB,oBAAoB,QACtC,IAAI,SAAS,cAAc,KAC5B;CACD;CAED,YACCC,IACAC,SACUC,WACVC,OACAC,cACAC,WAAsB,CAAE,GACxBC,QACAC,kBACAC,SAAgB,CAAE,GAClBC,YACAC,iBAKAC,aAAuB,CAAE,GACxB;AACD,QACC,IACA,SACA,cAAc,MACd,OACA,cACA,UACA,QACA,kBACA,QACA,oBAEA,iBACA,WACA;EA7BS;CA8BV;CAED,IAAI,WAA2C;AAC9C,SAAO,KAAK;CACZ;AACD;;;;;AC7DD,IAAa,cAAb,cASU,gBAWR;CACD,AAAQ;CAER,cAAc;AACb,QAAM,cAAc,KAAK;CACzB;CAED,AAAS,WAAWC,YAA0B;AAC7C,SAAO,UAAU,MAAM,EAAE,aAAa,WAAY,EAAC;CACnD;CAED,SACCC,aAUC;AACD,SAAO,UAAU,MAAM,EAAE,WAAW,YAAa,EAAC;CAClD;CAED,AAAS,MACRC,QAUC;AACD,SAAO,UAAU,MAAM,EACtB,aAAa,OACb,EAAC;CAUF;CAED,AAAS,OACRA,QAUC;AACD,SAAO,UAAU,MAAM,EACtB,cAAc,OACd,EAAC;CAUF;;;;;;;;;;;;CAaD,AAAS,UACRC,YAUC;EAQD,MAAM,WAAW,WAAW,WAAW;AAEvC,SAAO,UAAU,MAAM;GACtB,WAAW,2BACV,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAACC,MAAe,EAAE,YAClB;GACD,aAAa,MAAM,YAAY,KAAK,YAAY;EAChD,EAAC;CAUF;CAED,AAAS,SACRC,UAUC;AACD,SAAO,UAAU,MAAM,EACtB,WAAW,2BACV,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACT,CACD,EAAC;CAUF;CAED,AAAS,OACRC,QAUC;AACD,SAAO,UAAU,MAAM,EACtB,SAAS,OACT,EAAC;CAUF;CAED,AAAS,UACRC,WAUC;AACD,SAAO,UAAU,MAAM,EACtB,YAAY,UAIZ,EAAC;CAUF;;;;;CAMD,AAAS,SACRC,QAUC;EACD,MAAM,UAAU,UAAU,OAAO;AAEjC,SAAO,UAAU,MAAM,EACtB,kBAAkB,QAIlB,EAAC;CAUF;CAED,AAAS,OACRC,IAUC;EACD,MAAM,OAAO,IAAI,KAChB,IACA,KAAK,UACL,KAAK,WACL,KAAK,aACL,KAAK,cACL,KAAK,WACL,KAAK,SACL,KAAK,YACL,KAAK,SACL,KAAK,aACL,KAAK,kBACL,KAAK;AAKN,OAAK,QAAQ,KAAK;AAQlB,SAAO;CACP;AACD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CronBuilder-DyUr6nYz.cjs","names":["Function","obj: any","ConstructType","fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>","timeout?: number","_schedule?: ScheduleExpression","input?: TInput","outputSchema?: OutSchema","services: TServices","logger?: TLogger","publisherService?: Service<TEventPublisherServiceName, TEventPublisher>","events: any[]","memorySize?: number","databaseService?: Service<TDatabaseServiceName, TDatabase>","constructs: string[]","FunctionBuilder","ConstructType","memorySize: number","_expression: ScheduleExpression","schema: T","constructs: T","s: Service","services: T","logger: T","publisher: Service<TName, T>","source: Consumable<TName, T> | Service<TName, T>","fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>"],"sources":["../src/crons/Cron.ts","../src/crons/CronBuilder.ts"],"sourcesContent":["import type { AuditableAction } from '@geekmidas/audit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\n\nimport { ConstructType } from '../Construct';\nimport { Function, type FunctionHandler } from '../functions';\n\nexport class Cron<\n\tTInput extends ComposableStandardSchema | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n> extends Function<\n\tTInput,\n\tTServices,\n\tTLogger,\n\tOutSchema,\n\tTEventPublisher,\n\tTEventPublisherServiceName,\n\tundefined,\n\tstring,\n\tTDatabase,\n\tTDatabaseServiceName,\n\tAuditableAction<string, unknown>,\n\tFunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>\n> {\n\tstatic isCron(obj: any): obj is Cron<any, any, any, any> {\n\t\treturn Boolean(\n\t\t\tobj &&\n\t\t\t\t(obj as Function).__IS_FUNCTION__ === true &&\n\t\t\t\tobj.type === ConstructType.Cron,\n\t\t);\n\t}\n\n\tconstructor(\n\t\tfn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n\t\ttimeout?: number,\n\t\tprotected _schedule?: ScheduleExpression,\n\t\tinput?: TInput,\n\t\toutputSchema?: OutSchema,\n\t\tservices: TServices = [] as unknown as TServices,\n\t\tlogger?: TLogger,\n\t\tpublisherService?: Service<TEventPublisherServiceName, TEventPublisher>,\n\t\tevents: any[] = [],\n\t\tmemorySize?: number,\n\t\tdatabaseService?: Service<TDatabaseServiceName, TDatabase>,\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) {\n\t\tsuper(\n\t\t\tfn,\n\t\t\ttimeout,\n\t\t\tConstructType.Cron,\n\t\t\tinput,\n\t\t\toutputSchema,\n\t\t\tservices,\n\t\t\tlogger,\n\t\t\tpublisherService,\n\t\t\tevents,\n\t\t\tmemorySize,\n\t\t\tundefined, // auditorStorageService\n\t\t\tdatabaseService,\n\t\t\tconstructs,\n\t\t);\n\t}\n\n\tget schedule(): ScheduleExpression | undefined {\n\t\treturn this._schedule;\n\t}\n}\n\nexport type RateExpression = `rate(${string})`;\n\ntype CronMinute =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| `${number},${number}`\n\t| string; // Allow more complex patterns\n\ntype CronHour =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| `${number},${number}`\n\t| string; // Allow more complex patterns\n\ntype CronDay =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| `${number},${number}`\n\t| string; // Allow more complex patterns\n\ntype CronMonth =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| 'JAN'\n\t| 'FEB'\n\t| 'MAR'\n\t| 'APR'\n\t| 'MAY'\n\t| 'JUN'\n\t| 'JUL'\n\t| 'AUG'\n\t| 'SEP'\n\t| 'OCT'\n\t| 'NOV'\n\t| 'DEC'\n\t| string; // Allow more complex patterns\n\ntype CronWeekday =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| 'SUN'\n\t| 'MON'\n\t| 'TUE'\n\t| 'WED'\n\t| 'THU'\n\t| 'FRI'\n\t| 'SAT'\n\t| `${string}-${string}` // Allow patterns like MON-FRI\n\t| string; // Allow more complex patterns\n\nexport type CronExpression =\n\t`cron(${CronMinute} ${CronHour} ${CronDay} ${CronMonth} ${CronWeekday})`;\n\nexport type ScheduleExpression = RateExpression | CronExpression;\n","import type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { cloneWith } from '../clone';\nimport {\n\ttype Consumable,\n\tidsOf,\n\ttype ServicesOf,\n\tserviceOf,\n\tservicesOf,\n} from '../construct-interface';\nimport { FunctionBuilder, type FunctionHandler } from '../functions';\nimport { Cron, type ScheduleExpression } from './Cron';\n\nexport class CronBuilder<\n\tTInput extends ComposableStandardSchema,\n\tTServices extends Service[],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n> extends FunctionBuilder<\n\tTInput,\n\tOutSchema,\n\tTServices,\n\tTLogger,\n\tTEventPublisher,\n\tTEventPublisherServiceName,\n\tundefined,\n\tstring,\n\tTDatabase,\n\tTDatabaseServiceName\n> {\n\tprivate _schedule?: ScheduleExpression;\n\n\tconstructor() {\n\t\tsuper(ConstructType.Cron);\n\t}\n\n\toverride memorySize(memorySize: number): this {\n\t\treturn cloneWith(this, { _memorySize: memorySize });\n\t}\n\n\tschedule(\n\t\t_expression: ScheduleExpression,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, { _schedule: _expression });\n\t}\n\n\toverride input<T extends ComposableStandardSchema>(\n\t\tschema: T,\n\t): CronBuilder<\n\t\tT,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\tinputSchema: schema as unknown as TInput,\n\t\t}) as unknown as CronBuilder<\n\t\t\tT,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride output<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tT,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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 unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tT,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\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\toverride dependsOn<const T extends readonly Consumable[]>(\n\t\tconstructs: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\t[...TServices, ...ServicesOf<T>],\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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: uniqBy(\n\t\t\t\t[...this._services, ...services],\n\t\t\t\t(s: Service) => s.serviceName,\n\t\t\t),\n\t\t\t_constructs: idsOf(constructs, this._constructs),\n\t\t}) as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\t[...TServices, ...ServicesOf<T>],\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride services<T extends Service[]>(\n\t\tservices: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\t[...TServices, ...T],\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\t_services: uniqBy(\n\t\t\t\t[...this._services, ...services],\n\t\t\t\t(s) => s.serviceName,\n\t\t\t) as TServices,\n\t\t}) as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\t[...TServices, ...T],\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride logger<T extends Logger>(\n\t\tlogger: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tT,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\t_logger: logger as unknown as TLogger,\n\t\t}) as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tT,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride publisher<T extends EventPublisher<any>, TName extends string>(\n\t\tpublisher: Service<TName, T>,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tT,\n\t\tTName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\t_publisher: publisher as unknown as Service<\n\t\t\t\tTEventPublisherServiceName,\n\t\t\t\tTEventPublisher\n\t\t\t>,\n\t\t}) as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tT,\n\t\t\tTName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\t/**\n\t * Set the database service for this cron job.\n\t * The database will be available in the handler context as `db`.\n\t */\n\toverride database<T, TName extends string>(\n\t\tsource: Consumable<TName, T> | Service<TName, T>,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tT,\n\t\tTName\n\t> {\n\t\tconst service = serviceOf(source);\n\n\t\treturn cloneWith(this, {\n\t\t\t_databaseService: service as unknown as Service<\n\t\t\t\tTDatabaseServiceName,\n\t\t\t\tTDatabase\n\t\t\t>,\n\t\t}) as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tT,\n\t\t\tTName\n\t\t>;\n\t}\n\n\toverride handle(\n\t\tfn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n\t): Cron<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tconst cron = new Cron(\n\t\t\tfn,\n\t\t\tthis._timeout,\n\t\t\tthis._schedule,\n\t\t\tthis.inputSchema,\n\t\t\tthis.outputSchema,\n\t\t\tthis._services,\n\t\t\tthis._logger,\n\t\t\tthis._publisher,\n\t\t\tthis._events,\n\t\t\tthis._memorySize,\n\t\t\tthis._databaseService,\n\t\t\tthis._constructs,\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\tcron.owner = this._owner;\n\n\t\t// No reset. `.handle()` reads this builder and leaves it alone, so a\n\t\t// configured base — `const fn = f.logger(log).timeout(60_000)` — keeps\n\t\t// its configuration for every construct built from it. The reset that\n\t\t// used to be here wiped the base on first use, which made a base usable\n\t\t// exactly once, and quietly reverted the logger to the default.\n\n\t\treturn cron;\n\t}\n}\n"],"mappings":";;;;;;;AAUA,IAAa,OAAb,cASUA,2BAaR;CACD,OAAO,OAAOC,KAA2C;AACxD,SAAO,QACN,OACE,IAAiB,oBAAoB,QACtC,IAAI,SAASC,gCAAc,KAC5B;CACD;CAED,YACCC,IACAC,SACUC,WACVC,OACAC,cACAC,WAAsB,CAAE,GACxBC,QACAC,kBACAC,SAAgB,CAAE,GAClBC,YACAC,iBAKAC,aAAuB,CAAE,GACxB;AACD,QACC,IACA,SACAZ,gCAAc,MACd,OACA,cACA,UACA,QACA,kBACA,QACA,oBAEA,iBACA,WACA;EA7BS;CA8BV;CAED,IAAI,WAA2C;AAC9C,SAAO,KAAK;CACZ;AACD;;;;;AC7DD,IAAa,cAAb,cASUa,kCAWR;CACD,AAAQ;CAER,cAAc;AACb,QAAMC,gCAAc,KAAK;CACzB;CAED,AAAS,WAAWC,YAA0B;AAC7C,SAAO,wBAAU,MAAM,EAAE,aAAa,WAAY,EAAC;CACnD;CAED,SACCC,aAUC;AACD,SAAO,wBAAU,MAAM,EAAE,WAAW,YAAa,EAAC;CAClD;CAED,AAAS,MACRC,QAUC;AACD,SAAO,wBAAU,MAAM,EACtB,aAAa,OACb,EAAC;CAUF;CAED,AAAS,OACRA,QAUC;AACD,SAAO,wBAAU,MAAM,EACtB,cAAc,OACd,EAAC;CAUF;;;;;;;;;;;;CAaD,AAAS,UACRC,YAUC;EAQD,MAAM,WAAW,uCAAW,WAAW;AAEvC,SAAO,wBAAU,MAAM;GACtB,WAAW,2BACV,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAACC,MAAe,EAAE,YAClB;GACD,aAAa,kCAAM,YAAY,KAAK,YAAY;EAChD,EAAC;CAUF;CAED,AAAS,SACRC,UAUC;AACD,SAAO,wBAAU,MAAM,EACtB,WAAW,2BACV,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACT,CACD,EAAC;CAUF;CAED,AAAS,OACRC,QAUC;AACD,SAAO,wBAAU,MAAM,EACtB,SAAS,OACT,EAAC;CAUF;CAED,AAAS,UACRC,WAUC;AACD,SAAO,wBAAU,MAAM,EACtB,YAAY,UAIZ,EAAC;CAUF;;;;;CAMD,AAAS,SACRC,QAUC;EACD,MAAM,UAAU,sCAAU,OAAO;AAEjC,SAAO,wBAAU,MAAM,EACtB,kBAAkB,QAIlB,EAAC;CAUF;CAED,AAAS,OACRC,IAUC;EACD,MAAM,OAAO,IAAI,KAChB,IACA,KAAK,UACL,KAAK,WACL,KAAK,aACL,KAAK,cACL,KAAK,WACL,KAAK,SACL,KAAK,YACL,KAAK,SACL,KAAK,aACL,KAAK,kBACL,KAAK;AAKN,OAAK,QAAQ,KAAK;AAQlB,SAAO;CACP;AACD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Endpoint-DrD8a1yH.d.cts","names":[],"sources":["../src/endpoints/Authorizer.ts","../src/endpoints/audit.ts","../src/endpoints/rls.ts","../src/endpoints/Endpoint.ts"],"sourcesContent":[],"mappings":"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"}