@geekmidas/constructs 1.0.1 → 1.0.2

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 (114) hide show
  1. package/dist/{AWSLambdaSubscriberAdaptor-yt7Q8xE-.mjs → AWSLambdaSubscriberAdaptor-BUvb-v_n.mjs} +25 -3
  2. package/dist/AWSLambdaSubscriberAdaptor-BUvb-v_n.mjs.map +1 -0
  3. package/dist/{AWSLambdaSubscriberAdaptor-Bat1CB6a.d.cts → AWSLambdaSubscriberAdaptor-BfEGolJA.d.cts} +2 -1
  4. package/dist/{AWSLambdaSubscriberAdaptor-DgSXzIUT.d.mts.map → AWSLambdaSubscriberAdaptor-BfEGolJA.d.cts.map} +1 -1
  5. package/dist/{AWSLambdaSubscriberAdaptor-DgSXzIUT.d.mts → AWSLambdaSubscriberAdaptor-Pb7Jof-i.d.mts} +2 -1
  6. package/dist/{AWSLambdaSubscriberAdaptor-Bat1CB6a.d.cts.map → AWSLambdaSubscriberAdaptor-Pb7Jof-i.d.mts.map} +1 -1
  7. package/dist/{AWSLambdaSubscriberAdaptor-CrCeL9Fs.cjs → AWSLambdaSubscriberAdaptor-Soie57uM.cjs} +25 -3
  8. package/dist/AWSLambdaSubscriberAdaptor-Soie57uM.cjs.map +1 -0
  9. package/dist/{Authorizer-Q-lW9GNW.cjs → Authorizer-BXxBee2P.cjs} +1 -1
  10. package/dist/{Authorizer-Q-lW9GNW.cjs.map → Authorizer-BXxBee2P.cjs.map} +1 -1
  11. package/dist/{Authorizer-UByhrr73.mjs → Authorizer-BgjU8-z6.mjs} +1 -1
  12. package/dist/{Authorizer-UByhrr73.mjs.map → Authorizer-BgjU8-z6.mjs.map} +1 -1
  13. package/dist/{Cron-Bx77QBN0.cjs → Cron-BV6weqem.cjs} +1 -1
  14. package/dist/{Cron-Bx77QBN0.cjs.map → Cron-BV6weqem.cjs.map} +1 -1
  15. package/dist/{Cron-CU3nmjdC.mjs → Cron-D5NpDp6y.mjs} +1 -1
  16. package/dist/{Cron-CU3nmjdC.mjs.map → Cron-D5NpDp6y.mjs.map} +1 -1
  17. package/dist/{CronBuilder-DLJvSOqj.cjs → CronBuilder-DzPkDCiP.cjs} +2 -2
  18. package/dist/{CronBuilder-DLJvSOqj.cjs.map → CronBuilder-DzPkDCiP.cjs.map} +1 -1
  19. package/dist/{CronBuilder-DEI1u1kW.mjs → CronBuilder-p1Ro6a0n.mjs} +2 -2
  20. package/dist/{CronBuilder-DEI1u1kW.mjs.map → CronBuilder-p1Ro6a0n.mjs.map} +1 -1
  21. package/dist/{EndpointBuilder-CZCom6bI.mjs → EndpointBuilder-CF-ZWtdu.mjs} +3 -3
  22. package/dist/{EndpointBuilder-CZCom6bI.mjs.map → EndpointBuilder-CF-ZWtdu.mjs.map} +1 -1
  23. package/dist/{EndpointBuilder-CVLonbkM.cjs → EndpointBuilder-CyszO0bs.cjs} +3 -3
  24. package/dist/{EndpointBuilder-CVLonbkM.cjs.map → EndpointBuilder-CyszO0bs.cjs.map} +1 -1
  25. package/dist/{EndpointFactory-CTRHSuRp.cjs → EndpointFactory-D36yAGvt.cjs} +2 -2
  26. package/dist/{EndpointFactory-CTRHSuRp.cjs.map → EndpointFactory-D36yAGvt.cjs.map} +1 -1
  27. package/dist/{EndpointFactory-CSStmg_R.mjs → EndpointFactory-Dm8Hj6e5.mjs} +2 -2
  28. package/dist/{EndpointFactory-CSStmg_R.mjs.map → EndpointFactory-Dm8Hj6e5.mjs.map} +1 -1
  29. package/dist/{HonoEndpointAdaptor-C_eGbXZR.d.mts → HonoEndpointAdaptor-Ay5UGPu0.d.mts} +3 -3
  30. package/dist/{HonoEndpointAdaptor-BuyXynoH.d.cts.map → HonoEndpointAdaptor-Ay5UGPu0.d.mts.map} +1 -1
  31. package/dist/{HonoEndpointAdaptor-BuyXynoH.d.cts → HonoEndpointAdaptor-o6QyDkdy.d.cts} +3 -3
  32. package/dist/{HonoEndpointAdaptor-C_eGbXZR.d.mts.map → HonoEndpointAdaptor-o6QyDkdy.d.cts.map} +1 -1
  33. package/dist/adaptors/aws.cjs +1 -1
  34. package/dist/adaptors/aws.d.cts +2 -2
  35. package/dist/adaptors/aws.d.mts +2 -2
  36. package/dist/adaptors/aws.mjs +1 -1
  37. package/dist/adaptors/hono.d.cts +2 -2
  38. package/dist/adaptors/hono.d.mts +2 -2
  39. package/dist/adaptors/testing.d.cts +1 -1
  40. package/dist/adaptors/testing.d.mts +1 -1
  41. package/dist/crons/Cron.cjs +1 -1
  42. package/dist/crons/Cron.d.cts +1 -1
  43. package/dist/crons/Cron.d.mts +1 -1
  44. package/dist/crons/Cron.mjs +1 -1
  45. package/dist/crons/CronBuilder.cjs +2 -2
  46. package/dist/crons/CronBuilder.d.cts +1 -1
  47. package/dist/crons/CronBuilder.d.mts +1 -1
  48. package/dist/crons/CronBuilder.mjs +2 -2
  49. package/dist/crons/index.cjs +2 -2
  50. package/dist/crons/index.d.cts +5 -5
  51. package/dist/crons/index.d.mts +5 -5
  52. package/dist/crons/index.d.mts.map +1 -1
  53. package/dist/crons/index.mjs +2 -2
  54. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +1 -1
  55. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +1 -1
  56. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +1 -1
  57. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +1 -1
  58. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +1 -1
  59. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +1 -1
  60. package/dist/endpoints/Authorizer.cjs +1 -1
  61. package/dist/endpoints/Authorizer.mjs +1 -1
  62. package/dist/endpoints/Endpoint.d.cts +1 -1
  63. package/dist/endpoints/Endpoint.d.mts +1 -1
  64. package/dist/endpoints/EndpointBuilder.cjs +3 -3
  65. package/dist/endpoints/EndpointBuilder.d.cts +1 -1
  66. package/dist/endpoints/EndpointBuilder.d.mts +1 -1
  67. package/dist/endpoints/EndpointBuilder.mjs +3 -3
  68. package/dist/endpoints/EndpointFactory.cjs +4 -4
  69. package/dist/endpoints/EndpointFactory.d.cts +1 -1
  70. package/dist/endpoints/EndpointFactory.d.mts +1 -1
  71. package/dist/endpoints/EndpointFactory.mjs +4 -4
  72. package/dist/endpoints/HonoEndpointAdaptor.d.cts +2 -2
  73. package/dist/endpoints/HonoEndpointAdaptor.d.mts +2 -2
  74. package/dist/endpoints/TestEndpointAdaptor.d.cts +1 -1
  75. package/dist/endpoints/TestEndpointAdaptor.d.mts +1 -1
  76. package/dist/endpoints/audit.d.cts +1 -1
  77. package/dist/endpoints/audit.d.mts +1 -1
  78. package/dist/endpoints/helpers.d.cts +1 -1
  79. package/dist/endpoints/helpers.d.mts +1 -1
  80. package/dist/endpoints/index.cjs +4 -4
  81. package/dist/endpoints/index.d.cts +3 -3
  82. package/dist/endpoints/index.d.mts +3 -3
  83. package/dist/endpoints/index.mjs +4 -4
  84. package/dist/endpoints/lazyAccessors.d.cts +1 -1
  85. package/dist/endpoints/lazyAccessors.d.mts +1 -1
  86. package/dist/endpoints/processAudits.d.cts +1 -1
  87. package/dist/endpoints/processAudits.d.mts +1 -1
  88. package/dist/endpoints/rls.cjs +1 -1
  89. package/dist/endpoints/rls.d.cts +1 -1
  90. package/dist/endpoints/rls.d.mts +1 -1
  91. package/dist/endpoints/rls.mjs +1 -1
  92. package/dist/functions/index.d.cts +1 -1
  93. package/dist/functions/index.d.mts +1 -1
  94. package/dist/index-dRNH0dT6.d.cts +12 -0
  95. package/dist/{index-0bHR_AbP.d.cts.map → index-dRNH0dT6.d.cts.map} +1 -1
  96. package/dist/{index-0bHR_AbP.d.cts → index-puUpr9Dh.d.mts} +2 -2
  97. package/dist/{index-BN927YDe.d.mts.map → index-puUpr9Dh.d.mts.map} +1 -1
  98. package/dist/{rls-uq6XPM83.cjs → rls-BrywnrQb.cjs} +1 -1
  99. package/dist/{rls-uq6XPM83.cjs.map → rls-BrywnrQb.cjs.map} +1 -1
  100. package/dist/{rls-WNnQLmQd.mjs → rls-C0cWOnk4.mjs} +1 -1
  101. package/dist/{rls-WNnQLmQd.mjs.map → rls-C0cWOnk4.mjs.map} +1 -1
  102. package/dist/subscribers/AWSLambdaSubscriberAdaptor.cjs +1 -1
  103. package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.cts +1 -1
  104. package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.mts +1 -1
  105. package/dist/subscribers/AWSLambdaSubscriberAdaptor.mjs +1 -1
  106. package/dist/subscribers/index.d.cts +2 -2
  107. package/dist/subscribers/index.d.mts +2 -2
  108. package/dist/subscribers/index.d.mts.map +1 -1
  109. package/package.json +6 -6
  110. package/src/subscribers/AWSLambdaSubscriberAdaptor.ts +32 -3
  111. package/src/subscribers/__tests__/AWSLambdaSubscriberAdaptor.spec.ts +120 -1
  112. package/dist/AWSLambdaSubscriberAdaptor-CrCeL9Fs.cjs.map +0 -1
  113. package/dist/AWSLambdaSubscriberAdaptor-yt7Q8xE-.mjs.map +0 -1
  114. package/dist/index-BN927YDe.d.mts +0 -12
@@ -65,7 +65,7 @@ var AWSLambdaSubscriber = class {
65
65
  }, "Failed to parse SQS record");
66
66
  }
