@geekmidas/constructs 0.0.22 → 0.2.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 (210) hide show
  1. package/README.md +90 -0
  2. package/dist/{AWSLambdaFunction-qWpalqfr.d.mts → AWSLambdaFunction-D9RZhm0N.d.mts} +3 -3
  3. package/dist/{AWSLambdaSubscriberAdaptor-CWbBNRz3.d.mts → AWSLambdaSubscriberAdaptor-C0aZBU64.d.mts} +2 -2
  4. package/dist/{AmazonApiGatewayEndpointAdaptor-DXssXsJi.cjs → AmazonApiGatewayEndpointAdaptor-Bk6ssx3K.cjs} +40 -27
  5. package/dist/AmazonApiGatewayEndpointAdaptor-Bk6ssx3K.cjs.map +1 -0
  6. package/dist/{AmazonApiGatewayEndpointAdaptor-Da9BR5On.d.cts → AmazonApiGatewayEndpointAdaptor-CbJqLU6I.d.cts} +2 -2
  7. package/dist/{AmazonApiGatewayEndpointAdaptor-BQ0IJdaI.d.mts → AmazonApiGatewayEndpointAdaptor-DC3N7zY_.d.mts} +3 -3
  8. package/dist/{AmazonApiGatewayEndpointAdaptor-CacGag6F.mjs → AmazonApiGatewayEndpointAdaptor-pEWzF2uY.mjs} +40 -27
  9. package/dist/AmazonApiGatewayEndpointAdaptor-pEWzF2uY.mjs.map +1 -0
  10. package/dist/{AmazonApiGatewayV1EndpointAdaptor-C4_AZ1ek.d.mts → AmazonApiGatewayV1EndpointAdaptor-BVxgQ-7J.d.mts} +4 -4
  11. package/dist/{AmazonApiGatewayV1EndpointAdaptor-CSm3NsWz.d.cts → AmazonApiGatewayV1EndpointAdaptor-CVwJ5k16.d.cts} +3 -3
  12. package/dist/{AmazonApiGatewayV1EndpointAdaptor-BpnG55R7.mjs → AmazonApiGatewayV1EndpointAdaptor-MJpRbIaQ.mjs} +2 -2
  13. package/dist/{AmazonApiGatewayV1EndpointAdaptor-BpnG55R7.mjs.map → AmazonApiGatewayV1EndpointAdaptor-MJpRbIaQ.mjs.map} +1 -1
  14. package/dist/{AmazonApiGatewayV1EndpointAdaptor-Df4kszio.cjs → AmazonApiGatewayV1EndpointAdaptor-uBp_4zLf.cjs} +2 -2
  15. package/dist/{AmazonApiGatewayV1EndpointAdaptor-Df4kszio.cjs.map → AmazonApiGatewayV1EndpointAdaptor-uBp_4zLf.cjs.map} +1 -1
  16. package/dist/{AmazonApiGatewayV2EndpointAdaptor-6hsBFVLf.d.cts → AmazonApiGatewayV2EndpointAdaptor-1oBZdQH3.d.cts} +3 -3
  17. package/dist/{AmazonApiGatewayV2EndpointAdaptor-DdM8Tr1X.d.mts → AmazonApiGatewayV2EndpointAdaptor-C3H8Hpv7.d.mts} +4 -4
  18. package/dist/{AmazonApiGatewayV2EndpointAdaptor-ZORzMEET.mjs → AmazonApiGatewayV2EndpointAdaptor-ChO8BlDz.mjs} +2 -2
  19. package/dist/{AmazonApiGatewayV2EndpointAdaptor-ZORzMEET.mjs.map → AmazonApiGatewayV2EndpointAdaptor-ChO8BlDz.mjs.map} +1 -1
  20. package/dist/{AmazonApiGatewayV2EndpointAdaptor-5SIvqPby.cjs → AmazonApiGatewayV2EndpointAdaptor-I1W23Nvn.cjs} +2 -2
  21. package/dist/{AmazonApiGatewayV2EndpointAdaptor-5SIvqPby.cjs.map → AmazonApiGatewayV2EndpointAdaptor-I1W23Nvn.cjs.map} +1 -1
  22. package/dist/Authorizer-C0ge_tc8.cjs +92 -0
  23. package/dist/Authorizer-C0ge_tc8.cjs.map +1 -0
  24. package/dist/Authorizer-CpSUMTIs.d.cts +125 -0
  25. package/dist/Authorizer-Cpx59w_q.d.mts +125 -0
  26. package/dist/Authorizer-r9U3y_ms.mjs +68 -0
  27. package/dist/Authorizer-r9U3y_ms.mjs.map +1 -0
  28. package/dist/{BaseFunctionBuilder-Ct6zY6Jq.d.mts → BaseFunctionBuilder-CoV7J45W.d.mts} +2 -2
  29. package/dist/{Construct-DDR0295I.d.mts → Construct-jBKqb-Zi.d.mts} +1 -1
  30. package/dist/Construct.d.mts +1 -1
  31. package/dist/{Cron-DnMRWPFR.d.mts → Cron-JZkp_fHy.d.mts} +2 -2
  32. package/dist/{CronBuilder-RLDitFmP.d.mts → CronBuilder-BmFDO0Dm.d.mts} +4 -4
  33. package/dist/{Endpoint-DbPsw13b.mjs → Endpoint-B70_KKhu.mjs} +8 -2
  34. package/dist/Endpoint-B70_KKhu.mjs.map +1 -0
  35. package/dist/{Endpoint-CA-byrDr.cjs → Endpoint-BJo9Hhwm.cjs} +8 -2
  36. package/dist/Endpoint-BJo9Hhwm.cjs.map +1 -0
  37. package/dist/{Endpoint-PtQ-wLIS.d.mts → Endpoint-C5djXyae.d.mts} +69 -6
  38. package/dist/{Endpoint-D2Imgihs.d.cts → Endpoint-CC2RGjkl.d.cts} +67 -4
  39. package/dist/{EndpointBuilder-BPHpUekp.d.mts → EndpointBuilder-CD8LkBda.d.mts} +43 -5
  40. package/dist/{EndpointBuilder-CYkeYpsL.cjs → EndpointBuilder-DeswNQdG.cjs} +69 -4
  41. package/dist/EndpointBuilder-DeswNQdG.cjs.map +1 -0
  42. package/dist/{EndpointBuilder-W5fdXxYQ.mjs → EndpointBuilder-FyyoFTJ5.mjs} +69 -4
  43. package/dist/EndpointBuilder-FyyoFTJ5.mjs.map +1 -0
  44. package/dist/{EndpointBuilder-TApJQhtG.d.cts → EndpointBuilder-vXk6eIJk.d.cts} +41 -3
  45. package/dist/{EndpointFactory-CNlfBDuD.d.mts → EndpointFactory-3g-7Rznt.d.cts} +68 -21
  46. package/dist/{EndpointFactory-B5fOINuc.d.cts → EndpointFactory-DaFR9LQG.d.mts} +68 -21
  47. package/dist/{EndpointFactory-D5lFZXqY.cjs → EndpointFactory-DcT_g9M_.cjs} +117 -14
  48. package/dist/EndpointFactory-DcT_g9M_.cjs.map +1 -0
  49. package/dist/{EndpointFactory-B27nfeiE.mjs → EndpointFactory-KJAjBWmO.mjs} +117 -14
  50. package/dist/EndpointFactory-KJAjBWmO.mjs.map +1 -0
  51. package/dist/{Function-CD3rXWfa.d.mts → Function-Vh1t-Qjj.d.mts} +2 -2
  52. package/dist/{FunctionBuilder-j2VkwuGf.d.mts → FunctionBuilder-3jsoFffg.d.mts} +4 -4
  53. package/dist/{FunctionExecutionWrapper-B0WP-Vec.d.mts → FunctionExecutionWrapper-CI3CaoCo.d.mts} +2 -2
  54. package/dist/{HonoEndpointAdaptor-CLOpobdq.d.cts → HonoEndpointAdaptor-BJh4J-J9.d.cts} +4 -4
  55. package/dist/{HonoEndpointAdaptor-Bg_vTyA5.mjs → HonoEndpointAdaptor-CcvXzoYV.mjs} +43 -30
  56. package/dist/HonoEndpointAdaptor-CcvXzoYV.mjs.map +1 -0
  57. package/dist/{HonoEndpointAdaptor-B_gJPWGD.cjs → HonoEndpointAdaptor-DodwLM0-.cjs} +43 -30
  58. package/dist/HonoEndpointAdaptor-DodwLM0-.cjs.map +1 -0
  59. package/dist/{HonoEndpointAdaptor-C9gYYBWu.d.mts → HonoEndpointAdaptor-kb1ByjUL.d.mts} +5 -5
  60. package/dist/{Subscriber-D-FPWts6.cjs → Subscriber-DOt3svUC.cjs} +1 -1
  61. package/dist/{Subscriber-D-FPWts6.cjs.map → Subscriber-DOt3svUC.cjs.map} +1 -1
  62. package/dist/{Subscriber-itwm7ugy.d.mts → Subscriber-aNr1qkxR.d.mts} +2 -2
  63. package/dist/{Subscriber-CGb8LjZa.mjs → Subscriber-kCHbH2fZ.mjs} +1 -1
  64. package/dist/{Subscriber-CGb8LjZa.mjs.map → Subscriber-kCHbH2fZ.mjs.map} +1 -1
  65. package/dist/{SubscriberBuilder-9j3JCu8-.d.mts → SubscriberBuilder-CWS4tdbp.d.mts} +2 -2
  66. package/dist/{SubscriberBuilder-BfE2cL1q.cjs → SubscriberBuilder-Cj2u9k5Q.cjs} +2 -2
  67. package/dist/{SubscriberBuilder-BfE2cL1q.cjs.map → SubscriberBuilder-Cj2u9k5Q.cjs.map} +1 -1
  68. package/dist/{SubscriberBuilder-BcAspHv9.mjs → SubscriberBuilder-DmxMU89X.mjs} +2 -2
  69. package/dist/{SubscriberBuilder-BcAspHv9.mjs.map → SubscriberBuilder-DmxMU89X.mjs.map} +1 -1
  70. package/dist/{TestEndpointAdaptor-JONQJeXc.mjs → TestEndpointAdaptor-1pPixE6y.mjs} +4 -4
  71. package/dist/{TestEndpointAdaptor-JONQJeXc.mjs.map → TestEndpointAdaptor-1pPixE6y.mjs.map} +1 -1
  72. package/dist/{TestEndpointAdaptor-C-c8v7VI.d.mts → TestEndpointAdaptor-5-unBV8O.d.mts} +3 -3
  73. package/dist/{TestEndpointAdaptor-BYCwwiYk.d.cts → TestEndpointAdaptor-Bm0UjDtV.d.cts} +2 -2
  74. package/dist/{TestEndpointAdaptor-Bew9lWsx.cjs → TestEndpointAdaptor-wA-fmq4v.cjs} +4 -4
  75. package/dist/{TestEndpointAdaptor-Bew9lWsx.cjs.map → TestEndpointAdaptor-wA-fmq4v.cjs.map} +1 -1
  76. package/dist/adaptors/aws.cjs +5 -5
  77. package/dist/adaptors/aws.d.cts +5 -5
  78. package/dist/adaptors/aws.d.mts +15 -15
  79. package/dist/adaptors/aws.mjs +5 -5
  80. package/dist/adaptors/hono.cjs +4 -4
  81. package/dist/adaptors/hono.d.cts +3 -3
  82. package/dist/adaptors/hono.d.mts +9 -9
  83. package/dist/adaptors/hono.mjs +4 -4
  84. package/dist/adaptors/testing.cjs +3 -3
  85. package/dist/adaptors/testing.d.cts +3 -3
  86. package/dist/adaptors/testing.d.mts +9 -9
  87. package/dist/adaptors/testing.mjs +3 -3
  88. package/dist/crons/Cron.d.mts +6 -6
  89. package/dist/crons/CronBuilder.d.mts +7 -7
  90. package/dist/crons/index.d.cts +4 -4
  91. package/dist/crons/index.d.mts +7 -7
  92. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +3 -3
  93. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +3 -3
  94. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +9 -9
  95. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +3 -3
  96. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +4 -4
  97. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +4 -4
  98. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +10 -10
  99. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +4 -4
  100. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +4 -4
  101. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +4 -4
  102. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +10 -10
  103. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +4 -4
  104. package/dist/endpoints/Authorizer.cjs +5 -14
  105. package/dist/endpoints/Authorizer.d.cts +2 -2
  106. package/dist/endpoints/Authorizer.d.mts +2 -2
  107. package/dist/endpoints/Authorizer.mjs +2 -13
  108. package/dist/endpoints/Endpoint.cjs +1 -1
  109. package/dist/endpoints/Endpoint.d.cts +2 -2
  110. package/dist/endpoints/Endpoint.d.mts +8 -8
  111. package/dist/endpoints/Endpoint.mjs +1 -1
  112. package/dist/endpoints/EndpointBuilder.cjs +4 -2
  113. package/dist/endpoints/EndpointBuilder.d.cts +3 -3
  114. package/dist/endpoints/EndpointBuilder.d.mts +9 -9
  115. package/dist/endpoints/EndpointBuilder.mjs +4 -2
  116. package/dist/endpoints/EndpointFactory.cjs +5 -3
  117. package/dist/endpoints/EndpointFactory.d.cts +4 -4
  118. package/dist/endpoints/EndpointFactory.d.mts +10 -10
  119. package/dist/endpoints/EndpointFactory.mjs +5 -3
  120. package/dist/endpoints/HonoEndpointAdaptor.cjs +4 -4
  121. package/dist/endpoints/HonoEndpointAdaptor.d.cts +3 -3
  122. package/dist/endpoints/HonoEndpointAdaptor.d.mts +9 -9
  123. package/dist/endpoints/HonoEndpointAdaptor.mjs +4 -4
  124. package/dist/endpoints/TestEndpointAdaptor.cjs +3 -3
  125. package/dist/endpoints/TestEndpointAdaptor.d.cts +3 -3
  126. package/dist/endpoints/TestEndpointAdaptor.d.mts +9 -9
  127. package/dist/endpoints/TestEndpointAdaptor.mjs +3 -3
  128. package/dist/endpoints/audit.d.cts +2 -2
  129. package/dist/endpoints/audit.d.mts +8 -8
  130. package/dist/endpoints/helpers.cjs +2 -2
  131. package/dist/endpoints/helpers.d.cts +2 -2
  132. package/dist/endpoints/helpers.d.mts +8 -8
  133. package/dist/endpoints/helpers.mjs +2 -2
  134. package/dist/endpoints/index.cjs +6 -3
  135. package/dist/endpoints/index.cjs.map +1 -1
  136. package/dist/endpoints/index.d.cts +7 -7
  137. package/dist/endpoints/index.d.mts +13 -13
  138. package/dist/endpoints/index.mjs +6 -4
  139. package/dist/endpoints/index.mjs.map +1 -1
  140. package/dist/endpoints/processAudits.cjs +1 -1
  141. package/dist/endpoints/processAudits.d.cts +24 -5
  142. package/dist/endpoints/processAudits.d.mts +30 -11
  143. package/dist/endpoints/processAudits.mjs +1 -1
  144. package/dist/endpoints/rls.cjs +3 -0
  145. package/dist/endpoints/rls.d.cts +9 -0
  146. package/dist/endpoints/rls.d.mts +9 -0
  147. package/dist/endpoints/rls.mjs +3 -0
  148. package/dist/functions/AWSLambdaFunction.d.mts +4 -4
  149. package/dist/functions/BaseFunctionBuilder.d.mts +2 -2
  150. package/dist/functions/Function.d.mts +2 -2
  151. package/dist/functions/FunctionBuilder.d.mts +4 -4
  152. package/dist/functions/FunctionExecutionWrapper.d.mts +3 -3
  153. package/dist/functions/TestFunctionAdaptor.d.mts +2 -2
  154. package/dist/functions/index.d.mts +5 -5
  155. package/dist/{helpers-CrrdyA04.mjs → helpers-C3B2lVrM.mjs} +2 -2
  156. package/dist/{helpers-CrrdyA04.mjs.map → helpers-C3B2lVrM.mjs.map} +1 -1
  157. package/dist/{helpers-DiPZVJQC.cjs → helpers-DxxSpLfw.cjs} +2 -2
  158. package/dist/{helpers-DiPZVJQC.cjs.map → helpers-DxxSpLfw.cjs.map} +1 -1
  159. package/dist/index-CFyaRrck.d.mts +10 -0
  160. package/dist/index.d.mts +2 -2
  161. package/dist/{processAudits-BFokHhCO.cjs → processAudits-CzHkPokQ.cjs} +13 -7
  162. package/dist/processAudits-CzHkPokQ.cjs.map +1 -0
  163. package/dist/{processAudits-DfcB-X-4.mjs → processAudits-Dj8UGqcW.mjs} +13 -7
  164. package/dist/processAudits-Dj8UGqcW.mjs.map +1 -0
  165. package/dist/publisher.d.mts +1 -1
  166. package/dist/rls-Bf3FRwto.mjs +9 -0
  167. package/dist/rls-Bf3FRwto.mjs.map +1 -0
  168. package/dist/rls-CmJ7bRsz.cjs +15 -0
  169. package/dist/rls-CmJ7bRsz.cjs.map +1 -0
  170. package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.mts +3 -3
  171. package/dist/subscribers/Subscriber.cjs +1 -1
  172. package/dist/subscribers/Subscriber.d.mts +2 -2
  173. package/dist/subscribers/Subscriber.mjs +1 -1
  174. package/dist/subscribers/SubscriberBuilder.cjs +2 -2
  175. package/dist/subscribers/SubscriberBuilder.d.mts +3 -3
  176. package/dist/subscribers/SubscriberBuilder.mjs +2 -2
  177. package/dist/subscribers/index.cjs +2 -2
  178. package/dist/subscribers/index.d.cts +2 -2
  179. package/dist/subscribers/index.d.mts +5 -5
  180. package/dist/subscribers/index.mjs +2 -2
  181. package/dist/{types-DKf0juBf.d.mts → types-CScirkHt.d.mts} +1 -1
  182. package/dist/types.d.mts +1 -1
  183. package/package.json +4 -3
  184. package/src/endpoints/AmazonApiGatewayEndpointAdaptor.ts +59 -26
  185. package/src/endpoints/Authorizer.ts +119 -1
  186. package/src/endpoints/Endpoint.ts +19 -0
  187. package/src/endpoints/EndpointBuilder.ts +80 -6
  188. package/src/endpoints/EndpointFactory.ts +263 -27
  189. package/src/endpoints/HonoEndpointAdaptor.ts +68 -37
  190. package/src/endpoints/TestEndpointAdaptor.ts +2 -0
  191. package/src/endpoints/index.ts +7 -0
  192. package/src/endpoints/processAudits.ts +39 -16
  193. package/src/endpoints/rls.ts +67 -0
  194. package/dist/AmazonApiGatewayEndpointAdaptor-CacGag6F.mjs.map +0 -1
  195. package/dist/AmazonApiGatewayEndpointAdaptor-DXssXsJi.cjs.map +0 -1
  196. package/dist/Authorizer-BTmly8ps.d.cts +0 -29
  197. package/dist/Authorizer-pmPvIVgv.d.mts +0 -29
  198. package/dist/Endpoint-CA-byrDr.cjs.map +0 -1
  199. package/dist/Endpoint-DbPsw13b.mjs.map +0 -1
  200. package/dist/EndpointBuilder-CYkeYpsL.cjs.map +0 -1
  201. package/dist/EndpointBuilder-W5fdXxYQ.mjs.map +0 -1
  202. package/dist/EndpointFactory-B27nfeiE.mjs.map +0 -1
  203. package/dist/EndpointFactory-D5lFZXqY.cjs.map +0 -1
  204. package/dist/HonoEndpointAdaptor-B_gJPWGD.cjs.map +0 -1
  205. package/dist/HonoEndpointAdaptor-Bg_vTyA5.mjs.map +0 -1
  206. package/dist/endpoints/Authorizer.cjs.map +0 -1
  207. package/dist/endpoints/Authorizer.mjs.map +0 -1
  208. package/dist/index-licEVXjh.d.mts +0 -10
  209. package/dist/processAudits-BFokHhCO.cjs.map +0 -1
  210. package/dist/processAudits-DfcB-X-4.mjs.map +0 -1
