@geekmidas/constructs 0.1.0 → 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 (182) hide show
  1. package/dist/{AWSLambdaFunction-DCh1tOhB.d.mts → AWSLambdaFunction-D9RZhm0N.d.mts} +3 -3
  2. package/dist/{AWSLambdaSubscriberAdaptor-DtNZPMoV.d.mts → AWSLambdaSubscriberAdaptor-C0aZBU64.d.mts} +2 -2
  3. package/dist/{AmazonApiGatewayEndpointAdaptor-CPqlw2Rx.cjs → AmazonApiGatewayEndpointAdaptor-Bk6ssx3K.cjs} +38 -25
  4. package/dist/AmazonApiGatewayEndpointAdaptor-Bk6ssx3K.cjs.map +1 -0
  5. package/dist/{AmazonApiGatewayEndpointAdaptor-TP_hLNAa.d.cts → AmazonApiGatewayEndpointAdaptor-CbJqLU6I.d.cts} +2 -2
  6. package/dist/{AmazonApiGatewayEndpointAdaptor-BaTM2TNu.d.mts → AmazonApiGatewayEndpointAdaptor-DC3N7zY_.d.mts} +3 -3
  7. package/dist/{AmazonApiGatewayEndpointAdaptor-Cm4iD199.mjs → AmazonApiGatewayEndpointAdaptor-pEWzF2uY.mjs} +38 -25
  8. package/dist/AmazonApiGatewayEndpointAdaptor-pEWzF2uY.mjs.map +1 -0
  9. package/dist/{AmazonApiGatewayV1EndpointAdaptor-B2ZpUFiC.d.mts → AmazonApiGatewayV1EndpointAdaptor-BVxgQ-7J.d.mts} +4 -4
  10. package/dist/{AmazonApiGatewayV1EndpointAdaptor-CConfCqz.d.cts → AmazonApiGatewayV1EndpointAdaptor-CVwJ5k16.d.cts} +3 -3
  11. package/dist/{AmazonApiGatewayV1EndpointAdaptor-D38HuQa9.mjs → AmazonApiGatewayV1EndpointAdaptor-MJpRbIaQ.mjs} +2 -2
  12. package/dist/{AmazonApiGatewayV1EndpointAdaptor-D38HuQa9.mjs.map → AmazonApiGatewayV1EndpointAdaptor-MJpRbIaQ.mjs.map} +1 -1
  13. package/dist/{AmazonApiGatewayV1EndpointAdaptor-tjpvLBRb.cjs → AmazonApiGatewayV1EndpointAdaptor-uBp_4zLf.cjs} +2 -2
  14. package/dist/{AmazonApiGatewayV1EndpointAdaptor-tjpvLBRb.cjs.map → AmazonApiGatewayV1EndpointAdaptor-uBp_4zLf.cjs.map} +1 -1
  15. package/dist/{AmazonApiGatewayV2EndpointAdaptor-DurJvFwa.d.cts → AmazonApiGatewayV2EndpointAdaptor-1oBZdQH3.d.cts} +3 -3
  16. package/dist/{AmazonApiGatewayV2EndpointAdaptor-BwMQInBi.d.mts → AmazonApiGatewayV2EndpointAdaptor-C3H8Hpv7.d.mts} +4 -4
  17. package/dist/{AmazonApiGatewayV2EndpointAdaptor-ByYtiJtN.mjs → AmazonApiGatewayV2EndpointAdaptor-ChO8BlDz.mjs} +2 -2
  18. package/dist/{AmazonApiGatewayV2EndpointAdaptor-ByYtiJtN.mjs.map → AmazonApiGatewayV2EndpointAdaptor-ChO8BlDz.mjs.map} +1 -1
  19. package/dist/{AmazonApiGatewayV2EndpointAdaptor-DcJ_w3ro.cjs → AmazonApiGatewayV2EndpointAdaptor-I1W23Nvn.cjs} +2 -2
  20. package/dist/{AmazonApiGatewayV2EndpointAdaptor-DcJ_w3ro.cjs.map → AmazonApiGatewayV2EndpointAdaptor-I1W23Nvn.cjs.map} +1 -1
  21. package/dist/{Authorizer-D1w7MpK6.d.mts → Authorizer-Cpx59w_q.d.mts} +1 -1
  22. package/dist/{BaseFunctionBuilder-Oc2xmxmg.d.mts → BaseFunctionBuilder-CoV7J45W.d.mts} +2 -2
  23. package/dist/{Construct-DCPATqec.d.mts → Construct-jBKqb-Zi.d.mts} +1 -1
  24. package/dist/Construct.d.mts +1 -1
  25. package/dist/{Cron-DPEcDCDW.d.mts → Cron-JZkp_fHy.d.mts} +2 -2
  26. package/dist/{CronBuilder-CxKTiepV.d.mts → CronBuilder-BmFDO0Dm.d.mts} +4 -4
  27. package/dist/{Endpoint-DbPsw13b.mjs → Endpoint-B70_KKhu.mjs} +8 -2
  28. package/dist/Endpoint-B70_KKhu.mjs.map +1 -0
  29. package/dist/{Endpoint-CA-byrDr.cjs → Endpoint-BJo9Hhwm.cjs} +8 -2
  30. package/dist/Endpoint-BJo9Hhwm.cjs.map +1 -0
  31. package/dist/{Endpoint-DoY1Owv2.d.mts → Endpoint-C5djXyae.d.mts} +69 -6
  32. package/dist/{Endpoint-BJPJTGjV.d.cts → Endpoint-CC2RGjkl.d.cts} +66 -3
  33. package/dist/{EndpointBuilder-BJRkivxQ.d.mts → EndpointBuilder-CD8LkBda.d.mts} +42 -5
  34. package/dist/{EndpointBuilder-Bhyft7WY.cjs → EndpointBuilder-DeswNQdG.cjs} +55 -3
  35. package/dist/EndpointBuilder-DeswNQdG.cjs.map +1 -0
  36. package/dist/{EndpointBuilder-69uVrKZL.mjs → EndpointBuilder-FyyoFTJ5.mjs} +55 -3
  37. package/dist/{EndpointBuilder-Bhyft7WY.cjs.map → EndpointBuilder-FyyoFTJ5.mjs.map} +1 -1
  38. package/dist/{EndpointBuilder-CQ-jOXsD.d.cts → EndpointBuilder-vXk6eIJk.d.cts} +39 -2
  39. package/dist/{EndpointFactory-DgwmAR_8.d.cts → EndpointFactory-3g-7Rznt.d.cts} +30 -8
  40. package/dist/{EndpointFactory-BKEPcQgE.d.mts → EndpointFactory-DaFR9LQG.d.mts} +31 -9
  41. package/dist/{EndpointFactory-BcVbkrxf.cjs → EndpointFactory-DcT_g9M_.cjs} +63 -14
  42. package/dist/EndpointFactory-DcT_g9M_.cjs.map +1 -0
  43. package/dist/{EndpointFactory-ARUlRlyM.mjs → EndpointFactory-KJAjBWmO.mjs} +63 -14
  44. package/dist/EndpointFactory-KJAjBWmO.mjs.map +1 -0
  45. package/dist/{Function-Dthlh2Fb.d.mts → Function-Vh1t-Qjj.d.mts} +2 -2
  46. package/dist/{FunctionBuilder-CZFBLfdV.d.mts → FunctionBuilder-3jsoFffg.d.mts} +4 -4
  47. package/dist/{FunctionExecutionWrapper-CfuajSB5.d.mts → FunctionExecutionWrapper-CI3CaoCo.d.mts} +2 -2
  48. package/dist/{HonoEndpointAdaptor-sSG85VER.d.cts → HonoEndpointAdaptor-BJh4J-J9.d.cts} +2 -2
  49. package/dist/{HonoEndpointAdaptor-BmB4Sc7L.mjs → HonoEndpointAdaptor-CcvXzoYV.mjs} +41 -28
  50. package/dist/HonoEndpointAdaptor-CcvXzoYV.mjs.map +1 -0
  51. package/dist/{HonoEndpointAdaptor-CnqR6PSB.cjs → HonoEndpointAdaptor-DodwLM0-.cjs} +41 -28
  52. package/dist/HonoEndpointAdaptor-DodwLM0-.cjs.map +1 -0
  53. package/dist/{HonoEndpointAdaptor-DBjipl6Q.d.mts → HonoEndpointAdaptor-kb1ByjUL.d.mts} +5 -5
  54. package/dist/{Subscriber-DvOtIyWq.cjs → Subscriber-DOt3svUC.cjs} +1 -1
  55. package/dist/{Subscriber-DvOtIyWq.cjs.map → Subscriber-DOt3svUC.cjs.map} +1 -1
  56. package/dist/{Subscriber-BfxLwZpX.d.mts → Subscriber-aNr1qkxR.d.mts} +2 -2
  57. package/dist/{Subscriber-JzcFFi4p.mjs → Subscriber-kCHbH2fZ.mjs} +1 -1
  58. package/dist/{Subscriber-JzcFFi4p.mjs.map → Subscriber-kCHbH2fZ.mjs.map} +1 -1
  59. package/dist/{SubscriberBuilder-lTiTUS1o.d.mts → SubscriberBuilder-CWS4tdbp.d.mts} +2 -2
  60. package/dist/{SubscriberBuilder-DUuV207i.cjs → SubscriberBuilder-Cj2u9k5Q.cjs} +2 -2
  61. package/dist/{SubscriberBuilder-DUuV207i.cjs.map → SubscriberBuilder-Cj2u9k5Q.cjs.map} +1 -1
  62. package/dist/{SubscriberBuilder-tm4oVOt3.mjs → SubscriberBuilder-DmxMU89X.mjs} +2 -2
  63. package/dist/{SubscriberBuilder-tm4oVOt3.mjs.map → SubscriberBuilder-DmxMU89X.mjs.map} +1 -1
  64. package/dist/{TestEndpointAdaptor-o7JbNcL-.mjs → TestEndpointAdaptor-1pPixE6y.mjs} +2 -2
  65. package/dist/{TestEndpointAdaptor-o7JbNcL-.mjs.map → TestEndpointAdaptor-1pPixE6y.mjs.map} +1 -1
  66. package/dist/{TestEndpointAdaptor-CGQVysE0.d.mts → TestEndpointAdaptor-5-unBV8O.d.mts} +3 -3
  67. package/dist/{TestEndpointAdaptor-CJO-og9U.d.cts → TestEndpointAdaptor-Bm0UjDtV.d.cts} +2 -2
  68. package/dist/{TestEndpointAdaptor-BtLcw4JW.cjs → TestEndpointAdaptor-wA-fmq4v.cjs} +2 -2
  69. package/dist/{TestEndpointAdaptor-BtLcw4JW.cjs.map → TestEndpointAdaptor-wA-fmq4v.cjs.map} +1 -1
  70. package/dist/adaptors/aws.cjs +4 -4
  71. package/dist/adaptors/aws.d.cts +4 -4
  72. package/dist/adaptors/aws.d.mts +15 -15
  73. package/dist/adaptors/aws.mjs +4 -4
  74. package/dist/adaptors/hono.cjs +3 -3
  75. package/dist/adaptors/hono.d.cts +2 -2
  76. package/dist/adaptors/hono.d.mts +9 -9
  77. package/dist/adaptors/hono.mjs +3 -3
  78. package/dist/adaptors/testing.cjs +2 -2
  79. package/dist/adaptors/testing.d.cts +2 -2
  80. package/dist/adaptors/testing.d.mts +9 -9
  81. package/dist/adaptors/testing.mjs +2 -2
  82. package/dist/crons/Cron.d.mts +6 -6
  83. package/dist/crons/CronBuilder.d.mts +7 -7
  84. package/dist/crons/index.d.mts +7 -7
  85. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +2 -2
  86. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +2 -2
  87. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +9 -9
  88. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +2 -2
  89. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +3 -3
  90. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +3 -3
  91. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +10 -10
  92. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +3 -3
  93. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +3 -3
  94. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +3 -3
  95. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +10 -10
  96. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +3 -3
  97. package/dist/endpoints/Authorizer.d.mts +1 -1
  98. package/dist/endpoints/Endpoint.cjs +1 -1
  99. package/dist/endpoints/Endpoint.d.cts +1 -1
  100. package/dist/endpoints/Endpoint.d.mts +8 -8
  101. package/dist/endpoints/Endpoint.mjs +1 -1
  102. package/dist/endpoints/EndpointBuilder.cjs +3 -2
  103. package/dist/endpoints/EndpointBuilder.d.cts +2 -2
  104. package/dist/endpoints/EndpointBuilder.d.mts +9 -9
  105. package/dist/endpoints/EndpointBuilder.mjs +3 -2
  106. package/dist/endpoints/EndpointFactory.cjs +4 -3
  107. package/dist/endpoints/EndpointFactory.d.cts +3 -3
  108. package/dist/endpoints/EndpointFactory.d.mts +10 -10
  109. package/dist/endpoints/EndpointFactory.mjs +4 -3
  110. package/dist/endpoints/HonoEndpointAdaptor.cjs +3 -3
  111. package/dist/endpoints/HonoEndpointAdaptor.d.cts +2 -2
  112. package/dist/endpoints/HonoEndpointAdaptor.d.mts +9 -9
  113. package/dist/endpoints/HonoEndpointAdaptor.mjs +3 -3
  114. package/dist/endpoints/TestEndpointAdaptor.cjs +2 -2
  115. package/dist/endpoints/TestEndpointAdaptor.d.cts +2 -2
  116. package/dist/endpoints/TestEndpointAdaptor.d.mts +9 -9
  117. package/dist/endpoints/TestEndpointAdaptor.mjs +2 -2
  118. package/dist/endpoints/audit.d.cts +1 -1
  119. package/dist/endpoints/audit.d.mts +8 -8
  120. package/dist/endpoints/helpers.cjs +2 -2
  121. package/dist/endpoints/helpers.d.cts +1 -1
  122. package/dist/endpoints/helpers.d.mts +8 -8
  123. package/dist/endpoints/helpers.mjs +2 -2
  124. package/dist/endpoints/index.cjs +5 -3
  125. package/dist/endpoints/index.cjs.map +1 -1
  126. package/dist/endpoints/index.d.cts +5 -5
  127. package/dist/endpoints/index.d.mts +13 -13
  128. package/dist/endpoints/index.mjs +5 -4
  129. package/dist/endpoints/index.mjs.map +1 -1
  130. package/dist/endpoints/processAudits.d.cts +1 -1
  131. package/dist/endpoints/processAudits.d.mts +8 -8
  132. package/dist/endpoints/rls.cjs +3 -0
  133. package/dist/endpoints/rls.d.cts +9 -0
  134. package/dist/endpoints/rls.d.mts +9 -0
  135. package/dist/endpoints/rls.mjs +3 -0
  136. package/dist/functions/AWSLambdaFunction.d.mts +4 -4
  137. package/dist/functions/BaseFunctionBuilder.d.mts +2 -2
  138. package/dist/functions/Function.d.mts +2 -2
  139. package/dist/functions/FunctionBuilder.d.mts +4 -4
  140. package/dist/functions/FunctionExecutionWrapper.d.mts +3 -3
  141. package/dist/functions/TestFunctionAdaptor.d.mts +2 -2
  142. package/dist/functions/index.d.mts +5 -5
  143. package/dist/{helpers-CrrdyA04.mjs → helpers-C3B2lVrM.mjs} +2 -2
  144. package/dist/{helpers-CrrdyA04.mjs.map → helpers-C3B2lVrM.mjs.map} +1 -1
  145. package/dist/{helpers-DiPZVJQC.cjs → helpers-DxxSpLfw.cjs} +2 -2
  146. package/dist/{helpers-DiPZVJQC.cjs.map → helpers-DxxSpLfw.cjs.map} +1 -1
  147. package/dist/{index-9gJrM7Rw.d.mts → index-CFyaRrck.d.mts} +2 -2
  148. package/dist/index.d.mts +2 -2
  149. package/dist/publisher.d.mts +1 -1
  150. package/dist/rls-Bf3FRwto.mjs +9 -0
  151. package/dist/rls-Bf3FRwto.mjs.map +1 -0
  152. package/dist/rls-CmJ7bRsz.cjs +15 -0
  153. package/dist/rls-CmJ7bRsz.cjs.map +1 -0
  154. package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.mts +3 -3
  155. package/dist/subscribers/Subscriber.cjs +1 -1
  156. package/dist/subscribers/Subscriber.d.mts +2 -2
  157. package/dist/subscribers/Subscriber.mjs +1 -1
  158. package/dist/subscribers/SubscriberBuilder.cjs +2 -2
  159. package/dist/subscribers/SubscriberBuilder.d.mts +3 -3
  160. package/dist/subscribers/SubscriberBuilder.mjs +2 -2
  161. package/dist/subscribers/index.cjs +2 -2
  162. package/dist/subscribers/index.d.mts +3 -3
  163. package/dist/subscribers/index.mjs +2 -2
  164. package/dist/{types-Cy1IhmUB.d.mts → types-CScirkHt.d.mts} +1 -1
  165. package/dist/types.d.mts +1 -1
  166. package/package.json +6 -5
  167. package/src/endpoints/AmazonApiGatewayEndpointAdaptor.ts +57 -26
  168. package/src/endpoints/Endpoint.ts +19 -0
  169. package/src/endpoints/EndpointBuilder.ts +57 -0
  170. package/src/endpoints/EndpointFactory.ts +119 -12
  171. package/src/endpoints/HonoEndpointAdaptor.ts +66 -37
  172. package/src/endpoints/index.ts +7 -0
  173. package/src/endpoints/rls.ts +67 -0
  174. package/dist/AmazonApiGatewayEndpointAdaptor-CPqlw2Rx.cjs.map +0 -1
  175. package/dist/AmazonApiGatewayEndpointAdaptor-Cm4iD199.mjs.map +0 -1
  176. package/dist/Endpoint-CA-byrDr.cjs.map +0 -1
  177. package/dist/Endpoint-DbPsw13b.mjs.map +0 -1
  178. package/dist/EndpointBuilder-69uVrKZL.mjs.map +0 -1
  179. package/dist/EndpointFactory-ARUlRlyM.mjs.map +0 -1
  180. package/dist/EndpointFactory-BcVbkrxf.cjs.map +0 -1
  181. package/dist/HonoEndpointAdaptor-BmB4Sc7L.mjs.map +0 -1
  182. package/dist/HonoEndpointAdaptor-CnqR6PSB.cjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- const require_EndpointBuilder = require('./EndpointBuilder-Bhyft7WY.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
 
@@ -18,7 +18,8 @@ var EndpointFactory = class EndpointFactory {
18
18
  defaultDatabaseService;
19
19
  defaultActorExtractor;
20
20
  customSecuritySchemes = {};
21
- constructor({ basePath, defaultAuthorizeFn, defaultLogger, defaultSessionExtractor, defaultServices = [], defaultEventPublisher, availableAuthorizers = [], defaultAuthorizerName, defaultAuditorStorage, defaultDatabaseService, defaultActorExtractor, customSecuritySchemes = {} } = {}) {
21
+ defaultRlsConfig;
22
+ constructor({ basePath, defaultAuthorizeFn, defaultLogger, defaultSessionExtractor, defaultServices = [], defaultEventPublisher, availableAuthorizers = [], defaultAuthorizerName, defaultAuditorStorage, defaultDatabaseService, defaultActorExtractor, customSecuritySchemes = {}, defaultRlsConfig } = {}) {
22
23
  this.defaultServices = (0, lodash_uniqby.default)(defaultServices, (s) => s.serviceName);
23
24
  this.basePath = basePath || "";
24
25
  this.defaultAuthorizeFn = defaultAuthorizeFn;
@@ -31,6 +32,7 @@ var EndpointFactory = class EndpointFactory {
31
32
  this.defaultDatabaseService = defaultDatabaseService;
32
33
  this.defaultActorExtractor = defaultActorExtractor;
33
34
  this.customSecuritySchemes = customSecuritySchemes;
35
+ this.defaultRlsConfig = defaultRlsConfig;
34
36
  }
35
37
  static joinPaths(path, basePath = "") {
36
38
  if (!basePath && !path) return "/";
@@ -58,7 +60,8 @@ var EndpointFactory = class EndpointFactory {
58
60
  defaultAuditorStorage: this.defaultAuditorStorage,
59
61
  defaultDatabaseService: this.defaultDatabaseService,
60
62
  defaultActorExtractor: this.defaultActorExtractor,
61
- customSecuritySchemes: this.customSecuritySchemes
63
+ customSecuritySchemes: this.customSecuritySchemes,
64
+ defaultRlsConfig: this.defaultRlsConfig
62
65
  });
63
66
  }
64
67
  /**
@@ -126,7 +129,8 @@ var EndpointFactory = class EndpointFactory {
126
129
  defaultAuditorStorage: this.defaultAuditorStorage,
127
130
  defaultDatabaseService: this.defaultDatabaseService,
128
131
  defaultActorExtractor: this.defaultActorExtractor,
129
- customSecuritySchemes: this.customSecuritySchemes
132
+ customSecuritySchemes: this.customSecuritySchemes,
133
+ defaultRlsConfig: this.defaultRlsConfig
130
134
  });
131
135
  }
132
136
  route(path) {
@@ -143,7 +147,8 @@ var EndpointFactory = class EndpointFactory {
143
147
  defaultAuditorStorage: this.defaultAuditorStorage,
144
148
  defaultDatabaseService: this.defaultDatabaseService,
145
149
  defaultActorExtractor: this.defaultActorExtractor,
146
- customSecuritySchemes: this.customSecuritySchemes
150
+ customSecuritySchemes: this.customSecuritySchemes,
151
+ defaultRlsConfig: this.defaultRlsConfig
147
152
  });
148
153
  }
149
154
  authorize(fn) {
@@ -159,7 +164,8 @@ var EndpointFactory = class EndpointFactory {
159
164
  defaultAuditorStorage: this.defaultAuditorStorage,
160
165
  defaultDatabaseService: this.defaultDatabaseService,
161
166
  defaultActorExtractor: this.defaultActorExtractor,
162
- customSecuritySchemes: this.customSecuritySchemes
167
+ customSecuritySchemes: this.customSecuritySchemes,
168
+ defaultRlsConfig: this.defaultRlsConfig
163
169
  });
164
170
  }
165
171
  services(services) {
@@ -175,7 +181,8 @@ var EndpointFactory = class EndpointFactory {
175
181
  defaultAuditorStorage: this.defaultAuditorStorage,
176
182
  defaultDatabaseService: this.defaultDatabaseService,
177
183
  defaultActorExtractor: this.defaultActorExtractor,
178
- customSecuritySchemes: this.customSecuritySchemes
184
+ customSecuritySchemes: this.customSecuritySchemes,
185
+ defaultRlsConfig: this.defaultRlsConfig
179
186
  });
180
187
  }
181
188
  logger(logger) {
@@ -191,7 +198,8 @@ var EndpointFactory = class EndpointFactory {
191
198
  defaultAuditorStorage: this.defaultAuditorStorage,
192
199
  defaultDatabaseService: this.defaultDatabaseService,
193
200
  defaultActorExtractor: this.defaultActorExtractor,
194
- customSecuritySchemes: this.customSecuritySchemes
201
+ customSecuritySchemes: this.customSecuritySchemes,
202
+ defaultRlsConfig: this.defaultRlsConfig
195
203
  });
196
204
  }
197
205
  publisher(publisher) {
@@ -207,7 +215,8 @@ var EndpointFactory = class EndpointFactory {
207
215
  defaultAuditorStorage: this.defaultAuditorStorage,
208
216
  defaultDatabaseService: this.defaultDatabaseService,
209
217
  defaultActorExtractor: this.defaultActorExtractor,
210
- customSecuritySchemes: this.customSecuritySchemes
218
+ customSecuritySchemes: this.customSecuritySchemes,
219
+ defaultRlsConfig: this.defaultRlsConfig
211
220
  });
212
221
  }
213
222
  session(session) {
@@ -223,7 +232,8 @@ var EndpointFactory = class EndpointFactory {
223
232
  defaultAuditorStorage: this.defaultAuditorStorage,
224
233
  defaultDatabaseService: this.defaultDatabaseService,
225
234
  defaultActorExtractor: this.defaultActorExtractor,
226
- customSecuritySchemes: this.customSecuritySchemes
235
+ customSecuritySchemes: this.customSecuritySchemes,
236
+ defaultRlsConfig: this.defaultRlsConfig
227
237
  });
228
238
  }
229
239
  /**
@@ -242,7 +252,8 @@ var EndpointFactory = class EndpointFactory {
242
252
  defaultAuthorizerName: this.defaultAuthorizerName,
243
253
  defaultAuditorStorage: this.defaultAuditorStorage,
244
254
  defaultDatabaseService: service,
245
- customSecuritySchemes: this.customSecuritySchemes
255
+ customSecuritySchemes: this.customSecuritySchemes,
256
+ defaultRlsConfig: this.defaultRlsConfig
246
257
  });
247
258
  }
248
259
  /**
@@ -263,7 +274,8 @@ var EndpointFactory = class EndpointFactory {
263
274
  defaultAuditorStorage: storage,
264
275
  defaultDatabaseService: this.defaultDatabaseService,
265
276
  defaultActorExtractor: this.defaultActorExtractor,
266
- customSecuritySchemes: this.customSecuritySchemes
277
+ customSecuritySchemes: this.customSecuritySchemes,
278
+ defaultRlsConfig: this.defaultRlsConfig
267
279
  });
268
280
  }
269
281
  /**
@@ -283,7 +295,43 @@ var EndpointFactory = class EndpointFactory {
283
295
  defaultAuditorStorage: this.defaultAuditorStorage,
284
296
  defaultDatabaseService: this.defaultDatabaseService,
285
297
  defaultActorExtractor: extractor,
286
- customSecuritySchemes: this.customSecuritySchemes
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
287
335
  });
288
336
  }
289
337
  createBuilder(method, path) {
@@ -300,6 +348,7 @@ var EndpointFactory = class EndpointFactory {
300
348
  if (this.defaultDatabaseService) builder._setDatabaseService(this.defaultDatabaseService);
301
349
  if (this.defaultActorExtractor) builder._actorExtractor = this.defaultActorExtractor;
302
350
  builder._customSecuritySchemes = this.customSecuritySchemes;
351
+ if (this.defaultRlsConfig) builder._rlsConfig = this.defaultRlsConfig;
303
352
  return builder;
304
353
  }
305
354
  post(path) {
@@ -336,4 +385,4 @@ Object.defineProperty(exports, 'e', {
336
385
  return e;
337
386
  }
338
387
  });
339
- //# sourceMappingURL=EndpointFactory-BcVbkrxf.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":";;;;;;AAqBA,MAAM,iBAAiB,IAAIA;AAE3B,IAAa,kBAAb,MAAa,gBAuBX;CAEA,AAAQ;CACR,AAAQ,WAAsB;CAC9B,AAAQ;CACR,AAAQ;CAGR,AAAQ;CAMR,AAAQ,gBAAyB;CACjC,AAAQ,uBAAqC,CAAE;CAC/C,AAAQ;CACR,AAAQ;CAGR,AAAQ;CAGR,AAAQ;CACR,AAAQ,wBAA0C,CAAE;CACpD,AAAQ;CAER,YAAY,EACV,UACA,oBACA,eACA,yBAEA,kBAAkB,CAAE,GACpB,uBACA,uBAAuB,CAAE,GACzB,uBACA,uBACA,wBACA,uBACA,wBAAwB,CAAE,GAC1B,kBAeD,GAAG,CAAE,GAAE;AAEN,OAAK,kBAAkB,2BACrB,iBACA,CAAC,MAAM,EAAE,YACV;AAED,OAAK,WAAW,YAAa;AAC7B,OAAK,qBAAqB;AAC1B,OAAK,gBAAgB,iBAAkB;AACvC,OAAK,0BAA0B;AAC/B,OAAK,wBAAwB;AAC7B,OAAK,uBAAuB;AAC5B,OAAK,wBAAwB;AAC7B,OAAK,wBAAwB;AAC7B,OAAK,yBAAyB;AAC9B,OAAK,wBAAwB;AAC7B,OAAK,wBAAwB;AAC7B,OAAK,mBAAmB;CACzB;CAED,OAAO,UACLC,MACAC,WAAsB,IACG;AAEzB,OAAK,aAAa,KAAM,QAAO;AAC/B,OAAK,SACH,QAAQ,KAAK,WAAW,IAAI,GAAG,OAAO,MAAM;AAI9C,OAAK,KACH,QACE,SAAS,WAAW,IAAI,GAAG,WAAW,MAAM;EAGhD,MAAM,OAAO,SAAS,SAAS,IAAI,GAAG,SAAS,MAAM,GAAG,GAAG,GAAG;EAC9D,MAAM,UAAU,KAAK,WAAW,IAAI,GAAG,OAAO,MAAM;EAEpD,IAAI,SAAS,OAAO;AAGpB,OAAK,OAAO,WAAW,IAAI,CACzB,UAAS,MAAM;AAIjB,WAAS,OAAO,QAAQ,SAAS,IAAI;AAGrC,MAAI,OAAO,SAAS,KAAK,OAAO,SAAS,IAAI,CAC3C,UAAS,OAAO,MAAM,GAAG,GAAG;AAG9B,SAAO;CACR;CAGD,YACEC,aAeA;EACA,MAAM,oBAAoB,YAAY,IAAI,CAAC,UAAU,EACnD,KACD,GAAE;AACH,SAAO,IAAI,gBAeT;GACA,iBAAiB,KAAK;GACtB,UAAU,KAAK;GACf,oBAAoB,KAAK;GACzB,eAAe,KAAK;GACpB,yBAAyB,KAAK;GAC9B,uBAAuB,KAAK;GAC5B,sBAAsB;GACtB,uBAAuB,KAAK;GAC5B,uBAAuB,KAAK;GAC5B,wBAAwB,KAAK;GAC7B,uBAAuB,KAAK;GAC5B,uBAAuB,KAAK;GAC5B,kBAAkB,KAAK;EACxB;CACF;;;;;;;;;;;;;;;;;CAkBD,gBACEC,SAeA;AACA,SAAO,IAAI,gBAcT;GACA,iBAAiB,KAAK;GACtB,UAAU,KAAK;GACf,oBAAoB,KAAK;GACzB,eAAe,KAAK;GACpB,yBAAyB,KAAK;GAC9B,uBAAuB,KAAK;GAC5B,sBAAsB,KAAK;GAC3B,uBAAuB,KAAK;GAC5B,uBAAuB,KAAK;GAC5B,wBAAwB,KAAK;GAC7B,uBAAuB,KAAK;GAC5B,uBAAuB;IACrB,GAAG,KAAK;IACR,GAAG;GACJ;EACF;CACF;;;;;;;;;;;CAYD,WACEC,MAmBA;AAEA,MAAI,SAAS,UAAU,KAAK,qBAAqB,SAAS,GAAG;GAC3D,MAAM,mBAAmB,KAAK,qBAAqB,KACjD,CAAC,MAAM,EAAE,SAAS,KACnB;AACD,QAAK,kBAAkB;IACrB,MAAM,YAAY,KAAK,qBACpB,IAAI,CAAC,MAAM,EAAE,KAAK,CAClB,KAAK,KAAK;AACb,UAAM,IAAI,OACP,cAAc,KAAe,wCAAwC,UAAU;GAEnF;EACF;AAED,SAAO,IAAI,gBAeT;GACA,iBAAiB,KAAK;GACtB,UAAU,KAAK;GACf,oBAAoB,KAAK;GACzB,eAAe,KAAK;GACpB,yBAAyB,KAAK;GAC9B,uBAAuB,KAAK;GAC5B,sBAAsB,KAAK;GAC3B,uBACE,SAAS,kBAAsB;GACjC,uBAAuB,KAAK;GAC5B,wBAAwB,KAAK;GAC7B,uBAAuB,KAAK;GAC5B,uBAAuB,KAAK;GAC5B,kBAAkB,KAAK;EACxB;CACF;CAGD,MACEC,MAeA;EACA,MAAM,cAAc,gBAAgB,UAAU,MAAM,KAAK,SAAS;AAClE,SAAO,IAAI,gBAeT;GACA,iBAAiB,KAAK;GACtB,UAAU;GACV,oBAAoB,KAAK;GACzB,eAAe,KAAK;GACpB,yBAAyB,KAAK;GAC9B,uBAAuB,KAAK;GAC5B,sBAAsB,KAAK;GAC3B,uBAAuB,KAAK;GAC5B,uBAAuB,KAAK;GAC5B,wBAAwB,KAAK;GAC7B,uBAAuB,KAAK;GAC5B,uBAAuB,KAAK;GAC5B,kBAAkB,KAAK;EACxB;CACF;CAGD,UACEC,IAeA;AACA,SAAO,IAAI,gBAeT;GACA,iBAAiB,KAAK;GACtB,UAAU,KAAK;GACf,oBAAoB;GACpB,eAAe,KAAK;GACpB,yBAAyB,KAAK;GAC9B,uBAAuB,KAAK;GAC5B,sBAAsB,KAAK;GAC3B,uBAAuB,KAAK;GAC5B,uBAAuB,KAAK;GAC5B,wBAAwB,KAAK;GAC7B,uBAAuB,KAAK;GAC5B,uBAAuB,KAAK;GAC5B,kBAAkB,KAAK;EACxB;CACF;CAGD,SACEC,UAeA;AACA,SAAO,IAAI,gBAeT;GACA,iBAAiB,CAAC,GAAG,UAAU,GAAG,KAAK,eAAgB;GACvD,UAAU,KAAK;GACf,oBAAoB,KAAK;GACzB,eAAe,KAAK;GACpB,yBAAyB,KAAK;GAC9B,uBAAuB,KAAK;GAC5B,sBAAsB,KAAK;GAC3B,uBAAuB,KAAK;GAC5B,uBAAuB,KAAK;GAC5B,wBAAwB,KAAK;GAC7B,uBAAuB,KAAK;GAC5B,uBAAuB,KAAK;GAC5B,kBAAkB,KAAK;EACxB;CACF;CAED,OACEC,QAeA;AACA,SAAO,IAAI,gBAeT;GACA,iBAAiB,KAAK;GACtB,UAAU,KAAK;GACf,oBAAoB,KAAK;GAKzB,eAAe;GACf,yBAAyB,KACtB;GAKH,uBAAuB,KAAK;GAC5B,sBAAsB,KAAK;GAC3B,uBAAuB,KAAK;GAC5B,uBAAuB,KAAK;GAC5B,wBAAwB,KAAK;GAC7B,uBAAuB,KACpB;GAKH,uBAAuB,KAAK;GAC5B,kBAAkB,KAAK;EACxB;CACF;CAED,UAIEC,WAeA;AACA,SAAO,IAAI,gBAeT;GACA,iBAAiB,KAAK;GACtB,UAAU,KAAK;GACf,oBAAoB,KAAK;GACzB,eAAe,KAAK;GACpB,yBAAyB,KAAK;GAC9B,uBAAuB;GACvB,sBAAsB,KAAK;GAC3B,uBAAuB,KAAK;GAC5B,uBAAuB,KAAK;GAC5B,wBAAwB,KAAK;GAC7B,uBAAuB,KAAK;GAC5B,uBAAuB,KAAK;GAC5B,kBAAkB,KAAK;EACxB;CACF;CAED,QACEC,SAeA;AACA,SAAO,IAAI,gBAeT;GACA,iBAAiB,KAAK;GACtB,UAAU,KAAK;GACf,oBAAoB,KAAK;GAKzB,eAAe,KAAK;GACpB,yBAAyB;GACzB,uBAAuB,KAAK;GAC5B,sBAAsB,KAAK;GAC3B,uBAAuB,KAAK;GAC5B,uBAAuB,KAAK;GAC5B,wBAAwB,KAAK;GAC7B,uBAAuB,KACpB;GAKH,uBAAuB,KAAK;GAC5B,kBAAkB,KAAK;EACxB;CACF;;;;;CAMD,SACEC,SAeA;AACA,SAAO,IAAI,gBAeT;GACA,iBAAiB,KAAK;GACtB,UAAU,KAAK;GACf,oBAAoB,KAAK;GACzB,eAAe,KAAK;GAGpB,yBAAyB,KAAK;GAG9B,uBAAuB,KAAK;GAC5B,sBAAsB,KAAK;GAC3B,uBAAuB,KAAK;GAC5B,uBAAuB,KAAK;GAC5B,wBAAwB;GACxB,uBAAuB,KAAK;GAC5B,kBAAkB,KAAK;EACxB;CACF;;;;;;CAOD,QACEC,SAeA;AACA,SAAO,IAAI,gBAeT;GACA,iBAAiB,KAAK;GACtB,UAAU,KAAK;GACf,oBAAoB,KAAK;GACzB,eAAe,KAAK;GACpB,yBAAyB,KAAK;GAC9B,uBAAuB,KAAK;GAC5B,sBAAsB,KAAK;GAC3B,uBAAuB,KAAK;GAC5B,uBAAuB;GACvB,wBAAwB,KAAK;GAC7B,uBAAuB,KACpB;GAKH,uBAAuB,KAAK;GAC5B,kBAAkB,KAAK;EACxB;CACF;;;;;CAMD,MACEC,WAeA;AACA,SAAO,IAAI,gBAeT;GACA,iBAAiB,KAAK;GACtB,UAAU,KAAK;GACf,oBAAoB,KAAK;GACzB,eAAe,KAAK;GACpB,yBAAyB,KAAK;GAC9B,uBAAuB,KAAK;GAC5B,sBAAsB,KAAK;GAC3B,uBAAuB,KAAK;GAC5B,uBAAuB,KAAK;GAC5B,wBAAwB,KAAK;GAC7B,uBAAuB;GACvB,uBAAuB,KAAK;GAC5B,kBAAkB,KAAK;EACxB;CACF;;;;;;;;;;;;;;;;;;;CAoBD,IACEC,QAgBA;AACA,SAAO,IAAI,gBAeT;GACA,iBAAiB,KAAK;GACtB,UAAU,KAAK;GACf,oBAAoB,KAAK;GACzB,eAAe,KAAK;GACpB,yBAAyB,KAAK;GAC9B,uBAAuB,KAAK;GAC5B,sBAAsB,KAAK;GAC3B,uBAAuB,KAAK;GAC5B,uBAAuB,KAAK;GAC5B,wBAAwB,KAAK;GAC7B,uBAAuB,KAAK;GAC5B,uBAAuB,KAAK;GAC5B,kBAAkB;EACnB;CACF;CAED,AAAQ,cACNC,QACAV,MAiBA;EACA,MAAM,WAAW,gBAAgB,UAAU,MAAM,KAAK,SAAS;EAC/D,MAAM,UAAU,IAAIW,wCAgBlB,UAAU;AAEZ,MAAI,KAAK,mBAEP,SAAQ,aAAa,KAAK;AAE5B,MAAI,KAAK,gBAAgB,OAEvB,SAAQ,YAAY,CAAC,GAAG,KAAK,eAAgB;AAG/C,MAAI,KAAK,cACP,SAAQ,UAAU,KAAK;AAGzB,MAAI,KAAK,wBACP,SAAQ,cAAc,KAAK;AAO7B,MAAI,KAAK,sBACP,SAAQ,cAAc,KAAK,sBAAsB;AAInD,UAAQ,wBAAwB,KAAK;AACrC,MAAI,KAAK,sBACP,SAAQ,kBAAkB,KAAK;AAIjC,MAAI,KAAK,sBACP,SAAQ,mBAAmB,KAAK,sBAA6B;AAI/D,MAAI,KAAK,uBACP,SAAQ,oBAAoB,KAAK,uBAA8B;AAIjE,MAAI,KAAK,sBACP,SAAQ,kBAAkB,KAAK;AAIjC,UAAQ,yBAAyB,KAAK;AAGtC,MAAI,KAAK,iBACP,SAAQ,aAAa,KAAK;AAG5B,SAAO;CACR;CAED,KAA2BX,MAAa;AACtC,SAAO,KAAK,cAAc,QAAQ,KAAK;CACxC;CAED,IAA0BA,MAAa;AACrC,SAAO,KAAK,cAAc,OAAO,KAAK;CACvC;CAED,IAA0BA,MAAa;AACrC,SAAO,KAAK,cAAc,OAAO,KAAK;CACvC;CAED,OAA6BA,MAAa;AACxC,SAAO,KAAK,cAAc,UAAU,KAAK;CAC1C;CAED,MAA4BA,MAAa;AACvC,SAAO,KAAK,cAAc,SAAS,KAAK;CACzC;CAED,QAA8BA,MAAa;AACzC,SAAO,KAAK,cAAc,WAAW,KAAK;CAC3C;AACF;AAiED,MAAa,IAAI,IAAI"}
@@ -1,4 +1,4 @@
1
- import { EndpointBuilder } from "./EndpointBuilder-69uVrKZL.mjs";
1
+ import { EndpointBuilder } from "./EndpointBuilder-FyyoFTJ5.mjs";
2
2
  import { ConsoleLogger } from "@geekmidas/logger/console";
3
3
  import uniqBy from "lodash.uniqby";
4
4
 
@@ -17,7 +17,8 @@ var EndpointFactory = class EndpointFactory {
17
17
  defaultDatabaseService;
18
18
  defaultActorExtractor;
19
19
  customSecuritySchemes = {};
20
- constructor({ basePath, defaultAuthorizeFn, defaultLogger, defaultSessionExtractor, defaultServices = [], defaultEventPublisher, availableAuthorizers = [], defaultAuthorizerName, defaultAuditorStorage, defaultDatabaseService, defaultActorExtractor, customSecuritySchemes = {} } = {}) {
20
+ defaultRlsConfig;
21
+ constructor({ basePath, defaultAuthorizeFn, defaultLogger, defaultSessionExtractor, defaultServices = [], defaultEventPublisher, availableAuthorizers = [], defaultAuthorizerName, defaultAuditorStorage, defaultDatabaseService, defaultActorExtractor, customSecuritySchemes = {}, defaultRlsConfig } = {}) {
21
22
  this.defaultServices = uniqBy(defaultServices, (s) => s.serviceName);
22
23
  this.basePath = basePath || "";
23
24
  this.defaultAuthorizeFn = defaultAuthorizeFn;
@@ -30,6 +31,7 @@ var EndpointFactory = class EndpointFactory {
30
31
  this.defaultDatabaseService = defaultDatabaseService;
31
32
  this.defaultActorExtractor = defaultActorExtractor;
32
33
  this.customSecuritySchemes = customSecuritySchemes;
34
+ this.defaultRlsConfig = defaultRlsConfig;
33
35
  }
34
36
  static joinPaths(path, basePath = "") {
35
37
  if (!basePath && !path) return "/";
@@ -57,7 +59,8 @@ var EndpointFactory = class EndpointFactory {
57
59
  defaultAuditorStorage: this.defaultAuditorStorage,
58
60
  defaultDatabaseService: this.defaultDatabaseService,
59
61
  defaultActorExtractor: this.defaultActorExtractor,
60
- customSecuritySchemes: this.customSecuritySchemes
62
+ customSecuritySchemes: this.customSecuritySchemes,
63
+ defaultRlsConfig: this.defaultRlsConfig
61
64
  });
62
65
  }
63
66
  /**
@@ -125,7 +128,8 @@ var EndpointFactory = class EndpointFactory {
125
128
  defaultAuditorStorage: this.defaultAuditorStorage,
126
129
  defaultDatabaseService: this.defaultDatabaseService,
127
130
  defaultActorExtractor: this.defaultActorExtractor,
128
- customSecuritySchemes: this.customSecuritySchemes
131
+ customSecuritySchemes: this.customSecuritySchemes,
132
+ defaultRlsConfig: this.defaultRlsConfig
129
133
  });
130
134
  }
131
135
  route(path) {
@@ -142,7 +146,8 @@ var EndpointFactory = class EndpointFactory {
142
146
  defaultAuditorStorage: this.defaultAuditorStorage,
143
147
  defaultDatabaseService: this.defaultDatabaseService,
144
148
  defaultActorExtractor: this.defaultActorExtractor,
145
- customSecuritySchemes: this.customSecuritySchemes
149
+ customSecuritySchemes: this.customSecuritySchemes,
150
+ defaultRlsConfig: this.defaultRlsConfig
146
151
  });
147
152
  }
148
153
  authorize(fn) {
@@ -158,7 +163,8 @@ var EndpointFactory = class EndpointFactory {
158
163
  defaultAuditorStorage: this.defaultAuditorStorage,
159
164
  defaultDatabaseService: this.defaultDatabaseService,
160
165
  defaultActorExtractor: this.defaultActorExtractor,
161
- customSecuritySchemes: this.customSecuritySchemes
166
+ customSecuritySchemes: this.customSecuritySchemes,
167
+ defaultRlsConfig: this.defaultRlsConfig
162
168
  });
163
169
  }
164
170
  services(services) {
@@ -174,7 +180,8 @@ var EndpointFactory = class EndpointFactory {
174
180
  defaultAuditorStorage: this.defaultAuditorStorage,
175
181
  defaultDatabaseService: this.defaultDatabaseService,
176
182
  defaultActorExtractor: this.defaultActorExtractor,
177
- customSecuritySchemes: this.customSecuritySchemes
183
+ customSecuritySchemes: this.customSecuritySchemes,
184
+ defaultRlsConfig: this.defaultRlsConfig
178
185
  });
179
186
  }
180
187
  logger(logger) {
@@ -190,7 +197,8 @@ var EndpointFactory = class EndpointFactory {
190
197
  defaultAuditorStorage: this.defaultAuditorStorage,
191
198
  defaultDatabaseService: this.defaultDatabaseService,
192
199
  defaultActorExtractor: this.defaultActorExtractor,
193
- customSecuritySchemes: this.customSecuritySchemes
200
+ customSecuritySchemes: this.customSecuritySchemes,
201
+ defaultRlsConfig: this.defaultRlsConfig
194
202
  });
195
203
  }
196
204
  publisher(publisher) {
@@ -206,7 +214,8 @@ var EndpointFactory = class EndpointFactory {
206
214
  defaultAuditorStorage: this.defaultAuditorStorage,
207
215
  defaultDatabaseService: this.defaultDatabaseService,
208
216
  defaultActorExtractor: this.defaultActorExtractor,
209
- customSecuritySchemes: this.customSecuritySchemes
217
+ customSecuritySchemes: this.customSecuritySchemes,
218
+ defaultRlsConfig: this.defaultRlsConfig
210
219
  });
211
220
  }
212
221
  session(session) {
@@ -222,7 +231,8 @@ var EndpointFactory = class EndpointFactory {
222
231
  defaultAuditorStorage: this.defaultAuditorStorage,
223
232
  defaultDatabaseService: this.defaultDatabaseService,
224
233
  defaultActorExtractor: this.defaultActorExtractor,
225
- customSecuritySchemes: this.customSecuritySchemes
234
+ customSecuritySchemes: this.customSecuritySchemes,
235
+ defaultRlsConfig: this.defaultRlsConfig
226
236
  });
227
237
  }
228
238
  /**
@@ -241,7 +251,8 @@ var EndpointFactory = class EndpointFactory {
241
251
  defaultAuthorizerName: this.defaultAuthorizerName,
242
252
  defaultAuditorStorage: this.defaultAuditorStorage,
243
253
  defaultDatabaseService: service,
244
- customSecuritySchemes: this.customSecuritySchemes
254
+ customSecuritySchemes: this.customSecuritySchemes,
255
+ defaultRlsConfig: this.defaultRlsConfig
245
256
  });
246
257
  }
247
258
  /**
@@ -262,7 +273,8 @@ var EndpointFactory = class EndpointFactory {
262
273
  defaultAuditorStorage: storage,
263
274
  defaultDatabaseService: this.defaultDatabaseService,
264
275
  defaultActorExtractor: this.defaultActorExtractor,
265
- customSecuritySchemes: this.customSecuritySchemes
276
+ customSecuritySchemes: this.customSecuritySchemes,
277
+ defaultRlsConfig: this.defaultRlsConfig
266
278
  });
267
279
  }
268
280
  /**
@@ -282,7 +294,43 @@ var EndpointFactory = class EndpointFactory {
282
294
  defaultAuditorStorage: this.defaultAuditorStorage,
283
295
  defaultDatabaseService: this.defaultDatabaseService,
284
296
  defaultActorExtractor: extractor,
285
- customSecuritySchemes: this.customSecuritySchemes
297
+ customSecuritySchemes: this.customSecuritySchemes,
298
+ defaultRlsConfig: this.defaultRlsConfig
299
+ });
300
+ }
301
+ /**
302
+ * Set the RLS (Row-Level Security) configuration for endpoints created from this factory.
303
+ * This enables automatic PostgreSQL session variable setting for RLS policies.
304
+ *
305
+ * @example
306
+ * ```typescript
307
+ * const api = new EndpointFactory()
308
+ * .database(databaseService)
309
+ * .session(extractSession)
310
+ * .rls({
311
+ * extractor: ({ session }) => ({
312
+ * user_id: session.userId,
313
+ * tenant_id: session.tenantId,
314
+ * }),
315
+ * prefix: 'app',
316
+ * });
317
+ * ```
318
+ */
319
+ rls(config) {
320
+ return new EndpointFactory({
321
+ defaultServices: this.defaultServices,
322
+ basePath: this.basePath,
323
+ defaultAuthorizeFn: this.defaultAuthorizeFn,
324
+ defaultLogger: this.defaultLogger,
325
+ defaultSessionExtractor: this.defaultSessionExtractor,
326
+ defaultEventPublisher: this.defaultEventPublisher,
327
+ availableAuthorizers: this.availableAuthorizers,
328
+ defaultAuthorizerName: this.defaultAuthorizerName,
329
+ defaultAuditorStorage: this.defaultAuditorStorage,
330
+ defaultDatabaseService: this.defaultDatabaseService,
331
+ defaultActorExtractor: this.defaultActorExtractor,
332
+ customSecuritySchemes: this.customSecuritySchemes,
333
+ defaultRlsConfig: config
286
334
  });
287
335
  }
288
336
  createBuilder(method, path) {
@@ -299,6 +347,7 @@ var EndpointFactory = class EndpointFactory {
299
347
  if (this.defaultDatabaseService) builder._setDatabaseService(this.defaultDatabaseService);
300
348
  if (this.defaultActorExtractor) builder._actorExtractor = this.defaultActorExtractor;
301
349
  builder._customSecuritySchemes = this.customSecuritySchemes;
350
+ if (this.defaultRlsConfig) builder._rlsConfig = this.defaultRlsConfig;
302
351
  return builder;
303
352
  }
304
353
  post(path) {
@@ -324,4 +373,4 @@ const e = new EndpointFactory();
324
373
 
325
374
  //#endregion
326
375
  export { EndpointFactory, e };
327
- //# sourceMappingURL=EndpointFactory-ARUlRlyM.mjs.map
376
+ //# sourceMappingURL=EndpointFactory-KJAjBWmO.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EndpointFactory-KJAjBWmO.mjs","names":["DEFAULT_LOGGER","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"],"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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"}
@@ -1,4 +1,4 @@
1
- import { Construct, ConstructType } from "./Construct-DCPATqec.mjs";
1
+ import { Construct, ConstructType } from "./Construct-jBKqb-Zi.mjs";
2
2
  import { Service, ServiceRecord } from "@geekmidas/services";
3
3
  import { AuditStorage, AuditableAction, Auditor } from "@geekmidas/audit";
4
4
  import { EventPublisher, MappedEvent } from "@geekmidas/events";
@@ -73,4 +73,4 @@ type FunctionContext<Input extends ComposableStandardSchema | undefined = undefi
73
73
  } & DatabaseContext<TDatabase> & AuditorContext<TAuditAction, TAuditStorage>;
74
74
  //#endregion
75
75
  export { Function, FunctionContext, FunctionFactory, FunctionHandler };
76
- //# sourceMappingURL=Function-Dthlh2Fb.d.mts.map
76
+ //# sourceMappingURL=Function-Vh1t-Qjj.d.mts.map
@@ -1,6 +1,6 @@
1
- import { ConstructType } from "./Construct-DCPATqec.mjs";
2
- import { Function, FunctionHandler } from "./Function-Dthlh2Fb.mjs";
3
- import { BaseFunctionBuilder } from "./BaseFunctionBuilder-Oc2xmxmg.mjs";
1
+ import { ConstructType } from "./Construct-jBKqb-Zi.mjs";
2
+ import { Function, FunctionHandler } from "./Function-Vh1t-Qjj.mjs";
3
+ import { BaseFunctionBuilder } from "./BaseFunctionBuilder-CoV7J45W.mjs";
4
4
  import { Service } from "@geekmidas/services";
5
5
  import { AuditStorage, AuditableAction } from "@geekmidas/audit";
6
6
  import { EventPublisher } from "@geekmidas/events";
@@ -35,4 +35,4 @@ declare class FunctionBuilder<TInput extends ComposableStandardSchema, OutSchema
35
35
  }
36
36
  //#endregion
37
37
  export { FunctionBuilder };
38
- //# sourceMappingURL=FunctionBuilder-CZFBLfdV.d.mts.map
38
+ //# sourceMappingURL=FunctionBuilder-3jsoFffg.d.mts.map
@@ -1,4 +1,4 @@
1
- import { Function, FunctionHandler } from "./Function-Dthlh2Fb.mjs";
1
+ import { Function, FunctionHandler } from "./Function-Vh1t-Qjj.mjs";
2
2
  import { Service, ServiceDiscovery, ServiceRecord } from "@geekmidas/services";
3
3
  import { AuditStorage, AuditableAction, Auditor } from "@geekmidas/audit";
4
4
  import { EnvironmentParser } from "@geekmidas/envkit";
@@ -45,4 +45,4 @@ declare abstract class FunctionExecutionWrapper<TInput extends ComposableStandar
45
45
  }
46
46
  //#endregion
47
47
  export { FunctionExecutionWrapper };
48
- //# sourceMappingURL=FunctionExecutionWrapper-CfuajSB5.d.mts.map
48
+ //# sourceMappingURL=FunctionExecutionWrapper-CI3CaoCo.d.mts.map
@@ -1,5 +1,5 @@
1
1
  import { HttpMethod } from "./types-Bp9ysFXd.cjs";
2
- import { Endpoint, EndpointSchemas } from "./Endpoint-BJPJTGjV.cjs";
2
+ import { Endpoint, EndpointSchemas } from "./Endpoint-CC2RGjkl.cjs";
3
3
  import { AuditStorage, AuditableAction } from "@geekmidas/audit";
4
4
  import { EventPublisher } from "@geekmidas/events";
5
5
  import { Logger } from "@geekmidas/logger";
@@ -40,4 +40,4 @@ declare class HonoEndpoint<TRoute extends string, TMethod extends HttpMethod, TI
40
40
  }
41
41
  //#endregion
42
42
  export { HonoEndpoint, HonoEndpointOptions };
43
- //# sourceMappingURL=HonoEndpointAdaptor-sSG85VER.d.cts.map
43
+ //# sourceMappingURL=HonoEndpointAdaptor-BJh4J-J9.d.cts.map