@geekmidas/constructs 0.2.3 → 0.3.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 (208) hide show
  1. package/dist/{AWSLambdaFunction-H65WfXLt.mjs → AWSLambdaFunction-C54a1doJ.mjs} +3 -3
  2. package/dist/{AWSLambdaFunction-H65WfXLt.mjs.map → AWSLambdaFunction-C54a1doJ.mjs.map} +1 -1
  3. package/dist/{AWSLambdaFunction-C-fuCLA3.cjs → AWSLambdaFunction-EPGY4s7i.cjs} +3 -3
  4. package/dist/{AWSLambdaFunction-C-fuCLA3.cjs.map → AWSLambdaFunction-EPGY4s7i.cjs.map} +1 -1
  5. package/dist/{AmazonApiGatewayEndpointAdaptor-pEWzF2uY.mjs → AmazonApiGatewayEndpointAdaptor-BT9JXihC.mjs} +2 -2
  6. package/dist/{AmazonApiGatewayEndpointAdaptor-pEWzF2uY.mjs.map → AmazonApiGatewayEndpointAdaptor-BT9JXihC.mjs.map} +1 -1
  7. package/dist/{AmazonApiGatewayEndpointAdaptor-Bk6ssx3K.cjs → AmazonApiGatewayEndpointAdaptor-DNFvvdmW.cjs} +2 -2
  8. package/dist/{AmazonApiGatewayEndpointAdaptor-Bk6ssx3K.cjs.map → AmazonApiGatewayEndpointAdaptor-DNFvvdmW.cjs.map} +1 -1
  9. package/dist/{AmazonApiGatewayV1EndpointAdaptor-MJpRbIaQ.mjs → AmazonApiGatewayV1EndpointAdaptor-BbkfC1dk.mjs} +2 -2
  10. package/dist/{AmazonApiGatewayV1EndpointAdaptor-MJpRbIaQ.mjs.map → AmazonApiGatewayV1EndpointAdaptor-BbkfC1dk.mjs.map} +1 -1
  11. package/dist/{AmazonApiGatewayV1EndpointAdaptor-uBp_4zLf.cjs → AmazonApiGatewayV1EndpointAdaptor-BiNzaAxD.cjs} +2 -2
  12. package/dist/{AmazonApiGatewayV1EndpointAdaptor-uBp_4zLf.cjs.map → AmazonApiGatewayV1EndpointAdaptor-BiNzaAxD.cjs.map} +1 -1
  13. package/dist/{AmazonApiGatewayV2EndpointAdaptor-I1W23Nvn.cjs → AmazonApiGatewayV2EndpointAdaptor-DZclCykB.cjs} +2 -2
  14. package/dist/{AmazonApiGatewayV2EndpointAdaptor-I1W23Nvn.cjs.map → AmazonApiGatewayV2EndpointAdaptor-DZclCykB.cjs.map} +1 -1
  15. package/dist/{AmazonApiGatewayV2EndpointAdaptor-ChO8BlDz.mjs → AmazonApiGatewayV2EndpointAdaptor-jRrQrIdm.mjs} +2 -2
  16. package/dist/{AmazonApiGatewayV2EndpointAdaptor-ChO8BlDz.mjs.map → AmazonApiGatewayV2EndpointAdaptor-jRrQrIdm.mjs.map} +1 -1
  17. package/dist/{Authorizer-bO8pUWlg.cjs → Authorizer-C0ge_tc8.cjs} +1 -1
  18. package/dist/{Authorizer-bO8pUWlg.cjs.map → Authorizer-C0ge_tc8.cjs.map} +1 -1
  19. package/dist/{Authorizer-5UwTFGFA.mjs → Authorizer-r9U3y_ms.mjs} +1 -1
  20. package/dist/{Authorizer-5UwTFGFA.mjs.map → Authorizer-r9U3y_ms.mjs.map} +1 -1
  21. package/dist/{BaseFunctionBuilder-B5gkW0Kt.mjs → BaseFunctionBuilder-Czi1Jwza.mjs} +2 -2
  22. package/dist/{BaseFunctionBuilder-B5gkW0Kt.mjs.map → BaseFunctionBuilder-Czi1Jwza.mjs.map} +1 -1
  23. package/dist/{BaseFunctionBuilder-C5Se7pdL.cjs → BaseFunctionBuilder-MYG3C9ug.cjs} +2 -2
  24. package/dist/{BaseFunctionBuilder-C5Se7pdL.cjs.map → BaseFunctionBuilder-MYG3C9ug.cjs.map} +1 -1
  25. package/dist/{Construct-BYSPikVm.cjs → Construct-Ba5cMxib.cjs} +2 -2
  26. package/dist/{Construct-BYSPikVm.cjs.map → Construct-Ba5cMxib.cjs.map} +1 -1
  27. package/dist/{Construct-LWeB1rSQ.mjs → Construct-DdyGHuag.mjs} +2 -2
  28. package/dist/{Construct-LWeB1rSQ.mjs.map → Construct-DdyGHuag.mjs.map} +1 -1
  29. package/dist/Construct.cjs +1 -1
  30. package/dist/Construct.mjs +1 -1
  31. package/dist/{Cron-B_J26y4S.mjs → Cron-BxhGs5up.mjs} +3 -3
  32. package/dist/{Cron-B_J26y4S.mjs.map → Cron-BxhGs5up.mjs.map} +1 -1
  33. package/dist/{Cron-at8QLgVN.cjs → Cron-CGF4YAfM.cjs} +3 -3
  34. package/dist/{Cron-at8QLgVN.cjs.map → Cron-CGF4YAfM.cjs.map} +1 -1
  35. package/dist/{CronBuilder-B62sGZ1a.cjs → CronBuilder-CcxKRtVP.cjs} +4 -4
  36. package/dist/{CronBuilder-B62sGZ1a.cjs.map → CronBuilder-CcxKRtVP.cjs.map} +1 -1
  37. package/dist/{CronBuilder-DQQwfklF.mjs → CronBuilder-d2jh-IB2.mjs} +4 -4
  38. package/dist/{CronBuilder-DQQwfklF.mjs.map → CronBuilder-d2jh-IB2.mjs.map} +1 -1
  39. package/dist/{Endpoint-BJo9Hhwm.cjs → Endpoint-BVGZXFyV.cjs} +3 -3
  40. package/dist/{Endpoint-BJo9Hhwm.cjs.map → Endpoint-BVGZXFyV.cjs.map} +1 -1
  41. package/dist/{Endpoint-B70_KKhu.mjs → Endpoint-CuOEswxJ.mjs} +3 -3
  42. package/dist/{Endpoint-B70_KKhu.mjs.map → Endpoint-CuOEswxJ.mjs.map} +1 -1
  43. package/dist/{EndpointBuilder-Ddy5Q8rO.cjs → EndpointBuilder-Cgj1P_ra.cjs} +6 -6
  44. package/dist/{EndpointBuilder-Ddy5Q8rO.cjs.map → EndpointBuilder-Cgj1P_ra.cjs.map} +1 -1
  45. package/dist/{EndpointBuilder-XnuNlUQs.mjs → EndpointBuilder-DnCB1h1j.mjs} +6 -6
  46. package/dist/{EndpointBuilder-XnuNlUQs.mjs.map → EndpointBuilder-DnCB1h1j.mjs.map} +1 -1
  47. package/dist/{EndpointFactory-VxyowJQC.cjs → EndpointFactory-CYj6BYok.cjs} +7 -6
  48. package/dist/EndpointFactory-CYj6BYok.cjs.map +1 -0
  49. package/dist/{EndpointFactory-BX5qoLCE.mjs → EndpointFactory-CbdxPCIH.mjs} +7 -6
  50. package/dist/EndpointFactory-CbdxPCIH.mjs.map +1 -0
  51. package/dist/{EndpointFactory-3g-7Rznt.d.cts → EndpointFactory-D8I4NNCo.d.cts} +14 -13
  52. package/dist/{EndpointFactory-DaFR9LQG.d.mts → EndpointFactory-jAkQxWRj.d.mts} +14 -13
  53. package/dist/{Function-DfKsM5Kx.mjs → Function-BVHqIDp9.mjs} +2 -2
  54. package/dist/{Function-DfKsM5Kx.mjs.map → Function-BVHqIDp9.mjs.map} +1 -1
  55. package/dist/{Function-DagDbeXo.cjs → Function-DDZb1525.cjs} +2 -2
  56. package/dist/{Function-DagDbeXo.cjs.map → Function-DDZb1525.cjs.map} +1 -1
  57. package/dist/{FunctionBuilder-CVT7bG2o.mjs → FunctionBuilder-CrDYgfiI.mjs} +4 -4
  58. package/dist/{FunctionBuilder-CVT7bG2o.mjs.map → FunctionBuilder-CrDYgfiI.mjs.map} +1 -1
  59. package/dist/{FunctionBuilder-DXvG_XD-.cjs → FunctionBuilder-DswJ-9sD.cjs} +4 -4
  60. package/dist/{FunctionBuilder-DXvG_XD-.cjs.map → FunctionBuilder-DswJ-9sD.cjs.map} +1 -1
  61. package/dist/{FunctionExecutionWrapper-DkNycmOh.cjs → FunctionExecutionWrapper-BYI2bGTL.cjs} +2 -2
  62. package/dist/{FunctionExecutionWrapper-DkNycmOh.cjs.map → FunctionExecutionWrapper-BYI2bGTL.cjs.map} +1 -1
  63. package/dist/{FunctionExecutionWrapper-Bubnr0zA.mjs → FunctionExecutionWrapper-CLDh7Z2_.mjs} +2 -2
  64. package/dist/{FunctionExecutionWrapper-Bubnr0zA.mjs.map → FunctionExecutionWrapper-CLDh7Z2_.mjs.map} +1 -1
  65. package/dist/{HonoEndpointAdaptor-D8a3lZN8.d.cts → HonoEndpointAdaptor-Bx9Y1bCZ.d.cts} +3 -3
  66. package/dist/{HonoEndpointAdaptor-CcvXzoYV.mjs → HonoEndpointAdaptor-NLlQk5iU.mjs} +4 -5
  67. package/dist/{HonoEndpointAdaptor-CcvXzoYV.mjs.map → HonoEndpointAdaptor-NLlQk5iU.mjs.map} +1 -1
  68. package/dist/{HonoEndpointAdaptor-DodwLM0-.cjs → HonoEndpointAdaptor-e6l9eVDU.cjs} +4 -5
  69. package/dist/{HonoEndpointAdaptor-DodwLM0-.cjs.map → HonoEndpointAdaptor-e6l9eVDU.cjs.map} +1 -1
  70. package/dist/{HonoEndpointAdaptor-C10W7xCf.d.mts → HonoEndpointAdaptor-kb1ByjUL.d.mts} +3 -3
  71. package/dist/{Subscriber-DOt3svUC.cjs → Subscriber-BiHjVXtM.cjs} +2 -2
  72. package/dist/{Subscriber-DOt3svUC.cjs.map → Subscriber-BiHjVXtM.cjs.map} +1 -1
  73. package/dist/{Subscriber-kCHbH2fZ.mjs → Subscriber-BmPf9GFb.mjs} +2 -2
  74. package/dist/{Subscriber-kCHbH2fZ.mjs.map → Subscriber-BmPf9GFb.mjs.map} +1 -1
  75. package/dist/{SubscriberBuilder-Cj2u9k5Q.cjs → SubscriberBuilder-Cp1C-xtT.cjs} +2 -2
  76. package/dist/{SubscriberBuilder-Cj2u9k5Q.cjs.map → SubscriberBuilder-Cp1C-xtT.cjs.map} +1 -1
  77. package/dist/{SubscriberBuilder-DmxMU89X.mjs → SubscriberBuilder-DJPEeYDJ.mjs} +2 -2
  78. package/dist/{SubscriberBuilder-DmxMU89X.mjs.map → SubscriberBuilder-DJPEeYDJ.mjs.map} +1 -1
  79. package/dist/{TestEndpointAdaptor-wA-fmq4v.cjs → TestEndpointAdaptor-opEisC30.cjs} +2 -2
  80. package/dist/{TestEndpointAdaptor-wA-fmq4v.cjs.map → TestEndpointAdaptor-opEisC30.cjs.map} +1 -1
  81. package/dist/{TestEndpointAdaptor-1pPixE6y.mjs → TestEndpointAdaptor-oq5mfglM.mjs} +2 -2
  82. package/dist/{TestEndpointAdaptor-1pPixE6y.mjs.map → TestEndpointAdaptor-oq5mfglM.mjs.map} +1 -1
  83. package/dist/adaptors/aws.cjs +11 -11
  84. package/dist/adaptors/aws.d.cts +1 -1
  85. package/dist/adaptors/aws.d.mts +1 -1
  86. package/dist/adaptors/aws.mjs +11 -11
  87. package/dist/adaptors/hono.cjs +8 -8
  88. package/dist/adaptors/hono.d.cts +2 -2
  89. package/dist/adaptors/hono.d.mts +2 -2
  90. package/dist/adaptors/hono.mjs +8 -8
  91. package/dist/adaptors/testing.cjs +7 -7
  92. package/dist/adaptors/testing.d.cts +1 -1
  93. package/dist/adaptors/testing.d.mts +1 -1
  94. package/dist/adaptors/testing.mjs +7 -7
  95. package/dist/crons/Cron.cjs +6 -6
  96. package/dist/crons/Cron.d.cts +1 -1
  97. package/dist/crons/Cron.d.mts +1 -1
  98. package/dist/crons/Cron.mjs +6 -6
  99. package/dist/crons/CronBuilder.cjs +7 -7
  100. package/dist/crons/CronBuilder.d.cts +1 -1
  101. package/dist/crons/CronBuilder.d.mts +1 -1
  102. package/dist/crons/CronBuilder.mjs +7 -7
  103. package/dist/crons/index.cjs +7 -7
  104. package/dist/crons/index.d.cts +5 -5
  105. package/dist/crons/index.d.mts +5 -5
  106. package/dist/crons/index.mjs +7 -7
  107. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +7 -7
  108. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +1 -1
  109. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +1 -1
  110. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +7 -7
  111. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +8 -8
  112. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +1 -1
  113. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +1 -1
  114. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +8 -8
  115. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +8 -8
  116. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +1 -1
  117. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +1 -1
  118. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +8 -8
  119. package/dist/endpoints/Authorizer.cjs +1 -1
  120. package/dist/endpoints/Authorizer.mjs +1 -1
  121. package/dist/endpoints/Endpoint.cjs +6 -6
  122. package/dist/endpoints/Endpoint.d.cts +1 -1
  123. package/dist/endpoints/Endpoint.d.mts +1 -1
  124. package/dist/endpoints/Endpoint.mjs +6 -6
  125. package/dist/endpoints/EndpointBuilder.cjs +9 -9
  126. package/dist/endpoints/EndpointBuilder.d.cts +1 -1
  127. package/dist/endpoints/EndpointBuilder.d.mts +1 -1
  128. package/dist/endpoints/EndpointBuilder.mjs +9 -9
  129. package/dist/endpoints/EndpointFactory.cjs +10 -10
  130. package/dist/endpoints/EndpointFactory.d.cts +4 -4
  131. package/dist/endpoints/EndpointFactory.d.mts +4 -4
  132. package/dist/endpoints/EndpointFactory.mjs +10 -10
  133. package/dist/endpoints/HonoEndpointAdaptor.cjs +8 -8
  134. package/dist/endpoints/HonoEndpointAdaptor.d.cts +2 -2
  135. package/dist/endpoints/HonoEndpointAdaptor.d.mts +2 -2
  136. package/dist/endpoints/HonoEndpointAdaptor.mjs +8 -8
  137. package/dist/endpoints/TestEndpointAdaptor.cjs +7 -7
  138. package/dist/endpoints/TestEndpointAdaptor.d.cts +1 -1
  139. package/dist/endpoints/TestEndpointAdaptor.d.mts +1 -1
  140. package/dist/endpoints/TestEndpointAdaptor.mjs +7 -7
  141. package/dist/endpoints/audit.d.cts +1 -1
  142. package/dist/endpoints/audit.d.mts +1 -1
  143. package/dist/endpoints/helpers.cjs +7 -7
  144. package/dist/endpoints/helpers.d.cts +1 -1
  145. package/dist/endpoints/helpers.d.mts +1 -1
  146. package/dist/endpoints/helpers.mjs +7 -7
  147. package/dist/endpoints/index.cjs +14 -10
  148. package/dist/endpoints/index.cjs.map +1 -1
  149. package/dist/endpoints/index.d.cts +6 -6
  150. package/dist/endpoints/index.d.mts +4 -4
  151. package/dist/endpoints/index.mjs +11 -11
  152. package/dist/endpoints/index.mjs.map +1 -1
  153. package/dist/endpoints/processAudits.d.cts +1 -1
  154. package/dist/endpoints/processAudits.d.mts +1 -1
  155. package/dist/endpoints/rls.cjs +1 -1
  156. package/dist/endpoints/rls.d.cts +1 -1
  157. package/dist/endpoints/rls.d.mts +1 -1
  158. package/dist/endpoints/rls.mjs +1 -1
  159. package/dist/functions/AWSLambdaFunction.cjs +6 -6
  160. package/dist/functions/AWSLambdaFunction.mjs +6 -6
  161. package/dist/functions/BaseFunctionBuilder.cjs +2 -2
  162. package/dist/functions/BaseFunctionBuilder.mjs +2 -2
  163. package/dist/functions/Function.cjs +2 -2
  164. package/dist/functions/Function.mjs +2 -2
  165. package/dist/functions/FunctionBuilder.cjs +4 -4
  166. package/dist/functions/FunctionBuilder.mjs +4 -4
  167. package/dist/functions/FunctionExecutionWrapper.cjs +5 -5
  168. package/dist/functions/FunctionExecutionWrapper.mjs +5 -5
  169. package/dist/functions/TestFunctionAdaptor.cjs +4 -4
  170. package/dist/functions/TestFunctionAdaptor.mjs +4 -4
  171. package/dist/functions/index.cjs +5 -5
  172. package/dist/functions/index.d.cts +1 -1
  173. package/dist/functions/index.d.mts +1 -1
  174. package/dist/functions/index.mjs +5 -5
  175. package/dist/functions-C6EK1xL6.mjs +8 -0
  176. package/dist/{functions-JhRsNoAZ.mjs.map → functions-C6EK1xL6.mjs.map} +1 -1
  177. package/dist/{functions-FCb-wWFC.cjs → functions-fTid0RMK.cjs} +2 -2
  178. package/dist/{functions-FCb-wWFC.cjs.map → functions-fTid0RMK.cjs.map} +1 -1
  179. package/dist/{helpers-DxxSpLfw.cjs → helpers-BcP1tXAi.cjs} +2 -2
  180. package/dist/{helpers-DxxSpLfw.cjs.map → helpers-BcP1tXAi.cjs.map} +1 -1
  181. package/dist/{helpers-C3B2lVrM.mjs → helpers-ByRTDO_m.mjs} +2 -2
  182. package/dist/{helpers-C3B2lVrM.mjs.map → helpers-ByRTDO_m.mjs.map} +1 -1
  183. package/dist/{index-Ceo-GuhJ.d.cts → index-CFyaRrck.d.mts} +2 -2
  184. package/dist/index-CqH4_Ieb.d.cts +10 -0
  185. package/dist/index.cjs +1 -1
  186. package/dist/index.mjs +1 -1
  187. package/dist/{rls-B6WreraR.mjs → rls-Bf3FRwto.mjs} +1 -1
  188. package/dist/{rls-B6WreraR.mjs.map → rls-Bf3FRwto.mjs.map} +1 -1
  189. package/dist/{rls-cLpyGWKe.cjs → rls-CmJ7bRsz.cjs} +1 -1
  190. package/dist/{rls-cLpyGWKe.cjs.map → rls-CmJ7bRsz.cjs.map} +1 -1
  191. package/dist/subscribers/Subscriber.cjs +2 -2
  192. package/dist/subscribers/Subscriber.mjs +2 -2
  193. package/dist/subscribers/SubscriberBuilder.cjs +3 -3
  194. package/dist/subscribers/SubscriberBuilder.mjs +3 -3
  195. package/dist/subscribers/index.cjs +3 -3
  196. package/dist/subscribers/index.d.mts +2 -2
  197. package/dist/subscribers/index.mjs +3 -3
  198. package/package.json +64 -13
  199. package/src/Construct.ts +3 -3
  200. package/src/__benchmarks__/endpoint.bench.ts +494 -0
  201. package/src/__benchmarks__/hono-server.bench.ts +249 -0
  202. package/src/endpoints/EndpointFactory.ts +50 -22
  203. package/src/endpoints/HonoEndpointAdaptor.ts +1 -2
  204. package/src/endpoints/index.ts +11 -0
  205. package/dist/EndpointFactory-BX5qoLCE.mjs.map +0 -1
  206. package/dist/EndpointFactory-VxyowJQC.cjs.map +0 -1
  207. package/dist/functions-JhRsNoAZ.mjs +0 -8
  208. package/dist/index-BtVKIOXm.d.mts +0 -10