@@ -1,13 +1,13 @@
1
- import { Authorizer } from "./Authorizer-BTmly8ps.cjs";
2
- import { ActorExtractor, AuthorizeFn, SessionFn } from "./Endpoint-D2Imgihs.cjs";
3
- import { EndpointBuilder } from "./EndpointBuilder-TApJQhtG.cjs";
1
+ import { Authorizer, BuiltInSecuritySchemeId, SecurityScheme } from "./Authorizer-Cpx59w_q.mjs";
2
+ import { ActorExtractor, AuthorizeFn, RlsConfig, SessionFn } from "./Endpoint-C5djXyae.mjs";
3
+ import { EndpointBuilder } from "./EndpointBuilder-CD8LkBda.mjs";
4
+ import { Service } from "@geekmidas/services";
4
5
  import { AuditStorage, AuditableAction, ExtractStorageAuditAction } from "@geekmidas/audit";
5
6
  import { EventPublisher, MappedEvent } from "@geekmidas/events";
6
7
  import { Logger } from "@geekmidas/logger";
7
- import { Service } from "@geekmidas/services";
8
8
 
9
9
  //#region src/endpoints/EndpointFactory.d.ts
10
- 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> {
10
+ 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
11
  private defaultServices;
12
12
  private basePath;
13
13
  private defaultAuthorizeFn?;
@@ -19,6 +19,8 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
19
19
  private defaultAuditorStorage;
20
20
  private defaultDatabaseService;
21
21
  private defaultActorExtractor?;
22
+ private customSecuritySchemes;
23
+ private defaultRlsConfig?;
22
24
  constructor({
23
25
  basePath,
24
26
  defaultAuthorizeFn,
@@ -30,38 +32,81 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
30
32
  defaultAuthorizerName,
31
33
  defaultAuditorStorage,
32
34
  defaultDatabaseService,
33
- defaultActorExtractor
34
- }?: EndpointFactoryOptions<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName>);
35
+ defaultActorExtractor,
36
+ customSecuritySchemes,
37
+ defaultRlsConfig
38
+ }?: EndpointFactoryOptions<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName, TSecuritySchemes, TRlsConfig>);
35
39
  static joinPaths<TBasePath extends string, P extends string>(path: P, basePath?: TBasePath): JoinPaths<TBasePath, P>;
