@geekmidas/constructs 9.0.2 → 9.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/dist/{AWSScheduledFunction-Bn99MceY.d.cts → AWSScheduledFunction-BHHlWlfV.d.cts} +2 -2
  3. package/dist/{AWSScheduledFunction-ysaCsdWx.d.mts.map → AWSScheduledFunction-BHHlWlfV.d.cts.map} +1 -1
  4. package/dist/{AWSScheduledFunction-ysaCsdWx.d.mts → AWSScheduledFunction-BzGCUbkk.d.mts} +2 -2
  5. package/dist/{AWSScheduledFunction-Bn99MceY.d.cts.map → AWSScheduledFunction-BzGCUbkk.d.mts.map} +1 -1
  6. package/dist/{AWSScheduledFunction-DbkDr8CA.cjs → AWSScheduledFunction-C42adp8A.cjs} +16 -5
  7. package/dist/AWSScheduledFunction-C42adp8A.cjs.map +1 -0
  8. package/dist/{AWSScheduledFunction-CufMMhGB.mjs → AWSScheduledFunction-KP6lqbsW.mjs} +15 -4
  9. package/dist/AWSScheduledFunction-KP6lqbsW.mjs.map +1 -0
  10. package/dist/{Construct-r0U2zBwW.mjs → Construct-BWF5HxaM.mjs} +5 -2
  11. package/dist/Construct-BWF5HxaM.mjs.map +1 -0
  12. package/dist/{Construct-_1wX7p_Y.d.cts → Construct-JlyQkBkv.d.cts} +39 -4
  13. package/dist/Construct-JlyQkBkv.d.cts.map +1 -0
  14. package/dist/{Construct-vXMZJgRp.cjs → Construct-TGIM_E4o.cjs} +5 -2
  15. package/dist/Construct-TGIM_E4o.cjs.map +1 -0
  16. package/dist/{Construct-DCMuYOox.d.mts → Construct-pxwC6fDD.d.mts} +39 -4
  17. package/dist/Construct-pxwC6fDD.d.mts.map +1 -0
  18. package/dist/{Endpoint-CLPSIl6S.d.mts → Endpoint-B0P_pEMr.d.mts} +3 -3
  19. package/dist/{Endpoint-CLPSIl6S.d.mts.map → Endpoint-B0P_pEMr.d.mts.map} +1 -1
  20. package/dist/{Endpoint-DgfRslct.d.cts → Endpoint-Cwjhc1Hl.d.cts} +2 -2
  21. package/dist/Endpoint-Cwjhc1Hl.d.cts.map +1 -0
  22. package/dist/{HonoEndpointAdaptor-DJDT3PMx.mjs → HonoEndpointAdaptor-BMVwx2cz.mjs} +18 -11
  23. package/dist/HonoEndpointAdaptor-BMVwx2cz.mjs.map +1 -0
  24. package/dist/{HonoEndpointAdaptor-CkJENANP.cjs → HonoEndpointAdaptor-DPDsDi-D.cjs} +19 -12
  25. package/dist/HonoEndpointAdaptor-DPDsDi-D.cjs.map +1 -0
  26. package/dist/{Queue-HBDf0fqz.d.mts → Queue-BL68oDJ-.d.mts} +2 -2
  27. package/dist/{Queue-DaxjwmOQ.d.cts.map → Queue-BL68oDJ-.d.mts.map} +1 -1
  28. package/dist/{Queue-DaxjwmOQ.d.cts → Queue-DxJ6btRE.d.cts} +2 -2
  29. package/dist/{Queue-HBDf0fqz.d.mts.map → Queue-DxJ6btRE.d.cts.map} +1 -1
  30. package/dist/{Subscriber-B69ngPwl.d.cts → Subscriber-BpVhcGhX.d.cts} +2 -2
  31. package/dist/{Subscriber-B69ngPwl.d.cts.map → Subscriber-BpVhcGhX.d.cts.map} +1 -1
  32. package/dist/{Subscriber-D8Xm-86W.d.mts → Subscriber-DF6xsBAJ.d.mts} +2 -2
  33. package/dist/{Subscriber-D8Xm-86W.d.mts.map → Subscriber-DF6xsBAJ.d.mts.map} +1 -1
  34. package/dist/{Topic-DT10AqHk.d.mts → Topic-DJXoDeMP.d.cts} +3 -3
  35. package/dist/{Topic-C5ZMfveW.d.cts.map → Topic-DJXoDeMP.d.cts.map} +1 -1
  36. package/dist/{Topic-C5ZMfveW.d.cts → Topic-DxWQBgMN.d.mts} +3 -3
  37. package/dist/{Topic-DT10AqHk.d.mts.map → Topic-DxWQBgMN.d.mts.map} +1 -1
  38. package/dist/adaptors/aws.cjs +14 -7
  39. package/dist/adaptors/aws.cjs.map +1 -1
  40. package/dist/adaptors/aws.d.cts +6 -6
  41. package/dist/adaptors/aws.d.cts.map +1 -1
  42. package/dist/adaptors/aws.d.mts +8 -8
  43. package/dist/adaptors/aws.d.mts.map +1 -1
  44. package/dist/adaptors/aws.mjs +14 -7
  45. package/dist/adaptors/aws.mjs.map +1 -1
  46. package/dist/adaptors/hono.cjs +7 -6
  47. package/dist/adaptors/hono.d.cts +3 -3
  48. package/dist/adaptors/hono.d.cts.map +1 -1
  49. package/dist/adaptors/hono.d.mts +4 -4
  50. package/dist/adaptors/hono.d.mts.map +1 -1
  51. package/dist/adaptors/hono.mjs +7 -6
  52. package/dist/adaptors/testing.cjs +161 -126
  53. package/dist/adaptors/testing.cjs.map +1 -1
  54. package/dist/adaptors/testing.d.cts +7 -5
  55. package/dist/adaptors/testing.d.cts.map +1 -1
  56. package/dist/adaptors/testing.d.mts +8 -6
  57. package/dist/adaptors/testing.d.mts.map +1 -1
  58. package/dist/adaptors/testing.mjs +162 -127
  59. package/dist/adaptors/testing.mjs.map +1 -1
  60. package/dist/clone-I_WIpiFf.cjs +45 -0
  61. package/dist/clone-I_WIpiFf.cjs.map +1 -0
  62. package/dist/clone-pdXxc0t3.mjs +39 -0
  63. package/dist/clone-pdXxc0t3.mjs.map +1 -0
  64. package/dist/crons/index.cjs +14 -32
  65. package/dist/crons/index.cjs.map +1 -1
  66. package/dist/crons/index.d.cts +7 -7
  67. package/dist/crons/index.d.cts.map +1 -1
  68. package/dist/crons/index.d.mts +3 -3
  69. package/dist/crons/index.d.mts.map +1 -1
  70. package/dist/crons/index.mjs +14 -32
  71. package/dist/crons/index.mjs.map +1 -1
  72. package/dist/endpoints/index.cjs +74 -61
  73. package/dist/endpoints/index.cjs.map +1 -1
  74. package/dist/endpoints/index.d.cts +14 -6
  75. package/dist/endpoints/index.d.cts.map +1 -1
  76. package/dist/endpoints/index.d.mts +13 -5
  77. package/dist/endpoints/index.d.mts.map +1 -1
  78. package/dist/endpoints/index.mjs +74 -61
  79. package/dist/endpoints/index.mjs.map +1 -1
  80. package/dist/functions/index.cjs +3 -2
  81. package/dist/functions/index.d.cts +2 -2
  82. package/dist/functions/index.d.mts +2 -2
  83. package/dist/functions/index.mjs +3 -2
  84. package/dist/{functions-B-qt91O7.mjs → functions-EqTloHjo.mjs} +107 -46
  85. package/dist/functions-EqTloHjo.mjs.map +1 -0
  86. package/dist/{functions-C8i1kCMM.cjs → functions-SqtCDc9c.cjs} +118 -45
  87. package/dist/functions-SqtCDc9c.cjs.map +1 -0
  88. package/dist/{index-DP6fqv0I.d.mts → index-C7iynzLI.d.mts} +8 -2
  89. package/dist/index-C7iynzLI.d.mts.map +1 -0
  90. package/dist/{index-BVs9DvIj.d.cts → index-DdgJRm4q.d.cts} +12 -6
  91. package/dist/index-DdgJRm4q.d.cts.map +1 -0
  92. package/dist/index.cjs +1 -1
  93. package/dist/index.d.cts +2 -2
  94. package/dist/index.d.mts +4 -4
  95. package/dist/index.mjs +1 -1
  96. package/dist/{lazyAccessors-DfqZR6C4.mjs → lazyAccessors-CCTK19xj.mjs} +3 -3
  97. package/dist/{lazyAccessors-DfqZR6C4.mjs.map → lazyAccessors-CCTK19xj.mjs.map} +1 -1
  98. package/dist/{lazyAccessors-DmTG8sQH.cjs → lazyAccessors-D04oftGw.cjs} +3 -3
  99. package/dist/{lazyAccessors-DmTG8sQH.cjs.map → lazyAccessors-D04oftGw.cjs.map} +1 -1
  100. package/dist/monitors/index.cjs +49 -0
  101. package/dist/monitors/index.cjs.map +1 -0
  102. package/dist/monitors/index.d.cts +45 -0
  103. package/dist/monitors/index.d.cts.map +1 -0
  104. package/dist/monitors/index.d.mts +45 -0
  105. package/dist/monitors/index.d.mts.map +1 -0
  106. package/dist/monitors/index.mjs +48 -0
  107. package/dist/monitors/index.mjs.map +1 -0
  108. package/dist/{processAudits-CKjjivyz.cjs → processAudits-BJZT5gmy.cjs} +2 -2
  109. package/dist/{processAudits-CKjjivyz.cjs.map → processAudits-BJZT5gmy.cjs.map} +1 -1
  110. package/dist/{processAudits-ySnizdMG.mjs → processAudits-CwyaaSQc.mjs} +1 -1
  111. package/dist/{processAudits-ySnizdMG.mjs.map → processAudits-CwyaaSQc.mjs.map} +1 -1
  112. package/dist/{publisher-lFQleddL.cjs → publisher-BZgcrVPy.cjs} +1 -1
  113. package/dist/{publisher-lFQleddL.cjs.map → publisher-BZgcrVPy.cjs.map} +1 -1
  114. package/dist/{publisher-BrFOF847.mjs → publisher-CnpeMv-r.mjs} +1 -1
  115. package/dist/{publisher-BrFOF847.mjs.map → publisher-CnpeMv-r.mjs.map} +1 -1
  116. package/dist/queue/index.cjs +9 -22
  117. package/dist/queue/index.cjs.map +1 -1
  118. package/dist/queue/index.d.cts +4 -4
  119. package/dist/queue/index.d.cts.map +1 -1
  120. package/dist/queue/index.d.mts +2 -2
  121. package/dist/queue/index.d.mts.map +1 -1
  122. package/dist/queue/index.mjs +9 -22
  123. package/dist/queue/index.mjs.map +1 -1
  124. package/dist/subscribers/index.cjs +9 -22
  125. package/dist/subscribers/index.cjs.map +1 -1
  126. package/dist/subscribers/index.d.cts +5 -5
  127. package/dist/subscribers/index.d.cts.map +1 -1
  128. package/dist/subscribers/index.d.mts +3 -3
  129. package/dist/subscribers/index.d.mts.map +1 -1
  130. package/dist/subscribers/index.mjs +9 -22
  131. package/dist/subscribers/index.mjs.map +1 -1
  132. package/dist/{telemetry-3vdxGn4q.d.mts → telemetry-C--EgYVr.d.mts} +1 -1
  133. package/dist/{telemetry-3vdxGn4q.d.mts.map → telemetry-C--EgYVr.d.mts.map} +1 -1
  134. package/dist/topic/index.cjs +4 -7
  135. package/dist/topic/index.cjs.map +1 -1
  136. package/dist/topic/index.d.cts +2 -2
  137. package/dist/topic/index.d.cts.map +1 -1
  138. package/dist/topic/index.d.mts +2 -2
  139. package/dist/topic/index.d.mts.map +1 -1
  140. package/dist/topic/index.mjs +4 -7
  141. package/dist/topic/index.mjs.map +1 -1
  142. package/dist/{types-BDNGr7pv.d.mts → types-DNngH0fX.d.mts} +1 -1
  143. package/dist/{types-BDNGr7pv.d.mts.map → types-DNngH0fX.d.mts.map} +1 -1
  144. package/dist/types.d.mts +1 -1
  145. package/package.json +32 -22
  146. package/src/Construct.ts +5 -0
  147. package/src/__tests__/builder-reuse.spec.ts +587 -0
  148. package/src/__tests__/monitor.spec.ts +636 -0
  149. package/src/clone.ts +38 -0
  150. package/src/crons/CronBuilder.ts +35 -45
  151. package/src/crons/__tests__/Cron.spec.ts +10 -2
  152. package/src/crons/__tests__/CronBuilder.state-isolation.spec.ts +64 -18
  153. package/src/endpoints/AmazonApiGatewayEndpointAdaptor.ts +23 -2
  154. package/src/endpoints/EndpointBuilder.ts +61 -70
  155. package/src/endpoints/EndpointFactory.ts +31 -0
  156. package/src/endpoints/HonoEndpointAdaptor.ts +16 -1
  157. package/src/endpoints/TestEndpointAdaptor.ts +194 -150
  158. package/src/endpoints/__tests__/EndpointBuilder.audit.spec.ts +6 -3
  159. package/src/endpoints/__tests__/EndpointBuilder.responseType.spec.ts +4 -1
  160. package/src/endpoints/__tests__/EndpointBuilder.spec.ts +16 -8
  161. package/src/functions/AWSLambdaFunction.ts +28 -2
  162. package/src/functions/BaseFunctionBuilder.ts +33 -22
  163. package/src/functions/FunctionBuilder.ts +41 -51
  164. package/src/functions/TestFunctionAdaptor.ts +66 -31
  165. package/src/functions/__tests__/FunctionBuilder.state-isolation.spec.ts +55 -12
  166. package/src/index.ts +6 -0
  167. package/src/monitor.ts +145 -0
  168. package/src/monitors/heartbeat.ts +86 -0
  169. package/src/monitors/index.ts +6 -0
  170. package/src/queue/QueueBuilder.ts +22 -22
  171. package/src/subscribers/SubscriberBuilder.ts +19 -22
  172. package/src/topic/TopicBuilder.ts +9 -7
  173. package/tsdown.config.ts +1 -0
  174. package/dist/AWSScheduledFunction-CufMMhGB.mjs.map +0 -1
  175. package/dist/AWSScheduledFunction-DbkDr8CA.cjs.map +0 -1
  176. package/dist/Construct-DCMuYOox.d.mts.map +0 -1
  177. package/dist/Construct-_1wX7p_Y.d.cts.map +0 -1
  178. package/dist/Construct-r0U2zBwW.mjs.map +0 -1
  179. package/dist/Construct-vXMZJgRp.cjs.map +0 -1
  180. package/dist/Endpoint-DgfRslct.d.cts.map +0 -1
  181. package/dist/HonoEndpointAdaptor-CkJENANP.cjs.map +0 -1
  182. package/dist/HonoEndpointAdaptor-DJDT3PMx.mjs.map +0 -1
  183. package/dist/functions-B-qt91O7.mjs.map +0 -1
  184. package/dist/functions-C8i1kCMM.cjs.map +0 -1
  185. package/dist/index-BVs9DvIj.d.cts.map +0 -1
  186. package/dist/index-DP6fqv0I.d.mts.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,46 @@
