@geekmidas/constructs 0.0.22 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/README.md +90 -0
  2. package/dist/{AWSLambdaFunction-qWpalqfr.d.mts → AWSLambdaFunction-D9RZhm0N.d.mts} +3 -3
  3. package/dist/{AWSLambdaSubscriberAdaptor-CWbBNRz3.d.mts → AWSLambdaSubscriberAdaptor-C0aZBU64.d.mts} +2 -2
  4. package/dist/{AmazonApiGatewayEndpointAdaptor-DXssXsJi.cjs → AmazonApiGatewayEndpointAdaptor-Bk6ssx3K.cjs} +40 -27
  5. package/dist/AmazonApiGatewayEndpointAdaptor-Bk6ssx3K.cjs.map +1 -0
  6. package/dist/{AmazonApiGatewayEndpointAdaptor-Da9BR5On.d.cts → AmazonApiGatewayEndpointAdaptor-CbJqLU6I.d.cts} +2 -2
  7. package/dist/{AmazonApiGatewayEndpointAdaptor-BQ0IJdaI.d.mts → AmazonApiGatewayEndpointAdaptor-DC3N7zY_.d.mts} +3 -3
  8. package/dist/{AmazonApiGatewayEndpointAdaptor-CacGag6F.mjs → AmazonApiGatewayEndpointAdaptor-pEWzF2uY.mjs} +40 -27
  9. package/dist/AmazonApiGatewayEndpointAdaptor-pEWzF2uY.mjs.map +1 -0
  10. package/dist/{AmazonApiGatewayV1EndpointAdaptor-C4_AZ1ek.d.mts → AmazonApiGatewayV1EndpointAdaptor-BVxgQ-7J.d.mts} +4 -4
  11. package/dist/{AmazonApiGatewayV1EndpointAdaptor-CSm3NsWz.d.cts → AmazonApiGatewayV1EndpointAdaptor-CVwJ5k16.d.cts} +3 -3
  12. package/dist/{AmazonApiGatewayV1EndpointAdaptor-BpnG55R7.mjs → AmazonApiGatewayV1EndpointAdaptor-MJpRbIaQ.mjs} +2 -2
  13. package/dist/{AmazonApiGatewayV1EndpointAdaptor-BpnG55R7.mjs.map → AmazonApiGatewayV1EndpointAdaptor-MJpRbIaQ.mjs.map} +1 -1
  14. package/dist/{AmazonApiGatewayV1EndpointAdaptor-Df4kszio.cjs → AmazonApiGatewayV1EndpointAdaptor-uBp_4zLf.cjs} +2 -2
  15. package/dist/{AmazonApiGatewayV1EndpointAdaptor-Df4kszio.cjs.map → AmazonApiGatewayV1EndpointAdaptor-uBp_4zLf.cjs.map} +1 -1
  16. package/dist/{AmazonApiGatewayV2EndpointAdaptor-6hsBFVLf.d.cts → AmazonApiGatewayV2EndpointAdaptor-1oBZdQH3.d.cts} +3 -3
  17. package/dist/{AmazonApiGatewayV2EndpointAdaptor-DdM8Tr1X.d.mts → AmazonApiGatewayV2EndpointAdaptor-C3H8Hpv7.d.mts} +4 -4
  18. package/dist/{AmazonApiGatewayV2EndpointAdaptor-ZORzMEET.mjs → AmazonApiGatewayV2EndpointAdaptor-ChO8BlDz.mjs} +2 -2
  19. package/dist/{AmazonApiGatewayV2EndpointAdaptor-ZORzMEET.mjs.map → AmazonApiGatewayV2EndpointAdaptor-ChO8BlDz.mjs.map} +1 -1
  20. package/dist/{AmazonApiGatewayV2EndpointAdaptor-5SIvqPby.cjs → AmazonApiGatewayV2EndpointAdaptor-I1W23Nvn.cjs} +2 -2
  21. package/dist/{AmazonApiGatewayV2EndpointAdaptor-5SIvqPby.cjs.map → AmazonApiGatewayV2EndpointAdaptor-I1W23Nvn.cjs.map} +1 -1
  22. package/dist/Authorizer-C0ge_tc8.cjs +92 -0
  23. package/dist/Authorizer-C0ge_tc8.cjs.map +1 -0
  24. package/dist/Authorizer-CpSUMTIs.d.cts +125 -0
  25. package/dist/Authorizer-Cpx59w_q.d.mts +125 -0
  26. package/dist/Authorizer-r9U3y_ms.mjs +68 -0
  27. package/dist/Authorizer-r9U3y_ms.mjs.map +1 -0
  28. package/dist/{BaseFunctionBuilder-Ct6zY6Jq.d.mts → BaseFunctionBuilder-CoV7J45W.d.mts} +2 -2
  29. package/dist/{Construct-DDR0295I.d.mts → Construct-jBKqb-Zi.d.mts} +1 -1
  30. package/dist/Construct.d.mts +1 -1
  31. package/dist/{Cron-DnMRWPFR.d.mts → Cron-JZkp_fHy.d.mts} +2 -2
  32. package/dist/{CronBuilder-RLDitFmP.d.mts → CronBuilder-BmFDO0Dm.d.mts} +4 -4
  33. package/dist/{Endpoint-DbPsw13b.mjs → Endpoint-B70_KKhu.mjs} +8 -2
  34. package/dist/Endpoint-B70_KKhu.mjs.map +1 -0
  35. package/dist/{Endpoint-CA-byrDr.cjs → Endpoint-BJo9Hhwm.cjs} +8 -2
  36. package/dist/Endpoint-BJo9Hhwm.cjs.map +1 -0
  37. package/dist/{Endpoint-PtQ-wLIS.d.mts → Endpoint-C5djXyae.d.mts} +69 -6
  38. package/dist/{Endpoint-D2Imgihs.d.cts → Endpoint-CC2RGjkl.d.cts} +67 -4
  39. package/dist/{EndpointBuilder-BPHpUekp.d.mts → EndpointBuilder-CD8LkBda.d.mts} +43 -5
  40. package/dist/{EndpointBuilder-CYkeYpsL.cjs → EndpointBuilder-DeswNQdG.cjs} +69 -4
  41. package/dist/EndpointBuilder-DeswNQdG.cjs.map +1 -0
  42. package/dist/{EndpointBuilder-W5fdXxYQ.mjs → EndpointBuilder-FyyoFTJ5.mjs} +69 -4
  43. package/dist/EndpointBuilder-FyyoFTJ5.mjs.map +1 -0
  44. package/dist/{EndpointBuilder-TApJQhtG.d.cts → EndpointBuilder-vXk6eIJk.d.cts} +41 -3
  45. package/dist/{EndpointFactory-CNlfBDuD.d.mts → EndpointFactory-3g-7Rznt.d.cts} +68 -21
  46. package/dist/{EndpointFactory-B5fOINuc.d.cts → EndpointFactory-DaFR9LQG.d.mts} +68 -21
  47. package/dist/{EndpointFactory-D5lFZXqY.cjs → EndpointFactory-DcT_g9M_.cjs} +117 -14
  48. package/dist/EndpointFactory-DcT_g9M_.cjs.map +1 -0
  49. package/dist/{EndpointFactory-B27nfeiE.mjs → EndpointFactory-KJAjBWmO.mjs} +117 -14
  50. package/dist/EndpointFactory-KJAjBWmO.mjs.map +1 -0
  51. package/dist/{Function-CD3rXWfa.d.mts → Function-Vh1t-Qjj.d.mts} +2 -2
  52. package/dist/{FunctionBuilder-j2VkwuGf.d.mts → FunctionBuilder-3jsoFffg.d.mts} +4 -4
  53. package/dist/{FunctionExecutionWrapper-B0WP-Vec.d.mts → FunctionExecutionWrapper-CI3CaoCo.d.mts} +2 -2
  54. package/dist/{HonoEndpointAdaptor-CLOpobdq.d.cts → HonoEndpointAdaptor-BJh4J-J9.d.cts} +4 -4
  55. package/dist/{HonoEndpointAdaptor-Bg_vTyA5.mjs → HonoEndpointAdaptor-CcvXzoYV.mjs} +43 -30
  56. package/dist/HonoEndpointAdaptor-CcvXzoYV.mjs.map +1 -0
  57. package/dist/{HonoEndpointAdaptor-B_gJPWGD.cjs → HonoEndpointAdaptor-DodwLM0-.cjs} +43 -30
  58. package/dist/HonoEndpointAdaptor-DodwLM0-.cjs.map +1 -0
  59. package/dist/{HonoEndpointAdaptor-C9gYYBWu.d.mts → HonoEndpointAdaptor-kb1ByjUL.d.mts} +5 -5
  60. package/dist/{Subscriber-D-FPWts6.cjs → Subscriber-DOt3svUC.cjs} +1 -1
  61. package/dist/{Subscriber-D-FPWts6.cjs.map → Subscriber-DOt3svUC.cjs.map} +1 -1
  62. package/dist/{Subscriber-itwm7ugy.d.mts → Subscriber-aNr1qkxR.d.mts} +2 -2
  63. package/dist/{Subscriber-CGb8LjZa.mjs → Subscriber-kCHbH2fZ.mjs} +1 -1
  64. package/dist/{Subscriber-CGb8LjZa.mjs.map → Subscriber-kCHbH2fZ.mjs.map} +1 -1
  65. package/dist/{SubscriberBuilder-9j3JCu8-.d.mts → SubscriberBuilder-CWS4tdbp.d.mts} +2 -2
  66. package/dist/{SubscriberBuilder-BfE2cL1q.cjs → SubscriberBuilder-Cj2u9k5Q.cjs} +2 -2
  67. package/dist/{SubscriberBuilder-BfE2cL1q.cjs.map → SubscriberBuilder-Cj2u9k5Q.cjs.map} +1 -1
  68. package/dist/{SubscriberBuilder-BcAspHv9.mjs → SubscriberBuilder-DmxMU89X.mjs} +2 -2
  69. package/dist/{SubscriberBuilder-BcAspHv9.mjs.map → SubscriberBuilder-DmxMU89X.mjs.map} +1 -1
  70. package/dist/{TestEndpointAdaptor-JONQJeXc.mjs → TestEndpointAdaptor-1pPixE6y.mjs} +4 -4
  71. package/dist/{TestEndpointAdaptor-JONQJeXc.mjs.map → TestEndpointAdaptor-1pPixE6y.mjs.map} +1 -1
  72. package/dist/{TestEndpointAdaptor-C-c8v7VI.d.mts → TestEndpointAdaptor-5-unBV8O.d.mts} +3 -3
  73. package/dist/{TestEndpointAdaptor-BYCwwiYk.d.cts → TestEndpointAdaptor-Bm0UjDtV.d.cts} +2 -2
  74. package/dist/{TestEndpointAdaptor-Bew9lWsx.cjs → TestEndpointAdaptor-wA-fmq4v.cjs} +4 -4
  75. package/dist/{TestEndpointAdaptor-Bew9lWsx.cjs.map → TestEndpointAdaptor-wA-fmq4v.cjs.map} +1 -1
  76. package/dist/adaptors/aws.cjs +5 -5
  77. package/dist/adaptors/aws.d.cts +5 -5
  78. package/dist/adaptors/aws.d.mts +15 -15
  79. package/dist/adaptors/aws.mjs +5 -5
  80. package/dist/adaptors/hono.cjs +4 -4
  81. package/dist/adaptors/hono.d.cts +3 -3
  82. package/dist/adaptors/hono.d.mts +9 -9
  83. package/dist/adaptors/hono.mjs +4 -4
  84. package/dist/adaptors/testing.cjs +3 -3
  85. package/dist/adaptors/testing.d.cts +3 -3
  86. package/dist/adaptors/testing.d.mts +9 -9
  87. package/dist/adaptors/testing.mjs +3 -3
  88. package/dist/crons/Cron.d.mts +6 -6
  89. package/dist/crons/CronBuilder.d.mts +7 -7
  90. package/dist/crons/index.d.cts +4 -4
  91. package/dist/crons/index.d.mts +7 -7
  92. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +3 -3
  93. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +3 -3
  94. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +9 -9
  95. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +3 -3
  96. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +4 -4
  97. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +4 -4
  98. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +10 -10
  99. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +4 -4
  100. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +4 -4
  101. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +4 -4
  102. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +10 -10
  103. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +4 -4
  104. package/dist/endpoints/Authorizer.cjs +5 -14
  105. package/dist/endpoints/Authorizer.d.cts +2 -2
  106. package/dist/endpoints/Authorizer.d.mts +2 -2
  107. package/dist/endpoints/Authorizer.mjs +2 -13
  108. package/dist/endpoints/Endpoint.cjs +1 -1
  109. package/dist/endpoints/Endpoint.d.cts +2 -2
  110. package/dist/endpoints/Endpoint.d.mts +8 -8
  111. package/dist/endpoints/Endpoint.mjs +1 -1
  112. package/dist/endpoints/EndpointBuilder.cjs +4 -2
  113. package/dist/endpoints/EndpointBuilder.d.cts +3 -3
  114. package/dist/endpoints/EndpointBuilder.d.mts +9 -9
  115. package/dist/endpoints/EndpointBuilder.mjs +4 -2
  116. package/dist/endpoints/EndpointFactory.cjs +5 -3
  117. package/dist/endpoints/EndpointFactory.d.cts +4 -4
  118. package/dist/endpoints/EndpointFactory.d.mts +10 -10
  119. package/dist/endpoints/EndpointFactory.mjs +5 -3
  120. package/dist/endpoints/HonoEndpointAdaptor.cjs +4 -4
  121. package/dist/endpoints/HonoEndpointAdaptor.d.cts +3 -3
  122. package/dist/endpoints/HonoEndpointAdaptor.d.mts +9 -9
  123. package/dist/endpoints/HonoEndpointAdaptor.mjs +4 -4
  124. package/dist/endpoints/TestEndpointAdaptor.cjs +3 -3
  125. package/dist/endpoints/TestEndpointAdaptor.d.cts +3 -3
  126. package/dist/endpoints/TestEndpointAdaptor.d.mts +9 -9
  127. package/dist/endpoints/TestEndpointAdaptor.mjs +3 -3
  128. package/dist/endpoints/audit.d.cts +2 -2
  129. package/dist/endpoints/audit.d.mts +8 -8
  130. package/dist/endpoints/helpers.cjs +2 -2
  131. package/dist/endpoints/helpers.d.cts +2 -2
  132. package/dist/endpoints/helpers.d.mts +8 -8
  133. package/dist/endpoints/helpers.mjs +2 -2
  134. package/dist/endpoints/index.cjs +6 -3
  135. package/dist/endpoints/index.cjs.map +1 -1
  136. package/dist/endpoints/index.d.cts +7 -7
  137. package/dist/endpoints/index.d.mts +13 -13
  138. package/dist/endpoints/index.mjs +6 -4
  139. package/dist/endpoints/index.mjs.map +1 -1
  140. package/dist/endpoints/processAudits.cjs +1 -1
  141. package/dist/endpoints/processAudits.d.cts +24 -5
  142. package/dist/endpoints/processAudits.d.mts +30 -11
  143. package/dist/endpoints/processAudits.mjs +1 -1
  144. package/dist/endpoints/rls.cjs +3 -0
  145. package/dist/endpoints/rls.d.cts +9 -0
  146. package/dist/endpoints/rls.d.mts +9 -0
  147. package/dist/endpoints/rls.mjs +3 -0
  148. package/dist/functions/AWSLambdaFunction.d.mts +4 -4
  149. package/dist/functions/BaseFunctionBuilder.d.mts +2 -2
  150. package/dist/functions/Function.d.mts +2 -2
  151. package/dist/functions/FunctionBuilder.d.mts +4 -4
  152. package/dist/functions/FunctionExecutionWrapper.d.mts +3 -3
  153. package/dist/functions/TestFunctionAdaptor.d.mts +2 -2
  154. package/dist/functions/index.d.mts +5 -5
  155. package/dist/{helpers-CrrdyA04.mjs → helpers-C3B2lVrM.mjs} +2 -2
  156. package/dist/{helpers-CrrdyA04.mjs.map → helpers-C3B2lVrM.mjs.map} +1 -1
  157. package/dist/{helpers-DiPZVJQC.cjs → helpers-DxxSpLfw.cjs} +2 -2
  158. package/dist/{helpers-DiPZVJQC.cjs.map → helpers-DxxSpLfw.cjs.map} +1 -1
  159. package/dist/index-CFyaRrck.d.mts +10 -0
  160. package/dist/index.d.mts +2 -2
  161. package/dist/{processAudits-BFokHhCO.cjs → processAudits-CzHkPokQ.cjs} +13 -7
  162. package/dist/processAudits-CzHkPokQ.cjs.map +1 -0
  163. package/dist/{processAudits-DfcB-X-4.mjs → processAudits-Dj8UGqcW.mjs} +13 -7
  164. package/dist/processAudits-Dj8UGqcW.mjs.map +1 -0
  165. package/dist/publisher.d.mts +1 -1
  166. package/dist/rls-Bf3FRwto.mjs +9 -0
  167. package/dist/rls-Bf3FRwto.mjs.map +1 -0
  168. package/dist/rls-CmJ7bRsz.cjs +15 -0
  169. package/dist/rls-CmJ7bRsz.cjs.map +1 -0
  170. package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.mts +3 -3
  171. package/dist/subscribers/Subscriber.cjs +1 -1
  172. package/dist/subscribers/Subscriber.d.mts +2 -2
  173. package/dist/subscribers/Subscriber.mjs +1 -1
  174. package/dist/subscribers/SubscriberBuilder.cjs +2 -2
  175. package/dist/subscribers/SubscriberBuilder.d.mts +3 -3
  176. package/dist/subscribers/SubscriberBuilder.mjs +2 -2
  177. package/dist/subscribers/index.cjs +2 -2
  178. package/dist/subscribers/index.d.cts +2 -2
  179. package/dist/subscribers/index.d.mts +5 -5
  180. package/dist/subscribers/index.mjs +2 -2
  181. package/dist/{types-DKf0juBf.d.mts → types-CScirkHt.d.mts} +1 -1
  182. package/dist/types.d.mts +1 -1
  183. package/package.json +4 -3
  184. package/src/endpoints/AmazonApiGatewayEndpointAdaptor.ts +59 -26
  185. package/src/endpoints/Authorizer.ts +119 -1
  186. package/src/endpoints/Endpoint.ts +19 -0
  187. package/src/endpoints/EndpointBuilder.ts +80 -6
  188. package/src/endpoints/EndpointFactory.ts +263 -27
  189. package/src/endpoints/HonoEndpointAdaptor.ts +68 -37
  190. package/src/endpoints/TestEndpointAdaptor.ts +2 -0
  191. package/src/endpoints/index.ts +7 -0
  192. package/src/endpoints/processAudits.ts +39 -16
  193. package/src/endpoints/rls.ts +67 -0
  194. package/dist/AmazonApiGatewayEndpointAdaptor-CacGag6F.mjs.map +0 -1
  195. package/dist/AmazonApiGatewayEndpointAdaptor-DXssXsJi.cjs.map +0 -1
  196. package/dist/Authorizer-BTmly8ps.d.cts +0 -29
  197. package/dist/Authorizer-pmPvIVgv.d.mts +0 -29
  198. package/dist/Endpoint-CA-byrDr.cjs.map +0 -1
  199. package/dist/Endpoint-DbPsw13b.mjs.map +0 -1
  200. package/dist/EndpointBuilder-CYkeYpsL.cjs.map +0 -1
  201. package/dist/EndpointBuilder-W5fdXxYQ.mjs.map +0 -1
  202. package/dist/EndpointFactory-B27nfeiE.mjs.map +0 -1
  203. package/dist/EndpointFactory-D5lFZXqY.cjs.map +0 -1
  204. package/dist/HonoEndpointAdaptor-B_gJPWGD.cjs.map +0 -1
  205. package/dist/HonoEndpointAdaptor-Bg_vTyA5.mjs.map +0 -1
  206. package/dist/endpoints/Authorizer.cjs.map +0 -1
  207. package/dist/endpoints/Authorizer.mjs.map +0 -1
  208. package/dist/index-licEVXjh.d.mts +0 -10
  209. package/dist/processAudits-BFokHhCO.cjs.map +0 -1
  210. package/dist/processAudits-DfcB-X-4.mjs.map +0 -1