36
- authorizers<const T extends readonly string[]>(authorizers: T): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, T, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
40
+ authorizers<const T extends readonly string[]>(authorizers: T): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, T, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
41
+ /**
42
+ * Define custom security schemes for this factory.
43
+ * These extend the built-in schemes (jwt, bearer, apiKey, oauth2, oidc).
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * const router = e.securitySchemes({
48
+ * awsIamSigV4: {
49
+ * type: 'apiKey',
50
+ * in: 'header',
51
+ * name: 'Authorization',
52
+ * 'x-amazon-apigateway-authtype': 'awsSigv4',
53
+ * },
54
+ * });
55
+ * ```
56
+ */
57
+ securitySchemes<T extends Record<string, SecurityScheme>>(schemes: T): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes & T>;
37
58
  /**
38
59
  * Set the default authorizer for all endpoints created from this factory.
39
60
  * Individual endpoints can override this by calling `.authorizer()` on the builder.
40
61
  * Use `'none'` to explicitly disable authorization for all endpoints.
62
+ *
63
+ * Accepts:
64
+ * - Built-in security scheme names: 'jwt', 'bearer', 'apiKey', 'oauth2', 'oidc'
65
+ * - Custom security scheme names defined via `.securitySchemes()`
66
+ * - 'none' to disable authorization
41
67
  */