1
1
  # @geekmidas/constructs
2
2
 
3
+ ## 9.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#308](https://github.com/geekmidas/toolbox/pull/308) [`f9a4b69`](https://github.com/geekmidas/toolbox/commit/f9a4b69d2f9fc3c582484ab2830be7131c13d5bd) Thanks [@geekmidas](https://github.com/geekmidas)! - Functions, crons and endpoints can report their runs to a monitor
8
+
9
+ `.monitor(service)` tells a monitor when a run starts, succeeds or fails: a heartbeat, an uptime check, an error tracker. It can be called more than once, and a monitor set on a shared base or on an `EndpointFactory` is inherited by everything built from it. A monitor that fails is logged and never fails the run.
10
+
11
+ `heartbeat()` from `@geekmidas/constructs/monitors` pings a URL read from an environment variable, `HEARTBEAT_URL` by default. When the variable is unset it does nothing, so only the stages that set it are monitored. Presets cover Better Stack and Healthchecks.io:
12
+
13
+ ```ts
14
+ import { heartbeat } from "@geekmidas/constructs/monitors";
15
+
16
+ export const nightly = c
17
+ .schedule("rate(1 day)")
18
+ .monitor(heartbeat.betterStack("NIGHTLY_HEARTBEAT_URL"))
19
+ .handle(async () => {});
20
+ ```
21
+
22
+ Endpoints report from the response status: a 5xx is a failure and anything else, including a 4xx, is a success. On Lambda the report is awaited before the response returns; on Hono it is not, so requests do not wait on the monitoring service.
23
+
24
+ - [#308](https://github.com/geekmidas/toolbox/pull/308) [`f9a4b69`](https://github.com/geekmidas/toolbox/commit/f9a4b69d2f9fc3c582484ab2830be7131c13d5bd) Thanks [@geekmidas](https://github.com/geekmidas)! - A configured builder can be reused as a base
25
+
26
+ Builder methods now return a new builder instead of changing the one they were called on, and `.handle()` no longer resets the builder. A base like `const base = c.logger(logger).timeout(60_000)` keeps its configuration for every cron built from it; before, the first `.handle()` wiped it, so the second cron silently came back on the default logger and timeout. Two chains started from one base also no longer share state.
27
+
28
+ This applies to the function, cron, subscriber, queue, topic and endpoint builders. Chained code is unaffected. Code that calls a method without using its result, such as `builder.timeout(30); builder.handle(…)`, must chain instead: `builder.timeout(30).handle(…)`.
29
+
30
+ ### Patch Changes
31
+
32
+ - Updated dependencies []:
33
+ - @geekmidas/audit@9.1.0
34
+ - @geekmidas/cache@9.1.0
35
+ - @geekmidas/db@9.1.0
36
+ - @geekmidas/envkit@9.1.0
37
+ - @geekmidas/errors@9.1.0
38
+ - @geekmidas/events@9.1.0
39
+ - @geekmidas/logger@9.1.0
40
+ - @geekmidas/rate-limit@9.1.0
41
+ - @geekmidas/schema@9.1.0
42
+ - @geekmidas/services@9.1.0
43
+
3
44
  ## 9.0.2
4
45
 
5
46
  ### Patch Changes
@@ -1,4 +1,4 @@
1
- import { Function, FunctionHandler } from "./index-BVs9DvIj.cjs";
1
+ import { Function, FunctionHandler } from "./index-DdgJRm4q.cjs";
2
2
  import { EnvironmentParser } from "@geekmidas/envkit";
3
3
  import { EventPublisher } from "@geekmidas/events";
4
4
  import { Logger } from "@geekmidas/logger";
@@ -114,4 +114,4 @@ declare class AWSScheduledFunction<TInput extends ComposableStandardSchema | und
114
114
 
115
115
  //#endregion
116
116
  export { AWSLambdaFunction, AWSScheduledFunction, Cron, CronExpression, RateExpression, ScheduleExpression };
117
- //# sourceMappingURL=AWSScheduledFunction-Bn99MceY.d.cts.map
117
+ //# sourceMappingURL=AWSScheduledFunction-BHHlWlfV.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AWSScheduledFunction-ysaCsdWx.d.mts","names":[],"sources":["../src/functions/FunctionExecutionWrapper.ts","../src/functions/AWSLambdaFunction.ts","../src/crons/Cron.ts","../src/crons/AWSScheduledFunction.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"AWSScheduledFunction-BHHlWlfV.d.cts","names":[],"sources":["../src/functions/FunctionExecutionWrapper.ts","../src/functions/AWSLambdaFunction.ts","../src/crons/Cron.ts","../src/crons/AWSScheduledFunction.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Function, FunctionHandler } from "./index-DP6fqv0I.mjs";
1
+ import { Function, FunctionHandler } from "./index-C7iynzLI.mjs";
2
2
  import { Service, ServiceDiscovery, ServiceRecord } from "@geekmidas/services";
3
3
  import { AuditStorage, AuditableAction, Auditor } from "@geekmidas/audit";
4
4
  import { EnvironmentParser } from "@geekmidas/envkit";
@@ -114,4 +114,4 @@ declare class AWSScheduledFunction<TInput extends ComposableStandardSchema | und
114
114
 
115
115
  //#endregion
116
116
  export { AWSLambdaFunction, AWSScheduledFunction, Cron, CronExpression, RateExpression, ScheduleExpression };
117
- //# sourceMappingURL=AWSScheduledFunction-ysaCsdWx.d.mts.map
117
+ //# sourceMappingURL=AWSScheduledFunction-BzGCUbkk.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AWSScheduledFunction-Bn99MceY.d.cts","names":[],"sources":["../src/functions/FunctionExecutionWrapper.ts","../src/functions/AWSLambdaFunction.ts","../src/crons/Cron.ts","../src/crons/AWSScheduledFunction.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;uBAqBsB,wCACN,qEACI,4DACD,gCACF,SAAS,gCACD,uHAEF,kLAID,mCAAmC;uBAMlC;yBACE,SACtB,QACA,WACA,SACA,YACA,iBACA,4BACA,eACA,0BACA,WACA,sBACA,cACA,gBACC,QACA,WACA,SACA,YACA,WACA,eACA;EArCkB,WAAA,CAAA,SAAA,EAiBC,iBAjBuB,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,EAkBrB,QAlBqB,CAmB3C,MAnB2C,EAoB3C,SApB2C,EAqB3C,OArB2C,EAsB3C,UAtB2C,EAuB3C,eAvB2C,EAwB3C,0BAxB2C,EAyB3C,aAzB2C,EA0B3C,wBA1B2C,EA2B3C,SA3B2C,EA4B3C,oBA5B2C,EA6B3C,YA7B2C,EA8B3C,eA9B2C,CA+B1C,MA/B0C,EAgC1C,SAhC0C,EAiC1C,OAjC0C,EAkC1C,UAlC0C,EAmC1C,SAnC0C,EAoC1C,aApC0C,EAqC1C,YArC0C,CAAA,CAAA;EAAA,UAAA,OAAA,CAAA,EA0CzB,OA1CyB;EAAA,IAC9B,MAAA,CAAA,CAAA,EA2CD,OA3CC;EAAwB,IACpB,gBAAA,CAAA,CAAA,EA8CK,gBA9CL,CA8CsB,aA9CtB,CA8CoC,SA9CpC,CAAA,CAAA;EAAgB,WACjB,CAAA,CAAA,EAqDH,OArDG,CAqDK,aArDL,CAqDmB,SArDnB,CAAA,CAAA;EAAO,WACT,CAAA,CAAA,EAwDK,OAxDL,CAwDa,SAxDb,GAAA,SAAA,CAAA;EAAM;;;;EAOc,eAAoB,CAAA,CAAA,EAmE/B,OAnE+B,CAmEvB,aAnEuB,GAAA,SAAA,CAAA;EAAe;;;;EAU9D,aACP,CAAA,CAAA,EA0EqB,OA1ErB,CA0E6B,OA1E7B,CA0EqC,YA1ErC,CAAA,GAAA,SAAA,CAAA;EAAU;;;;;;;;EASH,gBACN,CAAA,CAAA,CAAA,CAAA,OAAA,EAAA,CAAA,GAAA,EAAA;IACA,OAAA,CAAA,EAwFS,OAxFT,CAwFiB,YAxFjB,CAAA;IACA,EAAA,CAAA,EAwFI,SAxFJ;EAAU,CAAA,EACV,GAwFI,OAxFJ,CAwFY,CAxFZ,CAAA,CAAA,EAyFA,OAzFA,CAyFQ,CAzFR,CAAA;EAAS,gBACT,CAAA,MAAA,CAAA,CAAA,KAAA,EAoIK,MApIL,CAAA,EAqIA,OArIA,CAqIQ,6BArIR,CAqIsC,MArItC,CAAA,CAAA;EAAa,aACb,CAAA,QAAA,EA6I2B,mBA7I3B,CA6I+C,UA7I/C,CAAA,CAAA,EA6I0D,OA7I1D,CAAA,IAAA,CAAA;EAAY,6BAPb,CAAA,UA8J4C,wBA9J5C,CAAA,CAAA,IAAA,EAAA,OAAA,EAAA,MAAA,EAgKO,CAhKP,CAAA,EAiKC,OAjKD,CAiKS,6BAjKT,CAiKuC,CAjKvC,CAAA,CAAA;;;;;KChCS,gDAAgD,QAC3D,QACA;ADAqB,cCuCT,iBDvCiC,CAAA,eCwC9B,wBDxC8B,GAAA,SAAA,GAAA,SAAA,EAAA,mBCyC1B,gBDzC0B,GAAA,SAAA,GAAA,SAAA,EAAA,kBC0C3B,OD1C2B,EAAA,GAAA,EAAA,EAAA,gBC2C7B,MD3C6B,GC2CpB,MD3CoB,EAAA,wBC4CrB,cD5CqB,CAAA,GAAA,CAAA,GAAA,SAAA,GAAA,SAAA,EAAA,mCAAA,MAAA,GAAA,MAAA,EAAA,sBC8CvB,YD9CuB,GAAA,SAAA,GAAA,SAAA,EAAA,iCAAA,MAAA,GAAA,MAAA,EAAA,YAAA,SAAA,EAAA,6BAAA,MAAA,GAAA,MAAA,EAAA,qBCkDxB,eDlDwB,CAAA,MAAA,EAAA,OAAA,CAAA,GCkDW,eDlDX,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,SCsDpC,wBDtDoC,CCuD7C,MDvD6C,ECwD7C,UDxD6C,ECyD7C,SDzD6C,EC0D7C,OD1D6C,EC2D7C,eD3D6C,EC4D7C,0BD5D6C,EC6D7C,aD7D6C,EC8D7C,wBD9D6C,EC+D7C,SD/D6C,ECgE7C,oBDhE6C,ECiE7C,YDjE6C,CAAA,CAAA;EAAA,SAAA,EAAA,ECqEtB,QDrEsB,CCsE3C,MDtE2C,ECuE3C,SDvE2C,ECwE3C,ODxE2C,ECyE3C,UDzE2C,EC0E3C,eD1E2C,EC2E3C,0BD3E2C,EC4E3C,aD5E2C,EC6E3C,wBD7E2C,EC8E3C,SD9E2C,EC+E3C,oBD/E2C,ECgF3C,YDhF2C,ECiF3C,eDjF2C,CCkF1C,MDlF0C,ECmF1C,SDnF0C,ECoF1C,ODpF0C,ECqF1C,UDrF0C,ECsF1C,SDtF0C,ECuF1C,aDvF0C,ECwF1C,YDxF0C,CAAA,CAAA;EAAA,WAC9B,CAAA,SAAA,ECmEH,iBDnEG,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,ECoEQ,QDpER,CCqEb,MDrEa,ECsEb,SDtEa,ECuEb,ODvEa,ECwEb,UDxEa,ECyEb,eDzEa,EC0Eb,0BD1Ea,EC2Eb,aD3Ea,EC4Eb,wBD5Ea,EC6Eb,SD7Ea,EC8Eb,oBD9Ea,EC+Eb,YD/Ea,ECgFb,eDhFa,CCiFZ,MDjFY,ECkFZ,SDlFY,ECmFZ,ODnFY,ECoFZ,UDpFY,ECqFZ,SDrFY,ECsFZ,aDtFY,ECuFZ,YDvFY,CAAA,CAAA;EAAwB,QACpB,KAAA;EAAgB,QACjB,SAAA;EAAO,QACT,KAAA;EAAM,QAAG,gBAAA;EAAM,QACP,QAAA;EAAc,QAEhB,QAAA;EAAY,QAIb,OAAA;EAAe,QAAoB,MAAA;EAAe,QAMjD,QAAA;EAAiB,IAErC,OAAA,CAAA,CAAA,ECwRa,gBDxRb;;;;;cE9BU,oBACG,oEACG,gCACF,SAAS,0BACP,kEACM,8KAIf,SACT,QACA,WACA,SACA,WACA,iBACA,+CAGA,WACA,sBACA,kCACA,gBAAgB,QAAQ,WAAW,SAAS,WAAW;wBAahC;kCAXS;kBAS3B,gBAAgB,QAAQ,WAAW,SAAS,WAAW,0CAErC,wCACd,uBACO,sBACL,oBACD,4BACU,QAAQ,4BAA4B,yEAGrC,QAAQ,sBAAsB;EF/B5B,IAAA,QAAA,CAAA,CAAA,EEiDL,kBFjD6B,GAAA,SAAA;;AAC9B,KEqDJ,cAAA,GFrDI,QAAA,MAAA,GAAA;KEuDX,UAAA,GFtDe,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;KEgEf,QAAA,GF/Dc,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;KEyEd,OAAA,GFxEY,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;KEkFZ,SAAA,GFlFqB,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;KEuGrB,WAAA,GFtGoB,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;AAEF,KEqHX,cAAA,GFrHW,QEsHd,UFtHc,IEsHA,QFtHA,IEsHY,OFtHZ,IEsHuB,SFtHvB,IEsHoC,WFtHpC,GAAA;AAID,KEoHV,kBAAA,GAAqB,cFpHX,GEoH4B,cFpH5B;;;;;;AAXtB;;;;;;;;;;;;;;;;;;;;;;;AA+BI,cGjBS,oBHiBT,CAAA,eGhBY,wBHgBZ,GAAA,SAAA,GAAA,SAAA,EAAA,kBGfe,OHef,EAAA,GAAA,EAAA,EAAA,gBGda,MHcb,GGdsB,MHctB,EAAA,mBGbgB,gBHahB,GAAA,SAAA,GAAA,SAAA,EAAA,wBGZqB,cHYrB,CAAA,GAAA,CAAA,GAAA,SAAA,GAAA,SAAA,EAAA,mCAAA,MAAA,GAAA,MAAA,EAAA,YAAA,SAAA,EAAA,6BAAA,MAAA,GAAA,MAAA,CAAA,SGRM,iBHQN,CGPH,MHOG,EGNH,UHMG,EGLH,SHKG,EGJH,OHIG,EGHH,eHGG,EGFH,0BHEG,EAAA,SAAA,EAAA,MAAA,EGCH,SHDG,EGEH,oBHFG,CAAA,CAAA;EAAM,WACN,CAAA,SAAA,EGKS,iBHLT,CAAA,CAAA,CAAA,CAAA,EAAA,IAAA,EGMI,IHNJ,CGOD,MHPC,EGQD,SHRC,EGSD,OHTC,EGUD,UHVC,EGWD,eHXC,EGYD,0BHZC,EGaD,SHbC,EGcD,oBHdC,CAAA"}
1
+ {"version":3,"file":"AWSScheduledFunction-BzGCUbkk.d.mts","names":[],"sources":["../src/functions/FunctionExecutionWrapper.ts","../src/functions/AWSLambdaFunction.ts","../src/crons/Cron.ts","../src/crons/AWSScheduledFunction.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- const require_Construct = require('./Construct-vXMZJgRp.cjs');
2
- const require_functions = require('./functions-C8i1kCMM.cjs');
3
- const require_publisher = require('./publisher-lFQleddL.cjs');
1
+ const require_Construct = require('./Construct-TGIM_E4o.cjs');
2
+ const require_functions = require('./functions-SqtCDc9c.cjs');
3
+ const require_publisher = require('./publisher-BZgcrVPy.cjs');
4
4
  const __geekmidas_errors = require_Construct.__toESM(require("@geekmidas/errors"));
5
5
  const __geekmidas_services = require_Construct.__toESM(require("@geekmidas/services"));
6
6
  const __middy_core = require_Construct.__toESM(require("@middy/core"));
@@ -110,6 +110,7 @@ var AWSLambdaFunction = class extends FunctionExecutionWrapper {
110
110
  return { onError: (req) => {
111
111
  const logger = req.event?.logger || this.fn.logger;
112
112
  logger.error(req.error || {}, "Error processing function");
113
+ if (req.event) req.event.__error = req.error;
113
114
  throw (0, __geekmidas_errors.wrapError)(req.error);
114
115
  } };
115
116
  }
@@ -199,7 +200,17 @@ var AWSLambdaFunction = class extends FunctionExecutionWrapper {
199
200
  logger,
200
201
  requestId,
201
202
  startTime
202
- }, () => chain(event, context));
203
+ }, async () => {
204
+ const monitor = await require_functions.startMonitors(this.fn, this.serviceDiscovery, logger);
205
+ try {
206
+ const output = await chain(event, context);
207
+ await monitor.success(output);
208
+ return output;
209
+ } catch (error) {
210
+ await monitor.failure(event?.__error ?? error);
211
+ throw error;
212
+ }
213
+ });
203
214
  };