@@ -7,6 +7,7 @@ import { Logger } from "@geekmidas/logger";
7
7
  import { Service } from "@geekmidas/services";
8
8
 
9
9
  //#region src/endpoints/EndpointFactory.d.ts
10
+
10
11
  declare class EndpointFactory<TServices extends Service[] = [], TBasePath extends string = '', TLogger extends Logger = Logger, TSession = unknown, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string, TAuthorizers extends readonly string[] = readonly string[], TAuditStorage extends AuditStorage<any> | undefined = undefined, TAuditStorageServiceName extends string = string, TAuditAction extends AuditableAction<string, unknown> = ExtractStorageAuditAction<NonNullable<TAuditStorage>>, TDatabase = undefined, TDatabaseServiceName extends string = string, TSecuritySchemes extends Record<string, SecurityScheme> = Record<string, SecurityScheme>, TRlsConfig extends RlsConfig<TServices, TSession, TLogger> | undefined = undefined> {
11
12
  private defaultServices;
12
13
  private basePath;
@@ -37,7 +38,7 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
37
38
  defaultRlsConfig
38
39
  }?: EndpointFactoryOptions<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName, TSecuritySchemes, TRlsConfig>);
39
40
  static joinPaths<TBasePath extends string, P extends string>(path: P, basePath?: TBasePath): JoinPaths<TBasePath, P>;
40
- authorizers<const T extends readonly string[]>(authorizers: T): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, T, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
41
+ authorizers<const T extends readonly string[]>(authorizers: T): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, T, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, TRlsConfig>;
41
42
  /**
42
43
  * Define custom security schemes for this factory.
43
44
  * These extend the built-in schemes (jwt, bearer, apiKey, oauth2, oidc).
@@ -54,7 +55,7 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
54
55
  * });
55
56
  * ```
56
57
  */
57
- securitySchemes<T extends Record<string, SecurityScheme>>(schemes: T): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes & T>;
58
+ securitySchemes<T extends Record<string, SecurityScheme>>(schemes: T): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes & T, TRlsConfig>;
58
59
  /**
59
60
  * Set the default authorizer for all endpoints created from this factory.
60
61
  * Individual endpoints can override this by calling `.authorizer()` on the builder.
@@ -65,29 +66,29 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
65
66
  * - Custom security scheme names defined via `.securitySchemes()`
66
67
  * - 'none' to disable authorization
67
68
  */