42
- authorizer(name: TAuthorizers[number] | 'none'): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
43
- route<TPath extends string>(path: TPath): EndpointFactory<TServices, JoinPaths<TBasePath, TPath>, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
44
- authorize(fn: AuthorizeFn<TServices, TLogger, TSession>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
45
- services<S extends Service[]>(services: S): EndpointFactory<[...S, ...TServices], TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
46
- logger<L extends Logger>(logger: L): EndpointFactory<TServices, TBasePath, L, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
47
- 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>;
48
- session<T>(session: SessionFn<TServices, TLogger, T, TDatabase>): EndpointFactory<TServices, TBasePath, TLogger, T, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
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>;
49
75
  /**
50
76
  * Set the database service for endpoints created from this factory.
51
77
  * The database will be available in handler context as `db`.
52
78
  */
53
- database<T, TName extends string>(service: Service<TName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, T, TName>;
79
+ database<T, TName extends string>(service: Service<TName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, T, TName, TSecuritySchemes>;
54
80
  /**
55
81
  * Set the auditor storage service for endpoints created from this factory.
56
82
  * This enables audit functionality and makes `auditor` available in handler context.
57
83
  * The audit action type is automatically inferred from the storage's generic parameter.
58
84
  */
59
- 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>;
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>;
60
86
  /**
61
87
  * Set the actor extractor function for endpoints created from this factory.
62
88
  * The actor is extracted from the request context and attached to all audits.
63
89
  */
64
- actor(extractor: ActorExtractor<TServices, TSession, TLogger>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
90
+ actor(extractor: ActorExtractor<TServices, TSession, TLogger>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
91
+ /**
92
+ * Set the RLS (Row-Level Security) configuration for endpoints created from this factory.
93
+ * This enables automatic PostgreSQL session variable setting for RLS policies.
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * const api = new EndpointFactory()
98
+ * .database(databaseService)
99
+ * .session(extractSession)
100
+ * .rls({
101
+ * extractor: ({ session }) => ({
102
+ * user_id: session.userId,
103
+ * tenant_id: session.tenantId,
104
+ * }),
105
+ * prefix: 'app',
106
+ * });
107
+ * ```
108
+ */
109
+ rls<TConfig extends RlsConfig<TServices, TSession, TLogger>>(config: TConfig): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes, TConfig>;
65
110
  private createBuilder;
66
111
  post<TPath extends string>(path: TPath): EndpointBuilder<RemoveTrailingSlash<TBasePath extends "" ? TPath : TPath extends "" ? TBasePath : TBasePath extends "/" ? TPath extends `/${string}` ? TPath : `/${TPath}` : TBasePath extends `${infer Base}/` ? TPath extends `/${infer Rest}` ? `${Base}/${Rest}` : `${Base}/${TPath}` : TPath extends `/${infer Rest_1}` ? `${TBasePath}/${Rest_1}` : `${TBasePath}/${TPath}`>, "POST", {}, TServices, TLogger, undefined, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
67
112
  get<TPath extends string>(path: TPath): EndpointBuilder<RemoveTrailingSlash<TBasePath extends "" ? TPath : TPath extends "" ? TBasePath : TBasePath extends "/" ? TPath extends `/${string}` ? TPath : `/${TPath}` : TBasePath extends `${infer Base}/` ? TPath extends `/${infer Rest}` ? `${Base}/${Rest}` : `${Base}/${TPath}` : TPath extends `/${infer Rest_1}` ? `${TBasePath}/${Rest_1}` : `${TBasePath}/${TPath}`>, "GET", {}, TServices, TLogger, undefined, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
@@ -72,7 +117,7 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
72
117
  }
73
118
  type RemoveTrailingSlash<T extends string> = T extends `${infer Rest}/` ? Rest extends '' ? T : Rest : T;
74
119
  type JoinPaths<TBasePath extends string, TPath extends string> = RemoveTrailingSlash<TBasePath extends '' ? TPath : TPath extends '' ? TBasePath : TBasePath extends '/' ? TPath extends `/${string}` ? TPath : `/${TPath}` : TBasePath extends `${infer Base}/` ? TPath extends `/${infer Rest}` ? `${Base}/${Rest}` : `${Base}/${TPath}` : TPath extends `/${infer Rest}` ? `${TBasePath}/${Rest}` : `${TBasePath}/${TPath}`>;
75
- interface EndpointFactoryOptions<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 | undefined = undefined, TAuditStorageServiceName extends string = string, TDatabase = undefined, TDatabaseServiceName extends string = string> {
120
+ interface EndpointFactoryOptions<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 | undefined = undefined, TAuditStorageServiceName extends string = string, TDatabase = undefined, TDatabaseServiceName extends string = string, TSecuritySchemes extends Record<string, SecurityScheme> = Record<string, SecurityScheme>, TRlsConfig extends RlsConfig<TServices, TSession, TLogger> | undefined = undefined> {
76
121
  defaultServices?: TServices;
77
122
  basePath?: TBasePath;
78
123
  defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;
@@ -85,8 +130,10 @@ interface EndpointFactoryOptions<TServices extends Service[] = [], TBasePath ext
85
130
  defaultAuditorStorage?: Service<TAuditStorageServiceName, TAuditStorage>;
86
131
  defaultDatabaseService?: Service<TDatabaseServiceName, TDatabase>;
87
132
  defaultActorExtractor?: ActorExtractor<TServices, TSession, TLogger>;
133
+ customSecuritySchemes?: TSecuritySchemes;
134
+ defaultRlsConfig?: TRlsConfig;
88
135
  }
89
- declare const e: EndpointFactory<[], "", Logger, unknown, undefined, string, readonly string[], undefined, string, never, undefined, string>;
136
+ declare const e: EndpointFactory<[], "", Logger, unknown, undefined, string, readonly string[], undefined, string, never, undefined, string, Record<string, SecurityScheme>, undefined>;
90
137
  //#endregion
91
138
  export { EndpointFactory, EndpointFactoryOptions, JoinPaths, RemoveTrailingSlash, e };
92
- //# sourceMappingURL=EndpointFactory-B5fOINuc.d.cts.map
139
+ //# sourceMappingURL=EndpointFactory-DaFR9LQG.d.mts.map
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- const require_EndpointBuilder = require('./EndpointBuilder-CYkeYpsL.cjs');
2
+ const require_EndpointBuilder = require('./EndpointBuilder-DeswNQdG.cjs');
3
3
  const __geekmidas_logger_console = require_chunk.__toESM(require("@geekmidas/logger/console"));
4
4
  const lodash_uniqby = require_chunk.__toESM(require("lodash.uniqby"));
5
5
 
@@ -17,7 +17,9 @@ var EndpointFactory = class EndpointFactory {
17
17
  defaultAuditorStorage;
18
18
  defaultDatabaseService;
19
19
  defaultActorExtractor;
20
- constructor({ basePath, defaultAuthorizeFn, defaultLogger, defaultSessionExtractor, defaultServices = [], defaultEventPublisher, availableAuthorizers = [], defaultAuthorizerName, defaultAuditorStorage, defaultDatabaseService, defaultActorExtractor } = {}) {
20
+ customSecuritySchemes = {};
21
+ defaultRlsConfig;
22
+ constructor({ basePath, defaultAuthorizeFn, defaultLogger, defaultSessionExtractor, defaultServices = [], defaultEventPublisher, availableAuthorizers = [], defaultAuthorizerName, defaultAuditorStorage, defaultDatabaseService, defaultActorExtractor, customSecuritySchemes = {}, defaultRlsConfig } = {}) {
21
23
  this.defaultServices = (0, lodash_uniqby.default)(defaultServices, (s) => s.serviceName);
22
24
  this.basePath = basePath || "";
23
25
  this.defaultAuthorizeFn = defaultAuthorizeFn;
@@ -29,6 +31,8 @@ var EndpointFactory = class EndpointFactory {
29
31
  this.defaultAuditorStorage = defaultAuditorStorage;
30
32
  this.defaultDatabaseService = defaultDatabaseService;
31
33
  this.defaultActorExtractor = defaultActorExtractor;
34
+ this.customSecuritySchemes = customSecuritySchemes;
35
+ this.defaultRlsConfig = defaultRlsConfig;
32
36
  }
33
37
  static joinPaths(path, basePath = "") {
34
38
  if (!basePath && !path) return "/";
@@ -55,13 +59,55 @@ var EndpointFactory = class EndpointFactory {
55
59
  defaultAuthorizerName: this.defaultAuthorizerName,
56
60
  defaultAuditorStorage: this.defaultAuditorStorage,
57
61
  defaultDatabaseService: this.defaultDatabaseService,
58
- defaultActorExtractor: this.defaultActorExtractor
62
+ defaultActorExtractor: this.defaultActorExtractor,
63
+ customSecuritySchemes: this.customSecuritySchemes,
64
+ defaultRlsConfig: this.defaultRlsConfig
65
+ });
66
+ }
67
+ /**
68
+ * Define custom security schemes for this factory.
69
+ * These extend the built-in schemes (jwt, bearer, apiKey, oauth2, oidc).
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * const router = e.securitySchemes({
74
+ * awsIamSigV4: {
75
+ * type: 'apiKey',
76
+ * in: 'header',
77
+ * name: 'Authorization',
78
+ * 'x-amazon-apigateway-authtype': 'awsSigv4',
79
+ * },
80
+ * });
81
+ * ```
82
+ */
83
+ securitySchemes(schemes) {
84
+ return new EndpointFactory({
85
+ defaultServices: this.defaultServices,
86
+ basePath: this.basePath,
87
+ defaultAuthorizeFn: this.defaultAuthorizeFn,
88
+ defaultLogger: this.defaultLogger,
89
+ defaultSessionExtractor: this.defaultSessionExtractor,
90
+ defaultEventPublisher: this.defaultEventPublisher,
91
+ availableAuthorizers: this.availableAuthorizers,
92
+ defaultAuthorizerName: this.defaultAuthorizerName,
93
+ defaultAuditorStorage: this.defaultAuditorStorage,
94
+ defaultDatabaseService: this.defaultDatabaseService,
95
+ defaultActorExtractor: this.defaultActorExtractor,
96
+ customSecuritySchemes: {
97
+ ...this.customSecuritySchemes,
98
+ ...schemes
99
+ }
59
100
  });
60
101
  }
61
102
  /**
62
103
  * Set the default authorizer for all endpoints created from this factory.
63
104
  * Individual endpoints can override this by calling `.authorizer()` on the builder.
64
105
  * Use `'none'` to explicitly disable authorization for all endpoints.
106
+ *
107
+ * Accepts:
108
+ * - Built-in security scheme names: 'jwt', 'bearer', 'apiKey', 'oauth2', 'oidc'
109
+ * - Custom security scheme names defined via `.securitySchemes()`
110
+ * - 'none' to disable authorization
65
111
  */
66
112
  authorizer(name) {
67
113
  if (name !== "none" && this.availableAuthorizers.length > 0) {
@@ -82,7 +128,9 @@ var EndpointFactory = class EndpointFactory {
82
128
  defaultAuthorizerName: name === "none" ? void 0 : name,
83
129
  defaultAuditorStorage: this.defaultAuditorStorage,
84
130
  defaultDatabaseService: this.defaultDatabaseService,
85
- defaultActorExtractor: this.defaultActorExtractor
131
+ defaultActorExtractor: this.defaultActorExtractor,
132
+ customSecuritySchemes: this.customSecuritySchemes,
133
+ defaultRlsConfig: this.defaultRlsConfig
86
134
  });
87
135
  }
88
136
  route(path) {
@@ -98,7 +146,9 @@ var EndpointFactory = class EndpointFactory {
98
146
  defaultAuthorizerName: this.defaultAuthorizerName,
99
147
  defaultAuditorStorage: this.defaultAuditorStorage,
100
148
  defaultDatabaseService: this.defaultDatabaseService,
101
- defaultActorExtractor: this.defaultActorExtractor
149
+ defaultActorExtractor: this.defaultActorExtractor,
150
+ customSecuritySchemes: this.customSecuritySchemes,
151
+ defaultRlsConfig: this.defaultRlsConfig
102
152
  });
103
153
  }
104
154
  authorize(fn) {
@@ -113,7 +163,9 @@ var EndpointFactory = class EndpointFactory {
113
163
  defaultAuthorizerName: this.defaultAuthorizerName,
114
164
  defaultAuditorStorage: this.defaultAuditorStorage,
115
165
  defaultDatabaseService: this.defaultDatabaseService,
116
- defaultActorExtractor: this.defaultActorExtractor
166
+ defaultActorExtractor: this.defaultActorExtractor,
167
+ customSecuritySchemes: this.customSecuritySchemes,
168
+ defaultRlsConfig: this.defaultRlsConfig
117
169
  });
118
170
  }
119
171
  services(services) {
@@ -128,7 +180,9 @@ var EndpointFactory = class EndpointFactory {
128
180
  defaultAuthorizerName: this.defaultAuthorizerName,
129
181
  defaultAuditorStorage: this.defaultAuditorStorage,
130
182
  defaultDatabaseService: this.defaultDatabaseService,
131
- defaultActorExtractor: this.defaultActorExtractor
183
+ defaultActorExtractor: this.defaultActorExtractor,
184
+ customSecuritySchemes: this.customSecuritySchemes,
185
+ defaultRlsConfig: this.defaultRlsConfig
132
186
  });
133
187
  }
134
188
  logger(logger) {
@@ -143,7 +197,9 @@ var EndpointFactory = class EndpointFactory {
143
197
  defaultAuthorizerName: this.defaultAuthorizerName,
144
198
  defaultAuditorStorage: this.defaultAuditorStorage,
145
199
  defaultDatabaseService: this.defaultDatabaseService,
146
- defaultActorExtractor: this.defaultActorExtractor
200
+ defaultActorExtractor: this.defaultActorExtractor,
201
+ customSecuritySchemes: this.customSecuritySchemes,
202
+ defaultRlsConfig: this.defaultRlsConfig
147
203
  });
148
204
  }
149
205
  publisher(publisher) {
@@ -158,7 +214,9 @@ var EndpointFactory = class EndpointFactory {
158
214
  defaultAuthorizerName: this.defaultAuthorizerName,
159
215
  defaultAuditorStorage: this.defaultAuditorStorage,
160
216
  defaultDatabaseService: this.defaultDatabaseService,
161
- defaultActorExtractor: this.defaultActorExtractor
217
+ defaultActorExtractor: this.defaultActorExtractor,
218
+ customSecuritySchemes: this.customSecuritySchemes,
219
+ defaultRlsConfig: this.defaultRlsConfig
162
220
  });
163
221
  }
164
222
  session(session) {
@@ -173,7 +231,9 @@ var EndpointFactory = class EndpointFactory {
173
231
  defaultAuthorizerName: this.defaultAuthorizerName,
174
232
  defaultAuditorStorage: this.defaultAuditorStorage,
175
233
  defaultDatabaseService: this.defaultDatabaseService,
176
- defaultActorExtractor: this.defaultActorExtractor
234
+ defaultActorExtractor: this.defaultActorExtractor,
235
+ customSecuritySchemes: this.customSecuritySchemes,
236
+ defaultRlsConfig: this.defaultRlsConfig
177
237
  });
178
238
  }
179
239
  /**
@@ -191,7 +251,9 @@ var EndpointFactory = class EndpointFactory {
191
251
  availableAuthorizers: this.availableAuthorizers,
192
252
  defaultAuthorizerName: this.defaultAuthorizerName,
193
253
  defaultAuditorStorage: this.defaultAuditorStorage,
194
- defaultDatabaseService: service
254
+ defaultDatabaseService: service,
255
+ customSecuritySchemes: this.customSecuritySchemes,
256
+ defaultRlsConfig: this.defaultRlsConfig
195
257
  });
196
258
  }
197
259
  /**
@@ -211,7 +273,9 @@ var EndpointFactory = class EndpointFactory {
211
273
  defaultAuthorizerName: this.defaultAuthorizerName,
212
274
  defaultAuditorStorage: storage,
213
275
  defaultDatabaseService: this.defaultDatabaseService,
214
- defaultActorExtractor: this.defaultActorExtractor
276
+ defaultActorExtractor: this.defaultActorExtractor,
277
+ customSecuritySchemes: this.customSecuritySchemes,
278
+ defaultRlsConfig: this.defaultRlsConfig
215
279
  });
216
280
  }
217
281
  /**
@@ -230,7 +294,44 @@ var EndpointFactory = class EndpointFactory {
230
294
  defaultAuthorizerName: this.defaultAuthorizerName,
231
295
  defaultAuditorStorage: this.defaultAuditorStorage,
232
296
  defaultDatabaseService: this.defaultDatabaseService,
233
- defaultActorExtractor: extractor
297
+ defaultActorExtractor: extractor,
298
+ customSecuritySchemes: this.customSecuritySchemes,
299
+ defaultRlsConfig: this.defaultRlsConfig
300
+ });
301
+ }
302
+ /**
303
+ * Set the RLS (Row-Level Security) configuration for endpoints created from this factory.
304
+ * This enables automatic PostgreSQL session variable setting for RLS policies.
305
+ *
306
+ * @example
307
+ * ```typescript
308
+ * const api = new EndpointFactory()
309
+ * .database(databaseService)
310
+ * .session(extractSession)
311
+ * .rls({
312
+ * extractor: ({ session }) => ({
313
+ * user_id: session.userId,
314
+ * tenant_id: session.tenantId,
315
+ * }),
316
+ * prefix: 'app',
317
+ * });
318
+ * ```
319
+ */
320
+ rls(config) {
321
+ return new EndpointFactory({
322
+ defaultServices: this.defaultServices,
323
+ basePath: this.basePath,
324
+ defaultAuthorizeFn: this.defaultAuthorizeFn,
325
+ defaultLogger: this.defaultLogger,
326
+ defaultSessionExtractor: this.defaultSessionExtractor,
327
+ defaultEventPublisher: this.defaultEventPublisher,
328
+ availableAuthorizers: this.availableAuthorizers,
329
+ defaultAuthorizerName: this.defaultAuthorizerName,
330
+ defaultAuditorStorage: this.defaultAuditorStorage,
331
+ defaultDatabaseService: this.defaultDatabaseService,
332
+ defaultActorExtractor: this.defaultActorExtractor,
333
+ customSecuritySchemes: this.customSecuritySchemes,
334
+ defaultRlsConfig: config
234
335
  });
235
336
  }
236
337
  createBuilder(method, path) {
@@ -246,6 +347,8 @@ var EndpointFactory = class EndpointFactory {
246
347
  if (this.defaultAuditorStorage) builder._setAuditorStorage(this.defaultAuditorStorage);
247
348
  if (this.defaultDatabaseService) builder._setDatabaseService(this.defaultDatabaseService);
248
349
  if (this.defaultActorExtractor) builder._actorExtractor = this.defaultActorExtractor;
350
+ builder._customSecuritySchemes = this.customSecuritySchemes;
351
+ if (this.defaultRlsConfig) builder._rlsConfig = this.defaultRlsConfig;
249
352
  return builder;
250
353
  }
251
354
  post(path) {
@@ -282,4 +385,4 @@ Object.defineProperty(exports, 'e', {
282
385
  return e;
283
386
  }
284
387
  });
285
- //# sourceMappingURL=EndpointFactory-D5lFZXqY.cjs.map
388
+ //# sourceMappingURL=EndpointFactory-DcT_g9M_.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EndpointFactory-DcT_g9M_.cjs","names":["ConsoleLogger","path: P","basePath: TBasePath","authorizers: T","schemes: T","name:\n | BuiltInSecuritySchemeId\n | keyof TSecuritySchemes\n | TAuthorizers[number]\n | 'none'","path: TPath","fn: AuthorizeFn<TServices, TLogger, TSession>","services: S","logger: L","publisher: Service<TServiceName, T>","session: SessionFn<TServices, TLogger, T, TDatabase>","service: Service<TName, T>","storage: Service<TName, T>","extractor: ActorExtractor<TServices, TSession, TLogger>","config: TConfig","method: TMethod","EndpointBuilder"],"sources":["../src/endpoints/EndpointFactory.ts"],"sourcesContent":["import type {\n AuditStorage,\n AuditableAction,\n ExtractStorageAuditAction,\n} from '@geekmidas/audit';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { Service } from '@geekmidas/services';\nimport uniqBy from 'lodash.uniqby';\nimport type { HttpMethod } from '../types';\nimport type {\n Authorizer,\n BuiltInSecuritySchemeId,\n SecurityScheme,\n} from './Authorizer';\nimport type { AuthorizeFn, SessionFn } from './Endpoint';\nimport { EndpointBuilder } from './EndpointBuilder';\nimport type { ActorExtractor } from './audit';\nimport type { RlsConfig } from './rls';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class EndpointFactory<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuthorizers extends readonly string[] = readonly string[],\n TAuditStorage extends AuditStorage<any> | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TAuditAction extends AuditableAction<\n string,\n unknown\n > = ExtractStorageAuditAction<NonNullable<TAuditStorage>>,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TSecuritySchemes extends Record<string, SecurityScheme> = Record<\n string,\n SecurityScheme\n >,\n TRlsConfig extends\n | RlsConfig<TServices, TSession, TLogger>\n | undefined = undefined,\n> {\n // @ts-ignore\n private defaultServices: TServices;\n private basePath: TBasePath = '' as TBasePath;\n private defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n private defaultEventPublisher:\n | Service<TEventPublisherServiceName, TEventPublisher>\n | undefined;\n private defaultSessionExtractor?: SessionFn<\n TServices,\n TLogger,\n TSession,\n TDatabase\n >;\n private defaultLogger: TLogger = DEFAULT_LOGGER;\n private availableAuthorizers: Authorizer[] = [];\n private defaultAuthorizerName?: TAuthorizers[number];\n private defaultAuditorStorage:\n | Service<TAuditStorageServiceName, TAuditStorage>\n | undefined;\n private defaultDatabaseService:\n | Service<TDatabaseServiceName, TDatabase>\n | undefined;\n private defaultActorExtractor?: ActorExtractor<TServices, TSession, TLogger>;\n private customSecuritySchemes: TSecuritySchemes = {} as TSecuritySchemes;\n private defaultRlsConfig?: TRlsConfig;\n\n constructor({\n basePath,\n defaultAuthorizeFn,\n defaultLogger,\n defaultSessionExtractor,\n // @ts-ignore\n defaultServices = [] as TServices,\n defaultEventPublisher,\n availableAuthorizers = [],\n defaultAuthorizerName,\n defaultAuditorStorage,\n defaultDatabaseService,\n defaultActorExtractor,\n customSecuritySchemes = {} as TSecuritySchemes,\n defaultRlsConfig,\n }: EndpointFactoryOptions<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n > = {}) {\n // Initialize default services\n this.defaultServices = uniqBy(\n defaultServices,\n (s) => s.serviceName,\n ) as TServices;\n\n this.basePath = basePath || ('' as TBasePath);\n this.defaultAuthorizeFn = defaultAuthorizeFn;\n this.defaultLogger = defaultLogger || (DEFAULT_LOGGER as TLogger);\n this.defaultSessionExtractor = defaultSessionExtractor;\n this.defaultEventPublisher = defaultEventPublisher;\n this.availableAuthorizers = availableAuthorizers;\n this.defaultAuthorizerName = defaultAuthorizerName;\n this.defaultAuditorStorage = defaultAuditorStorage;\n this.defaultDatabaseService = defaultDatabaseService;\n this.defaultActorExtractor = defaultActorExtractor;\n this.customSecuritySchemes = customSecuritySchemes;\n this.defaultRlsConfig = defaultRlsConfig;\n }\n\n static joinPaths<TBasePath extends string, P extends string>(\n path: P,\n basePath: TBasePath = '' as TBasePath,\n ): JoinPaths<TBasePath, P> {\n // Handle empty cases\n if (!basePath && !path) return '/' as JoinPaths<TBasePath, P>;\n if (!basePath)\n return (path.startsWith('/') ? path : '/' + path) as JoinPaths<\n TBasePath,\n P\n >;\n if (!path)\n return (\n basePath.startsWith('/') ? basePath : '/' + basePath\n ) as JoinPaths<TBasePath, P>;\n\n const base = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;\n const segment = path.startsWith('/') ? path : '/' + path;\n\n let result = base + segment;\n\n // Ensure leading slash\n if (!result.startsWith('/')) {\n result = '/' + result;\n }\n\n // Normalize multiple slashes (except in the middle of the path where they might be intentional)\n result = result.replace(/^\\/+/g, '/');\n\n // Remove trailing slash unless it's the root path \"/\"\n if (result.length > 1 && result.endsWith('/')) {\n result = result.slice(0, -1);\n }\n\n return result as JoinPaths<TBasePath, P>;\n }\n\n // Configure available authorizers\n authorizers<const T extends readonly string[]>(\n authorizers: T,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n T,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n const authorizerConfigs = authorizers.map((name) => ({\n name,\n }));\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n T,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: authorizerConfigs,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n /**\n * Define custom security schemes for this factory.\n * These extend the built-in schemes (jwt, bearer, apiKey, oauth2, oidc).\n *\n * @example\n * ```typescript\n * const router = e.securitySchemes({\n * awsIamSigV4: {\n * type: 'apiKey',\n * in: 'header',\n * name: 'Authorization',\n * 'x-amazon-apigateway-authtype': 'awsSigv4',\n * },\n * });\n * ```\n */\n securitySchemes<T extends Record<string, SecurityScheme>>(\n schemes: T,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes & T\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes & T\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: {\n ...this.customSecuritySchemes,\n ...schemes,\n } as TSecuritySchemes & T,\n });\n }\n\n /**\n * Set the default authorizer for all endpoints created from this factory.\n * Individual endpoints can override this by calling `.authorizer()` on the builder.\n * Use `'none'` to explicitly disable authorization for all endpoints.\n *\n * Accepts:\n * - Built-in security scheme names: 'jwt', 'bearer', 'apiKey', 'oauth2', 'oidc'\n * - Custom security scheme names defined via `.securitySchemes()`\n * - 'none' to disable authorization\n */\n authorizer(\n name:\n | BuiltInSecuritySchemeId\n | keyof TSecuritySchemes\n | TAuthorizers[number]\n | 'none',\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n // Validate that the authorizer exists in available authorizers (if authorizers() was called)\n if (name !== 'none' && this.availableAuthorizers.length > 0) {\n const authorizerExists = this.availableAuthorizers.some(\n (a) => a.name === name,\n );\n if (!authorizerExists) {\n const available = this.availableAuthorizers\n .map((a) => a.name)\n .join(', ');\n throw new Error(\n `Authorizer \"${name as string}\" not found in available authorizers: ${available}`,\n );\n }\n }\n\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName:\n name === 'none' ? undefined : (name as TAuthorizers[number]),\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n // Create a sub-router with a path prefix\n route<TPath extends string>(\n path: TPath,\n ): EndpointFactory<\n TServices,\n JoinPaths<TBasePath, TPath>,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n const newBasePath = EndpointFactory.joinPaths(path, this.basePath);\n return new EndpointFactory<\n TServices,\n JoinPaths<TBasePath, TPath>,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: newBasePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n // Create a new factory with authorization\n authorize(\n fn: AuthorizeFn<TServices, TLogger, TSession>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: fn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n // Create a new factory with services\n services<S extends Service[]>(\n services: S,\n ): EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n return new EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: [...services, ...this.defaultServices],\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n logger<L extends Logger>(\n logger: L,\n ): EndpointFactory<\n TServices,\n TBasePath,\n L,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n L,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn as unknown as AuthorizeFn<\n TServices,\n L,\n TSession\n >,\n defaultLogger: logger,\n defaultSessionExtractor: this\n .defaultSessionExtractor as unknown as SessionFn<\n TServices,\n L,\n TSession\n >,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this\n .defaultActorExtractor as unknown as ActorExtractor<\n TServices,\n TSession,\n L\n >,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n publisher<\n T extends EventPublisher<any>,\n TServiceName extends string = string,\n >(\n publisher: Service<TServiceName, T>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n T,\n TServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n T,\n TServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: publisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n session<T>(\n session: SessionFn<TServices, TLogger, T, TDatabase>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn as unknown as AuthorizeFn<\n TServices,\n TLogger,\n T\n >,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: session,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this\n .defaultActorExtractor as unknown as ActorExtractor<\n TServices,\n T,\n TLogger\n >,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n /**\n * Set the database service for endpoints created from this factory.\n * The database will be available in handler context as `db`.\n */\n database<T, TName extends string>(\n service: Service<TName, T>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n T,\n TName,\n TSecuritySchemes\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n T,\n TName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n // Reset session extractor when database changes - user should call .session() after .database()\n // to get proper type inference for the new database type\n defaultSessionExtractor: this.defaultSessionExtractor as unknown as\n | SessionFn<TServices, TLogger, TSession, T>\n | undefined,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: service,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n /**\n * Set the auditor storage service for endpoints created from this factory.\n * This enables audit functionality and makes `auditor` available in handler context.\n * The audit action type is automatically inferred from the storage's generic parameter.\n */\n auditor<T extends AuditStorage<any>, TName extends string>(\n storage: Service<TName, T>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n T,\n TName,\n ExtractStorageAuditAction<T>,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n T,\n TName,\n ExtractStorageAuditAction<T>,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: storage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this\n .defaultActorExtractor as unknown as ActorExtractor<\n TServices,\n TSession,\n TLogger\n >,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n /**\n * Set the actor extractor function for endpoints created from this factory.\n * The actor is extracted from the request context and attached to all audits.\n */\n actor(\n extractor: ActorExtractor<TServices, TSession, TLogger>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: extractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n /**\n * Set the RLS (Row-Level Security) configuration for endpoints created from this factory.\n * This enables automatic PostgreSQL session variable setting for RLS policies.\n *\n * @example\n * ```typescript\n * const api = new EndpointFactory()\n * .database(databaseService)\n * .session(extractSession)\n * .rls({\n * extractor: ({ session }) => ({\n * user_id: session.userId,\n * tenant_id: session.tenantId,\n * }),\n * prefix: 'app',\n * });\n * ```\n */\n rls<TConfig extends RlsConfig<TServices, TSession, TLogger>>(\n config: TConfig,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TConfig\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: config,\n });\n }\n\n private createBuilder<TMethod extends HttpMethod, TPath extends string>(\n method: TMethod,\n path: TPath,\n ): EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n const fullPath = EndpointFactory.joinPaths(path, this.basePath);\n const builder = new EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n >(fullPath, method);\n\n if (this.defaultAuthorizeFn) {\n // @ts-ignore\n builder._authorize = this.defaultAuthorizeFn;\n }\n if (this.defaultServices.length) {\n // Create a copy to avoid sharing references between builders\n builder._services = [...this.defaultServices] as TServices;\n }\n\n if (this.defaultLogger) {\n builder._logger = this.defaultLogger as TLogger;\n }\n\n if (this.defaultSessionExtractor) {\n builder._getSession = this.defaultSessionExtractor as SessionFn<\n TServices,\n TLogger,\n TSession\n >;\n }\n\n if (this.defaultEventPublisher) {\n builder._setPublisher(this.defaultEventPublisher);\n }\n\n // Set available authorizers and default\n builder._availableAuthorizers = this.availableAuthorizers;\n if (this.defaultAuthorizerName) {\n builder._authorizerName = this.defaultAuthorizerName;\n }\n\n // Set auditor storage if configured\n if (this.defaultAuditorStorage) {\n builder._setAuditorStorage(this.defaultAuditorStorage as any);\n }\n\n // Set database service if configured\n if (this.defaultDatabaseService) {\n builder._setDatabaseService(this.defaultDatabaseService as any);\n }\n\n // Set actor extractor if configured\n if (this.defaultActorExtractor) {\n builder._actorExtractor = this.defaultActorExtractor;\n }\n\n // Set custom security schemes\n builder._customSecuritySchemes = this.customSecuritySchemes;\n\n // Set RLS config if configured\n if (this.defaultRlsConfig) {\n builder._rlsConfig = this.defaultRlsConfig as any;\n }\n\n return builder;\n }\n\n post<TPath extends string>(path: TPath) {\n return this.createBuilder('POST', path);\n }\n\n get<TPath extends string>(path: TPath) {\n return this.createBuilder('GET', path);\n }\n\n put<TPath extends string>(path: TPath) {\n return this.createBuilder('PUT', path);\n }\n\n delete<TPath extends string>(path: TPath) {\n return this.createBuilder('DELETE', path);\n }\n\n patch<TPath extends string>(path: TPath) {\n return this.createBuilder('PATCH', path);\n }\n\n options<TPath extends string>(path: TPath) {\n return this.createBuilder('OPTIONS', path);\n }\n}\n\nexport type RemoveTrailingSlash<T extends string> = T extends `${infer Rest}/`\n ? Rest extends ''\n ? T // Keep \"/\" as is\n : Rest\n : T;\n\nexport type JoinPaths<\n TBasePath extends string,\n TPath extends string,\n> = RemoveTrailingSlash<\n TBasePath extends ''\n ? TPath\n : TPath extends ''\n ? TBasePath\n : TBasePath extends '/'\n ? TPath extends `/${string}`\n ? TPath\n : `/${TPath}`\n : TBasePath extends `${infer Base}/`\n ? TPath extends `/${infer Rest}`\n ? `${Base}/${Rest}`\n : `${Base}/${TPath}`\n : TPath extends `/${infer Rest}`\n ? `${TBasePath}/${Rest}`\n : `${TBasePath}/${TPath}`\n>;\n\nexport interface EndpointFactoryOptions<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuthorizers extends readonly string[] = readonly string[],\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TSecuritySchemes extends Record<string, SecurityScheme> = Record<\n string,\n SecurityScheme\n >,\n TRlsConfig extends\n | RlsConfig<TServices, TSession, TLogger>\n | undefined = undefined,\n> {\n defaultServices?: TServices;\n basePath?: TBasePath;\n defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n defaultLogger?: TLogger;\n defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession, TDatabase>;\n defaultEventPublisher?: Service<TEventPublisherServiceName, TEventPublisher>;\n defaultEvents?: MappedEvent<TEventPublisher, undefined>[];\n availableAuthorizers?: Authorizer[];\n defaultAuthorizerName?: TAuthorizers[number];\n defaultAuditorStorage?: Service<TAuditStorageServiceName, TAuditStorage>;\n defaultDatabaseService?: Service<TDatabaseServiceName, TDatabase>;\n defaultActorExtractor?: ActorExtractor<TServices, TSession, TLogger>;\n customSecuritySchemes?: TSecuritySchemes;\n defaultRlsConfig?: TRlsConfig;\n}\n\nexport const e = new EndpointFactory();\n"],"mappings":"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"}