204
215
  return wrappedHandler;
205
216
  }
@@ -252,4 +263,4 @@ Object.defineProperty(exports, 'AWSScheduledFunction', {
252
263
  return AWSScheduledFunction;
253
264
  }
254
265
  });
255
- //# sourceMappingURL=AWSScheduledFunction-DbkDr8CA.cjs.map
266
+ //# sourceMappingURL=AWSScheduledFunction-C42adp8A.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AWSScheduledFunction-C42adp8A.cjs","names":["envParser: EnvironmentParser<{}>","fn: Function<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTAuditAction,\n\t\t\tFunctionHandler<\n\t\t\t\tTInput,\n\t\t\t\tTServices,\n\t\t\t\tTLogger,\n\t\t\t\tTOutSchema,\n\t\t\t\tTDatabase,\n\t\t\t\tTAuditStorage,\n\t\t\t\tTAuditAction\n\t\t\t>\n\t\t>","DefaultAuditor","handler: (ctx: {\n\t\t\tauditor?: Auditor<TAuditAction>;\n\t\t\tdb?: TDatabase;\n\t\t}) => Promise<T>","db","response","event: TEvent","response: InferStandardSchema<TOutSchema>","data: unknown","schema: T","envParser: EnvironmentParser<{}>","fn: Function<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTAuditAction,\n\t\t\tFunctionHandler<\n\t\t\t\tTInput,\n\t\t\t\tTServices,\n\t\t\t\tTLogger,\n\t\t\t\tTOutSchema,\n\t\t\t\tTDatabase,\n\t\t\t\tTAuditStorage,\n\t\t\t\tTAuditAction\n\t\t\t>\n\t\t>","event: FunctionEvent<\n\t\t\tTEvent,\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTDatabase,\n\t\t\tTAuditAction\n\t\t>","event: unknown","context: Context","envParser: EnvironmentParser<{}>","cron: Cron<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>"],"sources":["../src/functions/FunctionExecutionWrapper.ts","../src/functions/AWSLambdaFunction.ts","../src/crons/AWSScheduledFunction.ts"],"sourcesContent":["import type { AuditableAction, Auditor, AuditStorage } from '@geekmidas/audit';\nimport { DefaultAuditor } from '@geekmidas/audit';\nimport { withAuditableTransaction } from '@geekmidas/audit/kysely';\nimport type { EnvironmentParser } from '@geekmidas/envkit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type {\n\tComposableStandardSchema,\n\tInferComposableStandardSchema,\n\tInferStandardSchema,\n} from '@geekmidas/schema';\nimport {\n\ttype Service,\n\tServiceDiscovery,\n\ttype ServiceRecord,\n} from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { publishEvents } from '../publisher';\nimport type { Function, FunctionHandler } from './Function';\nimport { FunctionBuilder } from './FunctionBuilder';\n\nexport abstract class FunctionExecutionWrapper<\n\tTInput extends ComposableStandardSchema | undefined = undefined,\n\tTOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTAuditStorage extends AuditStorage | undefined = undefined,\n\tTAuditStorageServiceName extends string = string,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\tstring,\n\t\tunknown\n\t>,\n> {\n\tconstructor(\n\t\tprotected envParser: EnvironmentParser<{}>,\n\t\tprotected readonly fn: Function<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTAuditAction,\n\t\t\tFunctionHandler<\n\t\t\t\tTInput,\n\t\t\t\tTServices,\n\t\t\t\tTLogger,\n\t\t\t\tTOutSchema,\n\t\t\t\tTDatabase,\n\t\t\t\tTAuditStorage,\n\t\t\t\tTAuditAction\n\t\t\t>\n\t\t>,\n\t) {}\n\n\tprotected _logger?: TLogger;\n\n\tget logger(): TLogger {\n\t\treturn this._logger || this.fn.logger;\n\t}\n\n\tget serviceDiscovery(): ServiceDiscovery<ServiceRecord<TServices>> {\n\t\tconst serviceDiscovery = ServiceDiscovery.getInstance<\n\t\t\tServiceRecord<TServices>\n\t\t>(this.envParser);\n\n\t\treturn serviceDiscovery;\n\t}\n\n\tgetServices(): Promise<ServiceRecord<TServices>> {\n\t\treturn this.serviceDiscovery.register(this.fn.services);\n\t}\n\n\tasync getDatabase(): Promise<TDatabase | undefined> {\n\t\tif (!this.fn.databaseService) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst services = await this.serviceDiscovery.register([\n\t\t\tthis.fn.databaseService,\n\t\t]);\n\n\t\treturn services[\n\t\t\tthis.fn.databaseService.serviceName as keyof typeof services\n\t\t] as TDatabase;\n\t}\n\n\t/**\n\t * Get the audit storage service if configured.\n\t * Returns undefined if no auditor storage is configured.\n\t */\n\tasync getAuditStorage(): Promise<TAuditStorage | undefined> {\n\t\tif (!this.fn.auditorStorageService) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst services = await this.serviceDiscovery.register([\n\t\t\tthis.fn.auditorStorageService,\n\t\t]);\n\n\t\treturn services[\n\t\t\tthis.fn.auditorStorageService.serviceName as keyof typeof services\n\t\t] as TAuditStorage;\n\t}\n\n\t/**\n\t * Create an auditor instance for the function.\n\t * Returns undefined if no auditor storage is configured.\n\t */\n\tasync createAuditor(): Promise<Auditor<TAuditAction> | undefined> {\n\t\tconst storage = await this.getAuditStorage();\n\t\tif (!storage) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn new DefaultAuditor<TAuditAction>({\n\t\t\tactor: { id: 'system', type: 'system' },\n\t\t\tstorage: storage as AuditStorage,\n\t\t\tmetadata: {\n\t\t\t\tfunction: this.fn.type,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Execute handler with audit transaction support.\n\t * If the audit storage has a database (via getDatabase()), wraps execution\n\t * in a transaction so audits are atomic with handler's database operations.\n\t *\n\t * @param handler - The handler function to execute (receives auditor and db)\n\t * @returns The handler result\n\t */\n\tasync executeWithAudit<T>(\n\t\thandler: (ctx: {\n\t\t\tauditor?: Auditor<TAuditAction>;\n\t\t\tdb?: TDatabase;\n\t\t}) => Promise<T>,\n\t): Promise<T> {\n\t\tconst auditor = await this.createAuditor();\n\t\tconst storage = await this.getAuditStorage();\n\n\t\t// No audit context - just run handler with regular db\n\t\tif (!auditor || !storage) {\n\t\t\tconst db = await this.getDatabase();\n\t\t\treturn handler({ db });\n\t\t}\n\n\t\t// Check if storage has a database and db service names match\n\t\tconst storageDb = (storage as AuditStorage).getDatabase?.();\n\t\tconst databaseServiceName = this.fn.databaseService?.serviceName;\n\t\tconst auditDbServiceName = this.fn.auditorStorageService?.serviceName;\n\n\t\t// If the audit storage has a database and we're using the same database service\n\t\t// (or the audit storage provides the database), use transactional execution\n\t\tif (storageDb && databaseServiceName && auditDbServiceName) {\n\t\t\treturn withAuditableTransaction(\n\t\t\t\tstorageDb as any,\n\t\t\t\tauditor as any,\n\t\t\t\tasync (trx) => {\n\t\t\t\t\t// Use transaction as db\n\t\t\t\t\tconst response = await handler({\n\t\t\t\t\t\tauditor,\n\t\t\t\t\t\tdb: trx as TDatabase,\n\t\t\t\t\t});\n\t\t\t\t\t// Audits are flushed by withAuditableTransaction before commit\n\t\t\t\t\treturn response;\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\t// No database on storage or service names don't match - run handler and flush audits after\n\t\tconst db = await this.getDatabase();\n\t\tconst response = await handler({ auditor, db });\n\n\t\t// Flush audits (no transaction)\n\t\tawait auditor.flush();\n\n\t\treturn response;\n\t}\n\n\tasync getFunctionInput<TEvent>(\n\t\tevent: TEvent,\n\t): Promise<InferComposableStandardSchema<TInput>> {\n\t\tconst parsedInput = await FunctionBuilder.parseComposableStandardSchema(\n\t\t\tevent,\n\t\t\tthis.fn.input,\n\t\t);\n\n\t\treturn parsedInput as InferComposableStandardSchema<TInput>;\n\t}\n\n\tasync publishEvents(response: InferStandardSchema<TOutSchema>) {\n\t\tawait publishEvents(\n\t\t\tthis.logger,\n\t\t\tthis.serviceDiscovery,\n\t\t\tthis.fn.events,\n\t\t\tresponse,\n\t\t\tthis.fn.publisherService,\n\t\t);\n\t}\n\n\tasync parseComposableStandardSchema<T extends ComposableStandardSchema>(\n\t\tdata: unknown,\n\t\tschema: T,\n\t): Promise<InferComposableStandardSchema<T>> {\n\t\treturn FunctionBuilder.parseComposableStandardSchema(data, schema);\n\t}\n}\n","import type { AuditableAction, Auditor, AuditStorage } from '@geekmidas/audit';\nimport type { EnvironmentParser } from '@geekmidas/envkit';\nimport { wrapError } from '@geekmidas/errors';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type {\n\tComposableStandardSchema,\n\tInferComposableStandardSchema,\n\tInferStandardSchema,\n} from '@geekmidas/schema';\nimport type { Service, ServiceRecord } from '@geekmidas/services';\nimport { runWithRequestContext } from '@geekmidas/services';\nimport middy, { type MiddlewareObj } from '@middy/core';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { Context, Handler } from 'aws-lambda';\nimport { startMonitors } from '../monitor';\nimport type { Function, FunctionHandler } from './Function';\nimport { FunctionBuilder } from './FunctionBuilder';\nimport { FunctionExecutionWrapper } from './FunctionExecutionWrapper';\n\nexport type AWSLambdaHandler<TEvent = any, TResult = any> = Handler<\n\tTEvent,\n\tTResult\n>;\n\ntype FunctionEvent<\n\tTEvent,\n\tTInput extends ComposableStandardSchema | undefined,\n\tTServices extends Service[],\n\tTLogger extends Logger,\n\tTDatabase = undefined,\n\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\tstring,\n\t\tunknown\n\t>,\n> = TEvent & {\n\tparsedInput: InferComposableStandardSchema<TInput>;\n\tservices: ServiceRecord<TServices>;\n\tlogger: TLogger;\n\tdb: TDatabase | undefined;\n\tauditor: Auditor<TAuditAction> | undefined;\n};\n\ntype Middleware<\n\tTEvent,\n\tTInput extends ComposableStandardSchema | undefined,\n\tTServices extends Service[],\n\tTLogger extends Logger,\n\tTOutSchema extends StandardSchemaV1 | undefined,\n\tTDatabase = undefined,\n\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\tstring,\n\t\tunknown\n\t>,\n> = MiddlewareObj<\n\tFunctionEvent<TEvent, TInput, TServices, TLogger, TDatabase, TAuditAction>,\n\tInferComposableStandardSchema<TOutSchema>,\n\tError,\n\tContext\n>;\n\nexport class AWSLambdaFunction<\n\tTInput extends ComposableStandardSchema | undefined = undefined,\n\tTOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTAuditStorage extends AuditStorage | undefined = undefined,\n\tTAuditStorageServiceName extends string = string,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\tstring,\n\t\tunknown\n\t>,\n> extends FunctionExecutionWrapper<\n\tTInput,\n\tTOutSchema,\n\tTServices,\n\tTLogger,\n\tTEventPublisher,\n\tTEventPublisherServiceName,\n\tTAuditStorage,\n\tTAuditStorageServiceName,\n\tTDatabase,\n\tTDatabaseServiceName,\n\tTAuditAction\n> {\n\tconstructor(\n\t\tenvParser: EnvironmentParser<{}>,\n\t\toverride readonly fn: Function<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTAuditAction,\n\t\t\tFunctionHandler<\n\t\t\t\tTInput,\n\t\t\t\tTServices,\n\t\t\t\tTLogger,\n\t\t\t\tTOutSchema,\n\t\t\t\tTDatabase,\n\t\t\t\tTAuditStorage,\n\t\t\t\tTAuditAction\n\t\t\t>\n\t\t>,\n\t) {\n\t\tsuper(envParser, fn);\n\t}\n\n\tprivate error<TEvent>(): Middleware<\n\t\tTEvent,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tTOutSchema,\n\t\tTDatabase,\n\t\tTAuditAction\n\t> {\n\t\treturn {\n\t\t\tonError: (req) => {\n\t\t\t\tconst logger = req.event?.logger || this.fn.logger;\n\t\t\t\tlogger.error(req.error || {}, 'Error processing function');\n\t\t\t\t// Kept for the monitors, which otherwise only see the wrapped error.\n\t\t\t\tif (req.event) {\n\t\t\t\t\t(req.event as any).__error = req.error;\n\t\t\t\t}\n\n\t\t\t\t// Re-throw the wrapped error to let Lambda handle it\n\t\t\t\tthrow wrapError(req.error);\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate baseInput<TEvent>(): Middleware<\n\t\tTEvent,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tTOutSchema,\n\t\tTDatabase,\n\t\tTAuditAction\n\t> {\n\t\treturn {\n\t\t\tbefore: (_req) => {},\n\t\t};\n\t}\n\n\tprivate input<\n\t\tTEvent extends { input: InferComposableStandardSchema<TInput> },\n\t>(): Middleware<\n\t\tTEvent,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tTOutSchema,\n\t\tTDatabase,\n\t\tTAuditAction\n\t> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\ttry {\n\t\t\t\t\t// Parse input if schema is provided\n\t\t\t\t\tif (this.fn.input) {\n\t\t\t\t\t\tconst parsedInput =\n\t\t\t\t\t\t\tawait FunctionBuilder.parseComposableStandardSchema(\n\t\t\t\t\t\t\t\treq.event,\n\t\t\t\t\t\t\t\tthis.fn.input,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\treq.event.parsedInput =\n\t\t\t\t\t\t\tparsedInput as InferComposableStandardSchema<TInput>;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// If no schema, pass the event as-is\n\t\t\t\t\t\treq.event.parsedInput = req.event as any;\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.logger.error(\n\t\t\t\t\t\t{ error, event: req.event },\n\t\t\t\t\t\t'Failed to parse input',\n\t\t\t\t\t);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate loggerMiddleware<TEvent>(): Middleware<\n\t\tTEvent,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tTOutSchema,\n\t\tTDatabase,\n\t\tTAuditAction\n\t> {\n\t\treturn {\n\t\t\tbefore: (req) => {\n\t\t\t\tthis._logger = this.fn.logger.child({\n\t\t\t\t\tfn: {\n\t\t\t\t\t\tname: req.context.functionName,\n\t\t\t\t\t\tversion: req.context.functionVersion,\n\t\t\t\t\t\tmemory: req.context.memoryLimitInMB,\n\t\t\t\t\t},\n\t\t\t\t\treq: {\n\t\t\t\t\t\tid: req.context.awsRequestId,\n\t\t\t\t\t},\n\t\t\t\t}) as TLogger;\n\n\t\t\t\treq.event.logger = this._logger;\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate services<TEvent>(): Middleware<\n\t\tTEvent,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tTOutSchema,\n\t\tTDatabase,\n\t\tTAuditAction\n\t> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\treq.event.services = await this.getServices();\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate database<TEvent>(): Middleware<\n\t\tTEvent,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tTOutSchema,\n\t\tTDatabase,\n\t\tTAuditAction\n\t> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\treq.event.db = await this.getDatabase();\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate auditor<TEvent>(): Middleware<\n\t\tTEvent,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tTOutSchema,\n\t\tTDatabase,\n\t\tTAuditAction\n\t> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\treq.event.auditor = await this.createAuditor();\n\t\t\t},\n\t\t\tafter: async (req) => {\n\t\t\t\t// Flush any pending audits after successful execution\n\t\t\t\tif (req.event.auditor) {\n\t\t\t\t\tconst records = req.event.auditor.getRecords();\n\t\t\t\t\tif (records.length > 0) {\n\t\t\t\t\t\tthis.logger.debug(\n\t\t\t\t\t\t\t{ auditCount: records.length },\n\t\t\t\t\t\t\t'Flushing function audits',\n\t\t\t\t\t\t);\n\t\t\t\t\t\tawait req.event.auditor.flush();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate events<TEvent>(): Middleware<\n\t\tTEvent,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tTOutSchema,\n\t\tTDatabase,\n\t\tTAuditAction\n\t> {\n\t\treturn {\n\t\t\tafter: async (req) => {\n\t\t\t\tconst response = (req.response ||\n\t\t\t\t\tundefined) as InferStandardSchema<TOutSchema>;\n\t\t\t\tawait this.publishEvents(response);\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate async _handler<TEvent>(\n\t\tevent: FunctionEvent<\n\t\t\tTEvent,\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTDatabase,\n\t\t\tTAuditAction\n\t\t>,\n\t) {\n\t\t// Execute the function with the parsed context\n\t\tconst result = await this.fn.fn({\n\t\t\tinput: event.parsedInput,\n\t\t\tservices: event.services,\n\t\t\tlogger: event.logger,\n\t\t\tdb: event.db,\n\t\t\tauditor: event.auditor,\n\t\t} as any);\n\n\t\t// Parse output if schema is provided\n\t\tconst output = await this.fn.parseOutput(result);\n\n\t\treturn output;\n\t}\n\n\tget handler(): AWSLambdaHandler {\n\t\tconst handler = this._handler.bind(this);\n\n\t\t// Apply middleware in order\n\t\tconst chain = middy(handler)\n\t\t\t.use(this.loggerMiddleware())\n\t\t\t.use(this.baseInput())\n\t\t\t.use(this.error())\n\t\t\t.use(this.services())\n\t\t\t.use(this.database())\n\t\t\t.use(this.auditor())\n\t\t\t.use(this.input())\n\t\t\t.use(this.events());\n\n\t\t// Wrap entire Middy chain in request context for service access\n\t\tconst wrappedHandler = async (event: unknown, context: Context) => {\n\t\t\tconst startTime = Date.now();\n\t\t\tconst requestId = context.awsRequestId;\n\t\t\tconst logger = this.fn.logger.child({ requestId }) as TLogger;\n\n\t\t\treturn runWithRequestContext(\n\t\t\t\t{ logger, requestId, startTime },\n\t\t\t\tasync () => {\n\t\t\t\t\t// Around the whole chain, not as a middleware: a middleware's\n\t\t\t\t\t// `after` runs before audits flush and events publish, and its\n\t\t\t\t\t// `onError` never runs once `error()` rethrows.\n\t\t\t\t\tconst monitor = await startMonitors(\n\t\t\t\t\t\tthis.fn,\n\t\t\t\t\t\tthis.serviceDiscovery,\n\t\t\t\t\t\tlogger,\n\t\t\t\t\t);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst output = await chain(\n\t\t\t\t\t\t\tevent as Parameters<typeof chain>[0],\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tawait monitor.success(output);\n\t\t\t\t\t\treturn output;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tawait monitor.failure((event as any)?.__error ?? error);\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\treturn wrappedHandler as unknown as AWSLambdaHandler;\n\t}\n}\n","import type { EnvironmentParser } from '@geekmidas/envkit';\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';\nimport { AWSLambdaFunction } from '../functions/AWSLambdaFunction';\nimport type { Cron } from './Cron';\n\n/**\n * AWS Lambda adaptor for {@link Cron} constructs.\n *\n * A `Cron` is a {@link import('../functions').Function} that is invoked on a\n * schedule (an EventBridge rule) rather than by an API request. Because of\n * that, the runtime execution pipeline is identical to a regular Lambda\n * function: input parsing, service/database/auditor wiring, event publishing,\n * error handling, and the `runWithRequestContext` wrapper that powers\n * request-scoped logging via `serviceContext.getLogger()`.\n *\n * This adaptor therefore reuses {@link AWSLambdaFunction} wholesale and only\n * narrows the constructor to accept a `Cron`. The schedule expression itself\n * (`cron.schedule`) is **deploy-time** infrastructure consumed by the CLI to\n * provision the EventBridge rule — it is not needed at runtime.\n *\n * @example\n * ```typescript\n * import { AWSScheduledFunction } from '@geekmidas/constructs/crons';\n * import { cancelPastBookings } from '../../../src/crons/cancelPastBookings.js';\n * import { envParser } from '../../../src/env';\n *\n * const adapter = new AWSScheduledFunction(envParser, cancelPastBookings);\n *\n * export const handler = adapter.handler;\n * ```\n */\nexport class AWSScheduledFunction<\n\tTInput extends ComposableStandardSchema | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tTOutSchema 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 AWSLambdaFunction<\n\tTInput,\n\tTOutSchema,\n\tTServices,\n\tTLogger,\n\tTEventPublisher,\n\tTEventPublisherServiceName,\n\tundefined,\n\tstring,\n\tTDatabase,\n\tTDatabaseServiceName\n> {\n\t// biome-ignore lint/complexity/noUselessConstructor: narrows the inherited `Function` parameter to `Cron` for a clearer public API\n\tconstructor(\n\t\tenvParser: EnvironmentParser<{}>,\n\t\tcron: Cron<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>,\n\t) {\n\t\tsuper(envParser, cron);\n\t}\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { FunctionBuilder } from "./functions-B-qt91O7.mjs";
2
- import { publishEvents } from "./publisher-BrFOF847.mjs";
1
+ import { FunctionBuilder, startMonitors } from "./functions-EqTloHjo.mjs";
2
+ import { publishEvents } from "./publisher-CnpeMv-r.mjs";
3
3
  import { wrapError } from "@geekmidas/errors";