68
- authorizer(name: BuiltInSecuritySchemeId | keyof TSecuritySchemes | TAuthorizers[number] | 'none'): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
69
- route<TPath extends string>(path: TPath): EndpointFactory<TServices, JoinPaths<TBasePath, TPath>, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
70
- authorize(fn: AuthorizeFn<TServices, TLogger, TSession>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
71
- services<S extends Service[]>(services: S): EndpointFactory<[...S, ...TServices], TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
72
- logger<L extends Logger>(logger: L): EndpointFactory<TServices, TBasePath, L, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
73
- publisher<T extends EventPublisher<any>, TServiceName extends string = string>(publisher: Service<TServiceName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, T, TServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
74
- session<T>(session: SessionFn<TServices, TLogger, T, TDatabase>): EndpointFactory<TServices, TBasePath, TLogger, T, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
69
+ authorizer(name: BuiltInSecuritySchemeId | keyof TSecuritySchemes | TAuthorizers[number] | 'none'): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, TRlsConfig>;
70
+ route<TPath extends string>(path: TPath): EndpointFactory<TServices, JoinPaths<TBasePath, TPath>, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, TRlsConfig>;
71
+ authorize(fn: AuthorizeFn<TServices, TLogger, TSession>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, TRlsConfig>;
72
+ services<S extends Service[]>(services: S): EndpointFactory<[...S, ...TServices], TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, undefined>;
73
+ logger<L extends Logger>(logger: L): EndpointFactory<TServices, TBasePath, L, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, undefined>;
74
+ publisher<T extends EventPublisher<any>, TServiceName extends string = string>(publisher: Service<TServiceName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, T, TServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, TRlsConfig>;
75
+ session<T>(session: SessionFn<TServices, TLogger, T, TDatabase>): EndpointFactory<TServices, TBasePath, TLogger, T, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, undefined>;
75
76
  /**
76
77
  * Set the database service for endpoints created from this factory.
77
78
  * The database will be available in handler context as `db`.
78
79
  */
79
- database<T, TName extends string>(service: Service<TName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, T, TName, TSecuritySchemes>;
80
+ database<T, TName extends string>(service: Service<TName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, T, TName, TSecuritySchemes, TRlsConfig>;
80
81
  /**
81
82
  * Set the auditor storage service for endpoints created from this factory.
82
83
  * This enables audit functionality and makes `auditor` available in handler context.
83
84
  * The audit action type is automatically inferred from the storage's generic parameter.
84
85
  */
85
- auditor<T extends AuditStorage<any>, TName extends string>(storage: Service<TName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, T, TName, ExtractStorageAuditAction<T>, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
86
+ auditor<T extends AuditStorage<any>, TName extends string>(storage: Service<TName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, T, TName, ExtractStorageAuditAction<T>, TDatabase, TDatabaseServiceName, TSecuritySchemes, TRlsConfig>;
86
87
  /**
87
88
  * Set the actor extractor function for endpoints created from this factory.
88
89
  * The actor is extracted from the request context and attached to all audits.
89
90
  */
90
- actor(extractor: ActorExtractor<TServices, TSession, TLogger>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
91
+ actor(extractor: ActorExtractor<TServices, TSession, TLogger>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, TRlsConfig>;
91
92
  /**
92
93
  * Set the RLS (Row-Level Security) configuration for endpoints created from this factory.
93
94
  * This enables automatic PostgreSQL session variable setting for RLS policies.
@@ -136,4 +137,4 @@ interface EndpointFactoryOptions<TServices extends Service[] = [], TBasePath ext
136
137
  declare const e: EndpointFactory<[], "", Logger, unknown, undefined, string, readonly string[], undefined, string, never, undefined, string, Record<string, SecurityScheme>, undefined>;
137
138
  //#endregion
138
139
  export { EndpointFactory, EndpointFactoryOptions, JoinPaths, RemoveTrailingSlash, e };
139
- //# sourceMappingURL=EndpointFactory-3g-7Rznt.d.cts.map
140
+ //# sourceMappingURL=EndpointFactory-D8I4NNCo.d.cts.map
@@ -7,6 +7,7 @@ import { EventPublisher, MappedEvent } from "@geekmidas/events";
7
7
  import { Logger } from "@geekmidas/logger";
8
8
 
9
9
  //#region src/endpoints/EndpointFactory.d.ts
10
+
10
11
  declare class EndpointFactory<TServices extends Service[] = [], TBasePath extends string = '', TLogger extends Logger = Logger, TSession = unknown, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string, TAuthorizers extends readonly string[] = readonly string[], TAuditStorage extends AuditStorage<any> | undefined = undefined, TAuditStorageServiceName extends string = string, TAuditAction extends AuditableAction<string, unknown> = ExtractStorageAuditAction<NonNullable<TAuditStorage>>, TDatabase = undefined, TDatabaseServiceName extends string = string, TSecuritySchemes extends Record<string, SecurityScheme> = Record<string, SecurityScheme>, TRlsConfig extends RlsConfig<TServices, TSession, TLogger> | undefined = undefined> {
11
12
  private defaultServices;
12
13
  private basePath;
@@ -37,7 +38,7 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
37
38
  defaultRlsConfig
38
39
  }?: EndpointFactoryOptions<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName, TSecuritySchemes, TRlsConfig>);
39
40
  static joinPaths<TBasePath extends string, P extends string>(path: P, basePath?: TBasePath): JoinPaths<TBasePath, P>;
40
- authorizers<const T extends readonly string[]>(authorizers: T): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, T, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
41
+ authorizers<const T extends readonly string[]>(authorizers: T): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, T, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, TRlsConfig>;
41
42
  /**
42
43
  * Define custom security schemes for this factory.
43
44
  * These extend the built-in schemes (jwt, bearer, apiKey, oauth2, oidc).
@@ -54,7 +55,7 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
54
55
  * });
55
56
  * ```
56
57
  */
57
- securitySchemes<T extends Record<string, SecurityScheme>>(schemes: T): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes & T>;
58
+ securitySchemes<T extends Record<string, SecurityScheme>>(schemes: T): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes & T, TRlsConfig>;
58
59
  /**
59
60
  * Set the default authorizer for all endpoints created from this factory.
60
61
  * Individual endpoints can override this by calling `.authorizer()` on the builder.
@@ -65,29 +66,29 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
65
66
  * - Custom security scheme names defined via `.securitySchemes()`
66
67
  * - 'none' to disable authorization
67
68
  */
68
- authorizer(name: BuiltInSecuritySchemeId | keyof TSecuritySchemes | TAuthorizers[number] | 'none'): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
69
- route<TPath extends string>(path: TPath): EndpointFactory<TServices, JoinPaths<TBasePath, TPath>, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
70
- authorize(fn: AuthorizeFn<TServices, TLogger, TSession>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
71
- services<S extends Service[]>(services: S): EndpointFactory<[...S, ...TServices], TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
72
- logger<L extends Logger>(logger: L): EndpointFactory<TServices, TBasePath, L, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
73
- publisher<T extends EventPublisher<any>, TServiceName extends string = string>(publisher: Service<TServiceName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, T, TServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
74
- session<T>(session: SessionFn<TServices, TLogger, T, TDatabase>): EndpointFactory<TServices, TBasePath, TLogger, T, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
69
+ authorizer(name: BuiltInSecuritySchemeId | keyof TSecuritySchemes | TAuthorizers[number] | 'none'): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, TRlsConfig>;
70
+ route<TPath extends string>(path: TPath): EndpointFactory<TServices, JoinPaths<TBasePath, TPath>, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, TRlsConfig>;
71
+ authorize(fn: AuthorizeFn<TServices, TLogger, TSession>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, TRlsConfig>;
72
+ services<S extends Service[]>(services: S): EndpointFactory<[...S, ...TServices], TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, undefined>;
73
+ logger<L extends Logger>(logger: L): EndpointFactory<TServices, TBasePath, L, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, undefined>;
74
+ publisher<T extends EventPublisher<any>, TServiceName extends string = string>(publisher: Service<TServiceName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, T, TServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, TRlsConfig>;
75
+ session<T>(session: SessionFn<TServices, TLogger, T, TDatabase>): EndpointFactory<TServices, TBasePath, TLogger, T, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, undefined>;
75
76
  /**
76
77
  * Set the database service for endpoints created from this factory.
77
78
  * The database will be available in handler context as `db`.
78
79
  */
79
- database<T, TName extends string>(service: Service<TName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, T, TName, TSecuritySchemes>;
80
+ database<T, TName extends string>(service: Service<TName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, T, TName, TSecuritySchemes, TRlsConfig>;
80
81
  /**
81
82
  * Set the auditor storage service for endpoints created from this factory.
82
83
  * This enables audit functionality and makes `auditor` available in handler context.
83
84
  * The audit action type is automatically inferred from the storage's generic parameter.
84
85
  */
85
- auditor<T extends AuditStorage<any>, TName extends string>(storage: Service<TName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, T, TName, ExtractStorageAuditAction<T>, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
86
+ auditor<T extends AuditStorage<any>, TName extends string>(storage: Service<TName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, T, TName, ExtractStorageAuditAction<T>, TDatabase, TDatabaseServiceName, TSecuritySchemes, TRlsConfig>;
86
87
  /**
87
88
  * Set the actor extractor function for endpoints created from this factory.
88
89
  * The actor is extracted from the request context and attached to all audits.
89
90
  */
90
- actor(extractor: ActorExtractor<TServices, TSession, TLogger>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
91
+ actor(extractor: ActorExtractor<TServices, TSession, TLogger>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, TRlsConfig>;
91
92
  /**
92
93
  * Set the RLS (Row-Level Security) configuration for endpoints created from this factory.
93
94
  * This enables automatic PostgreSQL session variable setting for RLS policies.
@@ -136,4 +137,4 @@ interface EndpointFactoryOptions<TServices extends Service[] = [], TBasePath ext
136
137
  declare const e: EndpointFactory<[], "", Logger, unknown, undefined, string, readonly string[], undefined, string, never, undefined, string, Record<string, SecurityScheme>, undefined>;
137
138
  //#endregion
138
139
  export { EndpointFactory, EndpointFactoryOptions, JoinPaths, RemoveTrailingSlash, e };
139
- //# sourceMappingURL=EndpointFactory-DaFR9LQG.d.mts.map
140
+ //# sourceMappingURL=EndpointFactory-jAkQxWRj.d.mts.map
@@ -1,4 +1,4 @@
1
- import { Construct, ConstructType } from "./Construct-LWeB1rSQ.mjs";
1
+ import { Construct, ConstructType } from "./Construct-DdyGHuag.mjs";
2
2
  import { UnprocessableEntityError } from "@geekmidas/errors";
3
3
  import { ConsoleLogger } from "@geekmidas/logger/console";
4
4
  import { parseSchema } from "@geekmidas/schema/parser";
@@ -69,4 +69,4 @@ var Function = class Function extends Construct {
69
69
 
70
70
  //#endregion
71
71
  export { Function, FunctionFactory };
72
- //# sourceMappingURL=Function-DfKsM5Kx.mjs.map
72
+ //# sourceMappingURL=Function-BVHqIDp9.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Function-DfKsM5Kx.mjs","names":["DEFAULT_LOGGER","defaultServices: TServices","defaultLogger: TLogger","services: S","logger: L","obj: any","schema: T","data: unknown","output: unknown","fn: Fn","type: ConstructType","input?: TInput","outputSchema?: OutSchema","services: TServices","logger: TLogger","publisherService?: Service<TEventPublisherServiceName, TEventPublisher>","events: MappedEvent<TEventPublisher, OutSchema>[]","memorySize?: number","auditorStorageService?: Service<TAuditStorageServiceName, TAuditStorage>","databaseService?: Service<TDatabaseServiceName, TDatabase>"],"sources":["../src/functions/Function.ts"],"sourcesContent":["import type { AuditStorage, AuditableAction, Auditor } from '@geekmidas/audit';\nimport { UnprocessableEntityError } from '@geekmidas/errors';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type {\n ComposableStandardSchema,\n InferComposableStandardSchema,\n InferStandardSchema,\n} from '@geekmidas/schema';\nimport { parseSchema } from '@geekmidas/schema/parser';\nimport type { Service, ServiceRecord } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { Construct, ConstructType } from '../Construct';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class FunctionFactory<\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n> {\n private defaultServices: TServices;\n constructor(\n defaultServices: TServices,\n private defaultLogger: TLogger = DEFAULT_LOGGER,\n ) {\n // Initialize default services\n this.defaultServices = uniqBy(\n defaultServices,\n (s) => s.serviceName,\n ) as TServices;\n }\n\n // Create a new factory with services\n services<S extends Service[]>(\n services: S,\n ): FunctionFactory<[...S, ...TServices], TLogger> {\n return new FunctionFactory<[...S, ...TServices], TLogger>(\n [...services, ...this.defaultServices],\n this.defaultLogger,\n );\n }\n\n logger<L extends Logger>(logger: L): FunctionFactory<TServices, L> {\n return new FunctionFactory<TServices, L>(this.defaultServices, logger);\n }\n}\n\nexport class Function<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n Fn extends FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n > = FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >,\n> extends Construct<\n TLogger,\n TEventPublisherServiceName,\n TEventPublisher,\n OutSchema,\n TServices,\n TAuditStorageServiceName,\n TAuditStorage\n> {\n __IS_FUNCTION__ = true;\n\n static isFunction(obj: any): obj is Function<any, any, any, any, any> {\n return Boolean(\n obj &&\n obj.__IS_FUNCTION__ === true &&\n obj.type === ConstructType.Function,\n );\n }\n\n /**\n * Validates data against a StandardSchema.\n *\n * @param schema - The StandardSchema to validate against\n * @param data - The data to validate\n * @returns Validation result with value or issues\n */\n static validate<T extends StandardSchemaV1>(schema: T, data: unknown) {\n return schema['~standard'].validate(data);\n }\n\n /**\n * Parses and validates data against a schema, throwing an error if validation fails.\n *\n * @param schema - The StandardSchema to validate against\n * @param data - The data to parse and validate\n * @returns The validated data with proper typing\n * @throws {UnprocessableEntityError} When validation fails\n */\n static async parseSchema<T extends StandardSchemaV1>(\n schema: T,\n data: unknown,\n ): Promise<InferStandardSchema<T>> {\n try {\n return await parseSchema(schema, data);\n } catch (issues) {\n throw new UnprocessableEntityError('Validation failed', issues);\n }\n }\n\n /**\n * Parses and validates the endpoint output against the output schema.\n *\n * @param output - The raw output data to validate\n * @returns The validated output data\n * @throws {UnprocessableEntityError} When output validation fails\n */\n async parseOutput(output: unknown): Promise<InferStandardSchema<OutSchema>> {\n return Function.parseSchema(\n this.outputSchema as StandardSchemaV1,\n output,\n ) as Promise<InferStandardSchema<OutSchema>>;\n }\n\n constructor(\n protected readonly fn: Fn,\n timeout = 30000, // Default timeout of 30 seconds\n type: ConstructType = ConstructType.Function,\n public input?: TInput,\n outputSchema?: OutSchema,\n services: TServices = [] as unknown as TServices,\n logger: TLogger = DEFAULT_LOGGER,\n publisherService?: Service<TEventPublisherServiceName, TEventPublisher>,\n events: MappedEvent<TEventPublisher, OutSchema>[] = [],\n memorySize?: number,\n auditorStorageService?: Service<TAuditStorageServiceName, TAuditStorage>,\n public databaseService?: Service<TDatabaseServiceName, TDatabase>,\n ) {\n super(\n type,\n logger,\n services,\n events,\n publisherService,\n outputSchema,\n timeout,\n memorySize,\n auditorStorageService,\n );\n }\n}\n\nexport type FunctionHandler<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TDatabase = undefined,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> = (\n ctx: FunctionContext<\n TInput,\n TServices,\n TLogger,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >,\n) => OutSchema extends StandardSchemaV1\n ? InferStandardSchema<OutSchema> | Promise<InferStandardSchema<OutSchema>>\n : any | Promise<any>;\n\n/**\n * Conditional type that adds `db` property only when TDatabase is configured.\n */\ntype DatabaseContext<TDatabase> = TDatabase extends undefined\n ? {}\n : { db: TDatabase };\n\n/**\n * Conditional auditor context - only present when audit storage is configured.\n */\ntype AuditorContext<\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n TAuditStorage = undefined,\n> = TAuditStorage extends undefined\n ? {}\n : {\n /**\n * Auditor instance for recording audit events.\n * Only present when audit storage is configured on the function.\n */\n auditor: Auditor<TAuditAction>;\n };\n\nexport type FunctionContext<\n Input extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TDatabase = undefined,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> = {\n services: ServiceRecord<TServices>;\n logger: TLogger;\n input: InferComposableStandardSchema<Input>;\n} & DatabaseContext<TDatabase> &\n AuditorContext<TAuditAction, TAuditStorage>;\n"],"mappings":";;;;;;;AAgBA,MAAMA,mBAAiB,IAAI;AAE3B,IAAa,kBAAb,MAAa,gBAGX;CACA,AAAQ;CACR,YACEC,iBACQC,gBAAyBF,kBACjC;EADQ;AAGR,OAAK,kBAAkB,OACrB,iBACA,CAAC,MAAM,EAAE,YACV;CACF;CAGD,SACEG,UACgD;AAChD,SAAO,IAAI,gBACT,CAAC,GAAG,UAAU,GAAG,KAAK,eAAgB,GACtC,KAAK;CAER;CAED,OAAyBC,QAA0C;AACjE,SAAO,IAAI,gBAA8B,KAAK,iBAAiB;CAChE;AACF;AAED,IAAa,WAAb,MAAa,iBAgCH,UAQR;CACA,kBAAkB;CAElB,OAAO,WAAWC,KAAoD;AACpE,SAAO,QACL,OACE,IAAI,oBAAoB,QACxB,IAAI,SAAS,cAAc,SAC9B;CACF;;;;;;;;CASD,OAAO,SAAqCC,QAAWC,MAAe;AACpE,SAAO,OAAO,aAAa,SAAS,KAAK;CAC1C;;;;;;;;;CAUD,aAAa,YACXD,QACAC,MACiC;AACjC,MAAI;AACF,UAAO,MAAM,YAAY,QAAQ,KAAK;EACvC,SAAQ,QAAQ;AACf,SAAM,IAAI,yBAAyB,qBAAqB;EACzD;CACF;;;;;;;;CASD,MAAM,YAAYC,QAA0D;AAC1E,SAAO,SAAS,YACd,KAAK,cACL,OACD;CACF;CAED,YACqBC,IACnB,UAAU,KACVC,OAAsB,cAAc,UAC7BC,OACPC,cACAC,WAAsB,CAAE,GACxBC,SAAkBd,kBAClBe,kBACAC,SAAoD,CAAE,GACtDC,YACAC,uBACOC,iBACP;AACA,QACE,MACA,QACA,UACA,QACA,kBACA,cACA,SACA,YACA,sBACD;EAvBkB;EAGZ;EAQA;CAaR;AACF"}
1
+ {"version":3,"file":"Function-BVHqIDp9.mjs","names":["DEFAULT_LOGGER","defaultServices: TServices","defaultLogger: TLogger","services: S","logger: L","obj: any","schema: T","data: unknown","output: unknown","fn: Fn","type: ConstructType","input?: TInput","outputSchema?: OutSchema","services: TServices","logger: TLogger","publisherService?: Service<TEventPublisherServiceName, TEventPublisher>","events: MappedEvent<TEventPublisher, OutSchema>[]","memorySize?: number","auditorStorageService?: Service<TAuditStorageServiceName, TAuditStorage>","databaseService?: Service<TDatabaseServiceName, TDatabase>"],"sources":["../src/functions/Function.ts"],"sourcesContent":["import type { AuditStorage, AuditableAction, Auditor } from '@geekmidas/audit';\nimport { UnprocessableEntityError } from '@geekmidas/errors';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type {\n ComposableStandardSchema,\n InferComposableStandardSchema,\n InferStandardSchema,\n} from '@geekmidas/schema';\nimport { parseSchema } from '@geekmidas/schema/parser';\nimport type { Service, ServiceRecord } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { Construct, ConstructType } from '../Construct';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class FunctionFactory<\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n> {\n private defaultServices: TServices;\n constructor(\n defaultServices: TServices,\n private defaultLogger: TLogger = DEFAULT_LOGGER,\n ) {\n // Initialize default services\n this.defaultServices = uniqBy(\n defaultServices,\n (s) => s.serviceName,\n ) as TServices;\n }\n\n // Create a new factory with services\n services<S extends Service[]>(\n services: S,\n ): FunctionFactory<[...S, ...TServices], TLogger> {\n return new FunctionFactory<[...S, ...TServices], TLogger>(\n [...services, ...this.defaultServices],\n this.defaultLogger,\n );\n }\n\n logger<L extends Logger>(logger: L): FunctionFactory<TServices, L> {\n return new FunctionFactory<TServices, L>(this.defaultServices, logger);\n }\n}\n\nexport class Function<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n Fn extends FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n > = FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >,\n> extends Construct<\n TLogger,\n TEventPublisherServiceName,\n TEventPublisher,\n OutSchema,\n TServices,\n TAuditStorageServiceName,\n TAuditStorage\n> {\n __IS_FUNCTION__ = true;\n\n static isFunction(obj: any): obj is Function<any, any, any, any, any> {\n return Boolean(\n obj &&\n obj.__IS_FUNCTION__ === true &&\n obj.type === ConstructType.Function,\n );\n }\n\n /**\n * Validates data against a StandardSchema.\n *\n * @param schema - The StandardSchema to validate against\n * @param data - The data to validate\n * @returns Validation result with value or issues\n */\n static validate<T extends StandardSchemaV1>(schema: T, data: unknown) {\n return schema['~standard'].validate(data);\n }\n\n /**\n * Parses and validates data against a schema, throwing an error if validation fails.\n *\n * @param schema - The StandardSchema to validate against\n * @param data - The data to parse and validate\n * @returns The validated data with proper typing\n * @throws {UnprocessableEntityError} When validation fails\n */\n static async parseSchema<T extends StandardSchemaV1>(\n schema: T,\n data: unknown,\n ): Promise<InferStandardSchema<T>> {\n try {\n return await parseSchema(schema, data);\n } catch (issues) {\n throw new UnprocessableEntityError('Validation failed', issues);\n }\n }\n\n /**\n * Parses and validates the endpoint output against the output schema.\n *\n * @param output - The raw output data to validate\n * @returns The validated output data\n * @throws {UnprocessableEntityError} When output validation fails\n */\n async parseOutput(output: unknown): Promise<InferStandardSchema<OutSchema>> {\n return Function.parseSchema(\n this.outputSchema as StandardSchemaV1,\n output,\n ) as Promise<InferStandardSchema<OutSchema>>;\n }\n\n constructor(\n protected readonly fn: Fn,\n timeout = 30000, // Default timeout of 30 seconds\n type: ConstructType = ConstructType.Function,\n public input?: TInput,\n outputSchema?: OutSchema,\n services: TServices = [] as unknown as TServices,\n logger: TLogger = DEFAULT_LOGGER,\n publisherService?: Service<TEventPublisherServiceName, TEventPublisher>,\n events: MappedEvent<TEventPublisher, OutSchema>[] = [],\n memorySize?: number,\n auditorStorageService?: Service<TAuditStorageServiceName, TAuditStorage>,\n public databaseService?: Service<TDatabaseServiceName, TDatabase>,\n ) {\n super(\n type,\n logger,\n services,\n events,\n publisherService,\n outputSchema,\n timeout,\n memorySize,\n auditorStorageService,\n );\n }\n}\n\nexport type FunctionHandler<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TDatabase = undefined,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> = (\n ctx: FunctionContext<\n TInput,\n TServices,\n TLogger,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >,\n) => OutSchema extends StandardSchemaV1\n ? InferStandardSchema<OutSchema> | Promise<InferStandardSchema<OutSchema>>\n : any | Promise<any>;\n\n/**\n * Conditional type that adds `db` property only when TDatabase is configured.\n */\ntype DatabaseContext<TDatabase> = TDatabase extends undefined\n ? {}\n : { db: TDatabase };\n\n/**\n * Conditional auditor context - only present when audit storage is configured.\n */\ntype AuditorContext<\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n TAuditStorage = undefined,\n> = TAuditStorage extends undefined\n ? {}\n : {\n /**\n * Auditor instance for recording audit events.\n * Only present when audit storage is configured on the function.\n */\n auditor: Auditor<TAuditAction>;\n };\n\nexport type FunctionContext<\n Input extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TDatabase = undefined,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> = {\n services: ServiceRecord<TServices>;\n logger: TLogger;\n input: InferComposableStandardSchema<Input>;\n} & DatabaseContext<TDatabase> &\n AuditorContext<TAuditAction, TAuditStorage>;\n"],"mappings":";;;;;;;AAgBA,MAAMA,mBAAiB,IAAI;AAE3B,IAAa,kBAAb,MAAa,gBAGX;CACA,AAAQ;CACR,YACEC,iBACQC,gBAAyBF,kBACjC;EADQ;AAGR,OAAK,kBAAkB,OACrB,iBACA,CAAC,MAAM,EAAE,YACV;CACF;CAGD,SACEG,UACgD;AAChD,SAAO,IAAI,gBACT,CAAC,GAAG,UAAU,GAAG,KAAK,eAAgB,GACtC,KAAK;CAER;CAED,OAAyBC,QAA0C;AACjE,SAAO,IAAI,gBAA8B,KAAK,iBAAiB;CAChE;AACF;AAED,IAAa,WAAb,MAAa,iBAgCH,UAQR;CACA,kBAAkB;CAElB,OAAO,WAAWC,KAAoD;AACpE,SAAO,QACL,OACE,IAAI,oBAAoB,QACxB,IAAI,SAAS,cAAc,SAC9B;CACF;;;;;;;;CASD,OAAO,SAAqCC,QAAWC,MAAe;AACpE,SAAO,OAAO,aAAa,SAAS,KAAK;CAC1C;;;;;;;;;CAUD,aAAa,YACXD,QACAC,MACiC;AACjC,MAAI;AACF,UAAO,MAAM,YAAY,QAAQ,KAAK;EACvC,SAAQ,QAAQ;AACf,SAAM,IAAI,yBAAyB,qBAAqB;EACzD;CACF;;;;;;;;CASD,MAAM,YAAYC,QAA0D;AAC1E,SAAO,SAAS,YACd,KAAK,cACL,OACD;CACF;CAED,YACqBC,IACnB,UAAU,KACVC,OAAsB,cAAc,UAC7BC,OACPC,cACAC,WAAsB,CAAE,GACxBC,SAAkBd,kBAClBe,kBACAC,SAAoD,CAAE,GACtDC,YACAC,uBACOC,iBACP;AACA,QACE,MACA,QACA,UACA,QACA,kBACA,cACA,SACA,YACA,sBACD;EAvBkB;EAGZ;EAQA;CAaR;AACF"}
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- const require_Construct = require('./Construct-BYSPikVm.cjs');
2
+ const require_Construct = require('./Construct-Ba5cMxib.cjs');
3
3
  const __geekmidas_errors = require_chunk.__toESM(require("@geekmidas/errors"));
4
4
  const __geekmidas_logger_console = require_chunk.__toESM(require("@geekmidas/logger/console"));
5
5
  const __geekmidas_schema_parser = require_chunk.__toESM(require("@geekmidas/schema/parser"));
@@ -81,4 +81,4 @@ Object.defineProperty(exports, 'FunctionFactory', {
81
81
  return FunctionFactory;
82
82
  }
83
83
  });
84
- //# sourceMappingURL=Function-DagDbeXo.cjs.map
84
+ //# sourceMappingURL=Function-DDZb1525.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Function-DagDbeXo.cjs","names":["ConsoleLogger","defaultServices: TServices","defaultLogger: TLogger","services: S","logger: L","Construct","obj: any","ConstructType","schema: T","data: unknown","UnprocessableEntityError","output: unknown","fn: Fn","type: ConstructType","input?: TInput","outputSchema?: OutSchema","services: TServices","logger: TLogger","publisherService?: Service<TEventPublisherServiceName, TEventPublisher>","events: MappedEvent<TEventPublisher, OutSchema>[]","memorySize?: number","auditorStorageService?: Service<TAuditStorageServiceName, TAuditStorage>","databaseService?: Service<TDatabaseServiceName, TDatabase>"],"sources":["../src/functions/Function.ts"],"sourcesContent":["import type { AuditStorage, AuditableAction, Auditor } from '@geekmidas/audit';\nimport { UnprocessableEntityError } from '@geekmidas/errors';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type {\n ComposableStandardSchema,\n InferComposableStandardSchema,\n InferStandardSchema,\n} from '@geekmidas/schema';\nimport { parseSchema } from '@geekmidas/schema/parser';\nimport type { Service, ServiceRecord } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { Construct, ConstructType } from '../Construct';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class FunctionFactory<\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n> {\n private defaultServices: TServices;\n constructor(\n defaultServices: TServices,\n private defaultLogger: TLogger = DEFAULT_LOGGER,\n ) {\n // Initialize default services\n this.defaultServices = uniqBy(\n defaultServices,\n (s) => s.serviceName,\n ) as TServices;\n }\n\n // Create a new factory with services\n services<S extends Service[]>(\n services: S,\n ): FunctionFactory<[...S, ...TServices], TLogger> {\n return new FunctionFactory<[...S, ...TServices], TLogger>(\n [...services, ...this.defaultServices],\n this.defaultLogger,\n );\n }\n\n logger<L extends Logger>(logger: L): FunctionFactory<TServices, L> {\n return new FunctionFactory<TServices, L>(this.defaultServices, logger);\n }\n}\n\nexport class Function<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n Fn extends FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n > = FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >,\n> extends Construct<\n TLogger,\n TEventPublisherServiceName,\n TEventPublisher,\n OutSchema,\n TServices,\n TAuditStorageServiceName,\n TAuditStorage\n> {\n __IS_FUNCTION__ = true;\n\n static isFunction(obj: any): obj is Function<any, any, any, any, any> {\n return Boolean(\n obj &&\n obj.__IS_FUNCTION__ === true &&\n obj.type === ConstructType.Function,\n );\n }\n\n /**\n * Validates data against a StandardSchema.\n *\n * @param schema - The StandardSchema to validate against\n * @param data - The data to validate\n * @returns Validation result with value or issues\n */\n static validate<T extends StandardSchemaV1>(schema: T, data: unknown) {\n return schema['~standard'].validate(data);\n }\n\n /**\n * Parses and validates data against a schema, throwing an error if validation fails.\n *\n * @param schema - The StandardSchema to validate against\n * @param data - The data to parse and validate\n * @returns The validated data with proper typing\n * @throws {UnprocessableEntityError} When validation fails\n */\n static async parseSchema<T extends StandardSchemaV1>(\n schema: T,\n data: unknown,\n ): Promise<InferStandardSchema<T>> {\n try {\n return await parseSchema(schema, data);\n } catch (issues) {\n throw new UnprocessableEntityError('Validation failed', issues);\n }\n }\n\n /**\n * Parses and validates the endpoint output against the output schema.\n *\n * @param output - The raw output data to validate\n * @returns The validated output data\n * @throws {UnprocessableEntityError} When output validation fails\n */\n async parseOutput(output: unknown): Promise<InferStandardSchema<OutSchema>> {\n return Function.parseSchema(\n this.outputSchema as StandardSchemaV1,\n output,\n ) as Promise<InferStandardSchema<OutSchema>>;\n }\n\n constructor(\n protected readonly fn: Fn,\n timeout = 30000, // Default timeout of 30 seconds\n type: ConstructType = ConstructType.Function,\n public input?: TInput,\n outputSchema?: OutSchema,\n services: TServices = [] as unknown as TServices,\n logger: TLogger = DEFAULT_LOGGER,\n publisherService?: Service<TEventPublisherServiceName, TEventPublisher>,\n events: MappedEvent<TEventPublisher, OutSchema>[] = [],\n memorySize?: number,\n auditorStorageService?: Service<TAuditStorageServiceName, TAuditStorage>,\n public databaseService?: Service<TDatabaseServiceName, TDatabase>,\n ) {\n super(\n type,\n logger,\n services,\n events,\n publisherService,\n outputSchema,\n timeout,\n memorySize,\n auditorStorageService,\n );\n }\n}\n\nexport type FunctionHandler<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TDatabase = undefined,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> = (\n ctx: FunctionContext<\n TInput,\n TServices,\n TLogger,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >,\n) => OutSchema extends StandardSchemaV1\n ? InferStandardSchema<OutSchema> | Promise<InferStandardSchema<OutSchema>>\n : any | Promise<any>;\n\n/**\n * Conditional type that adds `db` property only when TDatabase is configured.\n */\ntype DatabaseContext<TDatabase> = TDatabase extends undefined\n ? {}\n : { db: TDatabase };\n\n/**\n * Conditional auditor context - only present when audit storage is configured.\n */\ntype AuditorContext<\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n TAuditStorage = undefined,\n> = TAuditStorage extends undefined\n ? {}\n : {\n /**\n * Auditor instance for recording audit events.\n * Only present when audit storage is configured on the function.\n */\n auditor: Auditor<TAuditAction>;\n };\n\nexport type FunctionContext<\n Input extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TDatabase = undefined,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> = {\n services: ServiceRecord<TServices>;\n logger: TLogger;\n input: InferComposableStandardSchema<Input>;\n} & DatabaseContext<TDatabase> &\n AuditorContext<TAuditAction, TAuditStorage>;\n"],"mappings":";;;;;;;;AAgBA,MAAM,iBAAiB,IAAIA;AAE3B,IAAa,kBAAb,MAAa,gBAGX;CACA,AAAQ;CACR,YACEC,iBACQC,gBAAyB,gBACjC;EADQ;AAGR,OAAK,kBAAkB,2BACrB,iBACA,CAAC,MAAM,EAAE,YACV;CACF;CAGD,SACEC,UACgD;AAChD,SAAO,IAAI,gBACT,CAAC,GAAG,UAAU,GAAG,KAAK,eAAgB,GACtC,KAAK;CAER;CAED,OAAyBC,QAA0C;AACjE,SAAO,IAAI,gBAA8B,KAAK,iBAAiB;CAChE;AACF;AAED,IAAa,WAAb,MAAa,iBAgCHC,4BAQR;CACA,kBAAkB;CAElB,OAAO,WAAWC,KAAoD;AACpE,SAAO,QACL,OACE,IAAI,oBAAoB,QACxB,IAAI,SAASC,gCAAc,SAC9B;CACF;;;;;;;;CASD,OAAO,SAAqCC,QAAWC,MAAe;AACpE,SAAO,OAAO,aAAa,SAAS,KAAK;CAC1C;;;;;;;;;CAUD,aAAa,YACXD,QACAC,MACiC;AACjC,MAAI;AACF,UAAO,MAAM,2CAAY,QAAQ,KAAK;EACvC,SAAQ,QAAQ;AACf,SAAM,IAAIC,4CAAyB,qBAAqB;EACzD;CACF;;;;;;;;CASD,MAAM,YAAYC,QAA0D;AAC1E,SAAO,SAAS,YACd,KAAK,cACL,OACD;CACF;CAED,YACqBC,IACnB,UAAU,KACVC,OAAsBN,gCAAc,UAC7BO,OACPC,cACAC,WAAsB,CAAE,GACxBC,SAAkB,gBAClBC,kBACAC,SAAoD,CAAE,GACtDC,YACAC,uBACOC,iBACP;AACA,QACE,MACA,QACA,UACA,QACA,kBACA,cACA,SACA,YACA,sBACD;EAvBkB;EAGZ;EAQA;CAaR;AACF"}
1
+ {"version":3,"file":"Function-DDZb1525.cjs","names":["ConsoleLogger","defaultServices: TServices","defaultLogger: TLogger","services: S","logger: L","Construct","obj: any","ConstructType","schema: T","data: unknown","UnprocessableEntityError","output: unknown","fn: Fn","type: ConstructType","input?: TInput","outputSchema?: OutSchema","services: TServices","logger: TLogger","publisherService?: Service<TEventPublisherServiceName, TEventPublisher>","events: MappedEvent<TEventPublisher, OutSchema>[]","memorySize?: number","auditorStorageService?: Service<TAuditStorageServiceName, TAuditStorage>","databaseService?: Service<TDatabaseServiceName, TDatabase>"],"sources":["../src/functions/Function.ts"],"sourcesContent":["import type { AuditStorage, AuditableAction, Auditor } from '@geekmidas/audit';\nimport { UnprocessableEntityError } from '@geekmidas/errors';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type {\n ComposableStandardSchema,\n InferComposableStandardSchema,\n InferStandardSchema,\n} from '@geekmidas/schema';\nimport { parseSchema } from '@geekmidas/schema/parser';\nimport type { Service, ServiceRecord } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { Construct, ConstructType } from '../Construct';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class FunctionFactory<\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n> {\n private defaultServices: TServices;\n constructor(\n defaultServices: TServices,\n private defaultLogger: TLogger = DEFAULT_LOGGER,\n ) {\n // Initialize default services\n this.defaultServices = uniqBy(\n defaultServices,\n (s) => s.serviceName,\n ) as TServices;\n }\n\n // Create a new factory with services\n services<S extends Service[]>(\n services: S,\n ): FunctionFactory<[...S, ...TServices], TLogger> {\n return new FunctionFactory<[...S, ...TServices], TLogger>(\n [...services, ...this.defaultServices],\n this.defaultLogger,\n );\n }\n\n logger<L extends Logger>(logger: L): FunctionFactory<TServices, L> {\n return new FunctionFactory<TServices, L>(this.defaultServices, logger);\n }\n}\n\nexport class Function<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n Fn extends FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n > = FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >,\n> extends Construct<\n TLogger,\n TEventPublisherServiceName,\n TEventPublisher,\n OutSchema,\n TServices,\n TAuditStorageServiceName,\n TAuditStorage\n> {\n __IS_FUNCTION__ = true;\n\n static isFunction(obj: any): obj is Function<any, any, any, any, any> {\n return Boolean(\n obj &&\n obj.__IS_FUNCTION__ === true &&\n obj.type === ConstructType.Function,\n );\n }\n\n /**\n * Validates data against a StandardSchema.\n *\n * @param schema - The StandardSchema to validate against\n * @param data - The data to validate\n * @returns Validation result with value or issues\n */\n static validate<T extends StandardSchemaV1>(schema: T, data: unknown) {\n return schema['~standard'].validate(data);\n }\n\n /**\n * Parses and validates data against a schema, throwing an error if validation fails.\n *\n * @param schema - The StandardSchema to validate against\n * @param data - The data to parse and validate\n * @returns The validated data with proper typing\n * @throws {UnprocessableEntityError} When validation fails\n */\n static async parseSchema<T extends StandardSchemaV1>(\n schema: T,\n data: unknown,\n ): Promise<InferStandardSchema<T>> {\n try {\n return await parseSchema(schema, data);\n } catch (issues) {\n throw new UnprocessableEntityError('Validation failed', issues);\n }\n }\n\n /**\n * Parses and validates the endpoint output against the output schema.\n *\n * @param output - The raw output data to validate\n * @returns The validated output data\n * @throws {UnprocessableEntityError} When output validation fails\n */\n async parseOutput(output: unknown): Promise<InferStandardSchema<OutSchema>> {\n return Function.parseSchema(\n this.outputSchema as StandardSchemaV1,\n output,\n ) as Promise<InferStandardSchema<OutSchema>>;\n }\n\n constructor(\n protected readonly fn: Fn,\n timeout = 30000, // Default timeout of 30 seconds\n type: ConstructType = ConstructType.Function,\n public input?: TInput,\n outputSchema?: OutSchema,\n services: TServices = [] as unknown as TServices,\n logger: TLogger = DEFAULT_LOGGER,\n publisherService?: Service<TEventPublisherServiceName, TEventPublisher>,\n events: MappedEvent<TEventPublisher, OutSchema>[] = [],\n memorySize?: number,\n auditorStorageService?: Service<TAuditStorageServiceName, TAuditStorage>,\n public databaseService?: Service<TDatabaseServiceName, TDatabase>,\n ) {\n super(\n type,\n logger,\n services,\n events,\n publisherService,\n outputSchema,\n timeout,\n memorySize,\n auditorStorageService,\n );\n }\n}\n\nexport type FunctionHandler<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TDatabase = undefined,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> = (\n ctx: FunctionContext<\n TInput,\n TServices,\n TLogger,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >,\n) => OutSchema extends StandardSchemaV1\n ? InferStandardSchema<OutSchema> | Promise<InferStandardSchema<OutSchema>>\n : any | Promise<any>;\n\n/**\n * Conditional type that adds `db` property only when TDatabase is configured.\n */\ntype DatabaseContext<TDatabase> = TDatabase extends undefined\n ? {}\n : { db: TDatabase };\n\n/**\n * Conditional auditor context - only present when audit storage is configured.\n */\ntype AuditorContext<\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n TAuditStorage = undefined,\n> = TAuditStorage extends undefined\n ? {}\n : {\n /**\n * Auditor instance for recording audit events.\n * Only present when audit storage is configured on the function.\n */\n auditor: Auditor<TAuditAction>;\n };\n\nexport type FunctionContext<\n Input extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TDatabase = undefined,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> = {\n services: ServiceRecord<TServices>;\n logger: TLogger;\n input: InferComposableStandardSchema<Input>;\n} & DatabaseContext<TDatabase> &\n AuditorContext<TAuditAction, TAuditStorage>;\n"],"mappings":";;;;;;;;AAgBA,MAAM,iBAAiB,IAAIA;AAE3B,IAAa,kBAAb,MAAa,gBAGX;CACA,AAAQ;CACR,YACEC,iBACQC,gBAAyB,gBACjC;EADQ;AAGR,OAAK,kBAAkB,2BACrB,iBACA,CAAC,MAAM,EAAE,YACV;CACF;CAGD,SACEC,UACgD;AAChD,SAAO,IAAI,gBACT,CAAC,GAAG,UAAU,GAAG,KAAK,eAAgB,GACtC,KAAK;CAER;CAED,OAAyBC,QAA0C;AACjE,SAAO,IAAI,gBAA8B,KAAK,iBAAiB;CAChE;AACF;AAED,IAAa,WAAb,MAAa,iBAgCHC,4BAQR;CACA,kBAAkB;CAElB,OAAO,WAAWC,KAAoD;AACpE,SAAO,QACL,OACE,IAAI,oBAAoB,QACxB,IAAI,SAASC,gCAAc,SAC9B;CACF;;;;;;;;CASD,OAAO,SAAqCC,QAAWC,MAAe;AACpE,SAAO,OAAO,aAAa,SAAS,KAAK;CAC1C;;;;;;;;;CAUD,aAAa,YACXD,QACAC,MACiC;AACjC,MAAI;AACF,UAAO,MAAM,2CAAY,QAAQ,KAAK;EACvC,SAAQ,QAAQ;AACf,SAAM,IAAIC,4CAAyB,qBAAqB;EACzD;CACF;;;;;;;;CASD,MAAM,YAAYC,QAA0D;AAC1E,SAAO,SAAS,YACd,KAAK,cACL,OACD;CACF;CAED,YACqBC,IACnB,UAAU,KACVC,OAAsBN,gCAAc,UAC7BO,OACPC,cACAC,WAAsB,CAAE,GACxBC,SAAkB,gBAClBC,kBACAC,SAAoD,CAAE,GACtDC,YACAC,uBACOC,iBACP;AACA,QACE,MACA,QACA,UACA,QACA,kBACA,cACA,SACA,YACA,sBACD;EAvBkB;EAGZ;EAQA;CAaR;AACF"}
@@ -1,6 +1,6 @@
1
- import { ConstructType } from "./Construct-LWeB1rSQ.mjs";
2
- import { Function } from "./Function-DfKsM5Kx.mjs";
3
- import { BaseFunctionBuilder } from "./BaseFunctionBuilder-B5gkW0Kt.mjs";
1
+ import { ConstructType } from "./Construct-DdyGHuag.mjs";
2
+ import { Function } from "./Function-BVHqIDp9.mjs";
3
+ import { BaseFunctionBuilder } from "./BaseFunctionBuilder-Czi1Jwza.mjs";
4
4
  import { ConsoleLogger } from "@geekmidas/logger/console";
5
5
  import uniqBy from "lodash.uniqby";
6
6
 
@@ -77,4 +77,4 @@ var FunctionBuilder = class extends BaseFunctionBuilder {
77
77
 
78
78
  //#endregion
79
79
  export { FunctionBuilder };
80
- //# sourceMappingURL=FunctionBuilder-CVT7bG2o.mjs.map
80
+ //# sourceMappingURL=FunctionBuilder-CrDYgfiI.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionBuilder-CVT7bG2o.mjs","names":["DEFAULT_LOGGER","timeout: number","memorySize: number","schema: T","services: T","logger: T","publisher: Service<TName, T>","storage: Service<TName, T>","service: Service<TName, T>","fn: FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >"],"sources":["../src/functions/FunctionBuilder.ts"],"sourcesContent":["import type { AuditStorage, AuditableAction } from '@geekmidas/audit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { BaseFunctionBuilder } from './BaseFunctionBuilder';\nimport { Function, type FunctionHandler } from './Function';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class FunctionBuilder<\n TInput extends ComposableStandardSchema,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> extends BaseFunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\n> {\n protected _memorySize?: number;\n\n constructor(public type = ConstructType.Function) {\n super(type);\n }\n\n timeout(timeout: number): this {\n this._timeout = timeout;\n return this;\n }\n\n memorySize(memorySize: number): this {\n this._memorySize = memorySize;\n return this;\n }\n\n output<T extends StandardSchemaV1>(\n schema: T,\n ): FunctionBuilder<\n TInput,\n T,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this.outputSchema = schema as unknown as OutSchema;\n\n return this as unknown as FunctionBuilder<\n TInput,\n T,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n input<T extends ComposableStandardSchema>(\n schema: T,\n ): FunctionBuilder<\n T,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this.inputSchema = schema as unknown as TInput;\n\n return this as unknown as FunctionBuilder<\n T,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n services<T extends Service[]>(\n services: T,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n [...TServices, ...T],\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this._services = uniqBy(\n [...this._services, ...services],\n (s) => s.serviceName,\n ) as TServices;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n [...TServices, ...T],\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n logger<T extends Logger>(\n logger: T,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this._logger = logger as unknown as TLogger;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n publisher<T extends EventPublisher<any>, TName extends string>(\n publisher: Service<TName, T>,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n T,\n TName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this._publisher = publisher as unknown as Service<\n TEventPublisherServiceName,\n TEventPublisher\n >;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n T,\n TName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n auditor<T extends AuditStorage, TName extends string>(\n storage: Service<TName, T>,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n T,\n TName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this._auditorStorage = storage as unknown as Service<\n TAuditStorageServiceName,\n TAuditStorage\n >;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n T,\n TName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n /**\n * Set the audit action types for this function.\n * This provides type-safety for the auditor in the handler context.\n */\n actions<T extends AuditableAction<string, unknown>>(): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n T\n > {\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n T\n >;\n }\n\n /**\n * Set the database service for this function.\n * The database will be available in the handler context as `db`.\n */\n database<T, TName extends string>(\n service: Service<TName, T>,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n T,\n TName,\n TAuditAction\n > {\n this._databaseService = service as unknown as Service<\n TDatabaseServiceName,\n TDatabase\n >;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n T,\n TName,\n TAuditAction\n >;\n }\n\n handle(\n fn: FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >,\n ): Function<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction,\n FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >\n > {\n const func = new Function(\n fn,\n this._timeout,\n this.type,\n this.inputSchema,\n this.outputSchema,\n this._services,\n this._logger,\n this._publisher,\n this._events,\n this._memorySize,\n this._auditorStorage,\n this._databaseService,\n );\n\n // Reset builder state after creating the function to prevent pollution\n this._services = [] as Service[] as TServices;\n this._logger = DEFAULT_LOGGER;\n this._events = [];\n this._publisher = undefined;\n this._auditorStorage = undefined;\n this._databaseService = undefined;\n this.inputSchema = undefined;\n this.outputSchema = undefined;\n this._timeout = undefined;\n this._memorySize = undefined;\n\n return func;\n }\n}\n"],"mappings":";;;;;;;AAYA,MAAMA,mBAAiB,IAAI;AAE3B,IAAa,kBAAb,cAeU,oBAWR;CACA,AAAU;CAEV,YAAmB,OAAO,cAAc,UAAU;AAChD,QAAM,KAAK;EADM;CAElB;CAED,QAAQC,SAAuB;AAC7B,OAAK,WAAW;AAChB,SAAO;CACR;CAED,WAAWC,YAA0B;AACnC,OAAK,cAAc;AACnB,SAAO;CACR;CAED,OACEC,QAaA;AACA,OAAK,eAAe;AAEpB,SAAO;CAaR;CAED,MACEA,QAaA;AACA,OAAK,cAAc;AAEnB,SAAO;CAaR;CAED,SACEC,UAaA;AACA,OAAK,YAAY,OACf,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACV;AAED,SAAO;CAaR;CAED,OACEC,QAaA;AACA,OAAK,UAAU;AAEf,SAAO;CAaR;CAED,UACEC,WAaA;AACA,OAAK,aAAa;AAKlB,SAAO;CAaR;CAED,QACEC,SAaA;AACA,OAAK,kBAAkB;AAKvB,SAAO;CAaR;;;;;CAMD,UAYE;AACA,SAAO;CAaR;;;;;CAMD,SACEC,SAaA;AACA,OAAK,mBAAmB;AAKxB,SAAO;CAaR;CAED,OACEC,IA8BA;EACA,MAAM,OAAO,IAAI,SACf,IACA,KAAK,UACL,KAAK,MACL,KAAK,aACL,KAAK,cACL,KAAK,WACL,KAAK,SACL,KAAK,YACL,KAAK,SACL,KAAK,aACL,KAAK,iBACL,KAAK;AAIP,OAAK,YAAY,CAAE;AACnB,OAAK,UAAUT;AACf,OAAK,UAAU,CAAE;AACjB,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AAEL,SAAO;CACR;AACF"}
1
+ {"version":3,"file":"FunctionBuilder-CrDYgfiI.mjs","names":["DEFAULT_LOGGER","timeout: number","memorySize: number","schema: T","services: T","logger: T","publisher: Service<TName, T>","storage: Service<TName, T>","service: Service<TName, T>","fn: FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >"],"sources":["../src/functions/FunctionBuilder.ts"],"sourcesContent":["import type { AuditStorage, AuditableAction } from '@geekmidas/audit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { BaseFunctionBuilder } from './BaseFunctionBuilder';\nimport { Function, type FunctionHandler } from './Function';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class FunctionBuilder<\n TInput extends ComposableStandardSchema,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> extends BaseFunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\n> {\n protected _memorySize?: number;\n\n constructor(public type = ConstructType.Function) {\n super(type);\n }\n\n timeout(timeout: number): this {\n this._timeout = timeout;\n return this;\n }\n\n memorySize(memorySize: number): this {\n this._memorySize = memorySize;\n return this;\n }\n\n output<T extends StandardSchemaV1>(\n schema: T,\n ): FunctionBuilder<\n TInput,\n T,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this.outputSchema = schema as unknown as OutSchema;\n\n return this as unknown as FunctionBuilder<\n TInput,\n T,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n input<T extends ComposableStandardSchema>(\n schema: T,\n ): FunctionBuilder<\n T,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this.inputSchema = schema as unknown as TInput;\n\n return this as unknown as FunctionBuilder<\n T,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n services<T extends Service[]>(\n services: T,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n [...TServices, ...T],\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this._services = uniqBy(\n [...this._services, ...services],\n (s) => s.serviceName,\n ) as TServices;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n [...TServices, ...T],\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n logger<T extends Logger>(\n logger: T,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this._logger = logger as unknown as TLogger;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n publisher<T extends EventPublisher<any>, TName extends string>(\n publisher: Service<TName, T>,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n T,\n TName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this._publisher = publisher as unknown as Service<\n TEventPublisherServiceName,\n TEventPublisher\n >;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n T,\n TName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n auditor<T extends AuditStorage, TName extends string>(\n storage: Service<TName, T>,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n T,\n TName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this._auditorStorage = storage as unknown as Service<\n TAuditStorageServiceName,\n TAuditStorage\n >;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n T,\n TName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n /**\n * Set the audit action types for this function.\n * This provides type-safety for the auditor in the handler context.\n */\n actions<T extends AuditableAction<string, unknown>>(): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n T\n > {\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n T\n >;\n }\n\n /**\n * Set the database service for this function.\n * The database will be available in the handler context as `db`.\n */\n database<T, TName extends string>(\n service: Service<TName, T>,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n T,\n TName,\n TAuditAction\n > {\n this._databaseService = service as unknown as Service<\n TDatabaseServiceName,\n TDatabase\n >;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n T,\n TName,\n TAuditAction\n >;\n }\n\n handle(\n fn: FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >,\n ): Function<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction,\n FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >\n > {\n const func = new Function(\n fn,\n this._timeout,\n this.type,\n this.inputSchema,\n this.outputSchema,\n this._services,\n this._logger,\n this._publisher,\n this._events,\n this._memorySize,\n this._auditorStorage,\n this._databaseService,\n );\n\n // Reset builder state after creating the function to prevent pollution\n this._services = [] as Service[] as TServices;\n this._logger = DEFAULT_LOGGER;\n this._events = [];\n this._publisher = undefined;\n this._auditorStorage = undefined;\n this._databaseService = undefined;\n this.inputSchema = undefined;\n this.outputSchema = undefined;\n this._timeout = undefined;\n this._memorySize = undefined;\n\n return func;\n }\n}\n"],"mappings":";;;;;;;AAYA,MAAMA,mBAAiB,IAAI;AAE3B,IAAa,kBAAb,cAeU,oBAWR;CACA,AAAU;CAEV,YAAmB,OAAO,cAAc,UAAU;AAChD,QAAM,KAAK;EADM;CAElB;CAED,QAAQC,SAAuB;AAC7B,OAAK,WAAW;AAChB,SAAO;CACR;CAED,WAAWC,YAA0B;AACnC,OAAK,cAAc;AACnB,SAAO;CACR;CAED,OACEC,QAaA;AACA,OAAK,eAAe;AAEpB,SAAO;CAaR;CAED,MACEA,QAaA;AACA,OAAK,cAAc;AAEnB,SAAO;CAaR;CAED,SACEC,UAaA;AACA,OAAK,YAAY,OACf,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACV;AAED,SAAO;CAaR;CAED,OACEC,QAaA;AACA,OAAK,UAAU;AAEf,SAAO;CAaR;CAED,UACEC,WAaA;AACA,OAAK,aAAa;AAKlB,SAAO;CAaR;CAED,QACEC,SAaA;AACA,OAAK,kBAAkB;AAKvB,SAAO;CAaR;;;;;CAMD,UAYE;AACA,SAAO;CAaR;;;;;CAMD,SACEC,SAaA;AACA,OAAK,mBAAmB;AAKxB,SAAO;CAaR;CAED,OACEC,IA8BA;EACA,MAAM,OAAO,IAAI,SACf,IACA,KAAK,UACL,KAAK,MACL,KAAK,aACL,KAAK,cACL,KAAK,WACL,KAAK,SACL,KAAK,YACL,KAAK,SACL,KAAK,aACL,KAAK,iBACL,KAAK;AAIP,OAAK,YAAY,CAAE;AACnB,OAAK,UAAUT;AACf,OAAK,UAAU,CAAE;AACjB,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AAEL,SAAO;CACR;AACF"}
@@ -1,7 +1,7 @@
1
1
  const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- const require_Construct = require('./Construct-BYSPikVm.cjs');
3
- const require_Function = require('./Function-DagDbeXo.cjs');
4
- const require_BaseFunctionBuilder = require('./BaseFunctionBuilder-C5Se7pdL.cjs');
2
+ const require_Construct = require('./Construct-Ba5cMxib.cjs');
3
+ const require_Function = require('./Function-DDZb1525.cjs');
4
+ const require_BaseFunctionBuilder = require('./BaseFunctionBuilder-MYG3C9ug.cjs');
5
5
  const __geekmidas_logger_console = require_chunk.__toESM(require("@geekmidas/logger/console"));
6
6
  const lodash_uniqby = require_chunk.__toESM(require("lodash.uniqby"));
7
7
 
@@ -83,4 +83,4 @@ Object.defineProperty(exports, 'FunctionBuilder', {
83
83
  return FunctionBuilder;
84
84
  }
85
85
  });
86
- //# sourceMappingURL=FunctionBuilder-DXvG_XD-.cjs.map
86
+ //# sourceMappingURL=FunctionBuilder-DswJ-9sD.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionBuilder-DXvG_XD-.cjs","names":["ConsoleLogger","BaseFunctionBuilder","ConstructType","timeout: number","memorySize: number","schema: T","services: T","logger: T","publisher: Service<TName, T>","storage: Service<TName, T>","service: Service<TName, T>","fn: FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >","Function"],"sources":["../src/functions/FunctionBuilder.ts"],"sourcesContent":["import type { AuditStorage, AuditableAction } from '@geekmidas/audit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { BaseFunctionBuilder } from './BaseFunctionBuilder';\nimport { Function, type FunctionHandler } from './Function';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class FunctionBuilder<\n TInput extends ComposableStandardSchema,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> extends BaseFunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\n> {\n protected _memorySize?: number;\n\n constructor(public type = ConstructType.Function) {\n super(type);\n }\n\n timeout(timeout: number): this {\n this._timeout = timeout;\n return this;\n }\n\n memorySize(memorySize: number): this {\n this._memorySize = memorySize;\n return this;\n }\n\n output<T extends StandardSchemaV1>(\n schema: T,\n ): FunctionBuilder<\n TInput,\n T,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this.outputSchema = schema as unknown as OutSchema;\n\n return this as unknown as FunctionBuilder<\n TInput,\n T,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n input<T extends ComposableStandardSchema>(\n schema: T,\n ): FunctionBuilder<\n T,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this.inputSchema = schema as unknown as TInput;\n\n return this as unknown as FunctionBuilder<\n T,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n services<T extends Service[]>(\n services: T,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n [...TServices, ...T],\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this._services = uniqBy(\n [...this._services, ...services],\n (s) => s.serviceName,\n ) as TServices;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n [...TServices, ...T],\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n logger<T extends Logger>(\n logger: T,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this._logger = logger as unknown as TLogger;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n publisher<T extends EventPublisher<any>, TName extends string>(\n publisher: Service<TName, T>,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n T,\n TName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this._publisher = publisher as unknown as Service<\n TEventPublisherServiceName,\n TEventPublisher\n >;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n T,\n TName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n auditor<T extends AuditStorage, TName extends string>(\n storage: Service<TName, T>,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n T,\n TName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this._auditorStorage = storage as unknown as Service<\n TAuditStorageServiceName,\n TAuditStorage\n >;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n T,\n TName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n /**\n * Set the audit action types for this function.\n * This provides type-safety for the auditor in the handler context.\n */\n actions<T extends AuditableAction<string, unknown>>(): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n T\n > {\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n T\n >;\n }\n\n /**\n * Set the database service for this function.\n * The database will be available in the handler context as `db`.\n */\n database<T, TName extends string>(\n service: Service<TName, T>,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n T,\n TName,\n TAuditAction\n > {\n this._databaseService = service as unknown as Service<\n TDatabaseServiceName,\n TDatabase\n >;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n T,\n TName,\n TAuditAction\n >;\n }\n\n handle(\n fn: FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >,\n ): Function<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction,\n FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >\n > {\n const func = new Function(\n fn,\n this._timeout,\n this.type,\n this.inputSchema,\n this.outputSchema,\n this._services,\n this._logger,\n this._publisher,\n this._events,\n this._memorySize,\n this._auditorStorage,\n this._databaseService,\n );\n\n // Reset builder state after creating the function to prevent pollution\n this._services = [] as Service[] as TServices;\n this._logger = DEFAULT_LOGGER;\n this._events = [];\n this._publisher = undefined;\n this._auditorStorage = undefined;\n this._databaseService = undefined;\n this.inputSchema = undefined;\n this.outputSchema = undefined;\n this._timeout = undefined;\n this._memorySize = undefined;\n\n return func;\n }\n}\n"],"mappings":";;;;;;;;AAYA,MAAM,iBAAiB,IAAIA;AAE3B,IAAa,kBAAb,cAeUC,gDAWR;CACA,AAAU;CAEV,YAAmB,OAAOC,gCAAc,UAAU;AAChD,QAAM,KAAK;EADM;CAElB;CAED,QAAQC,SAAuB;AAC7B,OAAK,WAAW;AAChB,SAAO;CACR;CAED,WAAWC,YAA0B;AACnC,OAAK,cAAc;AACnB,SAAO;CACR;CAED,OACEC,QAaA;AACA,OAAK,eAAe;AAEpB,SAAO;CAaR;CAED,MACEA,QAaA;AACA,OAAK,cAAc;AAEnB,SAAO;CAaR;CAED,SACEC,UAaA;AACA,OAAK,YAAY,2BACf,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACV;AAED,SAAO;CAaR;CAED,OACEC,QAaA;AACA,OAAK,UAAU;AAEf,SAAO;CAaR;CAED,UACEC,WAaA;AACA,OAAK,aAAa;AAKlB,SAAO;CAaR;CAED,QACEC,SAaA;AACA,OAAK,kBAAkB;AAKvB,SAAO;CAaR;;;;;CAMD,UAYE;AACA,SAAO;CAaR;;;;;CAMD,SACEC,SAaA;AACA,OAAK,mBAAmB;AAKxB,SAAO;CAaR;CAED,OACEC,IA8BA;EACA,MAAM,OAAO,IAAIC,0BACf,IACA,KAAK,UACL,KAAK,MACL,KAAK,aACL,KAAK,cACL,KAAK,WACL,KAAK,SACL,KAAK,YACL,KAAK,SACL,KAAK,aACL,KAAK,iBACL,KAAK;AAIP,OAAK,YAAY,CAAE;AACnB,OAAK,UAAU;AACf,OAAK,UAAU,CAAE;AACjB,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AAEL,SAAO;CACR;AACF"}
1
+ {"version":3,"file":"FunctionBuilder-DswJ-9sD.cjs","names":["ConsoleLogger","BaseFunctionBuilder","ConstructType","timeout: number","memorySize: number","schema: T","services: T","logger: T","publisher: Service<TName, T>","storage: Service<TName, T>","service: Service<TName, T>","fn: FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >","Function"],"sources":["../src/functions/FunctionBuilder.ts"],"sourcesContent":["import type { AuditStorage, AuditableAction } from '@geekmidas/audit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { BaseFunctionBuilder } from './BaseFunctionBuilder';\nimport { Function, type FunctionHandler } from './Function';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class FunctionBuilder<\n TInput extends ComposableStandardSchema,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> extends BaseFunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\n> {\n protected _memorySize?: number;\n\n constructor(public type = ConstructType.Function) {\n super(type);\n }\n\n timeout(timeout: number): this {\n this._timeout = timeout;\n return this;\n }\n\n memorySize(memorySize: number): this {\n this._memorySize = memorySize;\n return this;\n }\n\n output<T extends StandardSchemaV1>(\n schema: T,\n ): FunctionBuilder<\n TInput,\n T,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this.outputSchema = schema as unknown as OutSchema;\n\n return this as unknown as FunctionBuilder<\n TInput,\n T,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n input<T extends ComposableStandardSchema>(\n schema: T,\n ): FunctionBuilder<\n T,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this.inputSchema = schema as unknown as TInput;\n\n return this as unknown as FunctionBuilder<\n T,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n services<T extends Service[]>(\n services: T,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n [...TServices, ...T],\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this._services = uniqBy(\n [...this._services, ...services],\n (s) => s.serviceName,\n ) as TServices;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n [...TServices, ...T],\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n logger<T extends Logger>(\n logger: T,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this._logger = logger as unknown as TLogger;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n publisher<T extends EventPublisher<any>, TName extends string>(\n publisher: Service<TName, T>,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n T,\n TName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this._publisher = publisher as unknown as Service<\n TEventPublisherServiceName,\n TEventPublisher\n >;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n T,\n TName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n auditor<T extends AuditStorage, TName extends string>(\n storage: Service<TName, T>,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n T,\n TName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n > {\n this._auditorStorage = storage as unknown as Service<\n TAuditStorageServiceName,\n TAuditStorage\n >;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n T,\n TName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n >;\n }\n\n /**\n * Set the audit action types for this function.\n * This provides type-safety for the auditor in the handler context.\n */\n actions<T extends AuditableAction<string, unknown>>(): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n T\n > {\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n T\n >;\n }\n\n /**\n * Set the database service for this function.\n * The database will be available in the handler context as `db`.\n */\n database<T, TName extends string>(\n service: Service<TName, T>,\n ): FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n T,\n TName,\n TAuditAction\n > {\n this._databaseService = service as unknown as Service<\n TDatabaseServiceName,\n TDatabase\n >;\n\n return this as unknown as FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n T,\n TName,\n TAuditAction\n >;\n }\n\n handle(\n fn: FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >,\n ): Function<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction,\n FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >\n > {\n const func = new Function(\n fn,\n this._timeout,\n this.type,\n this.inputSchema,\n this.outputSchema,\n this._services,\n this._logger,\n this._publisher,\n this._events,\n this._memorySize,\n this._auditorStorage,\n this._databaseService,\n );\n\n // Reset builder state after creating the function to prevent pollution\n this._services = [] as Service[] as TServices;\n this._logger = DEFAULT_LOGGER;\n this._events = [];\n this._publisher = undefined;\n this._auditorStorage = undefined;\n this._databaseService = undefined;\n this.inputSchema = undefined;\n this.outputSchema = undefined;\n this._timeout = undefined;\n this._memorySize = undefined;\n\n return func;\n }\n}\n"],"mappings":";;;;;;;;AAYA,MAAM,iBAAiB,IAAIA;AAE3B,IAAa,kBAAb,cAeUC,gDAWR;CACA,AAAU;CAEV,YAAmB,OAAOC,gCAAc,UAAU;AAChD,QAAM,KAAK;EADM;CAElB;CAED,QAAQC,SAAuB;AAC7B,OAAK,WAAW;AAChB,SAAO;CACR;CAED,WAAWC,YAA0B;AACnC,OAAK,cAAc;AACnB,SAAO;CACR;CAED,OACEC,QAaA;AACA,OAAK,eAAe;AAEpB,SAAO;CAaR;CAED,MACEA,QAaA;AACA,OAAK,cAAc;AAEnB,SAAO;CAaR;CAED,SACEC,UAaA;AACA,OAAK,YAAY,2BACf,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACV;AAED,SAAO;CAaR;CAED,OACEC,QAaA;AACA,OAAK,UAAU;AAEf,SAAO;CAaR;CAED,UACEC,WAaA;AACA,OAAK,aAAa;AAKlB,SAAO;CAaR;CAED,QACEC,SAaA;AACA,OAAK,kBAAkB;AAKvB,SAAO;CAaR;;;;;CAMD,UAYE;AACA,SAAO;CAaR;;;;;CAMD,SACEC,SAaA;AACA,OAAK,mBAAmB;AAKxB,SAAO;CAaR;CAED,OACEC,IA8BA;EACA,MAAM,OAAO,IAAIC,0BACf,IACA,KAAK,UACL,KAAK,MACL,KAAK,aACL,KAAK,cACL,KAAK,WACL,KAAK,SACL,KAAK,YACL,KAAK,SACL,KAAK,aACL,KAAK,iBACL,KAAK;AAIP,OAAK,YAAY,CAAE;AACnB,OAAK,UAAU;AACf,OAAK,UAAU,CAAE;AACjB,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AAEL,SAAO;CACR;AACF"}
@@ -1,6 +1,6 @@
1
1
  const require_chunk = require('./chunk-CUT6urMc.cjs');
2
2
  const require_publisher = require('./publisher-lFQleddL.cjs');
3
- const require_FunctionBuilder = require('./FunctionBuilder-DXvG_XD-.cjs');
3
+ const require_FunctionBuilder = require('./FunctionBuilder-DswJ-9sD.cjs');
4
4
  const __geekmidas_services = require_chunk.__toESM(require("@geekmidas/services"));
5
5
  const __geekmidas_audit = require_chunk.__toESM(require("@geekmidas/audit"));
6
6
  const __geekmidas_audit_kysely = require_chunk.__toESM(require("@geekmidas/audit/kysely"));
@@ -104,4 +104,4 @@ Object.defineProperty(exports, 'FunctionExecutionWrapper', {
104
104
  return FunctionExecutionWrapper;
105
105
  }
106
106
  });
107
- //# sourceMappingURL=FunctionExecutionWrapper-DkNycmOh.cjs.map
107
+ //# sourceMappingURL=FunctionExecutionWrapper-BYI2bGTL.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionExecutionWrapper-DkNycmOh.cjs","names":["envParser: EnvironmentParser<{}>","fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction,\n FunctionHandler<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >\n >","DefaultAuditor","handler: (ctx: {\n auditor?: Auditor<TAuditAction>;\n db?: TDatabase;\n }) => Promise<T>","db","response","event: TEvent","response: InferStandardSchema<TOutSchema>","data: unknown","schema: T"],"sources":["../src/functions/FunctionExecutionWrapper.ts"],"sourcesContent":["import type { AuditStorage, AuditableAction, Auditor } 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 ComposableStandardSchema,\n InferComposableStandardSchema,\n InferStandardSchema,\n} from '@geekmidas/schema';\nimport {\n type Service,\n ServiceDiscovery,\n type 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 TInput extends ComposableStandardSchema | undefined = undefined,\n TOutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> {\n constructor(\n protected envParser: EnvironmentParser<{}>,\n protected readonly fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction,\n FunctionHandler<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >\n >,\n ) {}\n\n protected _logger?: TLogger;\n\n get logger(): TLogger {\n return this._logger || this.fn.logger;\n }\n\n get serviceDiscovery(): ServiceDiscovery<ServiceRecord<TServices>, Logger> {\n const serviceDiscovery = ServiceDiscovery.getInstance<\n ServiceRecord<TServices>,\n TLogger\n >(this.logger, this.envParser);\n\n return serviceDiscovery;\n }\n\n getServices(): Promise<ServiceRecord<TServices>> {\n return this.serviceDiscovery.register(this.fn.services);\n }\n\n async getDatabase(): Promise<TDatabase | undefined> {\n if (!this.fn.databaseService) {\n return undefined;\n }\n\n const services = await this.serviceDiscovery.register([\n this.fn.databaseService,\n ]);\n\n return services[\n this.fn.databaseService.serviceName as keyof typeof services\n ] as TDatabase;\n }\n\n /**\n * Get the audit storage service if configured.\n * Returns undefined if no auditor storage is configured.\n */\n async getAuditStorage(): Promise<TAuditStorage | undefined> {\n if (!this.fn.auditorStorageService) {\n return undefined;\n }\n\n const services = await this.serviceDiscovery.register([\n this.fn.auditorStorageService,\n ]);\n\n return services[\n this.fn.auditorStorageService.serviceName as keyof typeof services\n ] as TAuditStorage;\n }\n\n /**\n * Create an auditor instance for the function.\n * Returns undefined if no auditor storage is configured.\n */\n async createAuditor(): Promise<Auditor<TAuditAction> | undefined> {\n const storage = await this.getAuditStorage();\n if (!storage) {\n return undefined;\n }\n\n return new DefaultAuditor<TAuditAction>({\n actor: { id: 'system', type: 'system' },\n storage: storage as AuditStorage,\n metadata: {\n function: this.fn.type,\n },\n });\n }\n\n /**\n * Execute handler with audit transaction support.\n * If the audit storage has a database (via getDatabase()), wraps execution\n * in a transaction so audits are atomic with handler's database operations.\n *\n * @param handler - The handler function to execute (receives auditor and db)\n * @returns The handler result\n */\n async executeWithAudit<T>(\n handler: (ctx: {\n auditor?: Auditor<TAuditAction>;\n db?: TDatabase;\n }) => Promise<T>,\n ): Promise<T> {\n const auditor = await this.createAuditor();\n const storage = await this.getAuditStorage();\n\n // No audit context - just run handler with regular db\n if (!auditor || !storage) {\n const db = await this.getDatabase();\n return handler({ db });\n }\n\n // Check if storage has a database and db service names match\n const storageDb = (storage as AuditStorage).getDatabase?.();\n const databaseServiceName = this.fn.databaseService?.serviceName;\n const auditDbServiceName = this.fn.auditorStorageService?.serviceName;\n\n // If the audit storage has a database and we're using the same database service\n // (or the audit storage provides the database), use transactional execution\n if (storageDb && databaseServiceName && auditDbServiceName) {\n return withAuditableTransaction(\n storageDb as any,\n auditor as any,\n async (trx) => {\n // Use transaction as db\n const response = await handler({\n auditor,\n db: trx as TDatabase,\n });\n // Audits are flushed by withAuditableTransaction before commit\n return response;\n },\n );\n }\n\n // No database on storage or service names don't match - run handler and flush audits after\n const db = await this.getDatabase();\n const response = await handler({ auditor, db });\n\n // Flush audits (no transaction)\n await auditor.flush();\n\n return response;\n }\n\n async getFunctionInput<TEvent>(\n event: TEvent,\n ): Promise<InferComposableStandardSchema<TInput>> {\n const parsedInput = await FunctionBuilder.parseComposableStandardSchema(\n event,\n this.fn.input,\n );\n\n return parsedInput as InferComposableStandardSchema<TInput>;\n }\n\n async publishEvents(response: InferStandardSchema<TOutSchema>) {\n await publishEvents(\n this.logger,\n this.serviceDiscovery,\n this.fn.events,\n response,\n this.fn.publisherService,\n );\n }\n\n async parseComposableStandardSchema<T extends ComposableStandardSchema>(\n data: unknown,\n schema: T,\n ): Promise<InferComposableStandardSchema<T>> {\n return FunctionBuilder.parseComposableStandardSchema(data, schema);\n }\n}\n"],"mappings":";;;;;;;;AAqBA,IAAsB,2BAAtB,MAeE;CACA,YACYA,WACSC,IAsBnB;EAvBU;EACS;CAsBjB;CAEJ,AAAU;CAEV,IAAI,SAAkB;AACpB,SAAO,KAAK,WAAW,KAAK,GAAG;CAChC;CAED,IAAI,mBAAuE;EACzE,MAAM,mBAAmB,sCAAiB,YAGxC,KAAK,QAAQ,KAAK,UAAU;AAE9B,SAAO;CACR;CAED,cAAiD;AAC/C,SAAO,KAAK,iBAAiB,SAAS,KAAK,GAAG,SAAS;CACxD;CAED,MAAM,cAA8C;AAClD,OAAK,KAAK,GAAG,gBACX;EAGF,MAAM,WAAW,MAAM,KAAK,iBAAiB,SAAS,CACpD,KAAK,GAAG,eACT,EAAC;AAEF,SAAO,SACL,KAAK,GAAG,gBAAgB;CAE3B;;;;;CAMD,MAAM,kBAAsD;AAC1D,OAAK,KAAK,GAAG,sBACX;EAGF,MAAM,WAAW,MAAM,KAAK,iBAAiB,SAAS,CACpD,KAAK,GAAG,qBACT,EAAC;AAEF,SAAO,SACL,KAAK,GAAG,sBAAsB;CAEjC;;;;;CAMD,MAAM,gBAA4D;EAChE,MAAM,UAAU,MAAM,KAAK,iBAAiB;AAC5C,OAAK,QACH;AAGF,SAAO,IAAIC,iCAA6B;GACtC,OAAO;IAAE,IAAI;IAAU,MAAM;GAAU;GAC9B;GACT,UAAU,EACR,UAAU,KAAK,GAAG,KACnB;EACF;CACF;;;;;;;;;CAUD,MAAM,iBACJC,SAIY;EACZ,MAAM,UAAU,MAAM,KAAK,eAAe;EAC1C,MAAM,UAAU,MAAM,KAAK,iBAAiB;AAG5C,OAAK,YAAY,SAAS;GACxB,MAAMC,OAAK,MAAM,KAAK,aAAa;AACnC,UAAO,QAAQ,EAAE,SAAI,EAAC;EACvB;EAGD,MAAM,YAAY,AAAC,QAAyB,eAAe;EAC3D,MAAM,sBAAsB,KAAK,GAAG,iBAAiB;EACrD,MAAM,qBAAqB,KAAK,GAAG,uBAAuB;AAI1D,MAAI,aAAa,uBAAuB,mBACtC,QAAO,uDACL,WACA,SACA,OAAO,QAAQ;GAEb,MAAMC,aAAW,MAAM,QAAQ;IAC7B;IACA,IAAI;GACL,EAAC;AAEF,UAAOA;EACR,EACF;EAIH,MAAM,KAAK,MAAM,KAAK,aAAa;EACnC,MAAM,WAAW,MAAM,QAAQ;GAAE;GAAS;EAAI,EAAC;AAG/C,QAAM,QAAQ,OAAO;AAErB,SAAO;CACR;CAED,MAAM,iBACJC,OACgD;EAChD,MAAM,cAAc,MAAM,wCAAgB,8BACxC,OACA,KAAK,GAAG,MACT;AAED,SAAO;CACR;CAED,MAAM,cAAcC,UAA2C;AAC7D,QAAM,gCACJ,KAAK,QACL,KAAK,kBACL,KAAK,GAAG,QACR,UACA,KAAK,GAAG,iBACT;CACF;CAED,MAAM,8BACJC,MACAC,QAC2C;AAC3C,SAAO,wCAAgB,8BAA8B,MAAM,OAAO;CACnE;AACF"}
1
+ {"version":3,"file":"FunctionExecutionWrapper-BYI2bGTL.cjs","names":["envParser: EnvironmentParser<{}>","fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction,\n FunctionHandler<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >\n >","DefaultAuditor","handler: (ctx: {\n auditor?: Auditor<TAuditAction>;\n db?: TDatabase;\n }) => Promise<T>","db","response","event: TEvent","response: InferStandardSchema<TOutSchema>","data: unknown","schema: T"],"sources":["../src/functions/FunctionExecutionWrapper.ts"],"sourcesContent":["import type { AuditStorage, AuditableAction, Auditor } 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 ComposableStandardSchema,\n InferComposableStandardSchema,\n InferStandardSchema,\n} from '@geekmidas/schema';\nimport {\n type Service,\n ServiceDiscovery,\n type 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 TInput extends ComposableStandardSchema | undefined = undefined,\n TOutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> {\n constructor(\n protected envParser: EnvironmentParser<{}>,\n protected readonly fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction,\n FunctionHandler<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >\n >,\n ) {}\n\n protected _logger?: TLogger;\n\n get logger(): TLogger {\n return this._logger || this.fn.logger;\n }\n\n get serviceDiscovery(): ServiceDiscovery<ServiceRecord<TServices>, Logger> {\n const serviceDiscovery = ServiceDiscovery.getInstance<\n ServiceRecord<TServices>,\n TLogger\n >(this.logger, this.envParser);\n\n return serviceDiscovery;\n }\n\n getServices(): Promise<ServiceRecord<TServices>> {\n return this.serviceDiscovery.register(this.fn.services);\n }\n\n async getDatabase(): Promise<TDatabase | undefined> {\n if (!this.fn.databaseService) {\n return undefined;\n }\n\n const services = await this.serviceDiscovery.register([\n this.fn.databaseService,\n ]);\n\n return services[\n this.fn.databaseService.serviceName as keyof typeof services\n ] as TDatabase;\n }\n\n /**\n * Get the audit storage service if configured.\n * Returns undefined if no auditor storage is configured.\n */\n async getAuditStorage(): Promise<TAuditStorage | undefined> {\n if (!this.fn.auditorStorageService) {\n return undefined;\n }\n\n const services = await this.serviceDiscovery.register([\n this.fn.auditorStorageService,\n ]);\n\n return services[\n this.fn.auditorStorageService.serviceName as keyof typeof services\n ] as TAuditStorage;\n }\n\n /**\n * Create an auditor instance for the function.\n * Returns undefined if no auditor storage is configured.\n */\n async createAuditor(): Promise<Auditor<TAuditAction> | undefined> {\n const storage = await this.getAuditStorage();\n if (!storage) {\n return undefined;\n }\n\n return new DefaultAuditor<TAuditAction>({\n actor: { id: 'system', type: 'system' },\n storage: storage as AuditStorage,\n metadata: {\n function: this.fn.type,\n },\n });\n }\n\n /**\n * Execute handler with audit transaction support.\n * If the audit storage has a database (via getDatabase()), wraps execution\n * in a transaction so audits are atomic with handler's database operations.\n *\n * @param handler - The handler function to execute (receives auditor and db)\n * @returns The handler result\n */\n async executeWithAudit<T>(\n handler: (ctx: {\n auditor?: Auditor<TAuditAction>;\n db?: TDatabase;\n }) => Promise<T>,\n ): Promise<T> {\n const auditor = await this.createAuditor();\n const storage = await this.getAuditStorage();\n\n // No audit context - just run handler with regular db\n if (!auditor || !storage) {\n const db = await this.getDatabase();\n return handler({ db });\n }\n\n // Check if storage has a database and db service names match\n const storageDb = (storage as AuditStorage).getDatabase?.();\n const databaseServiceName = this.fn.databaseService?.serviceName;\n const auditDbServiceName = this.fn.auditorStorageService?.serviceName;\n\n // If the audit storage has a database and we're using the same database service\n // (or the audit storage provides the database), use transactional execution\n if (storageDb && databaseServiceName && auditDbServiceName) {\n return withAuditableTransaction(\n storageDb as any,\n auditor as any,\n async (trx) => {\n // Use transaction as db\n const response = await handler({\n auditor,\n db: trx as TDatabase,\n });\n // Audits are flushed by withAuditableTransaction before commit\n return response;\n },\n );\n }\n\n // No database on storage or service names don't match - run handler and flush audits after\n const db = await this.getDatabase();\n const response = await handler({ auditor, db });\n\n // Flush audits (no transaction)\n await auditor.flush();\n\n return response;\n }\n\n async getFunctionInput<TEvent>(\n event: TEvent,\n ): Promise<InferComposableStandardSchema<TInput>> {\n const parsedInput = await FunctionBuilder.parseComposableStandardSchema(\n event,\n this.fn.input,\n );\n\n return parsedInput as InferComposableStandardSchema<TInput>;\n }\n\n async publishEvents(response: InferStandardSchema<TOutSchema>) {\n await publishEvents(\n this.logger,\n this.serviceDiscovery,\n this.fn.events,\n response,\n this.fn.publisherService,\n );\n }\n\n async parseComposableStandardSchema<T extends ComposableStandardSchema>(\n data: unknown,\n schema: T,\n ): Promise<InferComposableStandardSchema<T>> {\n return FunctionBuilder.parseComposableStandardSchema(data, schema);\n }\n}\n"],"mappings":";;;;;;;;AAqBA,IAAsB,2BAAtB,MAeE;CACA,YACYA,WACSC,IAsBnB;EAvBU;EACS;CAsBjB;CAEJ,AAAU;CAEV,IAAI,SAAkB;AACpB,SAAO,KAAK,WAAW,KAAK,GAAG;CAChC;CAED,IAAI,mBAAuE;EACzE,MAAM,mBAAmB,sCAAiB,YAGxC,KAAK,QAAQ,KAAK,UAAU;AAE9B,SAAO;CACR;CAED,cAAiD;AAC/C,SAAO,KAAK,iBAAiB,SAAS,KAAK,GAAG,SAAS;CACxD;CAED,MAAM,cAA8C;AAClD,OAAK,KAAK,GAAG,gBACX;EAGF,MAAM,WAAW,MAAM,KAAK,iBAAiB,SAAS,CACpD,KAAK,GAAG,eACT,EAAC;AAEF,SAAO,SACL,KAAK,GAAG,gBAAgB;CAE3B;;;;;CAMD,MAAM,kBAAsD;AAC1D,OAAK,KAAK,GAAG,sBACX;EAGF,MAAM,WAAW,MAAM,KAAK,iBAAiB,SAAS,CACpD,KAAK,GAAG,qBACT,EAAC;AAEF,SAAO,SACL,KAAK,GAAG,sBAAsB;CAEjC;;;;;CAMD,MAAM,gBAA4D;EAChE,MAAM,UAAU,MAAM,KAAK,iBAAiB;AAC5C,OAAK,QACH;AAGF,SAAO,IAAIC,iCAA6B;GACtC,OAAO;IAAE,IAAI;IAAU,MAAM;GAAU;GAC9B;GACT,UAAU,EACR,UAAU,KAAK,GAAG,KACnB;EACF;CACF;;;;;;;;;CAUD,MAAM,iBACJC,SAIY;EACZ,MAAM,UAAU,MAAM,KAAK,eAAe;EAC1C,MAAM,UAAU,MAAM,KAAK,iBAAiB;AAG5C,OAAK,YAAY,SAAS;GACxB,MAAMC,OAAK,MAAM,KAAK,aAAa;AACnC,UAAO,QAAQ,EAAE,SAAI,EAAC;EACvB;EAGD,MAAM,YAAY,AAAC,QAAyB,eAAe;EAC3D,MAAM,sBAAsB,KAAK,GAAG,iBAAiB;EACrD,MAAM,qBAAqB,KAAK,GAAG,uBAAuB;AAI1D,MAAI,aAAa,uBAAuB,mBACtC,QAAO,uDACL,WACA,SACA,OAAO,QAAQ;GAEb,MAAMC,aAAW,MAAM,QAAQ;IAC7B;IACA,IAAI;GACL,EAAC;AAEF,UAAOA;EACR,EACF;EAIH,MAAM,KAAK,MAAM,KAAK,aAAa;EACnC,MAAM,WAAW,MAAM,QAAQ;GAAE;GAAS;EAAI,EAAC;AAG/C,QAAM,QAAQ,OAAO;AAErB,SAAO;CACR;CAED,MAAM,iBACJC,OACgD;EAChD,MAAM,cAAc,MAAM,wCAAgB,8BACxC,OACA,KAAK,GAAG,MACT;AAED,SAAO;CACR;CAED,MAAM,cAAcC,UAA2C;AAC7D,QAAM,gCACJ,KAAK,QACL,KAAK,kBACL,KAAK,GAAG,QACR,UACA,KAAK,GAAG,iBACT;CACF;CAED,MAAM,8BACJC,MACAC,QAC2C;AAC3C,SAAO,wCAAgB,8BAA8B,MAAM,OAAO;CACnE;AACF"}
@@ -1,5 +1,5 @@
1
1
  import { publishEvents } from "./publisher-Bw4770Hi.mjs";
2
- import { FunctionBuilder } from "./FunctionBuilder-CVT7bG2o.mjs";
2
+ import { FunctionBuilder } from "./FunctionBuilder-CrDYgfiI.mjs";
3
3
  import { ServiceDiscovery } from "@geekmidas/services";
4
4
  import { DefaultAuditor } from "@geekmidas/audit";
5
5
  import { withAuditableTransaction } from "@geekmidas/audit/kysely";
@@ -98,4 +98,4 @@ var FunctionExecutionWrapper = class {
98
98
 
99
99
  //#endregion
100
100
  export { FunctionExecutionWrapper };
101
- //# sourceMappingURL=FunctionExecutionWrapper-Bubnr0zA.mjs.map
101
+ //# sourceMappingURL=FunctionExecutionWrapper-CLDh7Z2_.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionExecutionWrapper-Bubnr0zA.mjs","names":["envParser: EnvironmentParser<{}>","fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction,\n FunctionHandler<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >\n >","handler: (ctx: {\n auditor?: Auditor<TAuditAction>;\n db?: TDatabase;\n }) => Promise<T>","db","response","event: TEvent","response: InferStandardSchema<TOutSchema>","data: unknown","schema: T"],"sources":["../src/functions/FunctionExecutionWrapper.ts"],"sourcesContent":["import type { AuditStorage, AuditableAction, Auditor } 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 ComposableStandardSchema,\n InferComposableStandardSchema,\n InferStandardSchema,\n} from '@geekmidas/schema';\nimport {\n type Service,\n ServiceDiscovery,\n type 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 TInput extends ComposableStandardSchema | undefined = undefined,\n TOutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> {\n constructor(\n protected envParser: EnvironmentParser<{}>,\n protected readonly fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction,\n FunctionHandler<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >\n >,\n ) {}\n\n protected _logger?: TLogger;\n\n get logger(): TLogger {\n return this._logger || this.fn.logger;\n }\n\n get serviceDiscovery(): ServiceDiscovery<ServiceRecord<TServices>, Logger> {\n const serviceDiscovery = ServiceDiscovery.getInstance<\n ServiceRecord<TServices>,\n TLogger\n >(this.logger, this.envParser);\n\n return serviceDiscovery;\n }\n\n getServices(): Promise<ServiceRecord<TServices>> {\n return this.serviceDiscovery.register(this.fn.services);\n }\n\n async getDatabase(): Promise<TDatabase | undefined> {\n if (!this.fn.databaseService) {\n return undefined;\n }\n\n const services = await this.serviceDiscovery.register([\n this.fn.databaseService,\n ]);\n\n return services[\n this.fn.databaseService.serviceName as keyof typeof services\n ] as TDatabase;\n }\n\n /**\n * Get the audit storage service if configured.\n * Returns undefined if no auditor storage is configured.\n */\n async getAuditStorage(): Promise<TAuditStorage | undefined> {\n if (!this.fn.auditorStorageService) {\n return undefined;\n }\n\n const services = await this.serviceDiscovery.register([\n this.fn.auditorStorageService,\n ]);\n\n return services[\n this.fn.auditorStorageService.serviceName as keyof typeof services\n ] as TAuditStorage;\n }\n\n /**\n * Create an auditor instance for the function.\n * Returns undefined if no auditor storage is configured.\n */\n async createAuditor(): Promise<Auditor<TAuditAction> | undefined> {\n const storage = await this.getAuditStorage();\n if (!storage) {\n return undefined;\n }\n\n return new DefaultAuditor<TAuditAction>({\n actor: { id: 'system', type: 'system' },\n storage: storage as AuditStorage,\n metadata: {\n function: this.fn.type,\n },\n });\n }\n\n /**\n * Execute handler with audit transaction support.\n * If the audit storage has a database (via getDatabase()), wraps execution\n * in a transaction so audits are atomic with handler's database operations.\n *\n * @param handler - The handler function to execute (receives auditor and db)\n * @returns The handler result\n */\n async executeWithAudit<T>(\n handler: (ctx: {\n auditor?: Auditor<TAuditAction>;\n db?: TDatabase;\n }) => Promise<T>,\n ): Promise<T> {\n const auditor = await this.createAuditor();\n const storage = await this.getAuditStorage();\n\n // No audit context - just run handler with regular db\n if (!auditor || !storage) {\n const db = await this.getDatabase();\n return handler({ db });\n }\n\n // Check if storage has a database and db service names match\n const storageDb = (storage as AuditStorage).getDatabase?.();\n const databaseServiceName = this.fn.databaseService?.serviceName;\n const auditDbServiceName = this.fn.auditorStorageService?.serviceName;\n\n // If the audit storage has a database and we're using the same database service\n // (or the audit storage provides the database), use transactional execution\n if (storageDb && databaseServiceName && auditDbServiceName) {\n return withAuditableTransaction(\n storageDb as any,\n auditor as any,\n async (trx) => {\n // Use transaction as db\n const response = await handler({\n auditor,\n db: trx as TDatabase,\n });\n // Audits are flushed by withAuditableTransaction before commit\n return response;\n },\n );\n }\n\n // No database on storage or service names don't match - run handler and flush audits after\n const db = await this.getDatabase();\n const response = await handler({ auditor, db });\n\n // Flush audits (no transaction)\n await auditor.flush();\n\n return response;\n }\n\n async getFunctionInput<TEvent>(\n event: TEvent,\n ): Promise<InferComposableStandardSchema<TInput>> {\n const parsedInput = await FunctionBuilder.parseComposableStandardSchema(\n event,\n this.fn.input,\n );\n\n return parsedInput as InferComposableStandardSchema<TInput>;\n }\n\n async publishEvents(response: InferStandardSchema<TOutSchema>) {\n await publishEvents(\n this.logger,\n this.serviceDiscovery,\n this.fn.events,\n response,\n this.fn.publisherService,\n );\n }\n\n async parseComposableStandardSchema<T extends ComposableStandardSchema>(\n data: unknown,\n schema: T,\n ): Promise<InferComposableStandardSchema<T>> {\n return FunctionBuilder.parseComposableStandardSchema(data, schema);\n }\n}\n"],"mappings":";;;;;;;AAqBA,IAAsB,2BAAtB,MAeE;CACA,YACYA,WACSC,IAsBnB;EAvBU;EACS;CAsBjB;CAEJ,AAAU;CAEV,IAAI,SAAkB;AACpB,SAAO,KAAK,WAAW,KAAK,GAAG;CAChC;CAED,IAAI,mBAAuE;EACzE,MAAM,mBAAmB,iBAAiB,YAGxC,KAAK,QAAQ,KAAK,UAAU;AAE9B,SAAO;CACR;CAED,cAAiD;AAC/C,SAAO,KAAK,iBAAiB,SAAS,KAAK,GAAG,SAAS;CACxD;CAED,MAAM,cAA8C;AAClD,OAAK,KAAK,GAAG,gBACX;EAGF,MAAM,WAAW,MAAM,KAAK,iBAAiB,SAAS,CACpD,KAAK,GAAG,eACT,EAAC;AAEF,SAAO,SACL,KAAK,GAAG,gBAAgB;CAE3B;;;;;CAMD,MAAM,kBAAsD;AAC1D,OAAK,KAAK,GAAG,sBACX;EAGF,MAAM,WAAW,MAAM,KAAK,iBAAiB,SAAS,CACpD,KAAK,GAAG,qBACT,EAAC;AAEF,SAAO,SACL,KAAK,GAAG,sBAAsB;CAEjC;;;;;CAMD,MAAM,gBAA4D;EAChE,MAAM,UAAU,MAAM,KAAK,iBAAiB;AAC5C,OAAK,QACH;AAGF,SAAO,IAAI,eAA6B;GACtC,OAAO;IAAE,IAAI;IAAU,MAAM;GAAU;GAC9B;GACT,UAAU,EACR,UAAU,KAAK,GAAG,KACnB;EACF;CACF;;;;;;;;;CAUD,MAAM,iBACJC,SAIY;EACZ,MAAM,UAAU,MAAM,KAAK,eAAe;EAC1C,MAAM,UAAU,MAAM,KAAK,iBAAiB;AAG5C,OAAK,YAAY,SAAS;GACxB,MAAMC,OAAK,MAAM,KAAK,aAAa;AACnC,UAAO,QAAQ,EAAE,SAAI,EAAC;EACvB;EAGD,MAAM,YAAY,AAAC,QAAyB,eAAe;EAC3D,MAAM,sBAAsB,KAAK,GAAG,iBAAiB;EACrD,MAAM,qBAAqB,KAAK,GAAG,uBAAuB;AAI1D,MAAI,aAAa,uBAAuB,mBACtC,QAAO,yBACL,WACA,SACA,OAAO,QAAQ;GAEb,MAAMC,aAAW,MAAM,QAAQ;IAC7B;IACA,IAAI;GACL,EAAC;AAEF,UAAOA;EACR,EACF;EAIH,MAAM,KAAK,MAAM,KAAK,aAAa;EACnC,MAAM,WAAW,MAAM,QAAQ;GAAE;GAAS;EAAI,EAAC;AAG/C,QAAM,QAAQ,OAAO;AAErB,SAAO;CACR;CAED,MAAM,iBACJC,OACgD;EAChD,MAAM,cAAc,MAAM,gBAAgB,8BACxC,OACA,KAAK,GAAG,MACT;AAED,SAAO;CACR;CAED,MAAM,cAAcC,UAA2C;AAC7D,QAAM,cACJ,KAAK,QACL,KAAK,kBACL,KAAK,GAAG,QACR,UACA,KAAK,GAAG,iBACT;CACF;CAED,MAAM,8BACJC,MACAC,QAC2C;AAC3C,SAAO,gBAAgB,8BAA8B,MAAM,OAAO;CACnE;AACF"}
1
+ {"version":3,"file":"FunctionExecutionWrapper-CLDh7Z2_.mjs","names":["envParser: EnvironmentParser<{}>","fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction,\n FunctionHandler<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >\n >","handler: (ctx: {\n auditor?: Auditor<TAuditAction>;\n db?: TDatabase;\n }) => Promise<T>","db","response","event: TEvent","response: InferStandardSchema<TOutSchema>","data: unknown","schema: T"],"sources":["../src/functions/FunctionExecutionWrapper.ts"],"sourcesContent":["import type { AuditStorage, AuditableAction, Auditor } 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 ComposableStandardSchema,\n InferComposableStandardSchema,\n InferStandardSchema,\n} from '@geekmidas/schema';\nimport {\n type Service,\n ServiceDiscovery,\n type 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 TInput extends ComposableStandardSchema | undefined = undefined,\n TOutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> {\n constructor(\n protected envParser: EnvironmentParser<{}>,\n protected readonly fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction,\n FunctionHandler<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >\n >,\n ) {}\n\n protected _logger?: TLogger;\n\n get logger(): TLogger {\n return this._logger || this.fn.logger;\n }\n\n get serviceDiscovery(): ServiceDiscovery<ServiceRecord<TServices>, Logger> {\n const serviceDiscovery = ServiceDiscovery.getInstance<\n ServiceRecord<TServices>,\n TLogger\n >(this.logger, this.envParser);\n\n return serviceDiscovery;\n }\n\n getServices(): Promise<ServiceRecord<TServices>> {\n return this.serviceDiscovery.register(this.fn.services);\n }\n\n async getDatabase(): Promise<TDatabase | undefined> {\n if (!this.fn.databaseService) {\n return undefined;\n }\n\n const services = await this.serviceDiscovery.register([\n this.fn.databaseService,\n ]);\n\n return services[\n this.fn.databaseService.serviceName as keyof typeof services\n ] as TDatabase;\n }\n\n /**\n * Get the audit storage service if configured.\n * Returns undefined if no auditor storage is configured.\n */\n async getAuditStorage(): Promise<TAuditStorage | undefined> {\n if (!this.fn.auditorStorageService) {\n return undefined;\n }\n\n const services = await this.serviceDiscovery.register([\n this.fn.auditorStorageService,\n ]);\n\n return services[\n this.fn.auditorStorageService.serviceName as keyof typeof services\n ] as TAuditStorage;\n }\n\n /**\n * Create an auditor instance for the function.\n * Returns undefined if no auditor storage is configured.\n */\n async createAuditor(): Promise<Auditor<TAuditAction> | undefined> {\n const storage = await this.getAuditStorage();\n if (!storage) {\n return undefined;\n }\n\n return new DefaultAuditor<TAuditAction>({\n actor: { id: 'system', type: 'system' },\n storage: storage as AuditStorage,\n metadata: {\n function: this.fn.type,\n },\n });\n }\n\n /**\n * Execute handler with audit transaction support.\n * If the audit storage has a database (via getDatabase()), wraps execution\n * in a transaction so audits are atomic with handler's database operations.\n *\n * @param handler - The handler function to execute (receives auditor and db)\n * @returns The handler result\n */\n async executeWithAudit<T>(\n handler: (ctx: {\n auditor?: Auditor<TAuditAction>;\n db?: TDatabase;\n }) => Promise<T>,\n ): Promise<T> {\n const auditor = await this.createAuditor();\n const storage = await this.getAuditStorage();\n\n // No audit context - just run handler with regular db\n if (!auditor || !storage) {\n const db = await this.getDatabase();\n return handler({ db });\n }\n\n // Check if storage has a database and db service names match\n const storageDb = (storage as AuditStorage).getDatabase?.();\n const databaseServiceName = this.fn.databaseService?.serviceName;\n const auditDbServiceName = this.fn.auditorStorageService?.serviceName;\n\n // If the audit storage has a database and we're using the same database service\n // (or the audit storage provides the database), use transactional execution\n if (storageDb && databaseServiceName && auditDbServiceName) {\n return withAuditableTransaction(\n storageDb as any,\n auditor as any,\n async (trx) => {\n // Use transaction as db\n const response = await handler({\n auditor,\n db: trx as TDatabase,\n });\n // Audits are flushed by withAuditableTransaction before commit\n return response;\n },\n );\n }\n\n // No database on storage or service names don't match - run handler and flush audits after\n const db = await this.getDatabase();\n const response = await handler({ auditor, db });\n\n // Flush audits (no transaction)\n await auditor.flush();\n\n return response;\n }\n\n async getFunctionInput<TEvent>(\n event: TEvent,\n ): Promise<InferComposableStandardSchema<TInput>> {\n const parsedInput = await FunctionBuilder.parseComposableStandardSchema(\n event,\n this.fn.input,\n );\n\n return parsedInput as InferComposableStandardSchema<TInput>;\n }\n\n async publishEvents(response: InferStandardSchema<TOutSchema>) {\n await publishEvents(\n this.logger,\n this.serviceDiscovery,\n this.fn.events,\n response,\n this.fn.publisherService,\n );\n }\n\n async parseComposableStandardSchema<T extends ComposableStandardSchema>(\n data: unknown,\n schema: T,\n ): Promise<InferComposableStandardSchema<T>> {\n return FunctionBuilder.parseComposableStandardSchema(data, schema);\n }\n}\n"],"mappings":";;;;;;;AAqBA,IAAsB,2BAAtB,MAeE;CACA,YACYA,WACSC,IAsBnB;EAvBU;EACS;CAsBjB;CAEJ,AAAU;CAEV,IAAI,SAAkB;AACpB,SAAO,KAAK,WAAW,KAAK,GAAG;CAChC;CAED,IAAI,mBAAuE;EACzE,MAAM,mBAAmB,iBAAiB,YAGxC,KAAK,QAAQ,KAAK,UAAU;AAE9B,SAAO;CACR;CAED,cAAiD;AAC/C,SAAO,KAAK,iBAAiB,SAAS,KAAK,GAAG,SAAS;CACxD;CAED,MAAM,cAA8C;AAClD,OAAK,KAAK,GAAG,gBACX;EAGF,MAAM,WAAW,MAAM,KAAK,iBAAiB,SAAS,CACpD,KAAK,GAAG,eACT,EAAC;AAEF,SAAO,SACL,KAAK,GAAG,gBAAgB;CAE3B;;;;;CAMD,MAAM,kBAAsD;AAC1D,OAAK,KAAK,GAAG,sBACX;EAGF,MAAM,WAAW,MAAM,KAAK,iBAAiB,SAAS,CACpD,KAAK,GAAG,qBACT,EAAC;AAEF,SAAO,SACL,KAAK,GAAG,sBAAsB;CAEjC;;;;;CAMD,MAAM,gBAA4D;EAChE,MAAM,UAAU,MAAM,KAAK,iBAAiB;AAC5C,OAAK,QACH;AAGF,SAAO,IAAI,eAA6B;GACtC,OAAO;IAAE,IAAI;IAAU,MAAM;GAAU;GAC9B;GACT,UAAU,EACR,UAAU,KAAK,GAAG,KACnB;EACF;CACF;;;;;;;;;CAUD,MAAM,iBACJC,SAIY;EACZ,MAAM,UAAU,MAAM,KAAK,eAAe;EAC1C,MAAM,UAAU,MAAM,KAAK,iBAAiB;AAG5C,OAAK,YAAY,SAAS;GACxB,MAAMC,OAAK,MAAM,KAAK,aAAa;AACnC,UAAO,QAAQ,EAAE,SAAI,EAAC;EACvB;EAGD,MAAM,YAAY,AAAC,QAAyB,eAAe;EAC3D,MAAM,sBAAsB,KAAK,GAAG,iBAAiB;EACrD,MAAM,qBAAqB,KAAK,GAAG,uBAAuB;AAI1D,MAAI,aAAa,uBAAuB,mBACtC,QAAO,yBACL,WACA,SACA,OAAO,QAAQ;GAEb,MAAMC,aAAW,MAAM,QAAQ;IAC7B;IACA,IAAI;GACL,EAAC;AAEF,UAAOA;EACR,EACF;EAIH,MAAM,KAAK,MAAM,KAAK,aAAa;EACnC,MAAM,WAAW,MAAM,QAAQ;GAAE;GAAS;EAAI,EAAC;AAG/C,QAAM,QAAQ,OAAO;AAErB,SAAO;CACR;CAED,MAAM,iBACJC,OACgD;EAChD,MAAM,cAAc,MAAM,gBAAgB,8BACxC,OACA,KAAK,GAAG,MACT;AAED,SAAO;CACR;CAED,MAAM,cAAcC,UAA2C;AAC7D,QAAM,cACJ,KAAK,QACL,KAAK,kBACL,KAAK,GAAG,QACR,UACA,KAAK,GAAG,iBACT;CACF;CAED,MAAM,8BACJC,MACAC,QAC2C;AAC3C,SAAO,gBAAgB,8BAA8B,MAAM,OAAO;CACnE;AACF"}
@@ -6,7 +6,7 @@ import { Logger } from "@geekmidas/logger";
6
6
  import { Service, ServiceDiscovery, ServiceRecord } from "@geekmidas/services";
7
7
  import { StandardSchemaV1 } from "@standard-schema/spec";
8
8
  import { EnvironmentParser } from "@geekmidas/envkit";
9
- import * as hono_types2 from "hono/types";
9
+ import * as hono_types3 from "hono/types";
10
10
  import { Context, Hono } from "hono";
11
11
 
12
12
  //#region src/endpoints/HonoEndpointAdaptor.d.ts
@@ -33,11 +33,11 @@ declare class HonoEndpoint<TRoute extends string, TMethod extends HttpMethod, TI
33
33
  static validate<T extends StandardSchemaV1>(c: Context<any, string, {}>, data: unknown, schema?: T): Promise<any>;
34
34
  addRoute(serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>, app: Hono): void;
35
35
  static applyEventMiddleware(app: Hono, serviceDiscovery: ServiceDiscovery<any, any>): void;
36
- static fromRoutes<TLogger extends Logger, TServices extends Service[]>(routes: string[], envParser: EnvironmentParser<{}>, app: Hono<hono_types2.BlankEnv, hono_types2.BlankSchema, "/">, logger: TLogger, cwd?: string, options?: HonoEndpointOptions): Promise<Hono>;
36
+ static fromRoutes<TLogger extends Logger, TServices extends Service[]>(routes: string[], envParser: EnvironmentParser<{}>, app: Hono<hono_types3.BlankEnv, hono_types3.BlankSchema, "/">, logger: TLogger, cwd?: string, options?: HonoEndpointOptions): Promise<Hono>;
37
37
  static addRoutes<TServices extends Service[] = [], TLogger extends Logger = Logger>(endpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[], serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>, app: Hono, options?: HonoEndpointOptions): void;
38
38
  static addRoute<TRoute extends string, TMethod extends HttpMethod, TInput extends EndpointSchemas = {}, TOutSchema extends StandardSchemaV1 | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, TSession = unknown, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string, TAuditStorage extends AuditStorage | undefined = undefined, TAuditStorageServiceName extends string = string, TAuditAction extends AuditableAction<string, unknown> = AuditableAction<string, unknown>, TDatabase = undefined, TDatabaseServiceName extends string = string>(endpoint: Endpoint<TRoute, TMethod, TInput, TOutSchema, TServices, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>, serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>, app: Hono): void;
39
39
  static addDocsRoute<TServices extends Service[] = [], TLogger extends Logger = Logger>(endpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[], app: Hono, docsPath: string, openApiOptions?: HonoEndpointOptions['openApiOptions']): void;
40
40
  }
41
41
  //#endregion
42
42
  export { HonoEndpoint, HonoEndpointOptions };
43
- //# sourceMappingURL=HonoEndpointAdaptor-D8a3lZN8.d.cts.map
43
+ //# sourceMappingURL=HonoEndpointAdaptor-Bx9Y1bCZ.d.cts.map