67
67
  else if (this.isSNSEvent(rawEvent)) for (const record of rawEvent.Records) try {
68
- const event = JSON.parse(record.Sns.Message);
68
+ const event = this.parseSNSRecord(record);
69
69
  if (event && this.isSubscribedEvent(event.type)) events.push(event);
70
70
  } catch (error) {
71
71
  this.logger.error({
@@ -85,12 +85,34 @@ var AWSLambdaSubscriber = class {
85
85
  const firstRecord = event.Records[0];
86
86
  return "Records" in event && event.Records.length > 0 && firstRecord !== void 0 && "EventSource" in firstRecord && firstRecord.EventSource === "aws:sns";
87
87
  }
88
+ parseSNSRecord(record) {
89
+ try {
90
+ const message = JSON.parse(record.Sns.Message);
91
+ const messageType = record.Sns.MessageAttributes?.type?.Value ?? message.type;
92
+ if (message.type) return message;
93
+ return messageType ? {
94
+ type: messageType,
95
+ payload: message
96
+ } : message;
97
+ } catch (error) {
98
+ this.logger.error({
99
+ error,
100
+ record
101
+ }, "Failed to parse SNS record body");
102
+ return null;
103
+ }
104
+ }
88
105
  parseSQSRecord(record) {
89
106
  try {
90
107
  const body = JSON.parse(record.body);
91
108
  if (body.Type === "Notification" && body.Message) {
92
109
  const snsMessage = JSON.parse(body.Message);
93
- return snsMessage;
110
+ if (snsMessage.type) return snsMessage;
111
+ const messageType = body.MessageAttributes?.type?.Value ?? snsMessage.type;
112
+ return messageType ? {
113
+ type: messageType,
114
+ payload: snsMessage
115
+ } : snsMessage;
94
116
  }
95
117
  return body;
96
118
  } catch (error) {
@@ -133,4 +155,4 @@ var AWSLambdaSubscriber = class {
133
155
 
134
156
  //#endregion
135
157
  export { AWSLambdaSubscriber };
136
- //# sourceMappingURL=AWSLambdaSubscriberAdaptor-yt7Q8xE-.mjs.map
158
+ //# sourceMappingURL=AWSLambdaSubscriberAdaptor-BUvb-v_n.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AWSLambdaSubscriberAdaptor-BUvb-v_n.mjs","names":["envParser: EnvironmentParser<{}>","subscriber: Subscriber<\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTSubscribedEvents\n\t\t>","events: any[]","event: SQSEvent | SNSEvent","record: SNSEventRecord","record: SQSRecord","eventType: string","event: SubscriberEvent<TServices, TLogger>"],"sources":["../src/subscribers/AWSLambdaSubscriberAdaptor.ts"],"sourcesContent":["import type { EnvironmentParser } from '@geekmidas/envkit';\nimport { wrapError } from '@geekmidas/errors';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { InferStandardSchema } from '@geekmidas/schema';\nimport type { Service, ServiceRecord } from '@geekmidas/services';\nimport { ServiceDiscovery } from '@geekmidas/services';\nimport middy, { type MiddlewareObj } from '@middy/core';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type {\n\tContext,\n\tHandler,\n\tSNSEvent,\n\tSNSEventRecord,\n\tSQSEvent,\n\tSQSRecord,\n} from 'aws-lambda';\nimport type { Subscriber } from './Subscriber';\n\nexport type AWSLambdaHandler<TEvent = any, TResult = any> = Handler<\n\tTEvent,\n\tTResult\n>;\n\ntype SubscriberEvent<TServices extends Service[], TLogger extends Logger> = {\n\tevents: any[];\n\tservices: ServiceRecord<TServices>;\n\tlogger: TLogger;\n};\n\ntype Middleware<\n\tTServices extends Service[],\n\tTLogger extends Logger,\n\tTOutSchema extends StandardSchemaV1 | undefined,\n> = MiddlewareObj<\n\tSubscriberEvent<TServices, TLogger>,\n\tInferStandardSchema<TOutSchema>,\n\tError,\n\tContext\n>;\n\nexport class AWSLambdaSubscriber<\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTSubscribedEvents extends any[] = [],\n> {\n\tprivate _logger!: TLogger;\n\tprivate _services!: ServiceRecord<TServices>;\n\n\tconstructor(\n\t\tprivate envParser: EnvironmentParser<{}>,\n\t\treadonly subscriber: Subscriber<\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTSubscribedEvents\n\t\t>,\n\t) {\n\t\tthis._logger = subscriber.logger;\n\t}\n\n\tget logger(): TLogger {\n\t\treturn this._logger;\n\t}\n\n\tprivate async getServices(): Promise<ServiceRecord<TServices>> {\n\t\tif (this._services) {\n\t\t\treturn this._services;\n\t\t}\n\n\t\tconst serviceDiscovery = ServiceDiscovery.getInstance(this.envParser);\n\n\t\tif (this.subscriber.services.length > 0) {\n\t\t\tconst registered = await serviceDiscovery.register(\n\t\t\t\tthis.subscriber.services,\n\t\t\t);\n\t\t\tthis._services = registered as ServiceRecord<TServices>;\n\t\t} else {\n\t\t\tthis._services = {} as ServiceRecord<TServices>;\n\t\t}\n\n\t\treturn this._services;\n\t}\n\n\tprivate error(): Middleware<TServices, TLogger, OutSchema> {\n\t\treturn {\n\t\t\tonError: (req) => {\n\t\t\t\tconst logger = req.event?.logger || this.subscriber.logger;\n\t\t\t\tlogger.error(req.error || {}, 'Error processing subscriber');\n\n\t\t\t\t// Re-throw the wrapped error to let Lambda handle it\n\t\t\t\tthrow wrapError(req.error);\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate loggerMiddleware(): Middleware<TServices, TLogger, OutSchema> {\n\t\treturn {\n\t\t\tbefore: (req) => {\n\t\t\t\tthis._logger = this.subscriber.logger.child({\n\t\t\t\t\tsubscriber: {\n\t\t\t\t\t\tname: req.context.functionName,\n\t\t\t\t\t\tversion: req.context.functionVersion,\n\t\t\t\t\t\tmemory: req.context.memoryLimitInMB,\n\t\t\t\t\t},\n\t\t\t\t\treq: {\n\t\t\t\t\t\tid: req.context.awsRequestId,\n\t\t\t\t\t},\n\t\t\t\t}) as TLogger;\n\n\t\t\t\treq.event.logger = this._logger;\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate services(): Middleware<TServices, TLogger, OutSchema> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\treq.event.services = await this.getServices();\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate parseEvents(): Middleware<TServices, TLogger, OutSchema> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\tconst { logger, ...e } = req.event;\n\t\t\t\tconst rawEvent = e as any as SQSEvent | SNSEvent;\n\n\t\t\t\tlogger.info({\n\t\t\t\t\trawEvent,\n\t\t\t\t});\n\n\t\t\t\t// Parse events based on the event type\n\t\t\t\tconst events: any[] = [];\n\n\t\t\t\tif ('Records' in rawEvent) {\n\t\t\t\t\tif (this.isSQSEvent(rawEvent)) {\n\t\t\t\t\t\t// SQS Event\n\t\t\t\t\t\tfor (const record of rawEvent.Records) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst event = this.parseSQSRecord(record);\n\t\t\t\t\t\t\t\tif (event && this.isSubscribedEvent(event.type)) {\n\t\t\t\t\t\t\t\t\tevents.push(event);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tthis.logger.error(\n\t\t\t\t\t\t\t\t\t{ error, record },\n\t\t\t\t\t\t\t\t\t'Failed to parse SQS record',\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (this.isSNSEvent(rawEvent)) {\n\t\t\t\t\t\t// SNS Event\n\t\t\t\t\t\tfor (const record of rawEvent.Records) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst event = this.parseSNSRecord(record);\n\t\t\t\t\t\t\t\tif (event && this.isSubscribedEvent(event.type)) {\n\t\t\t\t\t\t\t\t\tevents.push(event);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tthis.logger.error(\n\t\t\t\t\t\t\t\t\t{ error, record },\n\t\t\t\t\t\t\t\t\t'Failed to parse SNS record',\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t(req.event as any).events = events;\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate isSQSEvent(event: SQSEvent | SNSEvent): event is SQSEvent {\n\t\tconst firstRecord = event.Records[0];\n\t\treturn (\n\t\t\t'Records' in event &&\n\t\t\tevent.Records.length > 0 &&\n\t\t\tfirstRecord !== undefined &&\n\t\t\t'eventSource' in firstRecord &&\n\t\t\tfirstRecord.eventSource === 'aws:sqs'\n\t\t);\n\t}\n\n\tprivate isSNSEvent(event: SQSEvent | SNSEvent): event is SNSEvent {\n\t\tconst firstRecord = event.Records[0];\n\t\treturn (\n\t\t\t'Records' in event &&\n\t\t\tevent.Records.length > 0 &&\n\t\t\tfirstRecord !== undefined &&\n\t\t\t'EventSource' in firstRecord &&\n\t\t\tfirstRecord.EventSource === 'aws:sns'\n\t\t);\n\t}\n\n\tprivate parseSNSRecord(record: SNSEventRecord): any | null {\n\t\ttry {\n\t\t\tconst message = JSON.parse(record.Sns.Message);\n\t\t\t// Resolve type from MessageAttributes (preferred) or message body\n\t\t\tconst messageType =\n\t\t\t\trecord.Sns.MessageAttributes?.type?.Value ?? message.type;\n\n\t\t\tif (message.type) {\n\t\t\t\treturn message; // Full event format: { type, payload }\n\t\t\t}\n\n\t\t\t// Payload-only format: type is in MessageAttributes\n\t\t\treturn messageType ? { type: messageType, payload: message } : message;\n\t\t} catch (error) {\n\t\t\tthis.logger.error({ error, record }, 'Failed to parse SNS record body');\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate parseSQSRecord(record: SQSRecord): any | null {\n\t\ttry {\n\t\t\tconst body = JSON.parse(record.body);\n\n\t\t\t// Check if this is an SNS message wrapped in SQS\n\t\t\tif (body.Type === 'Notification' && body.Message) {\n\t\t\t\tconst snsMessage = JSON.parse(body.Message);\n\n\t\t\t\tif (snsMessage.type) {\n\t\t\t\t\treturn snsMessage; // Full event format: { type, payload }\n\t\t\t\t}\n\n\t\t\t\t// Payload-only format: type is in MessageAttributes\n\t\t\t\tconst messageType =\n\t\t\t\t\tbody.MessageAttributes?.type?.Value ?? snsMessage.type;\n\t\t\t\treturn messageType\n\t\t\t\t\t? { type: messageType, payload: snsMessage }\n\t\t\t\t\t: snsMessage;\n\t\t\t}\n\n\t\t\t// Direct SQS message\n\t\t\treturn body;\n\t\t} catch (error) {\n\t\t\tthis.logger.error({ error, record }, 'Failed to parse SQS record body');\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate isSubscribedEvent(eventType: string): boolean {\n\t\tif (!this.subscriber.subscribedEvents) {\n\t\t\treturn true; // If no events specified, accept all\n\t\t}\n\n\t\treturn this.subscriber.subscribedEvents.includes(eventType as any);\n\t}\n\n\tprivate async _handler(event: SubscriberEvent<TServices, TLogger>) {\n\t\t// If no events after filtering, return early\n\t\tif (event.events.length === 0) {\n\t\t\tthis.logger.info('No subscribed events to process');\n\t\t\treturn {\n\t\t\t\tbatchItemFailures: [],\n\t\t\t};\n\t\t}\n\n\t\t// Execute the subscriber with the parsed context\n\t\tconst result = await this.subscriber.handler({\n\t\t\tevents: event.events,\n\t\t\tservices: event.services,\n\t\t\tlogger: event.logger,\n\t\t});\n\n\t\t// Parse output if schema is provided\n\t\tif (this.subscriber.outputSchema && result) {\n\t\t\tconst validationResult =\n\t\t\t\tawait this.subscriber.outputSchema['~standard'].validate(result);\n\n\t\t\tif (validationResult.issues) {\n\t\t\t\tthis.logger.error(\n\t\t\t\t\t{ issues: validationResult.issues },\n\t\t\t\t\t'Subscriber output validation failed',\n\t\t\t\t);\n\t\t\t\tthrow new Error('Subscriber output validation failed');\n\t\t\t}\n\n\t\t\treturn validationResult.value;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tget handler(): AWSLambdaHandler {\n\t\tconst handler = this._handler.bind(this);\n\n\t\t// Apply middleware in order\n\t\treturn middy(handler)\n\t\t\t.use(this.loggerMiddleware())\n\t\t\t.use(this.parseEvents())\n\t\t\t.use(this.error())\n\t\t\t.use(this.services());\n\t}\n}\n"],"mappings":"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"}
@@ -22,6 +22,7 @@ declare class AWSLambdaSubscriber<TServices extends Service[] = [], TLogger exte
22
22
  private parseEvents;
23
23
  private isSQSEvent;
24
24
  private isSNSEvent;
25
+ private parseSNSRecord;
25
26
  private parseSQSRecord;
26
27
  private isSubscribedEvent;
27
28
  private _handler;
@@ -31,4 +32,4 @@ declare class AWSLambdaSubscriber<TServices extends Service[] = [], TLogger exte
31
32
 
32
33
  //#endregion
33
34
  export { AWSLambdaHandler, AWSLambdaSubscriber };
34
- //# sourceMappingURL=AWSLambdaSubscriberAdaptor-Bat1CB6a.d.cts.map
35
+ //# sourceMappingURL=AWSLambdaSubscriberAdaptor-BfEGolJA.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AWSLambdaSubscriberAdaptor-DgSXzIUT.d.mts","names":[],"sources":["../src/subscribers/AWSLambdaSubscriberAdaptor.ts"],"sourcesContent":[],"mappings":";;;;;;;;;KAkBY,gDAAgD,QAC3D,QACA;cAoBY,sCACM,gCACF,SAAS,0BACP,kEACM;EA1Bb,QAAA,SAAA;EAAgB,SAAA,UAAA,EAmCL,UAnCK,CAoCzB,SApCyB,EAqCzB,OArCyB,EAsCzB,SAtCyB,EAuCzB,eAvCyB,EAwCzB,0BAxCyB,EAyCzB,iBAzCyB,CAAA;EAAA,QAC3B,OAAA;EAAM,QACN,SAAA;EAAO,WAFoD,CAAA,SAAA,EAkCvC,iBAlCuC,CAAA,CAAA,CAAA,CAAA,EAAA,UAAA,EAmCrC,UAnCqC,CAoCzD,SApCyD,EAqCzD,OArCyD,EAsCzD,SAtCyD,EAuCzD,eAvCyD,EAwCzD,0BAxCyD,EAyCzD,iBAzCyD,CAAA;EAAO,IAAA,MAAA,CAAA,CAAA,EA+CpD,OA/CoD;EAsBtD,QAAA,WAAA;EAAmB,QAAA,KAAA;EAAA,QACb,gBAAA;EAAO,QACT,QAAA;EAAM,QAAG,WAAA;EAAM,QACb,UAAA;EAAgB,QACV,UAAA;EAAc,QAUpC,cAAA;EAAS,QACT,iBAAA;EAAO,QACP,QAAA;EAAS,IACT,OAAA,CAAA,CAAA,EA8Ma,gBA9Mb"}
1
+ {"version":3,"file":"AWSLambdaSubscriberAdaptor-BfEGolJA.d.cts","names":[],"sources":["../src/subscribers/AWSLambdaSubscriberAdaptor.ts"],"sourcesContent":[],"mappings":";;;;;;;;;KAmBY,gDAAgD,QAC3D,QACA;cAoBY,sCACM,gCACF,SAAS,0BACP,kEACM;EA1Bb,QAAA,SAAA;EAAgB,SAAA,UAAA,EAmCL,UAnCK,CAoCzB,SApCyB,EAqCzB,OArCyB,EAsCzB,SAtCyB,EAuCzB,eAvCyB,EAwCzB,0BAxCyB,EAyCzB,iBAzCyB,CAAA;EAAA,QAC3B,OAAA;EAAM,QACN,SAAA;EAAO,WAFoD,CAAA,SAAA,EAkCvC,iBAlCuC,CAAA,CAAA,CAAA,CAAA,EAAA,UAAA,EAmCrC,UAnCqC,CAoCzD,SApCyD,EAqCzD,OArCyD,EAsCzD,SAtCyD,EAuCzD,eAvCyD,EAwCzD,0BAxCyD,EAyCzD,iBAzCyD,CAAA;EAAO,IAAA,MAAA,CAAA,CAAA,EA+CpD,OA/CoD;EAsBtD,QAAA,WAAA;EAAmB,QAAA,KAAA;EAAA,QACb,gBAAA;EAAO,QACT,QAAA;EAAM,QAAG,WAAA;EAAM,QACb,UAAA;EAAgB,QACV,UAAA;EAAc,QAUpC,cAAA;EAAS,QACT,cAAA;EAAO,QACP,iBAAA;EAAS,QACT,QAAA;EAAe,IACf,OAAA,CAAA,CAAA,EAyOa,gBAzOb"}
@@ -22,6 +22,7 @@ declare class AWSLambdaSubscriber<TServices extends Service[] = [], TLogger exte
22
22
  private parseEvents;
23
23
  private isSQSEvent;
24
24
  private isSNSEvent;
25
+ private parseSNSRecord;
25
26
  private parseSQSRecord;
26
27
  private isSubscribedEvent;
27
28
  private _handler;
@@ -31,4 +32,4 @@ declare class AWSLambdaSubscriber<TServices extends Service[] = [], TLogger exte
31
32
 
32
33
  //#endregion
33
34
  export { AWSLambdaHandler, AWSLambdaSubscriber };
34
- //# sourceMappingURL=AWSLambdaSubscriberAdaptor-DgSXzIUT.d.mts.map
35
+ //# sourceMappingURL=AWSLambdaSubscriberAdaptor-Pb7Jof-i.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AWSLambdaSubscriberAdaptor-Bat1CB6a.d.cts","names":[],"sources":["../src/subscribers/AWSLambdaSubscriberAdaptor.ts"],"sourcesContent":[],"mappings":";;;;;;;;;KAkBY,gDAAgD,QAC3D,QACA;cAoBY,sCACM,gCACF,SAAS,0BACP,kEACM;EA1Bb,QAAA,SAAA;EAAgB,SAAA,UAAA,EAmCL,UAnCK,CAoCzB,SApCyB,EAqCzB,OArCyB,EAsCzB,SAtCyB,EAuCzB,eAvCyB,EAwCzB,0BAxCyB,EAyCzB,iBAzCyB,CAAA;EAAA,QAC3B,OAAA;EAAM,QACN,SAAA;EAAO,WAFoD,CAAA,SAAA,EAkCvC,iBAlCuC,CAAA,CAAA,CAAA,CAAA,EAAA,UAAA,EAmCrC,UAnCqC,CAoCzD,SApCyD,EAqCzD,OArCyD,EAsCzD,SAtCyD,EAuCzD,eAvCyD,EAwCzD,0BAxCyD,EAyCzD,iBAzCyD,CAAA;EAAO,IAAA,MAAA,CAAA,CAAA,EA+CpD,OA/CoD;EAsBtD,QAAA,WAAA;EAAmB,QAAA,KAAA;EAAA,QACb,gBAAA;EAAO,QACT,QAAA;EAAM,QAAG,WAAA;EAAM,QACb,UAAA;EAAgB,QACV,UAAA;EAAc,QAUpC,cAAA;EAAS,QACT,iBAAA;EAAO,QACP,QAAA;EAAS,IACT,OAAA,CAAA,CAAA,EA8Ma,gBA9Mb"}
1
+ {"version":3,"file":"AWSLambdaSubscriberAdaptor-Pb7Jof-i.d.mts","names":[],"sources":["../src/subscribers/AWSLambdaSubscriberAdaptor.ts"],"sourcesContent":[],"mappings":";;;;;;;;;KAmBY,gDAAgD,QAC3D,QACA;cAoBY,sCACM,gCACF,SAAS,0BACP,kEACM;EA1Bb,QAAA,SAAA;EAAgB,SAAA,UAAA,EAmCL,UAnCK,CAoCzB,SApCyB,EAqCzB,OArCyB,EAsCzB,SAtCyB,EAuCzB,eAvCyB,EAwCzB,0BAxCyB,EAyCzB,iBAzCyB,CAAA;EAAA,QAC3B,OAAA;EAAM,QACN,SAAA;EAAO,WAFoD,CAAA,SAAA,EAkCvC,iBAlCuC,CAAA,CAAA,CAAA,CAAA,EAAA,UAAA,EAmCrC,UAnCqC,CAoCzD,SApCyD,EAqCzD,OArCyD,EAsCzD,SAtCyD,EAuCzD,eAvCyD,EAwCzD,0BAxCyD,EAyCzD,iBAzCyD,CAAA;EAAO,IAAA,MAAA,CAAA,CAAA,EA+CpD,OA/CoD;EAsBtD,QAAA,WAAA;EAAmB,QAAA,KAAA;EAAA,QACb,gBAAA;EAAO,QACT,QAAA;EAAM,QAAG,WAAA;EAAM,QACb,UAAA;EAAgB,QACV,UAAA;EAAc,QAUpC,cAAA;EAAS,QACT,cAAA;EAAO,QACP,iBAAA;EAAS,QACT,QAAA;EAAe,IACf,OAAA,CAAA,CAAA,EAyOa,gBAzOb"}
@@ -66,7 +66,7 @@ var AWSLambdaSubscriber = class {
66
66
  }, "Failed to parse SQS record");
67
67
  }
68
68
  else if (this.isSNSEvent(rawEvent)) for (const record of rawEvent.Records) try {
69
- const event = JSON.parse(record.Sns.Message);
69
+ const event = this.parseSNSRecord(record);
70
70
  if (event && this.isSubscribedEvent(event.type)) events.push(event);
71
71
  } catch (error) {
72
72
  this.logger.error({
@@ -86,12 +86,34 @@ var AWSLambdaSubscriber = class {
86
86
  const firstRecord = event.Records[0];
87
87
  return "Records" in event && event.Records.length > 0 && firstRecord !== void 0 && "EventSource" in firstRecord && firstRecord.EventSource === "aws:sns";
88
88
  }
89
+ parseSNSRecord(record) {
90
+ try {
91
+ const message = JSON.parse(record.Sns.Message);
92
+ const messageType = record.Sns.MessageAttributes?.type?.Value ?? message.type;
93
+ if (message.type) return message;
94
+ return messageType ? {
95
+ type: messageType,
96
+ payload: message
97
+ } : message;
98
+ } catch (error) {
99
+ this.logger.error({
100
+ error,
101
+ record
102
+ }, "Failed to parse SNS record body");
103
+ return null;
104
+ }
105
+ }
89
106
  parseSQSRecord(record) {
90
107
  try {
91
108
  const body = JSON.parse(record.body);
92
109
  if (body.Type === "Notification" && body.Message) {
93
110
  const snsMessage = JSON.parse(body.Message);
94
- return snsMessage;
111
+ if (snsMessage.type) return snsMessage;
112
+ const messageType = body.MessageAttributes?.type?.Value ?? snsMessage.type;
113
+ return messageType ? {
114
+ type: messageType,
115
+ payload: snsMessage
116
+ } : snsMessage;
95
117
  }
96
118
  return body;
97
119
  } catch (error) {
@@ -139,4 +161,4 @@ Object.defineProperty(exports, 'AWSLambdaSubscriber', {
139
161
  return AWSLambdaSubscriber;
140
162
  }
141
163
  });
142
- //# sourceMappingURL=AWSLambdaSubscriberAdaptor-CrCeL9Fs.cjs.map
164
+ //# sourceMappingURL=AWSLambdaSubscriberAdaptor-Soie57uM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AWSLambdaSubscriberAdaptor-Soie57uM.cjs","names":["envParser: EnvironmentParser<{}>","subscriber: Subscriber<\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTSubscribedEvents\n\t\t>","events: any[]","event: SQSEvent | SNSEvent","record: SNSEventRecord","record: SQSRecord","eventType: string","event: SubscriberEvent<TServices, TLogger>"],"sources":["../src/subscribers/AWSLambdaSubscriberAdaptor.ts"],"sourcesContent":["import type { EnvironmentParser } from '@geekmidas/envkit';\nimport { wrapError } from '@geekmidas/errors';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { InferStandardSchema } from '@geekmidas/schema';\nimport type { Service, ServiceRecord } from '@geekmidas/services';\nimport { ServiceDiscovery } from '@geekmidas/services';\nimport middy, { type MiddlewareObj } from '@middy/core';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type {\n\tContext,\n\tHandler,\n\tSNSEvent,\n\tSNSEventRecord,\n\tSQSEvent,\n\tSQSRecord,\n} from 'aws-lambda';\nimport type { Subscriber } from './Subscriber';\n\nexport type AWSLambdaHandler<TEvent = any, TResult = any> = Handler<\n\tTEvent,\n\tTResult\n>;\n\ntype SubscriberEvent<TServices extends Service[], TLogger extends Logger> = {\n\tevents: any[];\n\tservices: ServiceRecord<TServices>;\n\tlogger: TLogger;\n};\n\ntype Middleware<\n\tTServices extends Service[],\n\tTLogger extends Logger,\n\tTOutSchema extends StandardSchemaV1 | undefined,\n> = MiddlewareObj<\n\tSubscriberEvent<TServices, TLogger>,\n\tInferStandardSchema<TOutSchema>,\n\tError,\n\tContext\n>;\n\nexport class AWSLambdaSubscriber<\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTSubscribedEvents extends any[] = [],\n> {\n\tprivate _logger!: TLogger;\n\tprivate _services!: ServiceRecord<TServices>;\n\n\tconstructor(\n\t\tprivate envParser: EnvironmentParser<{}>,\n\t\treadonly subscriber: Subscriber<\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTSubscribedEvents\n\t\t>,\n\t) {\n\t\tthis._logger = subscriber.logger;\n\t}\n\n\tget logger(): TLogger {\n\t\treturn this._logger;\n\t}\n\n\tprivate async getServices(): Promise<ServiceRecord<TServices>> {\n\t\tif (this._services) {\n\t\t\treturn this._services;\n\t\t}\n\n\t\tconst serviceDiscovery = ServiceDiscovery.getInstance(this.envParser);\n\n\t\tif (this.subscriber.services.length > 0) {\n\t\t\tconst registered = await serviceDiscovery.register(\n\t\t\t\tthis.subscriber.services,\n\t\t\t);\n\t\t\tthis._services = registered as ServiceRecord<TServices>;\n\t\t} else {\n\t\t\tthis._services = {} as ServiceRecord<TServices>;\n\t\t}\n\n\t\treturn this._services;\n\t}\n\n\tprivate error(): Middleware<TServices, TLogger, OutSchema> {\n\t\treturn {\n\t\t\tonError: (req) => {\n\t\t\t\tconst logger = req.event?.logger || this.subscriber.logger;\n\t\t\t\tlogger.error(req.error || {}, 'Error processing subscriber');\n\n\t\t\t\t// Re-throw the wrapped error to let Lambda handle it\n\t\t\t\tthrow wrapError(req.error);\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate loggerMiddleware(): Middleware<TServices, TLogger, OutSchema> {\n\t\treturn {\n\t\t\tbefore: (req) => {\n\t\t\t\tthis._logger = this.subscriber.logger.child({\n\t\t\t\t\tsubscriber: {\n\t\t\t\t\t\tname: req.context.functionName,\n\t\t\t\t\t\tversion: req.context.functionVersion,\n\t\t\t\t\t\tmemory: req.context.memoryLimitInMB,\n\t\t\t\t\t},\n\t\t\t\t\treq: {\n\t\t\t\t\t\tid: req.context.awsRequestId,\n\t\t\t\t\t},\n\t\t\t\t}) as TLogger;\n\n\t\t\t\treq.event.logger = this._logger;\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate services(): Middleware<TServices, TLogger, OutSchema> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\treq.event.services = await this.getServices();\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate parseEvents(): Middleware<TServices, TLogger, OutSchema> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\tconst { logger, ...e } = req.event;\n\t\t\t\tconst rawEvent = e as any as SQSEvent | SNSEvent;\n\n\t\t\t\tlogger.info({\n\t\t\t\t\trawEvent,\n\t\t\t\t});\n\n\t\t\t\t// Parse events based on the event type\n\t\t\t\tconst events: any[] = [];\n\n\t\t\t\tif ('Records' in rawEvent) {\n\t\t\t\t\tif (this.isSQSEvent(rawEvent)) {\n\t\t\t\t\t\t// SQS Event\n\t\t\t\t\t\tfor (const record of rawEvent.Records) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst event = this.parseSQSRecord(record);\n\t\t\t\t\t\t\t\tif (event && this.isSubscribedEvent(event.type)) {\n\t\t\t\t\t\t\t\t\tevents.push(event);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tthis.logger.error(\n\t\t\t\t\t\t\t\t\t{ error, record },\n\t\t\t\t\t\t\t\t\t'Failed to parse SQS record',\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (this.isSNSEvent(rawEvent)) {\n\t\t\t\t\t\t// SNS Event\n\t\t\t\t\t\tfor (const record of rawEvent.Records) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst event = this.parseSNSRecord(record);\n\t\t\t\t\t\t\t\tif (event && this.isSubscribedEvent(event.type)) {\n\t\t\t\t\t\t\t\t\tevents.push(event);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tthis.logger.error(\n\t\t\t\t\t\t\t\t\t{ error, record },\n\t\t\t\t\t\t\t\t\t'Failed to parse SNS record',\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t(req.event as any).events = events;\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate isSQSEvent(event: SQSEvent | SNSEvent): event is SQSEvent {\n\t\tconst firstRecord = event.Records[0];\n\t\treturn (\n\t\t\t'Records' in event &&\n\t\t\tevent.Records.length > 0 &&\n\t\t\tfirstRecord !== undefined &&\n\t\t\t'eventSource' in firstRecord &&\n\t\t\tfirstRecord.eventSource === 'aws:sqs'\n\t\t);\n\t}\n\n\tprivate isSNSEvent(event: SQSEvent | SNSEvent): event is SNSEvent {\n\t\tconst firstRecord = event.Records[0];\n\t\treturn (\n\t\t\t'Records' in event &&\n\t\t\tevent.Records.length > 0 &&\n\t\t\tfirstRecord !== undefined &&\n\t\t\t'EventSource' in firstRecord &&\n\t\t\tfirstRecord.EventSource === 'aws:sns'\n\t\t);\n\t}\n\n\tprivate parseSNSRecord(record: SNSEventRecord): any | null {\n\t\ttry {\n\t\t\tconst message = JSON.parse(record.Sns.Message);\n\t\t\t// Resolve type from MessageAttributes (preferred) or message body\n\t\t\tconst messageType =\n\t\t\t\trecord.Sns.MessageAttributes?.type?.Value ?? message.type;\n\n\t\t\tif (message.type) {\n\t\t\t\treturn message; // Full event format: { type, payload }\n\t\t\t}\n\n\t\t\t// Payload-only format: type is in MessageAttributes\n\t\t\treturn messageType ? { type: messageType, payload: message } : message;\n\t\t} catch (error) {\n\t\t\tthis.logger.error({ error, record }, 'Failed to parse SNS record body');\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate parseSQSRecord(record: SQSRecord): any | null {\n\t\ttry {\n\t\t\tconst body = JSON.parse(record.body);\n\n\t\t\t// Check if this is an SNS message wrapped in SQS\n\t\t\tif (body.Type === 'Notification' && body.Message) {\n\t\t\t\tconst snsMessage = JSON.parse(body.Message);\n\n\t\t\t\tif (snsMessage.type) {\n\t\t\t\t\treturn snsMessage; // Full event format: { type, payload }\n\t\t\t\t}\n\n\t\t\t\t// Payload-only format: type is in MessageAttributes\n\t\t\t\tconst messageType =\n\t\t\t\t\tbody.MessageAttributes?.type?.Value ?? snsMessage.type;\n\t\t\t\treturn messageType\n\t\t\t\t\t? { type: messageType, payload: snsMessage }\n\t\t\t\t\t: snsMessage;\n\t\t\t}\n\n\t\t\t// Direct SQS message\n\t\t\treturn body;\n\t\t} catch (error) {\n\t\t\tthis.logger.error({ error, record }, 'Failed to parse SQS record body');\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate isSubscribedEvent(eventType: string): boolean {\n\t\tif (!this.subscriber.subscribedEvents) {\n\t\t\treturn true; // If no events specified, accept all\n\t\t}\n\n\t\treturn this.subscriber.subscribedEvents.includes(eventType as any);\n\t}\n\n\tprivate async _handler(event: SubscriberEvent<TServices, TLogger>) {\n\t\t// If no events after filtering, return early\n\t\tif (event.events.length === 0) {\n\t\t\tthis.logger.info('No subscribed events to process');\n\t\t\treturn {\n\t\t\t\tbatchItemFailures: [],\n\t\t\t};\n\t\t}\n\n\t\t// Execute the subscriber with the parsed context\n\t\tconst result = await this.subscriber.handler({\n\t\t\tevents: event.events,\n\t\t\tservices: event.services,\n\t\t\tlogger: event.logger,\n\t\t});\n\n\t\t// Parse output if schema is provided\n\t\tif (this.subscriber.outputSchema && result) {\n\t\t\tconst validationResult =\n\t\t\t\tawait this.subscriber.outputSchema['~standard'].validate(result);\n\n\t\t\tif (validationResult.issues) {\n\t\t\t\tthis.logger.error(\n\t\t\t\t\t{ issues: validationResult.issues },\n\t\t\t\t\t'Subscriber output validation failed',\n\t\t\t\t);\n\t\t\t\tthrow new Error('Subscriber output validation failed');\n\t\t\t}\n\n\t\t\treturn validationResult.value;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tget handler(): AWSLambdaHandler {\n\t\tconst handler = this._handler.bind(this);\n\n\t\t// Apply middleware in order\n\t\treturn middy(handler)\n\t\t\t.use(this.loggerMiddleware())\n\t\t\t.use(this.parseEvents())\n\t\t\t.use(this.error())\n\t\t\t.use(this.services());\n\t}\n}\n"],"mappings":"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"}
@@ -89,4 +89,4 @@ Object.defineProperty(exports, 'isBuiltInSecurityScheme', {
89
89
  return isBuiltInSecurityScheme;
90
90
  }
91
91
  });
92
- //# sourceMappingURL=Authorizer-Q-lW9GNW.cjs.map
92
+ //# sourceMappingURL=Authorizer-BXxBee2P.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Authorizer-Q-lW9GNW.cjs","names":["name: string","options?: Omit<Authorizer, 'name'>","customSchemes?: Record<string, SecurityScheme>"],"sources":["../src/endpoints/Authorizer.ts"],"sourcesContent":["/**\n * OpenAPI 3.1 compliant security scheme definition.\n * @see https://spec.openapis.org/oas/v3.1.0#security-scheme-object\n */\nexport interface SecurityScheme {\n\t/** The type of the security scheme */\n\ttype: 'apiKey' | 'http' | 'mutualTLS' | 'oauth2' | 'openIdConnect';\n\t/** A description for security scheme */\n\tdescription?: string;\n\t/** Required for apiKey. The name of the header, query or cookie parameter */\n\tname?: string;\n\t/** Required for apiKey. The location of the API key */\n\tin?: 'query' | 'header' | 'cookie';\n\t/** Required for http. The name of the HTTP Authorization scheme (e.g., 'bearer') */\n\tscheme?: string;\n\t/** Optional for http bearer. A hint to the format of the bearer token */\n\tbearerFormat?: string;\n\t/** Required for oauth2. An object containing configuration for the flow types */\n\tflows?: OAuthFlows;\n\t/** Required for openIdConnect. The URL to discover OAuth2 configuration */\n\topenIdConnectUrl?: string;\n\t/** Vendor extensions (e.g., x-amazon-apigateway-authtype) */\n\t[key: `x-${string}`]: unknown;\n}\n\n/**\n * OAuth2 flow configuration\n */\nexport interface OAuthFlows {\n\timplicit?: OAuthFlow;\n\tpassword?: OAuthFlow;\n\tclientCredentials?: OAuthFlow;\n\tauthorizationCode?: OAuthFlow;\n}\n\nexport interface OAuthFlow {\n\tauthorizationUrl?: string;\n\ttokenUrl?: string;\n\trefreshUrl?: string;\n\tscopes: Record<string, string>;\n}\n\n/**\n * Built-in security schemes available by default.\n * Users can use these without defining them via .securitySchemes().\n */\nexport const BUILT_IN_SECURITY_SCHEMES = {\n\tjwt: {\n\t\ttype: 'http',\n\t\tscheme: 'bearer',\n\t\tbearerFormat: 'JWT',\n\t\tdescription: 'JWT Bearer token authentication',\n\t},\n\tbearer: {\n\t\ttype: 'http',\n\t\tscheme: 'bearer',\n\t\tdescription: 'Bearer token authentication',\n\t},\n\tapiKey: {\n\t\ttype: 'apiKey',\n\t\tin: 'header',\n\t\tname: 'X-API-Key',\n\t\tdescription: 'API key authentication via header',\n\t},\n\toauth2: {\n\t\ttype: 'oauth2',\n\t\tflows: {},\n\t\tdescription: 'OAuth 2.0 authentication',\n\t},\n\toidc: {\n\t\ttype: 'openIdConnect',\n\t\topenIdConnectUrl: '',\n\t\tdescription: 'OpenID Connect authentication',\n\t},\n\tiam: {\n\t\ttype: 'apiKey',\n\t\tin: 'header',\n\t\tname: 'Authorization',\n\t\tdescription: 'AWS IAM Signature Version 4 authentication',\n\t\t'x-amazon-apigateway-authtype': 'awsSigv4',\n\t},\n} as const satisfies Record<string, SecurityScheme>;\n\n/** Names of built-in security schemes */\nexport type BuiltInSecuritySchemeId = keyof typeof BUILT_IN_SECURITY_SCHEMES;\n\n/**\n * Represents an authorizer configuration for endpoints\n */\nexport interface Authorizer {\n\t/**\n\t * Unique identifier for the authorizer\n\t */\n\tname: string;\n\t/**\n\t * The OpenAPI security scheme definition for this authorizer\n\t */\n\tsecurityScheme?: SecurityScheme;\n\t/**\n\t * Type of authorizer (e.g., 'iam', 'jwt', 'custom')\n\t * @deprecated Use securityScheme.type instead\n\t */\n\ttype?: string;\n\t/**\n\t * Description of what this authorizer does\n\t * @deprecated Use securityScheme.description instead\n\t */\n\tdescription?: string;\n\t/**\n\t * Additional metadata specific to the authorizer type\n\t * @deprecated Use securityScheme with x-* extensions instead\n\t */\n\tmetadata?: Record<string, unknown>;\n}\n\n/**\n * Helper to create an authorizer configuration\n */\nexport function createAuthorizer(\n\tname: string,\n\toptions?: Omit<Authorizer, 'name'>,\n): Authorizer {\n\treturn {\n\t\tname,\n\t\t...options,\n\t};\n}\n\n/**\n * Check if a name is a built-in security scheme\n */\nexport function isBuiltInSecurityScheme(\n\tname: string,\n): name is BuiltInSecuritySchemeId {\n\treturn name in BUILT_IN_SECURITY_SCHEMES;\n}\n\n/**\n * Get a security scheme by name (built-in or custom)\n */\nexport function getSecurityScheme(\n\tname: string,\n\tcustomSchemes?: Record<string, SecurityScheme>,\n): SecurityScheme | undefined {\n\tif (customSchemes && name in customSchemes) {\n\t\treturn customSchemes[name];\n\t}\n\tif (isBuiltInSecurityScheme(name)) {\n\t\treturn BUILT_IN_SECURITY_SCHEMES[name];\n\t}\n\treturn undefined;\n}\n"],"mappings":";;;;;;AA8CA,MAAa,4BAA4B;CACxC,KAAK;EACJ,MAAM;EACN,QAAQ;EACR,cAAc;EACd,aAAa;CACb;CACD,QAAQ;EACP,MAAM;EACN,QAAQ;EACR,aAAa;CACb;CACD,QAAQ;EACP,MAAM;EACN,IAAI;EACJ,MAAM;EACN,aAAa;CACb;CACD,QAAQ;EACP,MAAM;EACN,OAAO,CAAE;EACT,aAAa;CACb;CACD,MAAM;EACL,MAAM;EACN,kBAAkB;EAClB,aAAa;CACb;CACD,KAAK;EACJ,MAAM;EACN,IAAI;EACJ,MAAM;EACN,aAAa;EACb,gCAAgC;CAChC;AACD;;;;AAqCD,SAAgB,iBACfA,MACAC,SACa;AACb,QAAO;EACN;EACA,GAAG;CACH;AACD;;;;AAKD,SAAgB,wBACfD,MACkC;AAClC,QAAO,QAAQ;AACf;;;;AAKD,SAAgB,kBACfA,MACAE,eAC6B;AAC7B,KAAI,iBAAiB,QAAQ,cAC5B,QAAO,cAAc;AAEtB,KAAI,wBAAwB,KAAK,CAChC,QAAO,0BAA0B;AAElC;AACA"}
1
+ {"version":3,"file":"Authorizer-BXxBee2P.cjs","names":["name: string","options?: Omit<Authorizer, 'name'>","customSchemes?: Record<string, SecurityScheme>"],"sources":["../src/endpoints/Authorizer.ts"],"sourcesContent":["/**\n * OpenAPI 3.1 compliant security scheme definition.\n * @see https://spec.openapis.org/oas/v3.1.0#security-scheme-object\n */\nexport interface SecurityScheme {\n\t/** The type of the security scheme */\n\ttype: 'apiKey' | 'http' | 'mutualTLS' | 'oauth2' | 'openIdConnect';\n\t/** A description for security scheme */\n\tdescription?: string;\n\t/** Required for apiKey. The name of the header, query or cookie parameter */\n\tname?: string;\n\t/** Required for apiKey. The location of the API key */\n\tin?: 'query' | 'header' | 'cookie';\n\t/** Required for http. The name of the HTTP Authorization scheme (e.g., 'bearer') */\n\tscheme?: string;\n\t/** Optional for http bearer. A hint to the format of the bearer token */\n\tbearerFormat?: string;\n\t/** Required for oauth2. An object containing configuration for the flow types */\n\tflows?: OAuthFlows;\n\t/** Required for openIdConnect. The URL to discover OAuth2 configuration */\n\topenIdConnectUrl?: string;\n\t/** Vendor extensions (e.g., x-amazon-apigateway-authtype) */\n\t[key: `x-${string}`]: unknown;\n}\n\n/**\n * OAuth2 flow configuration\n */\nexport interface OAuthFlows {\n\timplicit?: OAuthFlow;\n\tpassword?: OAuthFlow;\n\tclientCredentials?: OAuthFlow;\n\tauthorizationCode?: OAuthFlow;\n}\n\nexport interface OAuthFlow {\n\tauthorizationUrl?: string;\n\ttokenUrl?: string;\n\trefreshUrl?: string;\n\tscopes: Record<string, string>;\n}\n\n/**\n * Built-in security schemes available by default.\n * Users can use these without defining them via .securitySchemes().\n */\nexport const BUILT_IN_SECURITY_SCHEMES = {\n\tjwt: {\n\t\ttype: 'http',\n\t\tscheme: 'bearer',\n\t\tbearerFormat: 'JWT',\n\t\tdescription: 'JWT Bearer token authentication',\n\t},\n\tbearer: {\n\t\ttype: 'http',\n\t\tscheme: 'bearer',\n\t\tdescription: 'Bearer token authentication',\n\t},\n\tapiKey: {\n\t\ttype: 'apiKey',\n\t\tin: 'header',\n\t\tname: 'X-API-Key',\n\t\tdescription: 'API key authentication via header',\n\t},\n\toauth2: {\n\t\ttype: 'oauth2',\n\t\tflows: {},\n\t\tdescription: 'OAuth 2.0 authentication',\n\t},\n\toidc: {\n\t\ttype: 'openIdConnect',\n\t\topenIdConnectUrl: '',\n\t\tdescription: 'OpenID Connect authentication',\n\t},\n\tiam: {\n\t\ttype: 'apiKey',\n\t\tin: 'header',\n\t\tname: 'Authorization',\n\t\tdescription: 'AWS IAM Signature Version 4 authentication',\n\t\t'x-amazon-apigateway-authtype': 'awsSigv4',\n\t},\n} as const satisfies Record<string, SecurityScheme>;\n\n/** Names of built-in security schemes */\nexport type BuiltInSecuritySchemeId = keyof typeof BUILT_IN_SECURITY_SCHEMES;\n\n/**\n * Represents an authorizer configuration for endpoints\n */\nexport interface Authorizer {\n\t/**\n\t * Unique identifier for the authorizer\n\t */\n\tname: string;\n\t/**\n\t * The OpenAPI security scheme definition for this authorizer\n\t */\n\tsecurityScheme?: SecurityScheme;\n\t/**\n\t * Type of authorizer (e.g., 'iam', 'jwt', 'custom')\n\t * @deprecated Use securityScheme.type instead\n\t */\n\ttype?: string;\n\t/**\n\t * Description of what this authorizer does\n\t * @deprecated Use securityScheme.description instead\n\t */\n\tdescription?: string;\n\t/**\n\t * Additional metadata specific to the authorizer type\n\t * @deprecated Use securityScheme with x-* extensions instead\n\t */\n\tmetadata?: Record<string, unknown>;\n}\n\n/**\n * Helper to create an authorizer configuration\n */\nexport function createAuthorizer(\n\tname: string,\n\toptions?: Omit<Authorizer, 'name'>,\n): Authorizer {\n\treturn {\n\t\tname,\n\t\t...options,\n\t};\n}\n\n/**\n * Check if a name is a built-in security scheme\n */\nexport function isBuiltInSecurityScheme(\n\tname: string,\n): name is BuiltInSecuritySchemeId {\n\treturn name in BUILT_IN_SECURITY_SCHEMES;\n}\n\n/**\n * Get a security scheme by name (built-in or custom)\n */\nexport function getSecurityScheme(\n\tname: string,\n\tcustomSchemes?: Record<string, SecurityScheme>,\n): SecurityScheme | undefined {\n\tif (customSchemes && name in customSchemes) {\n\t\treturn customSchemes[name];\n\t}\n\tif (isBuiltInSecurityScheme(name)) {\n\t\treturn BUILT_IN_SECURITY_SCHEMES[name];\n\t}\n\treturn undefined;\n}\n"],"mappings":";;;;;;AA8CA,MAAa,4BAA4B;CACxC,KAAK;EACJ,MAAM;EACN,QAAQ;EACR,cAAc;EACd,aAAa;CACb;CACD,QAAQ;EACP,MAAM;EACN,QAAQ;EACR,aAAa;CACb;CACD,QAAQ;EACP,MAAM;EACN,IAAI;EACJ,MAAM;EACN,aAAa;CACb;CACD,QAAQ;EACP,MAAM;EACN,OAAO,CAAE;EACT,aAAa;CACb;CACD,MAAM;EACL,MAAM;EACN,kBAAkB;EAClB,aAAa;CACb;CACD,KAAK;EACJ,MAAM;EACN,IAAI;EACJ,MAAM;EACN,aAAa;EACb,gCAAgC;CAChC;AACD;;;;AAqCD,SAAgB,iBACfA,MACAC,SACa;AACb,QAAO;EACN;EACA,GAAG;CACH;AACD;;;;AAKD,SAAgB,wBACfD,MACkC;AAClC,QAAO,QAAQ;AACf;;;;AAKD,SAAgB,kBACfA,MACAE,eAC6B;AAC7B,KAAI,iBAAiB,QAAQ,cAC5B,QAAO,cAAc;AAEtB,KAAI,wBAAwB,KAAK,CAChC,QAAO,0BAA0B;AAElC;AACA"}
@@ -65,4 +65,4 @@ function getSecurityScheme(name, customSchemes) {
65
65
 
66
66
  //#endregion
67
67
  export { BUILT_IN_SECURITY_SCHEMES, createAuthorizer, getSecurityScheme, isBuiltInSecurityScheme };
68
- //# sourceMappingURL=Authorizer-UByhrr73.mjs.map
68
+ //# sourceMappingURL=Authorizer-BgjU8-z6.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Authorizer-UByhrr73.mjs","names":["name: string","options?: Omit<Authorizer, 'name'>","customSchemes?: Record<string, SecurityScheme>"],"sources":["../src/endpoints/Authorizer.ts"],"sourcesContent":["/**\n * OpenAPI 3.1 compliant security scheme definition.\n * @see https://spec.openapis.org/oas/v3.1.0#security-scheme-object\n */\nexport interface SecurityScheme {\n\t/** The type of the security scheme */\n\ttype: 'apiKey' | 'http' | 'mutualTLS' | 'oauth2' | 'openIdConnect';\n\t/** A description for security scheme */\n\tdescription?: string;\n\t/** Required for apiKey. The name of the header, query or cookie parameter */\n\tname?: string;\n\t/** Required for apiKey. The location of the API key */\n\tin?: 'query' | 'header' | 'cookie';\n\t/** Required for http. The name of the HTTP Authorization scheme (e.g., 'bearer') */\n\tscheme?: string;\n\t/** Optional for http bearer. A hint to the format of the bearer token */\n\tbearerFormat?: string;\n\t/** Required for oauth2. An object containing configuration for the flow types */\n\tflows?: OAuthFlows;\n\t/** Required for openIdConnect. The URL to discover OAuth2 configuration */\n\topenIdConnectUrl?: string;\n\t/** Vendor extensions (e.g., x-amazon-apigateway-authtype) */\n\t[key: `x-${string}`]: unknown;\n}\n\n/**\n * OAuth2 flow configuration\n */\nexport interface OAuthFlows {\n\timplicit?: OAuthFlow;\n\tpassword?: OAuthFlow;\n\tclientCredentials?: OAuthFlow;\n\tauthorizationCode?: OAuthFlow;\n}\n\nexport interface OAuthFlow {\n\tauthorizationUrl?: string;\n\ttokenUrl?: string;\n\trefreshUrl?: string;\n\tscopes: Record<string, string>;\n}\n\n/**\n * Built-in security schemes available by default.\n * Users can use these without defining them via .securitySchemes().\n */\nexport const BUILT_IN_SECURITY_SCHEMES = {\n\tjwt: {\n\t\ttype: 'http',\n\t\tscheme: 'bearer',\n\t\tbearerFormat: 'JWT',\n\t\tdescription: 'JWT Bearer token authentication',\n\t},\n\tbearer: {\n\t\ttype: 'http',\n\t\tscheme: 'bearer',\n\t\tdescription: 'Bearer token authentication',\n\t},\n\tapiKey: {\n\t\ttype: 'apiKey',\n\t\tin: 'header',\n\t\tname: 'X-API-Key',\n\t\tdescription: 'API key authentication via header',\n\t},\n\toauth2: {\n\t\ttype: 'oauth2',\n\t\tflows: {},\n\t\tdescription: 'OAuth 2.0 authentication',\n\t},\n\toidc: {\n\t\ttype: 'openIdConnect',\n\t\topenIdConnectUrl: '',\n\t\tdescription: 'OpenID Connect authentication',\n\t},\n\tiam: {\n\t\ttype: 'apiKey',\n\t\tin: 'header',\n\t\tname: 'Authorization',\n\t\tdescription: 'AWS IAM Signature Version 4 authentication',\n\t\t'x-amazon-apigateway-authtype': 'awsSigv4',\n\t},\n} as const satisfies Record<string, SecurityScheme>;\n\n/** Names of built-in security schemes */\nexport type BuiltInSecuritySchemeId = keyof typeof BUILT_IN_SECURITY_SCHEMES;\n\n/**\n * Represents an authorizer configuration for endpoints\n */\nexport interface Authorizer {\n\t/**\n\t * Unique identifier for the authorizer\n\t */\n\tname: string;\n\t/**\n\t * The OpenAPI security scheme definition for this authorizer\n\t */\n\tsecurityScheme?: SecurityScheme;\n\t/**\n\t * Type of authorizer (e.g., 'iam', 'jwt', 'custom')\n\t * @deprecated Use securityScheme.type instead\n\t */\n\ttype?: string;\n\t/**\n\t * Description of what this authorizer does\n\t * @deprecated Use securityScheme.description instead\n\t */\n\tdescription?: string;\n\t/**\n\t * Additional metadata specific to the authorizer type\n\t * @deprecated Use securityScheme with x-* extensions instead\n\t */\n\tmetadata?: Record<string, unknown>;\n}\n\n/**\n * Helper to create an authorizer configuration\n */\nexport function createAuthorizer(\n\tname: string,\n\toptions?: Omit<Authorizer, 'name'>,\n): Authorizer {\n\treturn {\n\t\tname,\n\t\t...options,\n\t};\n}\n\n/**\n * Check if a name is a built-in security scheme\n */\nexport function isBuiltInSecurityScheme(\n\tname: string,\n): name is BuiltInSecuritySchemeId {\n\treturn name in BUILT_IN_SECURITY_SCHEMES;\n}\n\n/**\n * Get a security scheme by name (built-in or custom)\n */\nexport function getSecurityScheme(\n\tname: string,\n\tcustomSchemes?: Record<string, SecurityScheme>,\n): SecurityScheme | undefined {\n\tif (customSchemes && name in customSchemes) {\n\t\treturn customSchemes[name];\n\t}\n\tif (isBuiltInSecurityScheme(name)) {\n\t\treturn BUILT_IN_SECURITY_SCHEMES[name];\n\t}\n\treturn undefined;\n}\n"],"mappings":";;;;;AA8CA,MAAa,4BAA4B;CACxC,KAAK;EACJ,MAAM;EACN,QAAQ;EACR,cAAc;EACd,aAAa;CACb;CACD,QAAQ;EACP,MAAM;EACN,QAAQ;EACR,aAAa;CACb;CACD,QAAQ;EACP,MAAM;EACN,IAAI;EACJ,MAAM;EACN,aAAa;CACb;CACD,QAAQ;EACP,MAAM;EACN,OAAO,CAAE;EACT,aAAa;CACb;CACD,MAAM;EACL,MAAM;EACN,kBAAkB;EAClB,aAAa;CACb;CACD,KAAK;EACJ,MAAM;EACN,IAAI;EACJ,MAAM;EACN,aAAa;EACb,gCAAgC;CAChC;AACD;;;;AAqCD,SAAgB,iBACfA,MACAC,SACa;AACb,QAAO;EACN;EACA,GAAG;CACH;AACD;;;;AAKD,SAAgB,wBACfD,MACkC;AAClC,QAAO,QAAQ;AACf;;;;AAKD,SAAgB,kBACfA,MACAE,eAC6B;AAC7B,KAAI,iBAAiB,QAAQ,cAC5B,QAAO,cAAc;AAEtB,KAAI,wBAAwB,KAAK,CAChC,QAAO,0BAA0B;AAElC;AACA"}
1
+ {"version":3,"file":"Authorizer-BgjU8-z6.mjs","names":["name: string","options?: Omit<Authorizer, 'name'>","customSchemes?: Record<string, SecurityScheme>"],"sources":["../src/endpoints/Authorizer.ts"],"sourcesContent":["/**\n * OpenAPI 3.1 compliant security scheme definition.\n * @see https://spec.openapis.org/oas/v3.1.0#security-scheme-object\n */\nexport interface SecurityScheme {\n\t/** The type of the security scheme */\n\ttype: 'apiKey' | 'http' | 'mutualTLS' | 'oauth2' | 'openIdConnect';\n\t/** A description for security scheme */\n\tdescription?: string;\n\t/** Required for apiKey. The name of the header, query or cookie parameter */\n\tname?: string;\n\t/** Required for apiKey. The location of the API key */\n\tin?: 'query' | 'header' | 'cookie';\n\t/** Required for http. The name of the HTTP Authorization scheme (e.g., 'bearer') */\n\tscheme?: string;\n\t/** Optional for http bearer. A hint to the format of the bearer token */\n\tbearerFormat?: string;\n\t/** Required for oauth2. An object containing configuration for the flow types */\n\tflows?: OAuthFlows;\n\t/** Required for openIdConnect. The URL to discover OAuth2 configuration */\n\topenIdConnectUrl?: string;\n\t/** Vendor extensions (e.g., x-amazon-apigateway-authtype) */\n\t[key: `x-${string}`]: unknown;\n}\n\n/**\n * OAuth2 flow configuration\n */\nexport interface OAuthFlows {\n\timplicit?: OAuthFlow;\n\tpassword?: OAuthFlow;\n\tclientCredentials?: OAuthFlow;\n\tauthorizationCode?: OAuthFlow;\n}\n\nexport interface OAuthFlow {\n\tauthorizationUrl?: string;\n\ttokenUrl?: string;\n\trefreshUrl?: string;\n\tscopes: Record<string, string>;\n}\n\n/**\n * Built-in security schemes available by default.\n * Users can use these without defining them via .securitySchemes().\n */\nexport const BUILT_IN_SECURITY_SCHEMES = {\n\tjwt: {\n\t\ttype: 'http',\n\t\tscheme: 'bearer',\n\t\tbearerFormat: 'JWT',\n\t\tdescription: 'JWT Bearer token authentication',\n\t},\n\tbearer: {\n\t\ttype: 'http',\n\t\tscheme: 'bearer',\n\t\tdescription: 'Bearer token authentication',\n\t},\n\tapiKey: {\n\t\ttype: 'apiKey',\n\t\tin: 'header',\n\t\tname: 'X-API-Key',\n\t\tdescription: 'API key authentication via header',\n\t},\n\toauth2: {\n\t\ttype: 'oauth2',\n\t\tflows: {},\n\t\tdescription: 'OAuth 2.0 authentication',\n\t},\n\toidc: {\n\t\ttype: 'openIdConnect',\n\t\topenIdConnectUrl: '',\n\t\tdescription: 'OpenID Connect authentication',\n\t},\n\tiam: {\n\t\ttype: 'apiKey',\n\t\tin: 'header',\n\t\tname: 'Authorization',\n\t\tdescription: 'AWS IAM Signature Version 4 authentication',\n\t\t'x-amazon-apigateway-authtype': 'awsSigv4',\n\t},\n} as const satisfies Record<string, SecurityScheme>;\n\n/** Names of built-in security schemes */\nexport type BuiltInSecuritySchemeId = keyof typeof BUILT_IN_SECURITY_SCHEMES;\n\n/**\n * Represents an authorizer configuration for endpoints\n */\nexport interface Authorizer {\n\t/**\n\t * Unique identifier for the authorizer\n\t */\n\tname: string;\n\t/**\n\t * The OpenAPI security scheme definition for this authorizer\n\t */\n\tsecurityScheme?: SecurityScheme;\n\t/**\n\t * Type of authorizer (e.g., 'iam', 'jwt', 'custom')\n\t * @deprecated Use securityScheme.type instead\n\t */\n\ttype?: string;\n\t/**\n\t * Description of what this authorizer does\n\t * @deprecated Use securityScheme.description instead\n\t */\n\tdescription?: string;\n\t/**\n\t * Additional metadata specific to the authorizer type\n\t * @deprecated Use securityScheme with x-* extensions instead\n\t */\n\tmetadata?: Record<string, unknown>;\n}\n\n/**\n * Helper to create an authorizer configuration\n */\nexport function createAuthorizer(\n\tname: string,\n\toptions?: Omit<Authorizer, 'name'>,\n): Authorizer {\n\treturn {\n\t\tname,\n\t\t...options,\n\t};\n}\n\n/**\n * Check if a name is a built-in security scheme\n */\nexport function isBuiltInSecurityScheme(\n\tname: string,\n): name is BuiltInSecuritySchemeId {\n\treturn name in BUILT_IN_SECURITY_SCHEMES;\n}\n\n/**\n * Get a security scheme by name (built-in or custom)\n */\nexport function getSecurityScheme(\n\tname: string,\n\tcustomSchemes?: Record<string, SecurityScheme>,\n): SecurityScheme | undefined {\n\tif (customSchemes && name in customSchemes) {\n\t\treturn customSchemes[name];\n\t}\n\tif (isBuiltInSecurityScheme(name)) {\n\t\treturn BUILT_IN_SECURITY_SCHEMES[name];\n\t}\n\treturn undefined;\n}\n"],"mappings":";;;;;AA8CA,MAAa,4BAA4B;CACxC,KAAK;EACJ,MAAM;EACN,QAAQ;EACR,cAAc;EACd,aAAa;CACb;CACD,QAAQ;EACP,MAAM;EACN,QAAQ;EACR,aAAa;CACb;CACD,QAAQ;EACP,MAAM;EACN,IAAI;EACJ,MAAM;EACN,aAAa;CACb;CACD,QAAQ;EACP,MAAM;EACN,OAAO,CAAE;EACT,aAAa;CACb;CACD,MAAM;EACL,MAAM;EACN,kBAAkB;EAClB,aAAa;CACb;CACD,KAAK;EACJ,MAAM;EACN,IAAI;EACJ,MAAM;EACN,aAAa;EACb,gCAAgC;CAChC;AACD;;;;AAqCD,SAAgB,iBACfA,MACAC,SACa;AACb,QAAO;EACN;EACA,GAAG;CACH;AACD;;;;AAKD,SAAgB,wBACfD,MACkC;AAClC,QAAO,QAAQ;AACf;;;;AAKD,SAAgB,kBACfA,MACAE,eAC6B;AAC7B,KAAI,iBAAiB,QAAQ,cAC5B,QAAO,cAAc;AAEtB,KAAI,wBAAwB,KAAK,CAChC,QAAO,0BAA0B;AAElC;AACA"}
@@ -22,4 +22,4 @@ Object.defineProperty(exports, 'Cron', {
22
22
  return Cron;
23
23
  }
24
24
  });
25
- //# sourceMappingURL=Cron-Bx77QBN0.cjs.map
25
+ //# sourceMappingURL=Cron-BV6weqem.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Cron-Bx77QBN0.cjs","names":["Function","obj: any","ConstructType","fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>","timeout?: number","_schedule?: ScheduleExpression","input?: TInput","outputSchema?: OutSchema","services: TServices","logger?: TLogger","publisherService?: Service<TEventPublisherServiceName, TEventPublisher>","events: any[]","memorySize?: number","databaseService?: Service<TDatabaseServiceName, TDatabase>"],"sources":["../src/crons/Cron.ts"],"sourcesContent":["import type { AuditableAction } from '@geekmidas/audit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\n\nimport { ConstructType } from '../Construct';\nimport { Function, type FunctionHandler } from '../functions';\n\nexport class Cron<\n\tTInput extends ComposableStandardSchema | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n> extends Function<\n\tTInput,\n\tTServices,\n\tTLogger,\n\tOutSchema,\n\tTEventPublisher,\n\tTEventPublisherServiceName,\n\tundefined,\n\tstring,\n\tTDatabase,\n\tTDatabaseServiceName,\n\tAuditableAction<string, unknown>,\n\tFunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>\n> {\n\tstatic isCron(obj: any): obj is Cron<any, any, any, any> {\n\t\treturn Boolean(\n\t\t\tobj &&\n\t\t\t\t(obj as Function).__IS_FUNCTION__ === true &&\n\t\t\t\tobj.type === ConstructType.Cron,\n\t\t);\n\t}\n\n\tconstructor(\n\t\tfn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n\t\ttimeout?: number,\n\t\tprotected _schedule?: ScheduleExpression,\n\t\tinput?: TInput,\n\t\toutputSchema?: OutSchema,\n\t\tservices: TServices = [] as unknown as TServices,\n\t\tlogger?: TLogger,\n\t\tpublisherService?: Service<TEventPublisherServiceName, TEventPublisher>,\n\t\tevents: any[] = [],\n\t\tmemorySize?: number,\n\t\tdatabaseService?: Service<TDatabaseServiceName, TDatabase>,\n\t) {\n\t\tsuper(\n\t\t\tfn,\n\t\t\ttimeout,\n\t\t\tConstructType.Cron,\n\t\t\tinput,\n\t\t\toutputSchema,\n\t\t\tservices,\n\t\t\tlogger,\n\t\t\tpublisherService,\n\t\t\tevents,\n\t\t\tmemorySize,\n\t\t\tundefined, // auditorStorageService\n\t\t\tdatabaseService,\n\t\t);\n\t}\n\n\tget schedule(): ScheduleExpression | undefined {\n\t\treturn this._schedule;\n\t}\n}\n\nexport type RateExpression = `rate(${string})`;\n\ntype CronMinute =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| `${number},${number}`\n\t| string; // Allow more complex patterns\n\ntype CronHour =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| `${number},${number}`\n\t| string; // Allow more complex patterns\n\ntype CronDay =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| `${number},${number}`\n\t| string; // Allow more complex patterns\n\ntype CronMonth =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| 'JAN'\n\t| 'FEB'\n\t| 'MAR'\n\t| 'APR'\n\t| 'MAY'\n\t| 'JUN'\n\t| 'JUL'\n\t| 'AUG'\n\t| 'SEP'\n\t| 'OCT'\n\t| 'NOV'\n\t| 'DEC'\n\t| string; // Allow more complex patterns\n\ntype CronWeekday =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| 'SUN'\n\t| 'MON'\n\t| 'TUE'\n\t| 'WED'\n\t| 'THU'\n\t| 'FRI'\n\t| 'SAT'\n\t| `${string}-${string}` // Allow patterns like MON-FRI\n\t| string; // Allow more complex patterns\n\nexport type CronExpression =\n\t`cron(${CronMinute} ${CronHour} ${CronDay} ${CronMonth} ${CronWeekday})`;\n\nexport type ScheduleExpression = RateExpression | CronExpression;\n"],"mappings":";;;;AAUA,IAAa,OAAb,cASUA,0BAaR;CACD,OAAO,OAAOC,KAA2C;AACxD,SAAO,QACN,OACE,IAAiB,oBAAoB,QACtC,IAAI,SAASC,gCAAc,KAC5B;CACD;CAED,YACCC,IACAC,SACUC,WACVC,OACAC,cACAC,WAAsB,CAAE,GACxBC,QACAC,kBACAC,SAAgB,CAAE,GAClBC,YACAC,iBACC;AACD,QACC,IACA,SACAX,gCAAc,MACd,OACA,cACA,UACA,QACA,kBACA,QACA,oBAEA,gBACA;EAvBS;CAwBV;CAED,IAAI,WAA2C;AAC9C,SAAO,KAAK;CACZ;AACD"}
1
+ {"version":3,"file":"Cron-BV6weqem.cjs","names":["Function","obj: any","ConstructType","fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>","timeout?: number","_schedule?: ScheduleExpression","input?: TInput","outputSchema?: OutSchema","services: TServices","logger?: TLogger","publisherService?: Service<TEventPublisherServiceName, TEventPublisher>","events: any[]","memorySize?: number","databaseService?: Service<TDatabaseServiceName, TDatabase>"],"sources":["../src/crons/Cron.ts"],"sourcesContent":["import type { AuditableAction } from '@geekmidas/audit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\n\nimport { ConstructType } from '../Construct';\nimport { Function, type FunctionHandler } from '../functions';\n\nexport class Cron<\n\tTInput extends ComposableStandardSchema | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n> extends Function<\n\tTInput,\n\tTServices,\n\tTLogger,\n\tOutSchema,\n\tTEventPublisher,\n\tTEventPublisherServiceName,\n\tundefined,\n\tstring,\n\tTDatabase,\n\tTDatabaseServiceName,\n\tAuditableAction<string, unknown>,\n\tFunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>\n> {\n\tstatic isCron(obj: any): obj is Cron<any, any, any, any> {\n\t\treturn Boolean(\n\t\t\tobj &&\n\t\t\t\t(obj as Function).__IS_FUNCTION__ === true &&\n\t\t\t\tobj.type === ConstructType.Cron,\n\t\t);\n\t}\n\n\tconstructor(\n\t\tfn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n\t\ttimeout?: number,\n\t\tprotected _schedule?: ScheduleExpression,\n\t\tinput?: TInput,\n\t\toutputSchema?: OutSchema,\n\t\tservices: TServices = [] as unknown as TServices,\n\t\tlogger?: TLogger,\n\t\tpublisherService?: Service<TEventPublisherServiceName, TEventPublisher>,\n\t\tevents: any[] = [],\n\t\tmemorySize?: number,\n\t\tdatabaseService?: Service<TDatabaseServiceName, TDatabase>,\n\t) {\n\t\tsuper(\n\t\t\tfn,\n\t\t\ttimeout,\n\t\t\tConstructType.Cron,\n\t\t\tinput,\n\t\t\toutputSchema,\n\t\t\tservices,\n\t\t\tlogger,\n\t\t\tpublisherService,\n\t\t\tevents,\n\t\t\tmemorySize,\n\t\t\tundefined, // auditorStorageService\n\t\t\tdatabaseService,\n\t\t);\n\t}\n\n\tget schedule(): ScheduleExpression | undefined {\n\t\treturn this._schedule;\n\t}\n}\n\nexport type RateExpression = `rate(${string})`;\n\ntype CronMinute =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| `${number},${number}`\n\t| string; // Allow more complex patterns\n\ntype CronHour =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| `${number},${number}`\n\t| string; // Allow more complex patterns\n\ntype CronDay =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| `${number},${number}`\n\t| string; // Allow more complex patterns\n\ntype CronMonth =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| 'JAN'\n\t| 'FEB'\n\t| 'MAR'\n\t| 'APR'\n\t| 'MAY'\n\t| 'JUN'\n\t| 'JUL'\n\t| 'AUG'\n\t| 'SEP'\n\t| 'OCT'\n\t| 'NOV'\n\t| 'DEC'\n\t| string; // Allow more complex patterns\n\ntype CronWeekday =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| 'SUN'\n\t| 'MON'\n\t| 'TUE'\n\t| 'WED'\n\t| 'THU'\n\t| 'FRI'\n\t| 'SAT'\n\t| `${string}-${string}` // Allow patterns like MON-FRI\n\t| string; // Allow more complex patterns\n\nexport type CronExpression =\n\t`cron(${CronMinute} ${CronHour} ${CronDay} ${CronMonth} ${CronWeekday})`;\n\nexport type ScheduleExpression = RateExpression | CronExpression;\n"],"mappings":";;;;AAUA,IAAa,OAAb,cASUA,0BAaR;CACD,OAAO,OAAOC,KAA2C;AACxD,SAAO,QACN,OACE,IAAiB,oBAAoB,QACtC,IAAI,SAASC,gCAAc,KAC5B;CACD;CAED,YACCC,IACAC,SACUC,WACVC,OACAC,cACAC,WAAsB,CAAE,GACxBC,QACAC,kBACAC,SAAgB,CAAE,GAClBC,YACAC,iBACC;AACD,QACC,IACA,SACAX,gCAAc,MACd,OACA,cACA,UACA,QACA,kBACA,QACA,oBAEA,gBACA;EAvBS;CAwBV;CAED,IAAI,WAA2C;AAC9C,SAAO,KAAK;CACZ;AACD"}
@@ -17,4 +17,4 @@ var Cron = class extends Function {
17
17
 
18
18
  //#endregion
19
19
  export { Cron };
20
- //# sourceMappingURL=Cron-CU3nmjdC.mjs.map
20
+ //# sourceMappingURL=Cron-D5NpDp6y.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Cron-CU3nmjdC.mjs","names":["obj: any","fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>","timeout?: number","_schedule?: ScheduleExpression","input?: TInput","outputSchema?: OutSchema","services: TServices","logger?: TLogger","publisherService?: Service<TEventPublisherServiceName, TEventPublisher>","events: any[]","memorySize?: number","databaseService?: Service<TDatabaseServiceName, TDatabase>"],"sources":["../src/crons/Cron.ts"],"sourcesContent":["import type { AuditableAction } from '@geekmidas/audit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\n\nimport { ConstructType } from '../Construct';\nimport { Function, type FunctionHandler } from '../functions';\n\nexport class Cron<\n\tTInput extends ComposableStandardSchema | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n> extends Function<\n\tTInput,\n\tTServices,\n\tTLogger,\n\tOutSchema,\n\tTEventPublisher,\n\tTEventPublisherServiceName,\n\tundefined,\n\tstring,\n\tTDatabase,\n\tTDatabaseServiceName,\n\tAuditableAction<string, unknown>,\n\tFunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>\n> {\n\tstatic isCron(obj: any): obj is Cron<any, any, any, any> {\n\t\treturn Boolean(\n\t\t\tobj &&\n\t\t\t\t(obj as Function).__IS_FUNCTION__ === true &&\n\t\t\t\tobj.type === ConstructType.Cron,\n\t\t);\n\t}\n\n\tconstructor(\n\t\tfn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n\t\ttimeout?: number,\n\t\tprotected _schedule?: ScheduleExpression,\n\t\tinput?: TInput,\n\t\toutputSchema?: OutSchema,\n\t\tservices: TServices = [] as unknown as TServices,\n\t\tlogger?: TLogger,\n\t\tpublisherService?: Service<TEventPublisherServiceName, TEventPublisher>,\n\t\tevents: any[] = [],\n\t\tmemorySize?: number,\n\t\tdatabaseService?: Service<TDatabaseServiceName, TDatabase>,\n\t) {\n\t\tsuper(\n\t\t\tfn,\n\t\t\ttimeout,\n\t\t\tConstructType.Cron,\n\t\t\tinput,\n\t\t\toutputSchema,\n\t\t\tservices,\n\t\t\tlogger,\n\t\t\tpublisherService,\n\t\t\tevents,\n\t\t\tmemorySize,\n\t\t\tundefined, // auditorStorageService\n\t\t\tdatabaseService,\n\t\t);\n\t}\n\n\tget schedule(): ScheduleExpression | undefined {\n\t\treturn this._schedule;\n\t}\n}\n\nexport type RateExpression = `rate(${string})`;\n\ntype CronMinute =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| `${number},${number}`\n\t| string; // Allow more complex patterns\n\ntype CronHour =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| `${number},${number}`\n\t| string; // Allow more complex patterns\n\ntype CronDay =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| `${number},${number}`\n\t| string; // Allow more complex patterns\n\ntype CronMonth =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| 'JAN'\n\t| 'FEB'\n\t| 'MAR'\n\t| 'APR'\n\t| 'MAY'\n\t| 'JUN'\n\t| 'JUL'\n\t| 'AUG'\n\t| 'SEP'\n\t| 'OCT'\n\t| 'NOV'\n\t| 'DEC'\n\t| string; // Allow more complex patterns\n\ntype CronWeekday =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| 'SUN'\n\t| 'MON'\n\t| 'TUE'\n\t| 'WED'\n\t| 'THU'\n\t| 'FRI'\n\t| 'SAT'\n\t| `${string}-${string}` // Allow patterns like MON-FRI\n\t| string; // Allow more complex patterns\n\nexport type CronExpression =\n\t`cron(${CronMinute} ${CronHour} ${CronDay} ${CronMonth} ${CronWeekday})`;\n\nexport type ScheduleExpression = RateExpression | CronExpression;\n"],"mappings":";;;;AAUA,IAAa,OAAb,cASU,SAaR;CACD,OAAO,OAAOA,KAA2C;AACxD,SAAO,QACN,OACE,IAAiB,oBAAoB,QACtC,IAAI,SAAS,cAAc,KAC5B;CACD;CAED,YACCC,IACAC,SACUC,WACVC,OACAC,cACAC,WAAsB,CAAE,GACxBC,QACAC,kBACAC,SAAgB,CAAE,GAClBC,YACAC,iBACC;AACD,QACC,IACA,SACA,cAAc,MACd,OACA,cACA,UACA,QACA,kBACA,QACA,oBAEA,gBACA;EAvBS;CAwBV;CAED,IAAI,WAA2C;AAC9C,SAAO,KAAK;CACZ;AACD"}
1
+ {"version":3,"file":"Cron-D5NpDp6y.mjs","names":["obj: any","fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>","timeout?: number","_schedule?: ScheduleExpression","input?: TInput","outputSchema?: OutSchema","services: TServices","logger?: TLogger","publisherService?: Service<TEventPublisherServiceName, TEventPublisher>","events: any[]","memorySize?: number","databaseService?: Service<TDatabaseServiceName, TDatabase>"],"sources":["../src/crons/Cron.ts"],"sourcesContent":["import type { AuditableAction } from '@geekmidas/audit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\n\nimport { ConstructType } from '../Construct';\nimport { Function, type FunctionHandler } from '../functions';\n\nexport class Cron<\n\tTInput extends ComposableStandardSchema | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n> extends Function<\n\tTInput,\n\tTServices,\n\tTLogger,\n\tOutSchema,\n\tTEventPublisher,\n\tTEventPublisherServiceName,\n\tundefined,\n\tstring,\n\tTDatabase,\n\tTDatabaseServiceName,\n\tAuditableAction<string, unknown>,\n\tFunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>\n> {\n\tstatic isCron(obj: any): obj is Cron<any, any, any, any> {\n\t\treturn Boolean(\n\t\t\tobj &&\n\t\t\t\t(obj as Function).__IS_FUNCTION__ === true &&\n\t\t\t\tobj.type === ConstructType.Cron,\n\t\t);\n\t}\n\n\tconstructor(\n\t\tfn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n\t\ttimeout?: number,\n\t\tprotected _schedule?: ScheduleExpression,\n\t\tinput?: TInput,\n\t\toutputSchema?: OutSchema,\n\t\tservices: TServices = [] as unknown as TServices,\n\t\tlogger?: TLogger,\n\t\tpublisherService?: Service<TEventPublisherServiceName, TEventPublisher>,\n\t\tevents: any[] = [],\n\t\tmemorySize?: number,\n\t\tdatabaseService?: Service<TDatabaseServiceName, TDatabase>,\n\t) {\n\t\tsuper(\n\t\t\tfn,\n\t\t\ttimeout,\n\t\t\tConstructType.Cron,\n\t\t\tinput,\n\t\t\toutputSchema,\n\t\t\tservices,\n\t\t\tlogger,\n\t\t\tpublisherService,\n\t\t\tevents,\n\t\t\tmemorySize,\n\t\t\tundefined, // auditorStorageService\n\t\t\tdatabaseService,\n\t\t);\n\t}\n\n\tget schedule(): ScheduleExpression | undefined {\n\t\treturn this._schedule;\n\t}\n}\n\nexport type RateExpression = `rate(${string})`;\n\ntype CronMinute =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| `${number},${number}`\n\t| string; // Allow more complex patterns\n\ntype CronHour =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| `${number},${number}`\n\t| string; // Allow more complex patterns\n\ntype CronDay =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| `${number},${number}`\n\t| string; // Allow more complex patterns\n\ntype CronMonth =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| 'JAN'\n\t| 'FEB'\n\t| 'MAR'\n\t| 'APR'\n\t| 'MAY'\n\t| 'JUN'\n\t| 'JUL'\n\t| 'AUG'\n\t| 'SEP'\n\t| 'OCT'\n\t| 'NOV'\n\t| 'DEC'\n\t| string; // Allow more complex patterns\n\ntype CronWeekday =\n\t| '*'\n\t| number\n\t| `${number}`\n\t| `${number}-${number}`\n\t| `${number}/${number}`\n\t| `*/${number}`\n\t| 'SUN'\n\t| 'MON'\n\t| 'TUE'\n\t| 'WED'\n\t| 'THU'\n\t| 'FRI'\n\t| 'SAT'\n\t| `${string}-${string}` // Allow patterns like MON-FRI\n\t| string; // Allow more complex patterns\n\nexport type CronExpression =\n\t`cron(${CronMinute} ${CronHour} ${CronDay} ${CronMonth} ${CronWeekday})`;\n\nexport type ScheduleExpression = RateExpression | CronExpression;\n"],"mappings":";;;;AAUA,IAAa,OAAb,cASU,SAaR;CACD,OAAO,OAAOA,KAA2C;AACxD,SAAO,QACN,OACE,IAAiB,oBAAoB,QACtC,IAAI,SAAS,cAAc,KAC5B;CACD;CAED,YACCC,IACAC,SACUC,WACVC,OACAC,cACAC,WAAsB,CAAE,GACxBC,QACAC,kBACAC,SAAgB,CAAE,GAClBC,YACAC,iBACC;AACD,QACC,IACA,SACA,cAAc,MACd,OACA,cACA,UACA,QACA,kBACA,QACA,oBAEA,gBACA;EAvBS;CAwBV;CAED,IAAI,WAA2C;AAC9C,SAAO,KAAK;CACZ;AACD"}
@@ -1,7 +1,7 @@
1
1
  const require_chunk = require('./chunk-CUT6urMc.cjs');
2
2
  const require_Construct = require('./Construct-BXG8cFSm.cjs');
3
3
  const require_FunctionBuilder = require('./FunctionBuilder-C_xG9As7.cjs');
4
- const require_Cron = require('./Cron-Bx77QBN0.cjs');
4
+ const require_Cron = require('./Cron-BV6weqem.cjs');
5
5
  const __geekmidas_logger_console = require_chunk.__toESM(require("@geekmidas/logger/console"));
6
6
  const lodash_uniqby = require_chunk.__toESM(require("lodash.uniqby"));
7
7
 
@@ -71,4 +71,4 @@ Object.defineProperty(exports, 'CronBuilder', {
71
71
  return CronBuilder;
72
72
  }
73
73
  });
74
- //# sourceMappingURL=CronBuilder-DLJvSOqj.cjs.map
74
+ //# sourceMappingURL=CronBuilder-DzPkDCiP.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"CronBuilder-DLJvSOqj.cjs","names":["ConsoleLogger","FunctionBuilder","ConstructType","memorySize: number","_expression: ScheduleExpression","schema: T","services: T","logger: T","publisher: Service<TName, T>","service: Service<TName, T>","fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>","Cron"],"sources":["../src/crons/CronBuilder.ts"],"sourcesContent":["import type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { FunctionBuilder, type FunctionHandler } from '../functions';\nimport { Cron, type ScheduleExpression } from './Cron';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class CronBuilder<\n\tTInput extends ComposableStandardSchema,\n\tTServices extends Service[],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n> extends FunctionBuilder<\n\tTInput,\n\tOutSchema,\n\tTServices,\n\tTLogger,\n\tTEventPublisher,\n\tTEventPublisherServiceName,\n\tundefined,\n\tstring,\n\tTDatabase,\n\tTDatabaseServiceName\n> {\n\tprivate _schedule?: ScheduleExpression;\n\n\tconstructor() {\n\t\tsuper(ConstructType.Cron);\n\t}\n\n\toverride memorySize(memorySize: number): this {\n\t\tthis._memorySize = memorySize;\n\t\treturn this;\n\t}\n\n\tschedule(\n\t\t_expression: ScheduleExpression,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._schedule = _expression;\n\t\treturn this;\n\t}\n\n\toverride input<T extends ComposableStandardSchema>(\n\t\tschema: T,\n\t): CronBuilder<\n\t\tT,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.inputSchema = schema as unknown as TInput;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tT,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride output<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tT,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.outputSchema = schema as unknown as OutSchema;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tT,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride services<T extends Service[]>(\n\t\tservices: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\t[...TServices, ...T],\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._services = uniqBy(\n\t\t\t[...this._services, ...services],\n\t\t\t(s) => s.serviceName,\n\t\t) as TServices;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\t[...TServices, ...T],\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride logger<T extends Logger>(\n\t\tlogger: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tT,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._logger = logger as unknown as TLogger;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tT,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride publisher<T extends EventPublisher<any>, TName extends string>(\n\t\tpublisher: Service<TName, T>,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tT,\n\t\tTName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._publisher = publisher as unknown as Service<\n\t\t\tTEventPublisherServiceName,\n\t\t\tTEventPublisher\n\t\t>;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tT,\n\t\t\tTName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\t/**\n\t * Set the database service for this cron job.\n\t * The database will be available in the handler context as `db`.\n\t */\n\toverride database<T, TName extends string>(\n\t\tservice: Service<TName, T>,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tT,\n\t\tTName\n\t> {\n\t\tthis._databaseService = service as unknown as Service<\n\t\t\tTDatabaseServiceName,\n\t\t\tTDatabase\n\t\t>;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tT,\n\t\t\tTName\n\t\t>;\n\t}\n\n\toverride handle(\n\t\tfn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n\t): Cron<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tconst cron = new Cron(\n\t\t\tfn,\n\t\t\tthis._timeout,\n\t\t\tthis._schedule,\n\t\t\tthis.inputSchema,\n\t\t\tthis.outputSchema,\n\t\t\tthis._services,\n\t\t\tthis._logger,\n\t\t\tthis._publisher,\n\t\t\tthis._events,\n\t\t\tthis._memorySize,\n\t\t\tthis._databaseService,\n\t\t);\n\n\t\t// Reset builder state after creating the cron to prevent pollution\n\t\tthis._services = [] as Service[] as TServices;\n\t\tthis._logger = DEFAULT_LOGGER;\n\t\tthis._events = [];\n\t\tthis._publisher = undefined;\n\t\tthis._databaseService = undefined;\n\t\tthis._schedule = undefined;\n\t\tthis.inputSchema = undefined;\n\t\tthis.outputSchema = undefined;\n\t\tthis._timeout = undefined;\n\t\tthis._memorySize = undefined;\n\n\t\treturn cron;\n\t}\n}\n"],"mappings":";;;;;;;;AAWA,MAAM,iBAAiB,IAAIA;AAE3B,IAAa,cAAb,cASUC,wCAWR;CACD,AAAQ;CAER,cAAc;AACb,QAAMC,gCAAc,KAAK;CACzB;CAED,AAAS,WAAWC,YAA0B;AAC7C,OAAK,cAAc;AACnB,SAAO;CACP;CAED,SACCC,aAUC;AACD,OAAK,YAAY;AACjB,SAAO;CACP;CAED,AAAS,MACRC,QAUC;AACD,OAAK,cAAc;AAEnB,SAAO;CAUP;CAED,AAAS,OACRA,QAUC;AACD,OAAK,eAAe;AAEpB,SAAO;CAUP;CAED,AAAS,SACRC,UAUC;AACD,OAAK,YAAY,2BAChB,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACT;AAED,SAAO;CAUP;CAED,AAAS,OACRC,QAUC;AACD,OAAK,UAAU;AAEf,SAAO;CAUP;CAED,AAAS,UACRC,WAUC;AACD,OAAK,aAAa;AAKlB,SAAO;CAUP;;;;;CAMD,AAAS,SACRC,SAUC;AACD,OAAK,mBAAmB;AAKxB,SAAO;CAUP;CAED,AAAS,OACRC,IAUC;EACD,MAAM,OAAO,IAAIC,kBAChB,IACA,KAAK,UACL,KAAK,WACL,KAAK,aACL,KAAK,cACL,KAAK,WACL,KAAK,SACL,KAAK,YACL,KAAK,SACL,KAAK,aACL,KAAK;AAIN,OAAK,YAAY,CAAE;AACnB,OAAK,UAAU;AACf,OAAK,UAAU,CAAE;AACjB,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AAEL,SAAO;CACP;AACD"}
1
+ {"version":3,"file":"CronBuilder-DzPkDCiP.cjs","names":["ConsoleLogger","FunctionBuilder","ConstructType","memorySize: number","_expression: ScheduleExpression","schema: T","services: T","logger: T","publisher: Service<TName, T>","service: Service<TName, T>","fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>","Cron"],"sources":["../src/crons/CronBuilder.ts"],"sourcesContent":["import type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { FunctionBuilder, type FunctionHandler } from '../functions';\nimport { Cron, type ScheduleExpression } from './Cron';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class CronBuilder<\n\tTInput extends ComposableStandardSchema,\n\tTServices extends Service[],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n> extends FunctionBuilder<\n\tTInput,\n\tOutSchema,\n\tTServices,\n\tTLogger,\n\tTEventPublisher,\n\tTEventPublisherServiceName,\n\tundefined,\n\tstring,\n\tTDatabase,\n\tTDatabaseServiceName\n> {\n\tprivate _schedule?: ScheduleExpression;\n\n\tconstructor() {\n\t\tsuper(ConstructType.Cron);\n\t}\n\n\toverride memorySize(memorySize: number): this {\n\t\tthis._memorySize = memorySize;\n\t\treturn this;\n\t}\n\n\tschedule(\n\t\t_expression: ScheduleExpression,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._schedule = _expression;\n\t\treturn this;\n\t}\n\n\toverride input<T extends ComposableStandardSchema>(\n\t\tschema: T,\n\t): CronBuilder<\n\t\tT,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.inputSchema = schema as unknown as TInput;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tT,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride output<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tT,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.outputSchema = schema as unknown as OutSchema;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tT,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride services<T extends Service[]>(\n\t\tservices: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\t[...TServices, ...T],\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._services = uniqBy(\n\t\t\t[...this._services, ...services],\n\t\t\t(s) => s.serviceName,\n\t\t) as TServices;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\t[...TServices, ...T],\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride logger<T extends Logger>(\n\t\tlogger: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tT,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._logger = logger as unknown as TLogger;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tT,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride publisher<T extends EventPublisher<any>, TName extends string>(\n\t\tpublisher: Service<TName, T>,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tT,\n\t\tTName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._publisher = publisher as unknown as Service<\n\t\t\tTEventPublisherServiceName,\n\t\t\tTEventPublisher\n\t\t>;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tT,\n\t\t\tTName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\t/**\n\t * Set the database service for this cron job.\n\t * The database will be available in the handler context as `db`.\n\t */\n\toverride database<T, TName extends string>(\n\t\tservice: Service<TName, T>,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tT,\n\t\tTName\n\t> {\n\t\tthis._databaseService = service as unknown as Service<\n\t\t\tTDatabaseServiceName,\n\t\t\tTDatabase\n\t\t>;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tT,\n\t\t\tTName\n\t\t>;\n\t}\n\n\toverride handle(\n\t\tfn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n\t): Cron<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tconst cron = new Cron(\n\t\t\tfn,\n\t\t\tthis._timeout,\n\t\t\tthis._schedule,\n\t\t\tthis.inputSchema,\n\t\t\tthis.outputSchema,\n\t\t\tthis._services,\n\t\t\tthis._logger,\n\t\t\tthis._publisher,\n\t\t\tthis._events,\n\t\t\tthis._memorySize,\n\t\t\tthis._databaseService,\n\t\t);\n\n\t\t// Reset builder state after creating the cron to prevent pollution\n\t\tthis._services = [] as Service[] as TServices;\n\t\tthis._logger = DEFAULT_LOGGER;\n\t\tthis._events = [];\n\t\tthis._publisher = undefined;\n\t\tthis._databaseService = undefined;\n\t\tthis._schedule = undefined;\n\t\tthis.inputSchema = undefined;\n\t\tthis.outputSchema = undefined;\n\t\tthis._timeout = undefined;\n\t\tthis._memorySize = undefined;\n\n\t\treturn cron;\n\t}\n}\n"],"mappings":";;;;;;;;AAWA,MAAM,iBAAiB,IAAIA;AAE3B,IAAa,cAAb,cASUC,wCAWR;CACD,AAAQ;CAER,cAAc;AACb,QAAMC,gCAAc,KAAK;CACzB;CAED,AAAS,WAAWC,YAA0B;AAC7C,OAAK,cAAc;AACnB,SAAO;CACP;CAED,SACCC,aAUC;AACD,OAAK,YAAY;AACjB,SAAO;CACP;CAED,AAAS,MACRC,QAUC;AACD,OAAK,cAAc;AAEnB,SAAO;CAUP;CAED,AAAS,OACRA,QAUC;AACD,OAAK,eAAe;AAEpB,SAAO;CAUP;CAED,AAAS,SACRC,UAUC;AACD,OAAK,YAAY,2BAChB,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACT;AAED,SAAO;CAUP;CAED,AAAS,OACRC,QAUC;AACD,OAAK,UAAU;AAEf,SAAO;CAUP;CAED,AAAS,UACRC,WAUC;AACD,OAAK,aAAa;AAKlB,SAAO;CAUP;;;;;CAMD,AAAS,SACRC,SAUC;AACD,OAAK,mBAAmB;AAKxB,SAAO;CAUP;CAED,AAAS,OACRC,IAUC;EACD,MAAM,OAAO,IAAIC,kBAChB,IACA,KAAK,UACL,KAAK,WACL,KAAK,aACL,KAAK,cACL,KAAK,WACL,KAAK,SACL,KAAK,YACL,KAAK,SACL,KAAK,aACL,KAAK;AAIN,OAAK,YAAY,CAAE;AACnB,OAAK,UAAU;AACf,OAAK,UAAU,CAAE;AACjB,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AAEL,SAAO;CACP;AACD"}
@@ -1,6 +1,6 @@
1
1
  import { ConstructType } from "./Construct-CQ9zV58W.mjs";
2
2
  import { FunctionBuilder } from "./FunctionBuilder-CBeqX18X.mjs";
3
- import { Cron } from "./Cron-CU3nmjdC.mjs";
3
+ import { Cron } from "./Cron-D5NpDp6y.mjs";
4
4
  import { ConsoleLogger } from "@geekmidas/logger/console";
5
5
  import uniqBy from "lodash.uniqby";
6
6
 
@@ -65,4 +65,4 @@ var CronBuilder = class extends FunctionBuilder {
65
65
 
66
66
  //#endregion
67
67
  export { CronBuilder };
68
- //# sourceMappingURL=CronBuilder-DEI1u1kW.mjs.map
68
+ //# sourceMappingURL=CronBuilder-p1Ro6a0n.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"CronBuilder-DEI1u1kW.mjs","names":["DEFAULT_LOGGER","memorySize: number","_expression: ScheduleExpression","schema: T","services: T","logger: T","publisher: Service<TName, T>","service: Service<TName, T>","fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>"],"sources":["../src/crons/CronBuilder.ts"],"sourcesContent":["import type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { FunctionBuilder, type FunctionHandler } from '../functions';\nimport { Cron, type ScheduleExpression } from './Cron';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class CronBuilder<\n\tTInput extends ComposableStandardSchema,\n\tTServices extends Service[],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n> extends FunctionBuilder<\n\tTInput,\n\tOutSchema,\n\tTServices,\n\tTLogger,\n\tTEventPublisher,\n\tTEventPublisherServiceName,\n\tundefined,\n\tstring,\n\tTDatabase,\n\tTDatabaseServiceName\n> {\n\tprivate _schedule?: ScheduleExpression;\n\n\tconstructor() {\n\t\tsuper(ConstructType.Cron);\n\t}\n\n\toverride memorySize(memorySize: number): this {\n\t\tthis._memorySize = memorySize;\n\t\treturn this;\n\t}\n\n\tschedule(\n\t\t_expression: ScheduleExpression,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._schedule = _expression;\n\t\treturn this;\n\t}\n\n\toverride input<T extends ComposableStandardSchema>(\n\t\tschema: T,\n\t): CronBuilder<\n\t\tT,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.inputSchema = schema as unknown as TInput;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tT,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride output<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tT,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.outputSchema = schema as unknown as OutSchema;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tT,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride services<T extends Service[]>(\n\t\tservices: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\t[...TServices, ...T],\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._services = uniqBy(\n\t\t\t[...this._services, ...services],\n\t\t\t(s) => s.serviceName,\n\t\t) as TServices;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\t[...TServices, ...T],\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride logger<T extends Logger>(\n\t\tlogger: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tT,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._logger = logger as unknown as TLogger;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tT,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride publisher<T extends EventPublisher<any>, TName extends string>(\n\t\tpublisher: Service<TName, T>,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tT,\n\t\tTName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._publisher = publisher as unknown as Service<\n\t\t\tTEventPublisherServiceName,\n\t\t\tTEventPublisher\n\t\t>;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tT,\n\t\t\tTName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\t/**\n\t * Set the database service for this cron job.\n\t * The database will be available in the handler context as `db`.\n\t */\n\toverride database<T, TName extends string>(\n\t\tservice: Service<TName, T>,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tT,\n\t\tTName\n\t> {\n\t\tthis._databaseService = service as unknown as Service<\n\t\t\tTDatabaseServiceName,\n\t\t\tTDatabase\n\t\t>;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tT,\n\t\t\tTName\n\t\t>;\n\t}\n\n\toverride handle(\n\t\tfn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n\t): Cron<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tconst cron = new Cron(\n\t\t\tfn,\n\t\t\tthis._timeout,\n\t\t\tthis._schedule,\n\t\t\tthis.inputSchema,\n\t\t\tthis.outputSchema,\n\t\t\tthis._services,\n\t\t\tthis._logger,\n\t\t\tthis._publisher,\n\t\t\tthis._events,\n\t\t\tthis._memorySize,\n\t\t\tthis._databaseService,\n\t\t);\n\n\t\t// Reset builder state after creating the cron to prevent pollution\n\t\tthis._services = [] as Service[] as TServices;\n\t\tthis._logger = DEFAULT_LOGGER;\n\t\tthis._events = [];\n\t\tthis._publisher = undefined;\n\t\tthis._databaseService = undefined;\n\t\tthis._schedule = undefined;\n\t\tthis.inputSchema = undefined;\n\t\tthis.outputSchema = undefined;\n\t\tthis._timeout = undefined;\n\t\tthis._memorySize = undefined;\n\n\t\treturn cron;\n\t}\n}\n"],"mappings":";;;;;;;AAWA,MAAMA,mBAAiB,IAAI;AAE3B,IAAa,cAAb,cASU,gBAWR;CACD,AAAQ;CAER,cAAc;AACb,QAAM,cAAc,KAAK;CACzB;CAED,AAAS,WAAWC,YAA0B;AAC7C,OAAK,cAAc;AACnB,SAAO;CACP;CAED,SACCC,aAUC;AACD,OAAK,YAAY;AACjB,SAAO;CACP;CAED,AAAS,MACRC,QAUC;AACD,OAAK,cAAc;AAEnB,SAAO;CAUP;CAED,AAAS,OACRA,QAUC;AACD,OAAK,eAAe;AAEpB,SAAO;CAUP;CAED,AAAS,SACRC,UAUC;AACD,OAAK,YAAY,OAChB,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACT;AAED,SAAO;CAUP;CAED,AAAS,OACRC,QAUC;AACD,OAAK,UAAU;AAEf,SAAO;CAUP;CAED,AAAS,UACRC,WAUC;AACD,OAAK,aAAa;AAKlB,SAAO;CAUP;;;;;CAMD,AAAS,SACRC,SAUC;AACD,OAAK,mBAAmB;AAKxB,SAAO;CAUP;CAED,AAAS,OACRC,IAUC;EACD,MAAM,OAAO,IAAI,KAChB,IACA,KAAK,UACL,KAAK,WACL,KAAK,aACL,KAAK,cACL,KAAK,WACL,KAAK,SACL,KAAK,YACL,KAAK,SACL,KAAK,aACL,KAAK;AAIN,OAAK,YAAY,CAAE;AACnB,OAAK,UAAUR;AACf,OAAK,UAAU,CAAE;AACjB,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AAEL,SAAO;CACP;AACD"}
1
+ {"version":3,"file":"CronBuilder-p1Ro6a0n.mjs","names":["DEFAULT_LOGGER","memorySize: number","_expression: ScheduleExpression","schema: T","services: T","logger: T","publisher: Service<TName, T>","service: Service<TName, T>","fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>"],"sources":["../src/crons/CronBuilder.ts"],"sourcesContent":["import type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { FunctionBuilder, type FunctionHandler } from '../functions';\nimport { Cron, type ScheduleExpression } from './Cron';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class CronBuilder<\n\tTInput extends ComposableStandardSchema,\n\tTServices extends Service[],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n> extends FunctionBuilder<\n\tTInput,\n\tOutSchema,\n\tTServices,\n\tTLogger,\n\tTEventPublisher,\n\tTEventPublisherServiceName,\n\tundefined,\n\tstring,\n\tTDatabase,\n\tTDatabaseServiceName\n> {\n\tprivate _schedule?: ScheduleExpression;\n\n\tconstructor() {\n\t\tsuper(ConstructType.Cron);\n\t}\n\n\toverride memorySize(memorySize: number): this {\n\t\tthis._memorySize = memorySize;\n\t\treturn this;\n\t}\n\n\tschedule(\n\t\t_expression: ScheduleExpression,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._schedule = _expression;\n\t\treturn this;\n\t}\n\n\toverride input<T extends ComposableStandardSchema>(\n\t\tschema: T,\n\t): CronBuilder<\n\t\tT,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.inputSchema = schema as unknown as TInput;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tT,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride output<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tT,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.outputSchema = schema as unknown as OutSchema;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tT,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride services<T extends Service[]>(\n\t\tservices: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\t[...TServices, ...T],\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._services = uniqBy(\n\t\t\t[...this._services, ...services],\n\t\t\t(s) => s.serviceName,\n\t\t) as TServices;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\t[...TServices, ...T],\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride logger<T extends Logger>(\n\t\tlogger: T,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tT,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._logger = logger as unknown as TLogger;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tT,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toverride publisher<T extends EventPublisher<any>, TName extends string>(\n\t\tpublisher: Service<TName, T>,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tT,\n\t\tTName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._publisher = publisher as unknown as Service<\n\t\t\tTEventPublisherServiceName,\n\t\t\tTEventPublisher\n\t\t>;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tT,\n\t\t\tTName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\t/**\n\t * Set the database service for this cron job.\n\t * The database will be available in the handler context as `db`.\n\t */\n\toverride database<T, TName extends string>(\n\t\tservice: Service<TName, T>,\n\t): CronBuilder<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tT,\n\t\tTName\n\t> {\n\t\tthis._databaseService = service as unknown as Service<\n\t\t\tTDatabaseServiceName,\n\t\t\tTDatabase\n\t\t>;\n\n\t\treturn this as unknown as CronBuilder<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tT,\n\t\t\tTName\n\t\t>;\n\t}\n\n\toverride handle(\n\t\tfn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n\t): Cron<\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tconst cron = new Cron(\n\t\t\tfn,\n\t\t\tthis._timeout,\n\t\t\tthis._schedule,\n\t\t\tthis.inputSchema,\n\t\t\tthis.outputSchema,\n\t\t\tthis._services,\n\t\t\tthis._logger,\n\t\t\tthis._publisher,\n\t\t\tthis._events,\n\t\t\tthis._memorySize,\n\t\t\tthis._databaseService,\n\t\t);\n\n\t\t// Reset builder state after creating the cron to prevent pollution\n\t\tthis._services = [] as Service[] as TServices;\n\t\tthis._logger = DEFAULT_LOGGER;\n\t\tthis._events = [];\n\t\tthis._publisher = undefined;\n\t\tthis._databaseService = undefined;\n\t\tthis._schedule = undefined;\n\t\tthis.inputSchema = undefined;\n\t\tthis.outputSchema = undefined;\n\t\tthis._timeout = undefined;\n\t\tthis._memorySize = undefined;\n\n\t\treturn cron;\n\t}\n}\n"],"mappings":";;;;;;;AAWA,MAAMA,mBAAiB,IAAI;AAE3B,IAAa,cAAb,cASU,gBAWR;CACD,AAAQ;CAER,cAAc;AACb,QAAM,cAAc,KAAK;CACzB;CAED,AAAS,WAAWC,YAA0B;AAC7C,OAAK,cAAc;AACnB,SAAO;CACP;CAED,SACCC,aAUC;AACD,OAAK,YAAY;AACjB,SAAO;CACP;CAED,AAAS,MACRC,QAUC;AACD,OAAK,cAAc;AAEnB,SAAO;CAUP;CAED,AAAS,OACRA,QAUC;AACD,OAAK,eAAe;AAEpB,SAAO;CAUP;CAED,AAAS,SACRC,UAUC;AACD,OAAK,YAAY,OAChB,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACT;AAED,SAAO;CAUP;CAED,AAAS,OACRC,QAUC;AACD,OAAK,UAAU;AAEf,SAAO;CAUP;CAED,AAAS,UACRC,WAUC;AACD,OAAK,aAAa;AAKlB,SAAO;CAUP;;;;;CAMD,AAAS,SACRC,SAUC;AACD,OAAK,mBAAmB;AAKxB,SAAO;CAUP;CAED,AAAS,OACRC,IAUC;EACD,MAAM,OAAO,IAAI,KAChB,IACA,KAAK,UACL,KAAK,WACL,KAAK,aACL,KAAK,cACL,KAAK,WACL,KAAK,SACL,KAAK,YACL,KAAK,SACL,KAAK,aACL,KAAK;AAIN,OAAK,YAAY,CAAE;AACnB,OAAK,UAAUR;AACf,OAAK,UAAU,CAAE;AACjB,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AAEL,SAAO;CACP;AACD"}
@@ -1,8 +1,8 @@
1
1
  import { ConstructType } from "./Construct-CQ9zV58W.mjs";
2
2
  import { BaseFunctionBuilder } from "./BaseFunctionBuilder-C3rQMoWb.mjs";
3
3
  import { Endpoint } from "./Endpoint-DvY3aqAy.mjs";
4
- import { getSecurityScheme } from "./Authorizer-UByhrr73.mjs";
5
- import { RLS_BYPASS } from "./rls-WNnQLmQd.mjs";
4
+ import { getSecurityScheme } from "./Authorizer-BgjU8-z6.mjs";
5
+ import { RLS_BYPASS } from "./rls-C0cWOnk4.mjs";
6
6
  import uniqBy from "lodash.uniqby";
7
7
 
8
8
  //#region src/endpoints/EndpointBuilder.ts
@@ -255,4 +255,4 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
255
255
 
256
256
  //#endregion
257
257
  export { EndpointBuilder };
258
- //# sourceMappingURL=EndpointBuilder-CZCom6bI.mjs.map
258
+ //# sourceMappingURL=EndpointBuilder-CF-ZWtdu.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"EndpointBuilder-CZCom6bI.mjs","names":["route: TRoute","method: TMethod","publisher: Service<TEventPublisherServiceName, TEventPublisher>","storage: Service<TAuditStorageServiceName, TAuditStorage>","service: Service<TDatabaseServiceName, TDatabase>","description: string","status: SuccessStatus","event: TEvent","tags: string[]","memorySize: number","publisher: Service<TName, T>","schema: T","config: RateLimitConfig","name: TAuthorizers[number] | 'none'","services: T","logger: T","storage: Service<TName, T>","extractor: ActorExtractor<TServices, TSession, TLogger>","audits: MappedAudit<TAuditAction, OutSchema>[]","service: Service<TName, T>","config: RlsConfig<TServices, TSession, TLogger> | false | RlsBypass","_schema: any","fn: EndpointHandler<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTDatabase,\n\t\t\tTAuditStorage,\n\t\t\tTAuditAction\n\t\t>","authorizer: Authorizer | undefined"],"sources":["../src/endpoints/EndpointBuilder.ts"],"sourcesContent":["import type {\n\tAuditableAction,\n\tAuditStorage,\n\tExtractStorageAuditAction,\n} from '@geekmidas/audit';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { RateLimitConfig } from '@geekmidas/rate-limit';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { BaseFunctionBuilder } from '../functions';\nimport type { HttpMethod } from '../types';\nimport type { Authorizer, SecurityScheme } from './Authorizer';\nimport { getSecurityScheme } from './Authorizer';\nimport type { ActorExtractor, MappedAudit } from './audit';\nimport type {\n\tAuthorizeFn,\n\tEndpointHandler,\n\tSessionFn,\n\tSuccessStatus,\n} from './Endpoint';\nimport { Endpoint, type EndpointSchemas } from './Endpoint';\nimport type { RlsBypass, RlsConfig } from './rls';\nimport { RLS_BYPASS } from './rls';\n\nexport class EndpointBuilder<\n\tTRoute extends string,\n\tTMethod extends HttpMethod,\n\tTInput extends EndpointSchemas = {},\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTSession = unknown,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTAuthorizers extends readonly string[] = readonly string[],\n\tTAuditStorage extends AuditStorage | undefined = undefined,\n\tTAuditStorageServiceName extends string = string,\n\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\tstring,\n\t\tunknown\n\t>,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n> extends BaseFunctionBuilder<\n\tTInput,\n\tOutSchema,\n\tTServices,\n\tTLogger,\n\tTEventPublisher,\n\tTEventPublisherServiceName,\n\tTAuditStorage,\n\tTAuditStorageServiceName,\n\tTDatabase,\n\tTDatabaseServiceName\n> {\n\tprotected schemas: TInput = {} as TInput;\n\tprotected _description?: string;\n\tprotected _status?: SuccessStatus;\n\tprotected _tags?: string[];\n\tprotected _memorySize?: number;\n\t_getSession: SessionFn<TServices, TLogger, TSession, TDatabase> = () =>\n\t\t({}) as TSession;\n\t_authorize: AuthorizeFn<TServices, TLogger, TSession> = () => true;\n\t_rateLimit?: RateLimitConfig;\n\t_availableAuthorizers: Authorizer[] = [];\n\t_authorizerName?: TAuthorizers[number];\n\t_actorExtractor?: ActorExtractor<TServices, TSession, TLogger>;\n\t_audits: MappedAudit<TAuditAction, OutSchema>[] = [];\n\t_customSecuritySchemes: Record<string, SecurityScheme> = {};\n\t_rlsConfig?: RlsConfig<TServices, TSession, TLogger>;\n\t_rlsBypass?: boolean;\n\n\tconstructor(\n\t\treadonly route: TRoute,\n\t\treadonly method: TMethod,\n\t) {\n\t\tsuper(ConstructType.Endpoint);\n\t}\n\n\t// Internal setter for EndpointFactory to set default publisher\n\t_setPublisher(\n\t\tpublisher: Service<TEventPublisherServiceName, TEventPublisher>,\n\t) {\n\t\tthis._publisher = publisher;\n\t}\n\n\t// Internal setter for EndpointFactory to set default auditor storage\n\t_setAuditorStorage(\n\t\tstorage: Service<TAuditStorageServiceName, TAuditStorage>,\n\t) {\n\t\tthis._auditorStorage = storage;\n\t}\n\n\t// Internal setter for EndpointFactory to set default database service\n\t_setDatabaseService(service: Service<TDatabaseServiceName, TDatabase>) {\n\t\tthis._databaseService = service;\n\t}\n\n\tdescription(description: string): this {\n\t\tthis._description = description;\n\t\treturn this;\n\t}\n\n\tstatus(status: SuccessStatus): this {\n\t\tthis._status = status;\n\t\treturn this;\n\t}\n\n\toverride event<TEvent extends MappedEvent<TEventPublisher, OutSchema>>(\n\t\tevent: TEvent,\n\t): this {\n\t\tthis._events.push(event);\n\t\treturn this;\n\t}\n\n\ttags(tags: string[]): this {\n\t\tthis._tags = tags;\n\t\treturn this;\n\t}\n\n\tmemorySize(memorySize: number): this {\n\t\tthis._memorySize = memorySize;\n\t\treturn this;\n\t}\n\n\toverride publisher<T extends EventPublisher<any>, TName extends string>(\n\t\tpublisher: Service<TName, T>,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tT,\n\t\tTName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._publisher = publisher as unknown as Service<\n\t\t\tTEventPublisherServiceName,\n\t\t\tTEventPublisher\n\t\t>;\n\n\t\treturn this as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tT,\n\t\t\tTName,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\tbody<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tOmit<TInput, 'body'> & { body: T },\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.schemas.body = schema as unknown as T;\n\t\t// @ts-expect-error\n\t\treturn this;\n\t}\n\n\tsearch<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tOmit<TInput, 'query'> & { query: T },\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.schemas.query = schema as unknown as T;\n\t\t// @ts-expect-error\n\t\treturn this;\n\t}\n\n\tquery<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tOmit<TInput, 'query'> & { query: T },\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn this.search(schema);\n\t}\n\n\tparams<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tOmit<TInput, 'params'> & { params: T },\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.schemas.params = schema as unknown as T;\n\t\t// @ts-expect-error\n\t\treturn this;\n\t}\n\n\trateLimit(config: RateLimitConfig): this {\n\t\tthis._rateLimit = config;\n\t\treturn this;\n\t}\n\n\tauthorizer(\n\t\tname: TAuthorizers[number] | 'none',\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\t// Special case: 'none' explicitly marks endpoint as having no authorizer\n\t\tif (name === 'none') {\n\t\t\tthis._authorizerName = undefined;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Validate that the authorizer exists in available authorizers\n\t\tconst authorizerExists = this._availableAuthorizers.some(\n\t\t\t(a) => a.name === name,\n\t\t);\n\t\tif (!authorizerExists && this._availableAuthorizers.length > 0) {\n\t\t\tconst available = this._availableAuthorizers\n\t\t\t\t.map((a) => a.name)\n\t\t\t\t.join(', ');\n\t\t\tthrow new Error(\n\t\t\t\t`Authorizer \"${name as string}\" not found in available authorizers: ${available}`,\n\t\t\t);\n\t\t}\n\t\tthis._authorizerName = name;\n\t\treturn this;\n\t}\n\n\tservices<T extends Service[]>(\n\t\tservices: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\t[...TServices, ...T],\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._services = uniqBy(\n\t\t\t[...this._services, ...services],\n\t\t\t(s) => s.serviceName,\n\t\t) as TServices;\n\n\t\treturn this as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\t[...TServices, ...T],\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\tlogger<T extends Logger>(\n\t\tlogger: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tT,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._logger = logger as unknown as TLogger;\n\n\t\treturn this as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tT,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toutput<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tT,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.outputSchema = schema as unknown as OutSchema;\n\n\t\treturn this as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tT,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\t/**\n\t * Set the auditor storage service for this endpoint.\n\t * This enables audit functionality and makes `auditor` available in the handler context.\n\t * The audit action type is automatically inferred from the storage's generic parameter.\n\t */\n\toverride auditor<T extends AuditStorage<any>, TName extends string>(\n\t\tstorage: Service<TName, T>,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tT,\n\t\tTName,\n\t\tExtractStorageAuditAction<T>,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._auditorStorage = storage as unknown as Service<\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditStorage\n\t\t>;\n\n\t\treturn this as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuthorizers,\n\t\t\tT,\n\t\t\tTName,\n\t\t\tExtractStorageAuditAction<T>,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\t/**\n\t * Set the actor extractor function for audit records.\n\t * The actor is extracted from the request context and attached to all audits.\n\t */\n\tactor(\n\t\textractor: ActorExtractor<TServices, TSession, TLogger>,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._actorExtractor = extractor;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Add declarative audit definitions that are processed after the handler executes.\n\t * Similar to `.event()` for events, but for audits.\n\t *\n\t * @example\n\t * ```typescript\n\t * .audit<AppAuditAction>([\n\t * {\n\t * type: 'user.created',\n\t * payload: (response) => ({ userId: response.id, email: response.email }),\n\t * when: (response) => response.active,\n\t * entityId: (response) => response.id,\n\t * table: 'users',\n\t * },\n\t * ])\n\t * ```\n\t */\n\taudit(audits: MappedAudit<TAuditAction, OutSchema>[]): this {\n\t\tthis._audits = audits;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the database service for this endpoint.\n\t * The database will be available in the handler context as `db`.\n\t * When audit storage is configured and uses the same database,\n\t * `db` will automatically be the transaction for ACID compliance.\n\t *\n\t * @example\n\t * ```typescript\n\t * .database(databaseService)\n\t * .handle(async ({ db }) => {\n\t * // db is the raw database or transaction (when auditor uses same db)\n\t * return await db.selectFrom('users').selectAll().execute();\n\t * })\n\t * ```\n\t */\n\toverride database<T, TName extends string>(\n\t\tservice: Service<TName, T>,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tT,\n\t\tTName\n\t> {\n\t\tthis._databaseService = service as unknown as Service<\n\t\t\tTDatabaseServiceName,\n\t\t\tTDatabase\n\t\t>;\n\n\t\treturn this as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tT,\n\t\t\tTName\n\t\t>;\n\t}\n\n\t/**\n\t * Configure RLS (Row-Level Security) context for this endpoint.\n\t * Pass `false` or `RLS_BYPASS` to explicitly bypass RLS for this endpoint.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Custom RLS config for this endpoint\n\t * .rls({\n\t * extractor: ({ session }) => ({\n\t * user_id: session.userId,\n\t * tenant_id: session.tenantId,\n\t * }),\n\t * prefix: 'app',\n\t * })\n\t *\n\t * // Bypass RLS (for admin endpoints)\n\t * .rls(false)\n\t * ```\n\t */\n\trls(\n\t\tconfig: RlsConfig<TServices, TSession, TLogger> | false | RlsBypass,\n\t): this {\n\t\tif (config === false || config === RLS_BYPASS) {\n\t\t\tthis._rlsBypass = true;\n\t\t\tthis._rlsConfig = undefined;\n\t\t} else {\n\t\t\tthis._rlsConfig = config;\n\t\t\tthis._rlsBypass = false;\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Explicitly bypass RLS for this endpoint.\n\t * Useful for admin operations that need unrestricted database access.\n\t *\n\t * @example\n\t * ```typescript\n\t * .rlsBypass()\n\t * .handle(async ({ db }) => {\n\t * // Full access, no RLS filtering\n\t * return db.selectFrom('orders').selectAll().execute();\n\t * })\n\t * ```\n\t */\n\trlsBypass(): this {\n\t\tthis._rlsBypass = true;\n\t\tthis._rlsConfig = undefined;\n\t\treturn this;\n\t}\n\n\t// EndpointBuilder doesn't have a generic input method - it uses body, query, params instead\n\tinput(_schema: any): any {\n\t\tthrow new Error(\n\t\t\t'EndpointBuilder does not support generic input. Use body(), query(), or params() instead.',\n\t\t);\n\t}\n\n\thandle(\n\t\tfn: EndpointHandler<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTDatabase,\n\t\t\tTAuditStorage,\n\t\t\tTAuditAction\n\t\t>,\n\t): Endpoint<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tOutSchema,\n\t\tTServices,\n\t\tTLogger,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\t// Find authorizer metadata if name is set\n\t\t// If the authorizer name is set but not in availableAuthorizers, create a simple authorizer object\n\t\tlet authorizer: Authorizer | undefined;\n\t\tif (this._authorizerName) {\n\t\t\tconst existingAuthorizer = this._availableAuthorizers.find(\n\t\t\t\t(a) => a.name === this._authorizerName,\n\t\t\t);\n\n\t\t\tif (existingAuthorizer) {\n\t\t\t\tauthorizer = existingAuthorizer;\n\t\t\t} else {\n\t\t\t\t// Create authorizer with security scheme if available (built-in or custom)\n\t\t\t\tconst securityScheme = getSecurityScheme(\n\t\t\t\t\tthis._authorizerName as string,\n\t\t\t\t\tthis._customSecuritySchemes,\n\t\t\t\t);\n\t\t\t\tauthorizer = {\n\t\t\t\t\tname: this._authorizerName as string,\n\t\t\t\t\tsecurityScheme,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn new Endpoint({\n\t\t\tfn,\n\t\t\tmethod: this.method,\n\t\t\troute: this.route,\n\t\t\tdescription: this._description,\n\t\t\ttags: this._tags,\n\t\t\tinput: this.schemas,\n\t\t\toutput: this.outputSchema,\n\t\t\tservices: this._services,\n\t\t\tlogger: this._logger,\n\t\t\ttimeout: this._timeout,\n\t\t\tmemorySize: this._memorySize,\n\t\t\tauthorize: this._authorize,\n\t\t\tstatus: this._status,\n\t\t\tgetSession: this._getSession,\n\t\t\trateLimit: this._rateLimit,\n\t\t\tpublisherService: this._publisher,\n\t\t\tevents: this._events,\n\t\t\tauthorizer,\n\t\t\tauditorStorageService: this._auditorStorage,\n\t\t\tactorExtractor: this._actorExtractor,\n\t\t\taudits: this._audits,\n\t\t\tdatabaseService: this._databaseService,\n\t\t\trlsConfig: this._rlsConfig,\n\t\t\trlsBypass: this._rlsBypass,\n\t\t});\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"EndpointBuilder-CF-ZWtdu.mjs","names":["route: TRoute","method: TMethod","publisher: Service<TEventPublisherServiceName, TEventPublisher>","storage: Service<TAuditStorageServiceName, TAuditStorage>","service: Service<TDatabaseServiceName, TDatabase>","description: string","status: SuccessStatus","event: TEvent","tags: string[]","memorySize: number","publisher: Service<TName, T>","schema: T","config: RateLimitConfig","name: TAuthorizers[number] | 'none'","services: T","logger: T","storage: Service<TName, T>","extractor: ActorExtractor<TServices, TSession, TLogger>","audits: MappedAudit<TAuditAction, OutSchema>[]","service: Service<TName, T>","config: RlsConfig<TServices, TSession, TLogger> | false | RlsBypass","_schema: any","fn: EndpointHandler<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTDatabase,\n\t\t\tTAuditStorage,\n\t\t\tTAuditAction\n\t\t>","authorizer: Authorizer | undefined"],"sources":["../src/endpoints/EndpointBuilder.ts"],"sourcesContent":["import type {\n\tAuditableAction,\n\tAuditStorage,\n\tExtractStorageAuditAction,\n} from '@geekmidas/audit';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { RateLimitConfig } from '@geekmidas/rate-limit';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { BaseFunctionBuilder } from '../functions';\nimport type { HttpMethod } from '../types';\nimport type { Authorizer, SecurityScheme } from './Authorizer';\nimport { getSecurityScheme } from './Authorizer';\nimport type { ActorExtractor, MappedAudit } from './audit';\nimport type {\n\tAuthorizeFn,\n\tEndpointHandler,\n\tSessionFn,\n\tSuccessStatus,\n} from './Endpoint';\nimport { Endpoint, type EndpointSchemas } from './Endpoint';\nimport type { RlsBypass, RlsConfig } from './rls';\nimport { RLS_BYPASS } from './rls';\n\nexport class EndpointBuilder<\n\tTRoute extends string,\n\tTMethod extends HttpMethod,\n\tTInput extends EndpointSchemas = {},\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTSession = unknown,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTAuthorizers extends readonly string[] = readonly string[],\n\tTAuditStorage extends AuditStorage | undefined = undefined,\n\tTAuditStorageServiceName extends string = string,\n\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\tstring,\n\t\tunknown\n\t>,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n> extends BaseFunctionBuilder<\n\tTInput,\n\tOutSchema,\n\tTServices,\n\tTLogger,\n\tTEventPublisher,\n\tTEventPublisherServiceName,\n\tTAuditStorage,\n\tTAuditStorageServiceName,\n\tTDatabase,\n\tTDatabaseServiceName\n> {\n\tprotected schemas: TInput = {} as TInput;\n\tprotected _description?: string;\n\tprotected _status?: SuccessStatus;\n\tprotected _tags?: string[];\n\tprotected _memorySize?: number;\n\t_getSession: SessionFn<TServices, TLogger, TSession, TDatabase> = () =>\n\t\t({}) as TSession;\n\t_authorize: AuthorizeFn<TServices, TLogger, TSession> = () => true;\n\t_rateLimit?: RateLimitConfig;\n\t_availableAuthorizers: Authorizer[] = [];\n\t_authorizerName?: TAuthorizers[number];\n\t_actorExtractor?: ActorExtractor<TServices, TSession, TLogger>;\n\t_audits: MappedAudit<TAuditAction, OutSchema>[] = [];\n\t_customSecuritySchemes: Record<string, SecurityScheme> = {};\n\t_rlsConfig?: RlsConfig<TServices, TSession, TLogger>;\n\t_rlsBypass?: boolean;\n\n\tconstructor(\n\t\treadonly route: TRoute,\n\t\treadonly method: TMethod,\n\t) {\n\t\tsuper(ConstructType.Endpoint);\n\t}\n\n\t// Internal setter for EndpointFactory to set default publisher\n\t_setPublisher(\n\t\tpublisher: Service<TEventPublisherServiceName, TEventPublisher>,\n\t) {\n\t\tthis._publisher = publisher;\n\t}\n\n\t// Internal setter for EndpointFactory to set default auditor storage\n\t_setAuditorStorage(\n\t\tstorage: Service<TAuditStorageServiceName, TAuditStorage>,\n\t) {\n\t\tthis._auditorStorage = storage;\n\t}\n\n\t// Internal setter for EndpointFactory to set default database service\n\t_setDatabaseService(service: Service<TDatabaseServiceName, TDatabase>) {\n\t\tthis._databaseService = service;\n\t}\n\n\tdescription(description: string): this {\n\t\tthis._description = description;\n\t\treturn this;\n\t}\n\n\tstatus(status: SuccessStatus): this {\n\t\tthis._status = status;\n\t\treturn this;\n\t}\n\n\toverride event<TEvent extends MappedEvent<TEventPublisher, OutSchema>>(\n\t\tevent: TEvent,\n\t): this {\n\t\tthis._events.push(event);\n\t\treturn this;\n\t}\n\n\ttags(tags: string[]): this {\n\t\tthis._tags = tags;\n\t\treturn this;\n\t}\n\n\tmemorySize(memorySize: number): this {\n\t\tthis._memorySize = memorySize;\n\t\treturn this;\n\t}\n\n\toverride publisher<T extends EventPublisher<any>, TName extends string>(\n\t\tpublisher: Service<TName, T>,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tT,\n\t\tTName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._publisher = publisher as unknown as Service<\n\t\t\tTEventPublisherServiceName,\n\t\t\tTEventPublisher\n\t\t>;\n\n\t\treturn this as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tT,\n\t\t\tTName,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\tbody<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tOmit<TInput, 'body'> & { body: T },\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.schemas.body = schema as unknown as T;\n\t\t// @ts-expect-error\n\t\treturn this;\n\t}\n\n\tsearch<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tOmit<TInput, 'query'> & { query: T },\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.schemas.query = schema as unknown as T;\n\t\t// @ts-expect-error\n\t\treturn this;\n\t}\n\n\tquery<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tOmit<TInput, 'query'> & { query: T },\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn this.search(schema);\n\t}\n\n\tparams<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tOmit<TInput, 'params'> & { params: T },\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.schemas.params = schema as unknown as T;\n\t\t// @ts-expect-error\n\t\treturn this;\n\t}\n\n\trateLimit(config: RateLimitConfig): this {\n\t\tthis._rateLimit = config;\n\t\treturn this;\n\t}\n\n\tauthorizer(\n\t\tname: TAuthorizers[number] | 'none',\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\t// Special case: 'none' explicitly marks endpoint as having no authorizer\n\t\tif (name === 'none') {\n\t\t\tthis._authorizerName = undefined;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Validate that the authorizer exists in available authorizers\n\t\tconst authorizerExists = this._availableAuthorizers.some(\n\t\t\t(a) => a.name === name,\n\t\t);\n\t\tif (!authorizerExists && this._availableAuthorizers.length > 0) {\n\t\t\tconst available = this._availableAuthorizers\n\t\t\t\t.map((a) => a.name)\n\t\t\t\t.join(', ');\n\t\t\tthrow new Error(\n\t\t\t\t`Authorizer \"${name as string}\" not found in available authorizers: ${available}`,\n\t\t\t);\n\t\t}\n\t\tthis._authorizerName = name;\n\t\treturn this;\n\t}\n\n\tservices<T extends Service[]>(\n\t\tservices: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\t[...TServices, ...T],\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._services = uniqBy(\n\t\t\t[...this._services, ...services],\n\t\t\t(s) => s.serviceName,\n\t\t) as TServices;\n\n\t\treturn this as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\t[...TServices, ...T],\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\tlogger<T extends Logger>(\n\t\tlogger: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tT,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._logger = logger as unknown as TLogger;\n\n\t\treturn this as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tT,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toutput<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tT,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.outputSchema = schema as unknown as OutSchema;\n\n\t\treturn this as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tT,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\t/**\n\t * Set the auditor storage service for this endpoint.\n\t * This enables audit functionality and makes `auditor` available in the handler context.\n\t * The audit action type is automatically inferred from the storage's generic parameter.\n\t */\n\toverride auditor<T extends AuditStorage<any>, TName extends string>(\n\t\tstorage: Service<TName, T>,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tT,\n\t\tTName,\n\t\tExtractStorageAuditAction<T>,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._auditorStorage = storage as unknown as Service<\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditStorage\n\t\t>;\n\n\t\treturn this as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuthorizers,\n\t\t\tT,\n\t\t\tTName,\n\t\t\tExtractStorageAuditAction<T>,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\t/**\n\t * Set the actor extractor function for audit records.\n\t * The actor is extracted from the request context and attached to all audits.\n\t */\n\tactor(\n\t\textractor: ActorExtractor<TServices, TSession, TLogger>,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis._actorExtractor = extractor;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Add declarative audit definitions that are processed after the handler executes.\n\t * Similar to `.event()` for events, but for audits.\n\t *\n\t * @example\n\t * ```typescript\n\t * .audit<AppAuditAction>([\n\t * {\n\t * type: 'user.created',\n\t * payload: (response) => ({ userId: response.id, email: response.email }),\n\t * when: (response) => response.active,\n\t * entityId: (response) => response.id,\n\t * table: 'users',\n\t * },\n\t * ])\n\t * ```\n\t */\n\taudit(audits: MappedAudit<TAuditAction, OutSchema>[]): this {\n\t\tthis._audits = audits;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the database service for this endpoint.\n\t * The database will be available in the handler context as `db`.\n\t * When audit storage is configured and uses the same database,\n\t * `db` will automatically be the transaction for ACID compliance.\n\t *\n\t * @example\n\t * ```typescript\n\t * .database(databaseService)\n\t * .handle(async ({ db }) => {\n\t * // db is the raw database or transaction (when auditor uses same db)\n\t * return await db.selectFrom('users').selectAll().execute();\n\t * })\n\t * ```\n\t */\n\toverride database<T, TName extends string>(\n\t\tservice: Service<TName, T>,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tT,\n\t\tTName\n\t> {\n\t\tthis._databaseService = service as unknown as Service<\n\t\t\tTDatabaseServiceName,\n\t\t\tTDatabase\n\t\t>;\n\n\t\treturn this as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tT,\n\t\t\tTName\n\t\t>;\n\t}\n\n\t/**\n\t * Configure RLS (Row-Level Security) context for this endpoint.\n\t * Pass `false` or `RLS_BYPASS` to explicitly bypass RLS for this endpoint.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Custom RLS config for this endpoint\n\t * .rls({\n\t * extractor: ({ session }) => ({\n\t * user_id: session.userId,\n\t * tenant_id: session.tenantId,\n\t * }),\n\t * prefix: 'app',\n\t * })\n\t *\n\t * // Bypass RLS (for admin endpoints)\n\t * .rls(false)\n\t * ```\n\t */\n\trls(\n\t\tconfig: RlsConfig<TServices, TSession, TLogger> | false | RlsBypass,\n\t): this {\n\t\tif (config === false || config === RLS_BYPASS) {\n\t\t\tthis._rlsBypass = true;\n\t\t\tthis._rlsConfig = undefined;\n\t\t} else {\n\t\t\tthis._rlsConfig = config;\n\t\t\tthis._rlsBypass = false;\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Explicitly bypass RLS for this endpoint.\n\t * Useful for admin operations that need unrestricted database access.\n\t *\n\t * @example\n\t * ```typescript\n\t * .rlsBypass()\n\t * .handle(async ({ db }) => {\n\t * // Full access, no RLS filtering\n\t * return db.selectFrom('orders').selectAll().execute();\n\t * })\n\t * ```\n\t */\n\trlsBypass(): this {\n\t\tthis._rlsBypass = true;\n\t\tthis._rlsConfig = undefined;\n\t\treturn this;\n\t}\n\n\t// EndpointBuilder doesn't have a generic input method - it uses body, query, params instead\n\tinput(_schema: any): any {\n\t\tthrow new Error(\n\t\t\t'EndpointBuilder does not support generic input. Use body(), query(), or params() instead.',\n\t\t);\n\t}\n\n\thandle(\n\t\tfn: EndpointHandler<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTDatabase,\n\t\t\tTAuditStorage,\n\t\t\tTAuditAction\n\t\t>,\n\t): Endpoint<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tOutSchema,\n\t\tTServices,\n\t\tTLogger,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\t// Find authorizer metadata if name is set\n\t\t// If the authorizer name is set but not in availableAuthorizers, create a simple authorizer object\n\t\tlet authorizer: Authorizer | undefined;\n\t\tif (this._authorizerName) {\n\t\t\tconst existingAuthorizer = this._availableAuthorizers.find(\n\t\t\t\t(a) => a.name === this._authorizerName,\n\t\t\t);\n\n\t\t\tif (existingAuthorizer) {\n\t\t\t\tauthorizer = existingAuthorizer;\n\t\t\t} else {\n\t\t\t\t// Create authorizer with security scheme if available (built-in or custom)\n\t\t\t\tconst securityScheme = getSecurityScheme(\n\t\t\t\t\tthis._authorizerName as string,\n\t\t\t\t\tthis._customSecuritySchemes,\n\t\t\t\t);\n\t\t\t\tauthorizer = {\n\t\t\t\t\tname: this._authorizerName as string,\n\t\t\t\t\tsecurityScheme,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn new Endpoint({\n\t\t\tfn,\n\t\t\tmethod: this.method,\n\t\t\troute: this.route,\n\t\t\tdescription: this._description,\n\t\t\ttags: this._tags,\n\t\t\tinput: this.schemas,\n\t\t\toutput: this.outputSchema,\n\t\t\tservices: this._services,\n\t\t\tlogger: this._logger,\n\t\t\ttimeout: this._timeout,\n\t\t\tmemorySize: this._memorySize,\n\t\t\tauthorize: this._authorize,\n\t\t\tstatus: this._status,\n\t\t\tgetSession: this._getSession,\n\t\t\trateLimit: this._rateLimit,\n\t\t\tpublisherService: this._publisher,\n\t\t\tevents: this._events,\n\t\t\tauthorizer,\n\t\t\tauditorStorageService: this._auditorStorage,\n\t\t\tactorExtractor: this._actorExtractor,\n\t\t\taudits: this._audits,\n\t\t\tdatabaseService: this._databaseService,\n\t\t\trlsConfig: this._rlsConfig,\n\t\t\trlsBypass: this._rlsBypass,\n\t\t});\n\t}\n}\n"],"mappings":"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"}