4
4
  import { ServiceDiscovery, runWithRequestContext } from "@geekmidas/services";
5
5
  import middy from "@middy/core";
@@ -109,6 +109,7 @@ var AWSLambdaFunction = class extends FunctionExecutionWrapper {
109
109
  return { onError: (req) => {
110
110
  const logger = req.event?.logger || this.fn.logger;
111
111
  logger.error(req.error || {}, "Error processing function");
112
+ if (req.event) req.event.__error = req.error;
112
113
  throw wrapError(req.error);
113
114
  } };
114
115
  }
@@ -198,7 +199,17 @@ var AWSLambdaFunction = class extends FunctionExecutionWrapper {
198
199
  logger,
199
200
  requestId,
200
201
  startTime
201
- }, () => chain(event, context));
202
+ }, async () => {
203
+ const monitor = await startMonitors(this.fn, this.serviceDiscovery, logger);
204
+ try {
205
+ const output = await chain(event, context);
206
+ await monitor.success(output);
207
+ return output;
208
+ } catch (error) {
209
+ await monitor.failure(event?.__error ?? error);
210
+ throw error;
211
+ }
212
+ });
202
213
  };
203
214
  return wrappedHandler;
204
215
  }
@@ -240,4 +251,4 @@ var AWSScheduledFunction = class extends AWSLambdaFunction {
240
251
 
241
252
  //#endregion
242
253
  export { AWSLambdaFunction, AWSScheduledFunction };
243
- //# sourceMappingURL=AWSScheduledFunction-CufMMhGB.mjs.map
254
+ //# sourceMappingURL=AWSScheduledFunction-KP6lqbsW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AWSScheduledFunction-KP6lqbsW.mjs","names":["envParser: EnvironmentParser<{}>","fn: Function<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTAuditAction,\n\t\t\tFunctionHandler<\n\t\t\t\tTInput,\n\t\t\t\tTServices,\n\t\t\t\tTLogger,\n\t\t\t\tTOutSchema,\n\t\t\t\tTDatabase,\n\t\t\t\tTAuditStorage,\n\t\t\t\tTAuditAction\n\t\t\t>\n\t\t>","handler: (ctx: {\n\t\t\tauditor?: Auditor<TAuditAction>;\n\t\t\tdb?: TDatabase;\n\t\t}) => Promise<T>","db","response","event: TEvent","response: InferStandardSchema<TOutSchema>","data: unknown","schema: T","envParser: EnvironmentParser<{}>","fn: Function<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTAuditAction,\n\t\t\tFunctionHandler<\n\t\t\t\tTInput,\n\t\t\t\tTServices,\n\t\t\t\tTLogger,\n\t\t\t\tTOutSchema,\n\t\t\t\tTDatabase,\n\t\t\t\tTAuditStorage,\n\t\t\t\tTAuditAction\n\t\t\t>\n\t\t>","event: FunctionEvent<\n\t\t\tTEvent,\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTDatabase,\n\t\t\tTAuditAction\n\t\t>","event: unknown","context: Context","envParser: EnvironmentParser<{}>","cron: Cron<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>"],"sources":["../src/functions/FunctionExecutionWrapper.ts","../src/functions/AWSLambdaFunction.ts","../src/crons/AWSScheduledFunction.ts"],"sourcesContent":["import type { AuditableAction, Auditor, AuditStorage } from '@geekmidas/audit';\nimport { DefaultAuditor } from '@geekmidas/audit';\nimport { withAuditableTransaction } from '@geekmidas/audit/kysely';\nimport type { EnvironmentParser } from '@geekmidas/envkit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type {\n\tComposableStandardSchema,\n\tInferComposableStandardSchema,\n\tInferStandardSchema,\n} from '@geekmidas/schema';\nimport {\n\ttype Service,\n\tServiceDiscovery,\n\ttype ServiceRecord,\n} from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { publishEvents } from '../publisher';\nimport type { Function, FunctionHandler } from './Function';\nimport { FunctionBuilder } from './FunctionBuilder';\n\nexport abstract class FunctionExecutionWrapper<\n\tTInput extends ComposableStandardSchema | undefined = undefined,\n\tTOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTAuditStorage extends AuditStorage | undefined = undefined,\n\tTAuditStorageServiceName extends string = string,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\tstring,\n\t\tunknown\n\t>,\n> {\n\tconstructor(\n\t\tprotected envParser: EnvironmentParser<{}>,\n\t\tprotected readonly fn: Function<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTAuditAction,\n\t\t\tFunctionHandler<\n\t\t\t\tTInput,\n\t\t\t\tTServices,\n\t\t\t\tTLogger,\n\t\t\t\tTOutSchema,\n\t\t\t\tTDatabase,\n\t\t\t\tTAuditStorage,\n\t\t\t\tTAuditAction\n\t\t\t>\n\t\t>,\n\t) {}\n\n\tprotected _logger?: TLogger;\n\n\tget logger(): TLogger {\n\t\treturn this._logger || this.fn.logger;\n\t}\n\n\tget serviceDiscovery(): ServiceDiscovery<ServiceRecord<TServices>> {\n\t\tconst serviceDiscovery = ServiceDiscovery.getInstance<\n\t\t\tServiceRecord<TServices>\n\t\t>(this.envParser);\n\n\t\treturn serviceDiscovery;\n\t}\n\n\tgetServices(): Promise<ServiceRecord<TServices>> {\n\t\treturn this.serviceDiscovery.register(this.fn.services);\n\t}\n\n\tasync getDatabase(): Promise<TDatabase | undefined> {\n\t\tif (!this.fn.databaseService) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst services = await this.serviceDiscovery.register([\n\t\t\tthis.fn.databaseService,\n\t\t]);\n\n\t\treturn services[\n\t\t\tthis.fn.databaseService.serviceName as keyof typeof services\n\t\t] as TDatabase;\n\t}\n\n\t/**\n\t * Get the audit storage service if configured.\n\t * Returns undefined if no auditor storage is configured.\n\t */\n\tasync getAuditStorage(): Promise<TAuditStorage | undefined> {\n\t\tif (!this.fn.auditorStorageService) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst services = await this.serviceDiscovery.register([\n\t\t\tthis.fn.auditorStorageService,\n\t\t]);\n\n\t\treturn services[\n\t\t\tthis.fn.auditorStorageService.serviceName as keyof typeof services\n\t\t] as TAuditStorage;\n\t}\n\n\t/**\n\t * Create an auditor instance for the function.\n\t * Returns undefined if no auditor storage is configured.\n\t */\n\tasync createAuditor(): Promise<Auditor<TAuditAction> | undefined> {\n\t\tconst storage = await this.getAuditStorage();\n\t\tif (!storage) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn new DefaultAuditor<TAuditAction>({\n\t\t\tactor: { id: 'system', type: 'system' },\n\t\t\tstorage: storage as AuditStorage,\n\t\t\tmetadata: {\n\t\t\t\tfunction: this.fn.type,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Execute handler with audit transaction support.\n\t * If the audit storage has a database (via getDatabase()), wraps execution\n\t * in a transaction so audits are atomic with handler's database operations.\n\t *\n\t * @param handler - The handler function to execute (receives auditor and db)\n\t * @returns The handler result\n\t */\n\tasync executeWithAudit<T>(\n\t\thandler: (ctx: {\n\t\t\tauditor?: Auditor<TAuditAction>;\n\t\t\tdb?: TDatabase;\n\t\t}) => Promise<T>,\n\t): Promise<T> {\n\t\tconst auditor = await this.createAuditor();\n\t\tconst storage = await this.getAuditStorage();\n\n\t\t// No audit context - just run handler with regular db\n\t\tif (!auditor || !storage) {\n\t\t\tconst db = await this.getDatabase();\n\t\t\treturn handler({ db });\n\t\t}\n\n\t\t// Check if storage has a database and db service names match\n\t\tconst storageDb = (storage as AuditStorage).getDatabase?.();\n\t\tconst databaseServiceName = this.fn.databaseService?.serviceName;\n\t\tconst auditDbServiceName = this.fn.auditorStorageService?.serviceName;\n\n\t\t// If the audit storage has a database and we're using the same database service\n\t\t// (or the audit storage provides the database), use transactional execution\n\t\tif (storageDb && databaseServiceName && auditDbServiceName) {\n\t\t\treturn withAuditableTransaction(\n\t\t\t\tstorageDb as any,\n\t\t\t\tauditor as any,\n\t\t\t\tasync (trx) => {\n\t\t\t\t\t// Use transaction as db\n\t\t\t\t\tconst response = await handler({\n\t\t\t\t\t\tauditor,\n\t\t\t\t\t\tdb: trx as TDatabase,\n\t\t\t\t\t});\n\t\t\t\t\t// Audits are flushed by withAuditableTransaction before commit\n\t\t\t\t\treturn response;\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\t// No database on storage or service names don't match - run handler and flush audits after\n\t\tconst db = await this.getDatabase();\n\t\tconst response = await handler({ auditor, db });\n\n\t\t// Flush audits (no transaction)\n\t\tawait auditor.flush();\n\n\t\treturn response;\n\t}\n\n\tasync getFunctionInput<TEvent>(\n\t\tevent: TEvent,\n\t): Promise<InferComposableStandardSchema<TInput>> {\n\t\tconst parsedInput = await FunctionBuilder.parseComposableStandardSchema(\n\t\t\tevent,\n\t\t\tthis.fn.input,\n\t\t);\n\n\t\treturn parsedInput as InferComposableStandardSchema<TInput>;\n\t}\n\n\tasync publishEvents(response: InferStandardSchema<TOutSchema>) {\n\t\tawait publishEvents(\n\t\t\tthis.logger,\n\t\t\tthis.serviceDiscovery,\n\t\t\tthis.fn.events,\n\t\t\tresponse,\n\t\t\tthis.fn.publisherService,\n\t\t);\n\t}\n\n\tasync parseComposableStandardSchema<T extends ComposableStandardSchema>(\n\t\tdata: unknown,\n\t\tschema: T,\n\t): Promise<InferComposableStandardSchema<T>> {\n\t\treturn FunctionBuilder.parseComposableStandardSchema(data, schema);\n\t}\n}\n","import type { AuditableAction, Auditor, AuditStorage } from '@geekmidas/audit';\nimport type { EnvironmentParser } from '@geekmidas/envkit';\nimport { wrapError } from '@geekmidas/errors';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type {\n\tComposableStandardSchema,\n\tInferComposableStandardSchema,\n\tInferStandardSchema,\n} from '@geekmidas/schema';\nimport type { Service, ServiceRecord } from '@geekmidas/services';\nimport { runWithRequestContext } from '@geekmidas/services';\nimport middy, { type MiddlewareObj } from '@middy/core';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { Context, Handler } from 'aws-lambda';\nimport { startMonitors } from '../monitor';\nimport type { Function, FunctionHandler } from './Function';\nimport { FunctionBuilder } from './FunctionBuilder';\nimport { FunctionExecutionWrapper } from './FunctionExecutionWrapper';\n\nexport type AWSLambdaHandler<TEvent = any, TResult = any> = Handler<\n\tTEvent,\n\tTResult\n>;\n\ntype FunctionEvent<\n\tTEvent,\n\tTInput extends ComposableStandardSchema | undefined,\n\tTServices extends Service[],\n\tTLogger extends Logger,\n\tTDatabase = undefined,\n\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\tstring,\n\t\tunknown\n\t>,\n> = TEvent & {\n\tparsedInput: InferComposableStandardSchema<TInput>;\n\tservices: ServiceRecord<TServices>;\n\tlogger: TLogger;\n\tdb: TDatabase | undefined;\n\tauditor: Auditor<TAuditAction> | undefined;\n};\n\ntype Middleware<\n\tTEvent,\n\tTInput extends ComposableStandardSchema | undefined,\n\tTServices extends Service[],\n\tTLogger extends Logger,\n\tTOutSchema extends StandardSchemaV1 | undefined,\n\tTDatabase = undefined,\n\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\tstring,\n\t\tunknown\n\t>,\n> = MiddlewareObj<\n\tFunctionEvent<TEvent, TInput, TServices, TLogger, TDatabase, TAuditAction>,\n\tInferComposableStandardSchema<TOutSchema>,\n\tError,\n\tContext\n>;\n\nexport class AWSLambdaFunction<\n\tTInput extends ComposableStandardSchema | undefined = undefined,\n\tTOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTAuditStorage extends AuditStorage | undefined = undefined,\n\tTAuditStorageServiceName extends string = string,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\tstring,\n\t\tunknown\n\t>,\n> extends FunctionExecutionWrapper<\n\tTInput,\n\tTOutSchema,\n\tTServices,\n\tTLogger,\n\tTEventPublisher,\n\tTEventPublisherServiceName,\n\tTAuditStorage,\n\tTAuditStorageServiceName,\n\tTDatabase,\n\tTDatabaseServiceName,\n\tTAuditAction\n> {\n\tconstructor(\n\t\tenvParser: EnvironmentParser<{}>,\n\t\toverride readonly fn: Function<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTAuditAction,\n\t\t\tFunctionHandler<\n\t\t\t\tTInput,\n\t\t\t\tTServices,\n\t\t\t\tTLogger,\n\t\t\t\tTOutSchema,\n\t\t\t\tTDatabase,\n\t\t\t\tTAuditStorage,\n\t\t\t\tTAuditAction\n\t\t\t>\n\t\t>,\n\t) {\n\t\tsuper(envParser, fn);\n\t}\n\n\tprivate error<TEvent>(): Middleware<\n\t\tTEvent,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tTOutSchema,\n\t\tTDatabase,\n\t\tTAuditAction\n\t> {\n\t\treturn {\n\t\t\tonError: (req) => {\n\t\t\t\tconst logger = req.event?.logger || this.fn.logger;\n\t\t\t\tlogger.error(req.error || {}, 'Error processing function');\n\t\t\t\t// Kept for the monitors, which otherwise only see the wrapped error.\n\t\t\t\tif (req.event) {\n\t\t\t\t\t(req.event as any).__error = req.error;\n\t\t\t\t}\n\n\t\t\t\t// Re-throw the wrapped error to let Lambda handle it\n\t\t\t\tthrow wrapError(req.error);\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate baseInput<TEvent>(): Middleware<\n\t\tTEvent,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tTOutSchema,\n\t\tTDatabase,\n\t\tTAuditAction\n\t> {\n\t\treturn {\n\t\t\tbefore: (_req) => {},\n\t\t};\n\t}\n\n\tprivate input<\n\t\tTEvent extends { input: InferComposableStandardSchema<TInput> },\n\t>(): Middleware<\n\t\tTEvent,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tTOutSchema,\n\t\tTDatabase,\n\t\tTAuditAction\n\t> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\ttry {\n\t\t\t\t\t// Parse input if schema is provided\n\t\t\t\t\tif (this.fn.input) {\n\t\t\t\t\t\tconst parsedInput =\n\t\t\t\t\t\t\tawait FunctionBuilder.parseComposableStandardSchema(\n\t\t\t\t\t\t\t\treq.event,\n\t\t\t\t\t\t\t\tthis.fn.input,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\treq.event.parsedInput =\n\t\t\t\t\t\t\tparsedInput as InferComposableStandardSchema<TInput>;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// If no schema, pass the event as-is\n\t\t\t\t\t\treq.event.parsedInput = req.event as any;\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.logger.error(\n\t\t\t\t\t\t{ error, event: req.event },\n\t\t\t\t\t\t'Failed to parse input',\n\t\t\t\t\t);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate loggerMiddleware<TEvent>(): Middleware<\n\t\tTEvent,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tTOutSchema,\n\t\tTDatabase,\n\t\tTAuditAction\n\t> {\n\t\treturn {\n\t\t\tbefore: (req) => {\n\t\t\t\tthis._logger = this.fn.logger.child({\n\t\t\t\t\tfn: {\n\t\t\t\t\t\tname: req.context.functionName,\n\t\t\t\t\t\tversion: req.context.functionVersion,\n\t\t\t\t\t\tmemory: req.context.memoryLimitInMB,\n\t\t\t\t\t},\n\t\t\t\t\treq: {\n\t\t\t\t\t\tid: req.context.awsRequestId,\n\t\t\t\t\t},\n\t\t\t\t}) as TLogger;\n\n\t\t\t\treq.event.logger = this._logger;\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate services<TEvent>(): Middleware<\n\t\tTEvent,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tTOutSchema,\n\t\tTDatabase,\n\t\tTAuditAction\n\t> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\treq.event.services = await this.getServices();\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate database<TEvent>(): Middleware<\n\t\tTEvent,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tTOutSchema,\n\t\tTDatabase,\n\t\tTAuditAction\n\t> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\treq.event.db = await this.getDatabase();\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate auditor<TEvent>(): Middleware<\n\t\tTEvent,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tTOutSchema,\n\t\tTDatabase,\n\t\tTAuditAction\n\t> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\treq.event.auditor = await this.createAuditor();\n\t\t\t},\n\t\t\tafter: async (req) => {\n\t\t\t\t// Flush any pending audits after successful execution\n\t\t\t\tif (req.event.auditor) {\n\t\t\t\t\tconst records = req.event.auditor.getRecords();\n\t\t\t\t\tif (records.length > 0) {\n\t\t\t\t\t\tthis.logger.debug(\n\t\t\t\t\t\t\t{ auditCount: records.length },\n\t\t\t\t\t\t\t'Flushing function audits',\n\t\t\t\t\t\t);\n\t\t\t\t\t\tawait req.event.auditor.flush();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate events<TEvent>(): Middleware<\n\t\tTEvent,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tTOutSchema,\n\t\tTDatabase,\n\t\tTAuditAction\n\t> {\n\t\treturn {\n\t\t\tafter: async (req) => {\n\t\t\t\tconst response = (req.response ||\n\t\t\t\t\tundefined) as InferStandardSchema<TOutSchema>;\n\t\t\t\tawait this.publishEvents(response);\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate async _handler<TEvent>(\n\t\tevent: FunctionEvent<\n\t\t\tTEvent,\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTDatabase,\n\t\t\tTAuditAction\n\t\t>,\n\t) {\n\t\t// Execute the function with the parsed context\n\t\tconst result = await this.fn.fn({\n\t\t\tinput: event.parsedInput,\n\t\t\tservices: event.services,\n\t\t\tlogger: event.logger,\n\t\t\tdb: event.db,\n\t\t\tauditor: event.auditor,\n\t\t} as any);\n\n\t\t// Parse output if schema is provided\n\t\tconst output = await this.fn.parseOutput(result);\n\n\t\treturn output;\n\t}\n\n\tget handler(): AWSLambdaHandler {\n\t\tconst handler = this._handler.bind(this);\n\n\t\t// Apply middleware in order\n\t\tconst chain = middy(handler)\n\t\t\t.use(this.loggerMiddleware())\n\t\t\t.use(this.baseInput())\n\t\t\t.use(this.error())\n\t\t\t.use(this.services())\n\t\t\t.use(this.database())\n\t\t\t.use(this.auditor())\n\t\t\t.use(this.input())\n\t\t\t.use(this.events());\n\n\t\t// Wrap entire Middy chain in request context for service access\n\t\tconst wrappedHandler = async (event: unknown, context: Context) => {\n\t\t\tconst startTime = Date.now();\n\t\t\tconst requestId = context.awsRequestId;\n\t\t\tconst logger = this.fn.logger.child({ requestId }) as TLogger;\n\n\t\t\treturn runWithRequestContext(\n\t\t\t\t{ logger, requestId, startTime },\n\t\t\t\tasync () => {\n\t\t\t\t\t// Around the whole chain, not as a middleware: a middleware's\n\t\t\t\t\t// `after` runs before audits flush and events publish, and its\n\t\t\t\t\t// `onError` never runs once `error()` rethrows.\n\t\t\t\t\tconst monitor = await startMonitors(\n\t\t\t\t\t\tthis.fn,\n\t\t\t\t\t\tthis.serviceDiscovery,\n\t\t\t\t\t\tlogger,\n\t\t\t\t\t);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst output = await chain(\n\t\t\t\t\t\t\tevent as Parameters<typeof chain>[0],\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tawait monitor.success(output);\n\t\t\t\t\t\treturn output;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tawait monitor.failure((event as any)?.__error ?? error);\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\treturn wrappedHandler as unknown as AWSLambdaHandler;\n\t}\n}\n","import type { EnvironmentParser } from '@geekmidas/envkit';\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';\nimport { AWSLambdaFunction } from '../functions/AWSLambdaFunction';\nimport type { Cron } from './Cron';\n\n/**\n * AWS Lambda adaptor for {@link Cron} constructs.\n *\n * A `Cron` is a {@link import('../functions').Function} that is invoked on a\n * schedule (an EventBridge rule) rather than by an API request. Because of\n * that, the runtime execution pipeline is identical to a regular Lambda\n * function: input parsing, service/database/auditor wiring, event publishing,\n * error handling, and the `runWithRequestContext` wrapper that powers\n * request-scoped logging via `serviceContext.getLogger()`.\n *\n * This adaptor therefore reuses {@link AWSLambdaFunction} wholesale and only\n * narrows the constructor to accept a `Cron`. The schedule expression itself\n * (`cron.schedule`) is **deploy-time** infrastructure consumed by the CLI to\n * provision the EventBridge rule — it is not needed at runtime.\n *\n * @example\n * ```typescript\n * import { AWSScheduledFunction } from '@geekmidas/constructs/crons';\n * import { cancelPastBookings } from '../../../src/crons/cancelPastBookings.js';\n * import { envParser } from '../../../src/env';\n *\n * const adapter = new AWSScheduledFunction(envParser, cancelPastBookings);\n *\n * export const handler = adapter.handler;\n * ```\n */\nexport class AWSScheduledFunction<\n\tTInput extends ComposableStandardSchema | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tTOutSchema 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 AWSLambdaFunction<\n\tTInput,\n\tTOutSchema,\n\tTServices,\n\tTLogger,\n\tTEventPublisher,\n\tTEventPublisherServiceName,\n\tundefined,\n\tstring,\n\tTDatabase,\n\tTDatabaseServiceName\n> {\n\t// biome-ignore lint/complexity/noUselessConstructor: narrows the inherited `Function` parameter to `Cron` for a clearer public API\n\tconstructor(\n\t\tenvParser: EnvironmentParser<{}>,\n\t\tcron: Cron<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>,\n\t) {\n\t\tsuper(envParser, cron);\n\t}\n}\n"],"mappings":"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"}
@@ -94,6 +94,8 @@ const snifferContext = {
94
94
  var Construct = class {
95
95
  /** Database service for this construct (used by Endpoint for RLS/audit context) */
96
96
  databaseService;
97
+ /** Monitors told about each run of this construct (see `.monitor()`). */
98
+ monitors = [];
97
99
  constructor(type, logger, services, events = [], publisherService, outputSchema, timeout, memorySize, auditorStorageService) {
98
100
  this.type = type;
99
101
  this.logger = logger;
@@ -137,7 +139,8 @@ var Construct = class {
137
139
  this.publisherService,
138
140
  this.publisherService,
139
141
  this.auditorStorageService,
140
- this.databaseService
142
+ this.databaseService,
143
+ ...this.monitors
141
144
  ]);
142
145
  try {
143
146
  for (const service of services) {
@@ -205,4 +208,4 @@ async function sniffService(service) {
205
208
 
206
209
  //#endregion
207
210
  export { Construct, ConstructType, __commonJS, __toESM, sniffService, snifferContext };
208
- //# sourceMappingURL=Construct-r0U2zBwW.mjs.map
211
+ //# sourceMappingURL=Construct-BWF5HxaM.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Construct-BWF5HxaM.mjs","names":["compact","snifferContext: ServiceContext","type: ConstructType","logger: TLogger","services: TServices","events: MappedEvent<T, any>[]","publisherService?: Service<TServiceName, T>","outputSchema?: OutSchema","timeout?: number","memorySize?: number","auditorStorageService?: Service<\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditStorage\n\t\t>","opts: { markOptional?: boolean }","services: Service[]","service: Service"],"sources":["../../../node_modules/.pnpm/lodash.compact@3.0.1/node_modules/lodash.compact/index.js","../src/Construct.ts"],"sourcesContent":["/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\nfunction compact(array) {\n var index = -1,\n length = array ? array.length : 0,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = compact;\n","import type { AuditStorage } from '@geekmidas/audit';\nimport {\n\tSnifferEnvironmentParser,\n\ttype SniffResult,\n\tsniffWithFireAndForget,\n} from '@geekmidas/envkit/sniffer';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { Service, ServiceContext } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport compact from 'lodash.compact';\nimport type { MonitorService } from './monitor';\n\n// Cache for service environment variables to handle singleton services\n// Stores both the full list and the optional subset so the same sniff result\n// can satisfy both getEnvironment() and getEnvironment({ markOptional: true }).\nconst serviceEnvCache = new Map<\n\tService,\n\t{ envVars: string[]; optionalEnvVars: string[] }\n>();\n\n/**\n * Noop context for environment sniffing.\n * Used when calling service.register() to detect env vars without a real request.\n * Returns dummy values since services should only use context in instance methods,\n * not during registration.\n */\nconst snifferContext: ServiceContext = {\n\tgetLogger() {\n\t\t// Return a noop logger for sniffing - services shouldn't log during registration\n\t\treturn {\n\t\t\tdebug: () => {},\n\t\t\tinfo: () => {},\n\t\t\twarn: () => {},\n\t\t\terror: () => {},\n\t\t\tchild: () => snifferContext.getLogger(),\n\t\t} as unknown as Logger;\n\t},\n\tgetRequestId() {\n\t\treturn 'sniffer-context';\n\t},\n\tgetRequestStartTime() {\n\t\treturn Date.now();\n\t},\n\thasContext() {\n\t\treturn false;\n\t},\n};\n\nexport abstract class Construct<\n\tTLogger extends Logger = Logger,\n\tTServiceName extends string = string,\n\tT extends EventPublisher<any> | undefined = undefined,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTAuditStorageServiceName extends string = string,\n\tTAuditStorage extends AuditStorage | undefined = undefined,\n\tTDatabaseServiceName extends string = string,\n\tTDatabase = unknown,\n> {\n\t/** Database service for this construct (used by Endpoint for RLS/audit context) */\n\tpublic databaseService?: Service<TDatabaseServiceName, TDatabase>;\n\n\t/** Monitors told about each run of this construct (see `.monitor()`). */\n\tpublic monitors: MonitorService[] = [];\n\n\tconstructor(\n\t\tpublic readonly type: ConstructType,\n\t\tpublic readonly logger: TLogger,\n\t\tpublic readonly services: TServices,\n\t\tpublic readonly events: MappedEvent<T, any>[] = [],\n\n\t\tpublic readonly publisherService?: Service<TServiceName, T>,\n\t\tpublic outputSchema?: OutSchema,\n\t\tpublic readonly timeout?: number,\n\t\tpublic readonly memorySize?: number,\n\t\tpublic readonly auditorStorageService?: Service<\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditStorage\n\t\t>,\n\t) {}\n\n\t/**\n\t * Returns an array of environment variable names required by this construct's services.\n\t * This is determined by running a \"sniffer\" EnvironmentParser through each service's\n\t * register method to track which environment variables are accessed.\n\t *\n\t * Results are cached per service class to handle singleton patterns where\n\t * subsequent register() calls may short-circuit and not access env vars.\n\t *\n\t * @param markOptional - When true, optional vars (those accessed via `.optional()` or\n\t * `.default()`) are suffixed with `?` in the returned array (e.g. `'PORT?'`).\n\t * @returns Promise that resolves to array of environment variable names, sorted alphabetically\n\t *\n\t * @example\n\t * ```typescript\n\t * const endpoint = e\n\t * .services([databaseService, authService])\n\t * .get('/users')\n\t * .handle(async () => []);\n\t *\n\t * await endpoint.getEnvironment(); // ['AUTH_SECRET', 'DATABASE_URL']\n\t * await endpoint.getEnvironment({ markOptional: true }); // ['AUTH_SECRET', 'DATABASE_URL', 'PORT?']\n\t * ```\n\t */\n\tasync getEnvironment(\n\t\topts: { markOptional?: boolean } = {},\n\t): Promise<string[]> {\n\t\tconst { markOptional = false } = opts;\n\t\tconst envVars = new Set<string>();\n\t\tconst optionalVars = new Set<string>();\n\t\tconst services: Service[] = compact([\n\t\t\t...this.services,\n\t\t\tthis.publisherService,\n\t\t\tthis.publisherService,\n\t\t\tthis.auditorStorageService,\n\t\t\tthis.databaseService,\n\t\t\t...this.monitors,\n\t\t]);\n\n\t\ttry {\n\t\t\tfor (const service of services) {\n\t\t\t\t// Check cache first - handles singleton services that short-circuit\n\t\t\t\tif (serviceEnvCache.has(service)) {\n\t\t\t\t\tconst cached = serviceEnvCache.get(service)!;\n\t\t\t\t\tcached.envVars.forEach((v) => envVars.add(v));\n\t\t\t\t\tcached.optionalEnvVars.forEach((v) => optionalVars.add(v));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Use sniffService to properly handle all error scenarios\n\t\t\t\tconst result = await sniffService(service);\n\n\t\t\t\t// Log any issues for debugging\n\t\t\t\tif (result.error) {\n\t\t\t\t\tthis.logger.warn(\n\t\t\t\t\t\t{ error: result.error.message, service: service.serviceName },\n\t\t\t\t\t\t'Service threw error during env sniffing (env vars still captured)',\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (result.unhandledRejections.length > 0) {\n\t\t\t\t\tthis.logger.warn(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\terrors: result.unhandledRejections.map((e) => e.message),\n\t\t\t\t\t\t\tservice: service.serviceName,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'Fire-and-forget rejections during env sniffing (suppressed)',\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Cache and collect env vars (both required and optional)\n\t\t\t\tserviceEnvCache.set(service, {\n\t\t\t\t\tenvVars: result.envVars,\n\t\t\t\t\toptionalEnvVars: result.optionalEnvVars,\n\t\t\t\t});\n\t\t\t\tresult.envVars.forEach((v) => envVars.add(v));\n\t\t\t\tresult.optionalEnvVars.forEach((v) => optionalVars.add(v));\n\t\t\t}\n\n\t\t\tconst sorted = Array.from(envVars).sort();\n\t\t\tif (!markOptional || optionalVars.size === 0) return sorted;\n\t\t\treturn sorted.map((v) => (optionalVars.has(v) ? `${v}?` : v));\n\t\t} catch (error) {\n\t\t\tthis.logger.error(\n\t\t\t\t{ error },\n\t\t\t\t'Error determining environment variables for construct',\n\t\t\t);\n\n\t\t\treturn [];\n\t\t}\n\t}\n}\n\nexport enum ConstructType {\n\tCron = 'dev.geekmidas.function.cron',\n\tEndpoint = 'dev.geekmidas.function.endpoint',\n\tFunction = 'dev.geekmidas.function.function',\n\tSubscriber = 'dev.geekmidas.function.subscriber',\n\tQueue = 'dev.geekmidas.function.queue',\n\tTopic = 'dev.geekmidas.resource.topic',\n}\n\n/**\n * Utility to test sniffing a service for environment variables.\n * Useful for debugging services that throw errors during sniffing.\n *\n * @example\n * ```typescript\n * import { sniffService } from '@geekmidas/constructs';\n * import { authService } from './services/AuthService';\n *\n * const result = await sniffService(authService);\n * console.log('Env vars:', result.envVars);\n * console.log('Error:', result.error);\n * ```\n */\nexport async function sniffService(service: Service): Promise<SniffResult> {\n\tconst sniffer = new SnifferEnvironmentParser();\n\n\treturn sniffWithFireAndForget(sniffer, () =>\n\t\tservice.register({\n\t\t\tenvParser: sniffer as any,\n\t\t\tcontext: snifferContext,\n\t\t}),\n\t);\n}\n\n// Export for testing\nexport { snifferContext };\n"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuBA,SAASA,UAAQ,OAAO;EACtB,IAAI,QAAQ,IACR,SAAS,QAAQ,MAAM,SAAS,GAChC,WAAW,GACX,SAAS,CAAE;AAEf,SAAO,EAAE,QAAQ,QAAQ;GACvB,IAAI,QAAQ,MAAM;AAClB,OAAI,MACF,QAAO,cAAc;EAExB;AACD,SAAO;CACR;AAED,QAAO,UAAUA;;;;;;ACtBjB,MAAM,kCAAkB,IAAI;;;;;;;AAW5B,MAAMC,iBAAiC;CACtC,YAAY;AAEX,SAAO;GACN,OAAO,MAAM,CAAE;GACf,MAAM,MAAM,CAAE;GACd,MAAM,MAAM,CAAE;GACd,OAAO,MAAM,CAAE;GACf,OAAO,MAAM,eAAe,WAAW;EACvC;CACD;CACD,eAAe;AACd,SAAO;CACP;CACD,sBAAsB;AACrB,SAAO,KAAK,KAAK;CACjB;CACD,aAAa;AACZ,SAAO;CACP;AACD;AAED,IAAsB,YAAtB,MAUE;;CAED,AAAO;;CAGP,AAAO,WAA6B,CAAE;CAEtC,YACiBC,MACAC,QACAC,UACAC,SAAgC,CAAE,GAElCC,kBACTC,cACSC,SACAC,YACAC,uBAIf;EAbe;EACA;EACA;EACA;EAEA;EACT;EACS;EACA;EACA;CAIb;;;;;;;;;;;;;;;;;;;;;;;;CAyBJ,MAAM,eACLC,OAAmC,CAAE,GACjB;EACpB,MAAM,EAAE,eAAe,OAAO,GAAG;EACjC,MAAM,0BAAU,IAAI;EACpB,MAAM,+BAAe,IAAI;EACzB,MAAMC,WAAsB,2BAAQ;GACnC,GAAG,KAAK;GACR,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,GAAG,KAAK;EACR,EAAC;AAEF,MAAI;AACH,QAAK,MAAM,WAAW,UAAU;AAE/B,QAAI,gBAAgB,IAAI,QAAQ,EAAE;KACjC,MAAM,SAAS,gBAAgB,IAAI,QAAQ;AAC3C,YAAO,QAAQ,QAAQ,CAAC,MAAM,QAAQ,IAAI,EAAE,CAAC;AAC7C,YAAO,gBAAgB,QAAQ,CAAC,MAAM,aAAa,IAAI,EAAE,CAAC;AAC1D;IACA;IAGD,MAAM,SAAS,MAAM,aAAa,QAAQ;AAG1C,QAAI,OAAO,MACV,MAAK,OAAO,KACX;KAAE,OAAO,OAAO,MAAM;KAAS,SAAS,QAAQ;IAAa,GAC7D,oEACA;AAEF,QAAI,OAAO,oBAAoB,SAAS,EACvC,MAAK,OAAO,KACX;KACC,QAAQ,OAAO,oBAAoB,IAAI,CAAC,MAAM,EAAE,QAAQ;KACxD,SAAS,QAAQ;IACjB,GACD,8DACA;AAIF,oBAAgB,IAAI,SAAS;KAC5B,SAAS,OAAO;KAChB,iBAAiB,OAAO;IACxB,EAAC;AACF,WAAO,QAAQ,QAAQ,CAAC,MAAM,QAAQ,IAAI,EAAE,CAAC;AAC7C,WAAO,gBAAgB,QAAQ,CAAC,MAAM,aAAa,IAAI,EAAE,CAAC;GAC1D;GAED,MAAM,SAAS,MAAM,KAAK,QAAQ,CAAC,MAAM;AACzC,QAAK,gBAAgB,aAAa,SAAS,EAAG,QAAO;AACrD,UAAO,OAAO,IAAI,CAAC,MAAO,aAAa,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAG;EAC7D,SAAQ,OAAO;AACf,QAAK,OAAO,MACX,EAAE,MAAO,GACT,wDACA;AAED,UAAO,CAAE;EACT;CACD;AACD;AAED,IAAY,0DAAL;AACN;AACA;AACA;AACA;AACA;AACA;;AACA;;;;;;;;;;;;;;;AAgBD,eAAsB,aAAaC,SAAwC;CAC1E,MAAM,UAAU,IAAI;AAEpB,QAAO,uBAAuB,SAAS,MACtC,QAAQ,SAAS;EAChB,WAAW;EACX,SAAS;CACT,EAAC,CACF;AACD"}
@@ -1,12 +1,45 @@
1
1
  import { EventPublisher, MappedEvent } from "@geekmidas/events";
2
2
  import { Logger } from "@geekmidas/logger";
3
- import { Service, ServiceContext } from "@geekmidas/services";
3
+ import { Service, ServiceContext, ServiceDiscovery } from "@geekmidas/services";
4
4
  import { StandardSchemaV1 } from "@standard-schema/spec";
5
5
  import { AuditStorage } from "@geekmidas/audit";
6
6
  import { SniffResult } from "@geekmidas/envkit/sniffer";
7
7
 
8
+ //#region src/monitor.d.ts
9
+ /**
10
+ * What a monitor is told about the construct whose run it is reporting.
11
+ */
12
+ interface MonitorContext {
13
+ /** The kind of construct: function, cron or endpoint. */
14
+ type: ConstructType;
15
+ logger: Logger;
16
+ }
17
+ /**
18
+ * Reports a construct's runs to an outside service — a heartbeat, an uptime
19
+ * check, an error tracker.
20
+ *
21
+ * `start` runs before the handler and whatever it returns is handed back to
22
+ * `success` or `failure`, so a provider that pairs the two (a check-in id) can.
23
+ * A monitor that throws is logged and ignored: monitoring must never turn a
24
+ * successful run into a failed one.
25
+ */
26
+ interface ConstructMonitor<TRun = unknown> {
27
+ start?(ctx: MonitorContext): Promise<TRun>;
28
+ success(ctx: MonitorContext & {
29
+ run: TRun;
30
+ output: unknown;
31
+ status?: number;
32
+ }): Promise<void>;
33
+ failure(ctx: MonitorContext & {
34
+ run: TRun;
35
+ error: unknown;
36
+ status?: number;
37
+ }): Promise<void>;
38
+ }
39
+ type MonitorService = Service<string, ConstructMonitor<any>>;
40
+ /** A run in progress, closed by exactly one of its two methods. */
41
+ //#endregion
8
42
  //#region src/Construct.d.ts
9
-
10
43
  /**
11
44
  * Noop context for environment sniffing.
12
45
  * Used when calling service.register() to detect env vars without a real request.
@@ -26,6 +59,8 @@ declare abstract class Construct<TLogger extends Logger = Logger, TServiceName e
26
59
  readonly auditorStorageService?: Service<TAuditStorageServiceName, TAuditStorage> | undefined;
27
60
  /** Database service for this construct (used by Endpoint for RLS/audit context) */
28
61
  databaseService?: Service<TDatabaseServiceName, TDatabase>;
62
+ /** Monitors told about each run of this construct (see `.monitor()`). */
63
+ monitors: MonitorService[];
29
64
  constructor(type: ConstructType, logger: TLogger, services: TServices, events?: MappedEvent<T, any>[], publisherService?: Service<TServiceName, T> | undefined, outputSchema?: OutSchema | undefined, timeout?: number | undefined, memorySize?: number | undefined, auditorStorageService?: Service<TAuditStorageServiceName, TAuditStorage> | undefined);
30
65
  /**
31
66
  * Returns an array of environment variable names required by this construct's services.
@@ -78,5 +113,5 @@ declare enum ConstructType {
78
113
  */
79
114
  declare function sniffService(service: Service): Promise<SniffResult>;
80
115
  //#endregion
81
- export { Construct, ConstructType, sniffService, snifferContext };
82
- //# sourceMappingURL=Construct-_1wX7p_Y.d.cts.map
116
+ export { Construct, ConstructMonitor, ConstructType, MonitorContext, MonitorService, sniffService, snifferContext };
117
+ //# sourceMappingURL=Construct-JlyQkBkv.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Construct-JlyQkBkv.d.cts","names":[],"sources":["../src/monitor.ts","../src/Construct.ts"],"sourcesContent":[],"mappings":"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"}
@@ -94,6 +94,8 @@ const snifferContext = {
94
94
  var Construct = class {
95
95
  /** Database service for this construct (used by Endpoint for RLS/audit context) */
96
96
  databaseService;
97
+ /** Monitors told about each run of this construct (see `.monitor()`). */
98
+ monitors = [];
97
99
  constructor(type, logger, services, events = [], publisherService, outputSchema, timeout, memorySize, auditorStorageService) {
98
100
  this.type = type;
99
101
  this.logger = logger;
@@ -137,7 +139,8 @@ var Construct = class {
137
139
  this.publisherService,
138
140
  this.publisherService,
139
141
  this.auditorStorageService,
140
- this.databaseService
142
+ this.databaseService,
143
+ ...this.monitors
141
144
  ]);
142
145
  try {
143
146
  for (const service of services) {
@@ -240,4 +243,4 @@ Object.defineProperty(exports, 'snifferContext', {
240
243
  return snifferContext;
241
244
  }
242
245
  });
243
- //# sourceMappingURL=Construct-vXMZJgRp.cjs.map
246
+ //# sourceMappingURL=Construct-TGIM_E4o.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Construct-TGIM_E4o.cjs","names":["compact","snifferContext: ServiceContext","type: ConstructType","logger: TLogger","services: TServices","events: MappedEvent<T, any>[]","publisherService?: Service<TServiceName, T>","outputSchema?: OutSchema","timeout?: number","memorySize?: number","auditorStorageService?: Service<\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditStorage\n\t\t>","opts: { markOptional?: boolean }","services: Service[]","service: Service","SnifferEnvironmentParser"],"sources":["../../../node_modules/.pnpm/lodash.compact@3.0.1/node_modules/lodash.compact/index.js","../src/Construct.ts"],"sourcesContent":["/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\nfunction compact(array) {\n var index = -1,\n length = array ? array.length : 0,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = compact;\n","import type { AuditStorage } from '@geekmidas/audit';\nimport {\n\tSnifferEnvironmentParser,\n\ttype SniffResult,\n\tsniffWithFireAndForget,\n} from '@geekmidas/envkit/sniffer';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { Service, ServiceContext } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport compact from 'lodash.compact';\nimport type { MonitorService } from './monitor';\n\n// Cache for service environment variables to handle singleton services\n// Stores both the full list and the optional subset so the same sniff result\n// can satisfy both getEnvironment() and getEnvironment({ markOptional: true }).\nconst serviceEnvCache = new Map<\n\tService,\n\t{ envVars: string[]; optionalEnvVars: string[] }\n>();\n\n/**\n * Noop context for environment sniffing.\n * Used when calling service.register() to detect env vars without a real request.\n * Returns dummy values since services should only use context in instance methods,\n * not during registration.\n */\nconst snifferContext: ServiceContext = {\n\tgetLogger() {\n\t\t// Return a noop logger for sniffing - services shouldn't log during registration\n\t\treturn {\n\t\t\tdebug: () => {},\n\t\t\tinfo: () => {},\n\t\t\twarn: () => {},\n\t\t\terror: () => {},\n\t\t\tchild: () => snifferContext.getLogger(),\n\t\t} as unknown as Logger;\n\t},\n\tgetRequestId() {\n\t\treturn 'sniffer-context';\n\t},\n\tgetRequestStartTime() {\n\t\treturn Date.now();\n\t},\n\thasContext() {\n\t\treturn false;\n\t},\n};\n\nexport abstract class Construct<\n\tTLogger extends Logger = Logger,\n\tTServiceName extends string = string,\n\tT extends EventPublisher<any> | undefined = undefined,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTAuditStorageServiceName extends string = string,\n\tTAuditStorage extends AuditStorage | undefined = undefined,\n\tTDatabaseServiceName extends string = string,\n\tTDatabase = unknown,\n> {\n\t/** Database service for this construct (used by Endpoint for RLS/audit context) */\n\tpublic databaseService?: Service<TDatabaseServiceName, TDatabase>;\n\n\t/** Monitors told about each run of this construct (see `.monitor()`). */\n\tpublic monitors: MonitorService[] = [];\n\n\tconstructor(\n\t\tpublic readonly type: ConstructType,\n\t\tpublic readonly logger: TLogger,\n\t\tpublic readonly services: TServices,\n\t\tpublic readonly events: MappedEvent<T, any>[] = [],\n\n\t\tpublic readonly publisherService?: Service<TServiceName, T>,\n\t\tpublic outputSchema?: OutSchema,\n\t\tpublic readonly timeout?: number,\n\t\tpublic readonly memorySize?: number,\n\t\tpublic readonly auditorStorageService?: Service<\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditStorage\n\t\t>,\n\t) {}\n\n\t/**\n\t * Returns an array of environment variable names required by this construct's services.\n\t * This is determined by running a \"sniffer\" EnvironmentParser through each service's\n\t * register method to track which environment variables are accessed.\n\t *\n\t * Results are cached per service class to handle singleton patterns where\n\t * subsequent register() calls may short-circuit and not access env vars.\n\t *\n\t * @param markOptional - When true, optional vars (those accessed via `.optional()` or\n\t * `.default()`) are suffixed with `?` in the returned array (e.g. `'PORT?'`).\n\t * @returns Promise that resolves to array of environment variable names, sorted alphabetically\n\t *\n\t * @example\n\t * ```typescript\n\t * const endpoint = e\n\t * .services([databaseService, authService])\n\t * .get('/users')\n\t * .handle(async () => []);\n\t *\n\t * await endpoint.getEnvironment(); // ['AUTH_SECRET', 'DATABASE_URL']\n\t * await endpoint.getEnvironment({ markOptional: true }); // ['AUTH_SECRET', 'DATABASE_URL', 'PORT?']\n\t * ```\n\t */\n\tasync getEnvironment(\n\t\topts: { markOptional?: boolean } = {},\n\t): Promise<string[]> {\n\t\tconst { markOptional = false } = opts;\n\t\tconst envVars = new Set<string>();\n\t\tconst optionalVars = new Set<string>();\n\t\tconst services: Service[] = compact([\n\t\t\t...this.services,\n\t\t\tthis.publisherService,\n\t\t\tthis.publisherService,\n\t\t\tthis.auditorStorageService,\n\t\t\tthis.databaseService,\n\t\t\t...this.monitors,\n\t\t]);\n\n\t\ttry {\n\t\t\tfor (const service of services) {\n\t\t\t\t// Check cache first - handles singleton services that short-circuit\n\t\t\t\tif (serviceEnvCache.has(service)) {\n\t\t\t\t\tconst cached = serviceEnvCache.get(service)!;\n\t\t\t\t\tcached.envVars.forEach((v) => envVars.add(v));\n\t\t\t\t\tcached.optionalEnvVars.forEach((v) => optionalVars.add(v));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Use sniffService to properly handle all error scenarios\n\t\t\t\tconst result = await sniffService(service);\n\n\t\t\t\t// Log any issues for debugging\n\t\t\t\tif (result.error) {\n\t\t\t\t\tthis.logger.warn(\n\t\t\t\t\t\t{ error: result.error.message, service: service.serviceName },\n\t\t\t\t\t\t'Service threw error during env sniffing (env vars still captured)',\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (result.unhandledRejections.length > 0) {\n\t\t\t\t\tthis.logger.warn(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\terrors: result.unhandledRejections.map((e) => e.message),\n\t\t\t\t\t\t\tservice: service.serviceName,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'Fire-and-forget rejections during env sniffing (suppressed)',\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Cache and collect env vars (both required and optional)\n\t\t\t\tserviceEnvCache.set(service, {\n\t\t\t\t\tenvVars: result.envVars,\n\t\t\t\t\toptionalEnvVars: result.optionalEnvVars,\n\t\t\t\t});\n\t\t\t\tresult.envVars.forEach((v) => envVars.add(v));\n\t\t\t\tresult.optionalEnvVars.forEach((v) => optionalVars.add(v));\n\t\t\t}\n\n\t\t\tconst sorted = Array.from(envVars).sort();\n\t\t\tif (!markOptional || optionalVars.size === 0) return sorted;\n\t\t\treturn sorted.map((v) => (optionalVars.has(v) ? `${v}?` : v));\n\t\t} catch (error) {\n\t\t\tthis.logger.error(\n\t\t\t\t{ error },\n\t\t\t\t'Error determining environment variables for construct',\n\t\t\t);\n\n\t\t\treturn [];\n\t\t}\n\t}\n}\n\nexport enum ConstructType {\n\tCron = 'dev.geekmidas.function.cron',\n\tEndpoint = 'dev.geekmidas.function.endpoint',\n\tFunction = 'dev.geekmidas.function.function',\n\tSubscriber = 'dev.geekmidas.function.subscriber',\n\tQueue = 'dev.geekmidas.function.queue',\n\tTopic = 'dev.geekmidas.resource.topic',\n}\n\n/**\n * Utility to test sniffing a service for environment variables.\n * Useful for debugging services that throw errors during sniffing.\n *\n * @example\n * ```typescript\n * import { sniffService } from '@geekmidas/constructs';\n * import { authService } from './services/AuthService';\n *\n * const result = await sniffService(authService);\n * console.log('Env vars:', result.envVars);\n * console.log('Error:', result.error);\n * ```\n */\nexport async function sniffService(service: Service): Promise<SniffResult> {\n\tconst sniffer = new SnifferEnvironmentParser();\n\n\treturn sniffWithFireAndForget(sniffer, () =>\n\t\tservice.register({\n\t\t\tenvParser: sniffer as any,\n\t\t\tcontext: snifferContext,\n\t\t}),\n\t);\n}\n\n// Export for testing\nexport { snifferContext };\n"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -1,12 +1,45 @@
1
1
  import { SniffResult } from "@geekmidas/envkit/sniffer";
2
- import { Service, ServiceContext } from "@geekmidas/services";
2
+ import { Service, ServiceContext, ServiceDiscovery } from "@geekmidas/services";
3
3
  import { AuditStorage } from "@geekmidas/audit";
4
4
  import { EventPublisher, MappedEvent } from "@geekmidas/events";
5
5
  import { Logger } from "@geekmidas/logger";
6
6
  import { StandardSchemaV1 } from "@standard-schema/spec";
7
7
 
8
+ //#region src/monitor.d.ts
9
+ /**
10
+ * What a monitor is told about the construct whose run it is reporting.
11
+ */
12
+ interface MonitorContext {
13
+ /** The kind of construct: function, cron or endpoint. */
14
+ type: ConstructType;
15
+ logger: Logger;
16
+ }
17
+ /**
18
+ * Reports a construct's runs to an outside service — a heartbeat, an uptime
19
+ * check, an error tracker.
20
+ *
21
+ * `start` runs before the handler and whatever it returns is handed back to
22
+ * `success` or `failure`, so a provider that pairs the two (a check-in id) can.
23
+ * A monitor that throws is logged and ignored: monitoring must never turn a
24
+ * successful run into a failed one.
25
+ */
26
+ interface ConstructMonitor<TRun = unknown> {
27
+ start?(ctx: MonitorContext): Promise<TRun>;
28
+ success(ctx: MonitorContext & {
29
+ run: TRun;
30
+ output: unknown;
31
+ status?: number;
32
+ }): Promise<void>;
33
+ failure(ctx: MonitorContext & {
34
+ run: TRun;
35
+ error: unknown;
36
+ status?: number;
37
+ }): Promise<void>;
38
+ }
39
+ type MonitorService = Service<string, ConstructMonitor<any>>;
40
+ /** A run in progress, closed by exactly one of its two methods. */
41
+ //#endregion
8
42
  //#region src/Construct.d.ts
9
-
10
43
  /**
11
44
  * Noop context for environment sniffing.
12
45
  * Used when calling service.register() to detect env vars without a real request.
@@ -26,6 +59,8 @@ declare abstract class Construct<TLogger extends Logger = Logger, TServiceName e
26
59
  readonly auditorStorageService?: Service<TAuditStorageServiceName, TAuditStorage>;
27
60
  /** Database service for this construct (used by Endpoint for RLS/audit context) */
28
61
  databaseService?: Service<TDatabaseServiceName, TDatabase>;
62
+ /** Monitors told about each run of this construct (see `.monitor()`). */
63
+ monitors: MonitorService[];
29
64
  constructor(type: ConstructType, logger: TLogger, services: TServices, events?: MappedEvent<T, any>[], publisherService?: Service<TServiceName, T>, outputSchema?: OutSchema | undefined, timeout?: number | undefined, memorySize?: number | undefined, auditorStorageService?: Service<TAuditStorageServiceName, TAuditStorage>);
30
65
  /**
31
66
  * Returns an array of environment variable names required by this construct's services.
@@ -78,5 +113,5 @@ declare enum ConstructType {
78
113
  */
79
114
  declare function sniffService(service: Service): Promise<SniffResult>;
80
115
  //#endregion
81
- export { Construct, ConstructType, sniffService, snifferContext };
82
- //# sourceMappingURL=Construct-DCMuYOox.d.mts.map
116
+ export { Construct, ConstructMonitor, ConstructType, MonitorContext, MonitorService, sniffService, snifferContext };
117
+ //# sourceMappingURL=Construct-pxwC6fDD.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Construct-pxwC6fDD.d.mts","names":[],"sources":["../src/monitor.ts","../src/Construct.ts"],"sourcesContent":[],"mappings":"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"}