@@ -9,10 +9,15 @@ import { ConsoleLogger } from '@geekmidas/logger/console';
9
9
  import type { Service } from '@geekmidas/services';
10
10
  import uniqBy from 'lodash.uniqby';
11
11
  import type { HttpMethod } from '../types';
12
- import type { Authorizer } from './Authorizer';
12
+ import type {
13
+ Authorizer,
14
+ BuiltInSecuritySchemeId,
15
+ SecurityScheme,
16
+ } from './Authorizer';
13
17
  import type { AuthorizeFn, SessionFn } from './Endpoint';
14
18
  import { EndpointBuilder } from './EndpointBuilder';
15
19
  import type { ActorExtractor } from './audit';
20
+ import type { RlsConfig } from './rls';
16
21
 
17
22
  const DEFAULT_LOGGER = new ConsoleLogger() as any;
18
23
 
@@ -32,6 +37,13 @@ export class EndpointFactory<
32
37
  > = ExtractStorageAuditAction<NonNullable<TAuditStorage>>,
33
38
  TDatabase = undefined,
34
39
  TDatabaseServiceName extends string = string,
40
+ TSecuritySchemes extends Record<string, SecurityScheme> = Record<
41
+ string,
42
+ SecurityScheme
43
+ >,
44
+ TRlsConfig extends
45
+ | RlsConfig<TServices, TSession, TLogger>
46
+ | undefined = undefined,
35
47
  > {
36
48
  // @ts-ignore
37
49
  private defaultServices: TServices;
@@ -56,6 +68,8 @@ export class EndpointFactory<
56
68
  | Service<TDatabaseServiceName, TDatabase>
57
69
  | undefined;
58
70
  private defaultActorExtractor?: ActorExtractor<TServices, TSession, TLogger>;
71
+ private customSecuritySchemes: TSecuritySchemes = {} as TSecuritySchemes;
72
+ private defaultRlsConfig?: TRlsConfig;
59
73
 
60
74
  constructor({
61
75
  basePath,
@@ -70,6 +84,8 @@ export class EndpointFactory<
70
84
  defaultAuditorStorage,
71
85
  defaultDatabaseService,
72
86
  defaultActorExtractor,
87
+ customSecuritySchemes = {} as TSecuritySchemes,
88
+ defaultRlsConfig,
73
89
  }: EndpointFactoryOptions<
74
90
  TServices,
75
91
  TBasePath,
@@ -81,7 +97,9 @@ export class EndpointFactory<
81
97
  TAuditStorage,
82
98
  TAuditStorageServiceName,
83
99
  TDatabase,
84
- TDatabaseServiceName
100
+ TDatabaseServiceName,
101
+ TSecuritySchemes,
102
+ TRlsConfig
85
103
  > = {}) {
86
104
  // Initialize default services
87
105
  this.defaultServices = uniqBy(
@@ -99,6 +117,8 @@ export class EndpointFactory<
99
117
  this.defaultAuditorStorage = defaultAuditorStorage;
100
118
  this.defaultDatabaseService = defaultDatabaseService;
101
119
  this.defaultActorExtractor = defaultActorExtractor;
120
+ this.customSecuritySchemes = customSecuritySchemes;
121
+ this.defaultRlsConfig = defaultRlsConfig;
102
122
  }
103
123
 
104
124
  static joinPaths<TBasePath extends string, P extends string>(
@@ -153,7 +173,8 @@ export class EndpointFactory<
153
173
  TAuditStorageServiceName,
154
174
  TAuditAction,
155
175
  TDatabase,
156
- TDatabaseServiceName
176
+ TDatabaseServiceName,
177
+ TSecuritySchemes
157
178
  > {
158
179
  const authorizerConfigs = authorizers.map((name) => ({
159
180
  name,
@@ -170,7 +191,9 @@ export class EndpointFactory<
170
191
  TAuditStorageServiceName,
171
192
  TAuditAction,
172
193
  TDatabase,
173
- TDatabaseServiceName
194
+ TDatabaseServiceName,
195
+ TSecuritySchemes,
196
+ TRlsConfig
174
197
  >({
175
198
  defaultServices: this.defaultServices,
176
199
  basePath: this.basePath,
@@ -183,6 +206,74 @@ export class EndpointFactory<
183
206
  defaultAuditorStorage: this.defaultAuditorStorage,
184
207
  defaultDatabaseService: this.defaultDatabaseService,
185
208
  defaultActorExtractor: this.defaultActorExtractor,
209
+ customSecuritySchemes: this.customSecuritySchemes,
210
+ defaultRlsConfig: this.defaultRlsConfig,
211
+ });
212
+ }
213
+
214
+ /**
215
+ * Define custom security schemes for this factory.
216
+ * These extend the built-in schemes (jwt, bearer, apiKey, oauth2, oidc).
217
+ *
218
+ * @example
219
+ * ```typescript
220
+ * const router = e.securitySchemes({
221
+ * awsIamSigV4: {
222
+ * type: 'apiKey',
223
+ * in: 'header',
224
+ * name: 'Authorization',
225
+ * 'x-amazon-apigateway-authtype': 'awsSigv4',
226
+ * },
227
+ * });
228
+ * ```
229
+ */
230
+ securitySchemes<T extends Record<string, SecurityScheme>>(
231
+ schemes: T,
232
+ ): EndpointFactory<
233
+ TServices,
234
+ TBasePath,
235
+ TLogger,
236
+ TSession,
237
+ TEventPublisher,
238
+ TEventPublisherServiceName,
239
+ TAuthorizers,
240
+ TAuditStorage,
241
+ TAuditStorageServiceName,
242
+ TAuditAction,
243
+ TDatabase,
244
+ TDatabaseServiceName,
245
+ TSecuritySchemes & T
246
+ > {
247
+ return new EndpointFactory<
248
+ TServices,
249
+ TBasePath,
250
+ TLogger,
251
+ TSession,
252
+ TEventPublisher,
253
+ TEventPublisherServiceName,
254
+ TAuthorizers,
255
+ TAuditStorage,
256
+ TAuditStorageServiceName,
257
+ TAuditAction,
258
+ TDatabase,
259
+ TDatabaseServiceName,
260
+ TSecuritySchemes & T
261
+ >({
262
+ defaultServices: this.defaultServices,
263
+ basePath: this.basePath,
264
+ defaultAuthorizeFn: this.defaultAuthorizeFn,
265
+ defaultLogger: this.defaultLogger,
266
+ defaultSessionExtractor: this.defaultSessionExtractor,
267
+ defaultEventPublisher: this.defaultEventPublisher,
268
+ availableAuthorizers: this.availableAuthorizers,
269
+ defaultAuthorizerName: this.defaultAuthorizerName,
270
+ defaultAuditorStorage: this.defaultAuditorStorage,
271
+ defaultDatabaseService: this.defaultDatabaseService,
272
+ defaultActorExtractor: this.defaultActorExtractor,
273
+ customSecuritySchemes: {
274
+ ...this.customSecuritySchemes,
275
+ ...schemes,
276
+ } as TSecuritySchemes & T,
186
277
  });
187
278
  }
188
279
 
@@ -190,9 +281,18 @@ export class EndpointFactory<
190
281
  * Set the default authorizer for all endpoints created from this factory.
191
282
  * Individual endpoints can override this by calling `.authorizer()` on the builder.
192
283
  * Use `'none'` to explicitly disable authorization for all endpoints.
284
+ *
285
+ * Accepts:
286
+ * - Built-in security scheme names: 'jwt', 'bearer', 'apiKey', 'oauth2', 'oidc'
287
+ * - Custom security scheme names defined via `.securitySchemes()`
288
+ * - 'none' to disable authorization
193
289
  */
194
290
  authorizer(
195
- name: TAuthorizers[number] | 'none',
291
+ name:
292
+ | BuiltInSecuritySchemeId
293
+ | keyof TSecuritySchemes
294
+ | TAuthorizers[number]
295
+ | 'none',
196
296
  ): EndpointFactory<
197
297
  TServices,
198
298
  TBasePath,
@@ -205,9 +305,10 @@ export class EndpointFactory<
205
305
  TAuditStorageServiceName,
206
306
  TAuditAction,
207
307
  TDatabase,
208
- TDatabaseServiceName
308
+ TDatabaseServiceName,
309
+ TSecuritySchemes
209
310
  > {
210
- // Validate that the authorizer exists in available authorizers
311
+ // Validate that the authorizer exists in available authorizers (if authorizers() was called)
211
312
  if (name !== 'none' && this.availableAuthorizers.length > 0) {
212
313
  const authorizerExists = this.availableAuthorizers.some(
213
314
  (a) => a.name === name,
@@ -234,7 +335,9 @@ export class EndpointFactory<
234
335
  TAuditStorageServiceName,
235
336
  TAuditAction,
236
337
  TDatabase,
237
- TDatabaseServiceName
338
+ TDatabaseServiceName,
339
+ TSecuritySchemes,
340
+ TRlsConfig
238
341
  >({
239
342
  defaultServices: this.defaultServices,
240
343
  basePath: this.basePath,
@@ -243,10 +346,13 @@ export class EndpointFactory<
243
346
  defaultSessionExtractor: this.defaultSessionExtractor,
244
347
  defaultEventPublisher: this.defaultEventPublisher,
245
348
  availableAuthorizers: this.availableAuthorizers,
246
- defaultAuthorizerName: name === 'none' ? undefined : name,
349
+ defaultAuthorizerName:
350
+ name === 'none' ? undefined : (name as TAuthorizers[number]),
247
351
  defaultAuditorStorage: this.defaultAuditorStorage,
248
352
  defaultDatabaseService: this.defaultDatabaseService,
249
353
  defaultActorExtractor: this.defaultActorExtractor,
354
+ customSecuritySchemes: this.customSecuritySchemes,
355
+ defaultRlsConfig: this.defaultRlsConfig,
250
356
  });
251
357
  }
252
358
 
@@ -265,7 +371,8 @@ export class EndpointFactory<
265
371
  TAuditStorageServiceName,
266
372
  TAuditAction,
267
373
  TDatabase,
268
- TDatabaseServiceName
374
+ TDatabaseServiceName,
375
+ TSecuritySchemes
269
376
  > {
270
377
  const newBasePath = EndpointFactory.joinPaths(path, this.basePath);
271
378
  return new EndpointFactory<
@@ -280,7 +387,9 @@ export class EndpointFactory<
280
387
  TAuditStorageServiceName,
281
388
  TAuditAction,
282
389
  TDatabase,
283
- TDatabaseServiceName
390
+ TDatabaseServiceName,
391
+ TSecuritySchemes,
392
+ TRlsConfig
284
393
  >({
285
394
  defaultServices: this.defaultServices,
286
395
  basePath: newBasePath,
@@ -293,6 +402,8 @@ export class EndpointFactory<
293
402
  defaultAuditorStorage: this.defaultAuditorStorage,
294
403
  defaultDatabaseService: this.defaultDatabaseService,
295
404
  defaultActorExtractor: this.defaultActorExtractor,
405
+ customSecuritySchemes: this.customSecuritySchemes,
406
+ defaultRlsConfig: this.defaultRlsConfig,
296
407
  });
297
408
  }
298
409
 
@@ -311,7 +422,8 @@ export class EndpointFactory<
311
422
  TAuditStorageServiceName,
312
423
  TAuditAction,
313
424
  TDatabase,
314
- TDatabaseServiceName
425
+ TDatabaseServiceName,
426
+ TSecuritySchemes
315
427
  > {
316
428
  return new EndpointFactory<
317
429
  TServices,
@@ -325,7 +437,9 @@ export class EndpointFactory<
325
437
  TAuditStorageServiceName,
326
438
  TAuditAction,
327
439
  TDatabase,
328
- TDatabaseServiceName
440
+ TDatabaseServiceName,
441
+ TSecuritySchemes,
442
+ TRlsConfig
329
443
  >({
330
444
  defaultServices: this.defaultServices,
331
445
  basePath: this.basePath,
@@ -338,6 +452,8 @@ export class EndpointFactory<
338
452
  defaultAuditorStorage: this.defaultAuditorStorage,
339
453
  defaultDatabaseService: this.defaultDatabaseService,
340
454
  defaultActorExtractor: this.defaultActorExtractor,
455
+ customSecuritySchemes: this.customSecuritySchemes,
456
+ defaultRlsConfig: this.defaultRlsConfig,
341
457
  });
342
458
  }
343
459
 
@@ -356,7 +472,8 @@ export class EndpointFactory<
356
472
  TAuditStorageServiceName,
357
473
  TAuditAction,
358
474
  TDatabase,
359
- TDatabaseServiceName
475
+ TDatabaseServiceName,
476
+ TSecuritySchemes
360
477
  > {
361
478
  return new EndpointFactory<
362
479
  [...S, ...TServices],
@@ -370,7 +487,9 @@ export class EndpointFactory<
370
487
  TAuditStorageServiceName,
371
488
  TAuditAction,
372
489
  TDatabase,
373
- TDatabaseServiceName
490
+ TDatabaseServiceName,
491
+ TSecuritySchemes,
492
+ TRlsConfig
374
493
  >({
375
494
  defaultServices: [...services, ...this.defaultServices],
376
495
  basePath: this.basePath,
@@ -383,6 +502,8 @@ export class EndpointFactory<
383
502
  defaultAuditorStorage: this.defaultAuditorStorage,
384
503
  defaultDatabaseService: this.defaultDatabaseService,
385
504
  defaultActorExtractor: this.defaultActorExtractor,
505
+ customSecuritySchemes: this.customSecuritySchemes,
506
+ defaultRlsConfig: this.defaultRlsConfig,
386
507
  });
387
508
  }
388
509
 
@@ -400,7 +521,8 @@ export class EndpointFactory<
400
521
  TAuditStorageServiceName,
401
522
  TAuditAction,
402
523
  TDatabase,
403
- TDatabaseServiceName
524
+ TDatabaseServiceName,
525
+ TSecuritySchemes
404
526
  > {
405
527
  return new EndpointFactory<
406
528
  TServices,
@@ -414,7 +536,9 @@ export class EndpointFactory<
414
536
  TAuditStorageServiceName,
415
537
  TAuditAction,
416
538
  TDatabase,
417
- TDatabaseServiceName
539
+ TDatabaseServiceName,
540
+ TSecuritySchemes,
541
+ TRlsConfig
418
542
  >({
419
543
  defaultServices: this.defaultServices,
420
544
  basePath: this.basePath,
@@ -441,6 +565,8 @@ export class EndpointFactory<
441
565
  TSession,
442
566
  L
443
567
  >,
568
+ customSecuritySchemes: this.customSecuritySchemes,
569
+ defaultRlsConfig: this.defaultRlsConfig,
444
570
  });
445
571
  }
446
572
 
@@ -461,7 +587,8 @@ export class EndpointFactory<
461
587
  TAuditStorageServiceName,
462
588
  TAuditAction,
463
589
  TDatabase,
464
- TDatabaseServiceName
590
+ TDatabaseServiceName,
591
+ TSecuritySchemes
465
592
  > {
466
593
  return new EndpointFactory<
467
594
  TServices,
@@ -475,7 +602,9 @@ export class EndpointFactory<
475
602
  TAuditStorageServiceName,
476
603
  TAuditAction,
477
604
  TDatabase,
478
- TDatabaseServiceName
605
+ TDatabaseServiceName,
606
+ TSecuritySchemes,
607
+ TRlsConfig
479
608
  >({
480
609
  defaultServices: this.defaultServices,
481
610
  basePath: this.basePath,
@@ -488,6 +617,8 @@ export class EndpointFactory<
488
617
  defaultAuditorStorage: this.defaultAuditorStorage,
489
618
  defaultDatabaseService: this.defaultDatabaseService,
490
619
  defaultActorExtractor: this.defaultActorExtractor,
620
+ customSecuritySchemes: this.customSecuritySchemes,
621
+ defaultRlsConfig: this.defaultRlsConfig,
491
622
  });
492
623
  }
493
624
 
@@ -505,7 +636,8 @@ export class EndpointFactory<
505
636
  TAuditStorageServiceName,
506
637
  TAuditAction,
507
638
  TDatabase,
508
- TDatabaseServiceName
639
+ TDatabaseServiceName,
640
+ TSecuritySchemes
509
641
  > {
510
642
  return new EndpointFactory<
511
643
  TServices,
@@ -519,7 +651,9 @@ export class EndpointFactory<
519
651
  TAuditStorageServiceName,
520
652
  TAuditAction,
521
653
  TDatabase,
522
- TDatabaseServiceName
654
+ TDatabaseServiceName,
655
+ TSecuritySchemes,
656
+ TRlsConfig
523
657
  >({
524
658
  defaultServices: this.defaultServices,
525
659
  basePath: this.basePath,
@@ -541,6 +675,8 @@ export class EndpointFactory<
541
675
  T,
542
676
  TLogger
543
677
  >,
678
+ customSecuritySchemes: this.customSecuritySchemes,
679
+ defaultRlsConfig: this.defaultRlsConfig,
544
680
  });
545
681
  }
546
682
 
@@ -562,7 +698,8 @@ export class EndpointFactory<
562
698
  TAuditStorageServiceName,
563
699
  TAuditAction,
564
700
  T,
565
- TName
701
+ TName,
702
+ TSecuritySchemes
566
703
  > {
567
704
  return new EndpointFactory<
568
705
  TServices,
@@ -576,7 +713,9 @@ export class EndpointFactory<
576
713
  TAuditStorageServiceName,
577
714
  TAuditAction,
578
715
  T,
579
- TName
716
+ TName,
717
+ TSecuritySchemes,
718
+ TRlsConfig
580
719
  >({
581
720
  defaultServices: this.defaultServices,
582
721
  basePath: this.basePath,
@@ -592,6 +731,8 @@ export class EndpointFactory<
592
731
  defaultAuthorizerName: this.defaultAuthorizerName,
593
732
  defaultAuditorStorage: this.defaultAuditorStorage,
594
733
  defaultDatabaseService: service,
734
+ customSecuritySchemes: this.customSecuritySchemes,
735
+ defaultRlsConfig: this.defaultRlsConfig,
595
736
  });
596
737
  }
597
738
 
@@ -614,7 +755,8 @@ export class EndpointFactory<
614
755
  TName,
615
756
  ExtractStorageAuditAction<T>,
616
757
  TDatabase,
617
- TDatabaseServiceName
758
+ TDatabaseServiceName,
759
+ TSecuritySchemes
618
760
  > {
619
761
  return new EndpointFactory<
620
762
  TServices,
@@ -628,7 +770,9 @@ export class EndpointFactory<
628
770
  TName,
629
771
  ExtractStorageAuditAction<T>,
630
772
  TDatabase,
631
- TDatabaseServiceName
773
+ TDatabaseServiceName,
774
+ TSecuritySchemes,
775
+ TRlsConfig
632
776
  >({
633
777
  defaultServices: this.defaultServices,
634
778
  basePath: this.basePath,
@@ -646,6 +790,8 @@ export class EndpointFactory<
646
790
  TSession,
647
791
  TLogger
648
792
  >,
793
+ customSecuritySchemes: this.customSecuritySchemes,
794
+ defaultRlsConfig: this.defaultRlsConfig,
649
795
  });
650
796
  }
651
797
 
@@ -667,7 +813,8 @@ export class EndpointFactory<
667
813
  TAuditStorageServiceName,
668
814
  TAuditAction,
669
815
  TDatabase,
670
- TDatabaseServiceName
816
+ TDatabaseServiceName,
817
+ TSecuritySchemes
671
818
  > {
672
819
  return new EndpointFactory<
673
820
  TServices,
@@ -681,7 +828,9 @@ export class EndpointFactory<
681
828
  TAuditStorageServiceName,
682
829
  TAuditAction,
683
830
  TDatabase,
684
- TDatabaseServiceName
831
+ TDatabaseServiceName,
832
+ TSecuritySchemes,
833
+ TRlsConfig
685
834
  >({
686
835
  defaultServices: this.defaultServices,
687
836
  basePath: this.basePath,
@@ -694,6 +843,76 @@ export class EndpointFactory<
694
843
  defaultAuditorStorage: this.defaultAuditorStorage,
695
844
  defaultDatabaseService: this.defaultDatabaseService,
696
845
  defaultActorExtractor: extractor,
846
+ customSecuritySchemes: this.customSecuritySchemes,
847
+ defaultRlsConfig: this.defaultRlsConfig,
848
+ });
849
+ }
850
+
851
+ /**
852
+ * Set the RLS (Row-Level Security) configuration for endpoints created from this factory.
853
+ * This enables automatic PostgreSQL session variable setting for RLS policies.
854
+ *
855
+ * @example
856
+ * ```typescript
857
+ * const api = new EndpointFactory()
858
+ * .database(databaseService)
859
+ * .session(extractSession)
860
+ * .rls({
861
+ * extractor: ({ session }) => ({
862
+ * user_id: session.userId,
863
+ * tenant_id: session.tenantId,
864
+ * }),
865
+ * prefix: 'app',
866
+ * });
867
+ * ```
868
+ */
869
+ rls<TConfig extends RlsConfig<TServices, TSession, TLogger>>(
870
+ config: TConfig,
871
+ ): EndpointFactory<
872
+ TServices,
873
+ TBasePath,
874
+ TLogger,
875
+ TSession,
876
+ TEventPublisher,
877
+ TEventPublisherServiceName,
878
+ TAuthorizers,
879
+ TAuditStorage,
880
+ TAuditStorageServiceName,
881
+ TAuditAction,
882
+ TDatabase,
883
+ TDatabaseServiceName,
884
+ TSecuritySchemes,
885
+ TConfig
886
+ > {
887
+ return new EndpointFactory<
888
+ TServices,
889
+ TBasePath,
890
+ TLogger,
891
+ TSession,
892
+ TEventPublisher,
893
+ TEventPublisherServiceName,
894
+ TAuthorizers,
895
+ TAuditStorage,
896
+ TAuditStorageServiceName,
897
+ TAuditAction,
898
+ TDatabase,
899
+ TDatabaseServiceName,
900
+ TSecuritySchemes,
901
+ TConfig
902
+ >({
903
+ defaultServices: this.defaultServices,
904
+ basePath: this.basePath,
905
+ defaultAuthorizeFn: this.defaultAuthorizeFn,
906
+ defaultLogger: this.defaultLogger,
907
+ defaultSessionExtractor: this.defaultSessionExtractor,
908
+ defaultEventPublisher: this.defaultEventPublisher,
909
+ availableAuthorizers: this.availableAuthorizers,
910
+ defaultAuthorizerName: this.defaultAuthorizerName,
911
+ defaultAuditorStorage: this.defaultAuditorStorage,
912
+ defaultDatabaseService: this.defaultDatabaseService,
913
+ defaultActorExtractor: this.defaultActorExtractor,
914
+ customSecuritySchemes: this.customSecuritySchemes,
915
+ defaultRlsConfig: config,
697
916
  });
698
917
  }
699
918
 
@@ -782,6 +1001,14 @@ export class EndpointFactory<
782
1001
  builder._actorExtractor = this.defaultActorExtractor;
783
1002
  }
784
1003
 
1004
+ // Set custom security schemes
1005
+ builder._customSecuritySchemes = this.customSecuritySchemes;
1006
+
1007
+ // Set RLS config if configured
1008
+ if (this.defaultRlsConfig) {
1009
+ builder._rlsConfig = this.defaultRlsConfig as any;
1010
+ }
1011
+
785
1012
  return builder;
786
1013
  }
787
1014
 
@@ -849,6 +1076,13 @@ export interface EndpointFactoryOptions<
849
1076
  TAuditStorageServiceName extends string = string,
850
1077
  TDatabase = undefined,
851
1078
  TDatabaseServiceName extends string = string,
1079
+ TSecuritySchemes extends Record<string, SecurityScheme> = Record<
1080
+ string,
1081
+ SecurityScheme
1082
+ >,
1083
+ TRlsConfig extends
1084
+ | RlsConfig<TServices, TSession, TLogger>
1085
+ | undefined = undefined,
852
1086
  > {
853
1087
  defaultServices?: TServices;
854
1088
  basePath?: TBasePath;
@@ -862,6 +1096,8 @@ export interface EndpointFactoryOptions<
862
1096
  defaultAuditorStorage?: Service<TAuditStorageServiceName, TAuditStorage>;
863
1097
  defaultDatabaseService?: Service<TDatabaseServiceName, TDatabase>;
864
1098
  defaultActorExtractor?: ActorExtractor<TServices, TSession, TLogger>;
1099
+ customSecuritySchemes?: TSecuritySchemes;
1100
+ defaultRlsConfig?: TRlsConfig;
865
1101
  }
866
1102
 
867
1103
  export const e = new EndpointFactory();