@reventlessdev/reventless-aws 3.0.0-alpha.167

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 (394) hide show
  1. package/CHANGELOG.md +1564 -0
  2. package/README.md +62 -0
  3. package/__mocks__/emptyModule.js +1 -0
  4. package/all-licenses.csv +565 -0
  5. package/docker-compose.dynamodb-local.yml +12 -0
  6. package/jest.setup.cjs +5 -0
  7. package/licenses-analysis.ods +0 -0
  8. package/package.json +73 -0
  9. package/rescript.json +39 -0
  10. package/reventless-licenses-analysis.xls +0 -0
  11. package/scripts/run-integration-tests.sh +43 -0
  12. package/src/Platform.res +1940 -0
  13. package/src/Platform.res.mjs +2281 -0
  14. package/src/Platform_Casts.res +106 -0
  15. package/src/Platform_Casts.res.mjs +13 -0
  16. package/src/Platform_Stack.res +153 -0
  17. package/src/Platform_Stack.res.mjs +121 -0
  18. package/src/Types.res +39 -0
  19. package/src/Types.res.mjs +21 -0
  20. package/src/adapter/AWS.res +96 -0
  21. package/src/adapter/AWS.res.mjs +186 -0
  22. package/src/adapter/AWS_Tags.res +16 -0
  23. package/src/adapter/AWS_Tags.res.mjs +48 -0
  24. package/src/adapter/Adapter_Helpers.res +19 -0
  25. package/src/adapter/Adapter_Helpers.res.mjs +37 -0
  26. package/src/adapter/Api/AppSync_EventsApi.res +172 -0
  27. package/src/adapter/Api/AppSync_EventsApi.res.mjs +96 -0
  28. package/src/adapter/Api/AppSync_Resolver_Native.res +93 -0
  29. package/src/adapter/Api/AppSync_Resolver_Native.res.mjs +67 -0
  30. package/src/adapter/Api/AppSync_Resolver_Retrying.res +653 -0
  31. package/src/adapter/Api/AppSync_Resolver_Retrying.res.mjs +462 -0
  32. package/src/adapter/Api/CommandSubscriptionResolvers_AppSync.res +29 -0
  33. package/src/adapter/Api/CommandSubscriptionResolvers_AppSync.res.mjs +15 -0
  34. package/src/adapter/Api/Platform_ComponentDefinitions_Lambda.res +238 -0
  35. package/src/adapter/Api/Platform_ComponentDefinitions_Lambda.res.mjs +179 -0
  36. package/src/adapter/Api/Platform_UIFragments_Lambda.res +229 -0
  37. package/src/adapter/Api/Platform_UIFragments_Lambda.res.mjs +245 -0
  38. package/src/adapter/Auth/Auth_Cognito.res +209 -0
  39. package/src/adapter/Auth/Auth_Cognito.res.mjs +135 -0
  40. package/src/adapter/CommandGenerator/CommandGeneratorResolvers.res +2 -0
  41. package/src/adapter/CommandGenerator/CommandGeneratorResolvers.res.mjs +12 -0
  42. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync.res +251 -0
  43. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync.res.mjs +126 -0
  44. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync_NoOp.res +20 -0
  45. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync_NoOp.res.mjs +23 -0
  46. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync_Runtime.res +1 -0
  47. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync_Runtime.res.mjs +11 -0
  48. package/src/adapter/CommandGenerator/InboundTranslationResolvers_AppSync.res +95 -0
  49. package/src/adapter/CommandGenerator/InboundTranslationResolvers_AppSync.res.mjs +50 -0
  50. package/src/adapter/CommandTopic/CommandTopicChannel.res +6 -0
  51. package/src/adapter/CommandTopic/CommandTopicChannel.res.mjs +21 -0
  52. package/src/adapter/CommandTopic/CommandTopicChannel_Helpers.res +196 -0
  53. package/src/adapter/CommandTopic/CommandTopicChannel_Helpers.res.mjs +145 -0
  54. package/src/adapter/CommandTopic/CommandTopicChannel_SQS.res +91 -0
  55. package/src/adapter/CommandTopic/CommandTopicChannel_SQS.res.mjs +74 -0
  56. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Async.res +69 -0
  57. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Async.res.mjs +62 -0
  58. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_FIFO.res +60 -0
  59. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_FIFO.res.mjs +56 -0
  60. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Runtime.res +73 -0
  61. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Runtime.res.mjs +65 -0
  62. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Sync.res +88 -0
  63. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Sync.res.mjs +76 -0
  64. package/src/adapter/CommandTopic/CommandTopicRemoteChannel.res +1 -0
  65. package/src/adapter/CommandTopic/CommandTopicRemoteChannel.res.mjs +9 -0
  66. package/src/adapter/CommandTopic/CommandTopicRemoteChannel_SQS.res +7 -0
  67. package/src/adapter/CommandTopic/CommandTopicRemoteChannel_SQS.res.mjs +17 -0
  68. package/src/adapter/Counter/CounterHandler_DynamoDbStream.res +103 -0
  69. package/src/adapter/Counter/CounterHandler_DynamoDbStream.res.mjs +68 -0
  70. package/src/adapter/Counter/CounterHandler_DynamoDbStream_Runtime.res +107 -0
  71. package/src/adapter/Counter/CounterHandler_DynamoDbStream_Runtime.res.mjs +145 -0
  72. package/src/adapter/DcbEventLog/DcbEventLogStorage.res +1 -0
  73. package/src/adapter/DcbEventLog/DcbEventLogStorage.res.mjs +9 -0
  74. package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb.res +84 -0
  75. package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb.res.mjs +52 -0
  76. package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb_Runtime.res +1436 -0
  77. package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb_Runtime.res.mjs +1143 -0
  78. package/src/adapter/EventCollector/EventCollectorChannel.res +6 -0
  79. package/src/adapter/EventCollector/EventCollectorChannel.res.mjs +21 -0
  80. package/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream.res +63 -0
  81. package/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream.res.mjs +56 -0
  82. package/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream_Runtime.res +20 -0
  83. package/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream_Runtime.res.mjs +32 -0
  84. package/src/adapter/EventCollector/EventCollectorChannel_Helpers.res +266 -0
  85. package/src/adapter/EventCollector/EventCollectorChannel_Helpers.res.mjs +166 -0
  86. package/src/adapter/EventCollector/EventCollectorChannel_SQS.res +81 -0
  87. package/src/adapter/EventCollector/EventCollectorChannel_SQS.res.mjs +54 -0
  88. package/src/adapter/EventCollector/EventCollectorChannel_SQS_FIFO.res +59 -0
  89. package/src/adapter/EventCollector/EventCollectorChannel_SQS_FIFO.res.mjs +45 -0
  90. package/src/adapter/EventCollector/EventCollectorChannel_SQS_Runtime.res +91 -0
  91. package/src/adapter/EventCollector/EventCollectorChannel_SQS_Runtime.res.mjs +89 -0
  92. package/src/adapter/EventLog/EventLogStorage.res +3 -0
  93. package/src/adapter/EventLog/EventLogStorage.res.mjs +15 -0
  94. package/src/adapter/EventLog/EventLogStorage_DynamoDb.res +25 -0
  95. package/src/adapter/EventLog/EventLogStorage_DynamoDb.res.mjs +34 -0
  96. package/src/adapter/EventLog/EventLogStorage_DynamoDbStream.res +26 -0
  97. package/src/adapter/EventLog/EventLogStorage_DynamoDbStream.res.mjs +35 -0
  98. package/src/adapter/EventLog/EventLogStorage_DynamoDb_Runtime.res +121 -0
  99. package/src/adapter/EventLog/EventLogStorage_DynamoDb_Runtime.res.mjs +137 -0
  100. package/src/adapter/EventLogSubscription/EventLogSubscription_AppSync.res +265 -0
  101. package/src/adapter/EventLogSubscription/EventLogSubscription_AppSync.res.mjs +185 -0
  102. package/src/adapter/EventTopic/EventTopicPublisher.res +6 -0
  103. package/src/adapter/EventTopic/EventTopicPublisher.res.mjs +21 -0
  104. package/src/adapter/EventTopic/EventTopicPublisher_DynamoDbStream.res +25 -0
  105. package/src/adapter/EventTopic/EventTopicPublisher_DynamoDbStream.res.mjs +28 -0
  106. package/src/adapter/EventTopic/EventTopicPublisher_SNS.res +40 -0
  107. package/src/adapter/EventTopic/EventTopicPublisher_SNS.res.mjs +39 -0
  108. package/src/adapter/EventTopic/EventTopicPublisher_SNS_FIFO.res +39 -0
  109. package/src/adapter/EventTopic/EventTopicPublisher_SNS_FIFO.res.mjs +38 -0
  110. package/src/adapter/EventTopic/EventTopicPublisher_SNS_Runtime.res +5 -0
  111. package/src/adapter/EventTopic/EventTopicPublisher_SNS_Runtime.res.mjs +18 -0
  112. package/src/adapter/Mcp/MCP_Lambda.res +502 -0
  113. package/src/adapter/Mcp/MCP_Lambda.res.mjs +289 -0
  114. package/src/adapter/QueryDb/NodeResolver_AppSync.res +71 -0
  115. package/src/adapter/QueryDb/NodeResolver_AppSync.res.mjs +44 -0
  116. package/src/adapter/QueryDb/QueryDbResolvers.res +2 -0
  117. package/src/adapter/QueryDb/QueryDbResolvers.res.mjs +12 -0
  118. package/src/adapter/QueryDb/QueryDbResolvers_AppSync.res +434 -0
  119. package/src/adapter/QueryDb/QueryDbResolvers_AppSync.res.mjs +243 -0
  120. package/src/adapter/QueryDb/QueryDbResolvers_AppSync_NoOp.res +21 -0
  121. package/src/adapter/QueryDb/QueryDbResolvers_AppSync_NoOp.res.mjs +14 -0
  122. package/src/adapter/QueryDb/QueryDbResolvers_NoOp.res +21 -0
  123. package/src/adapter/QueryDb/QueryDbResolvers_NoOp.res.mjs +14 -0
  124. package/src/adapter/QueryDb/QueryDbStorage.res +5 -0
  125. package/src/adapter/QueryDb/QueryDbStorage.res.mjs +18 -0
  126. package/src/adapter/QueryDb/QueryDbStorage_DynamoDb.res +115 -0
  127. package/src/adapter/QueryDb/QueryDbStorage_DynamoDb.res.mjs +100 -0
  128. package/src/adapter/QueryDb/QueryDbStorage_DynamoDbStream.res +52 -0
  129. package/src/adapter/QueryDb/QueryDbStorage_DynamoDbStream.res.mjs +38 -0
  130. package/src/adapter/QueryDb/QueryDbStorage_DynamoDb_Runtime.res +271 -0
  131. package/src/adapter/QueryDb/QueryDbStorage_DynamoDb_Runtime.res.mjs +306 -0
  132. package/src/adapter/QueryDb/QueryInterceptor_Lambda.res +20 -0
  133. package/src/adapter/QueryDb/QueryInterceptor_Lambda.res.mjs +22 -0
  134. package/src/adapter/QueryEngine/QueryEngine.res +3 -0
  135. package/src/adapter/QueryEngine/QueryEngine.res.mjs +12 -0
  136. package/src/adapter/QueryEngine/QueryEngine_DynamoDb.res +184 -0
  137. package/src/adapter/QueryEngine/QueryEngine_DynamoDb.res.mjs +221 -0
  138. package/src/adapter/Runtime/AdminEventCollectorEntryPoint.mjs +879 -0
  139. package/src/adapter/Runtime/AggregateEntryPoint.mjs +313 -0
  140. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res +327 -0
  141. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res.mjs +239 -0
  142. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro_Async.res +331 -0
  143. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro_Async.res.mjs +240 -0
  144. package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate.res +247 -0
  145. package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate.res.mjs +185 -0
  146. package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate_Async.res +244 -0
  147. package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate_Async.res.mjs +185 -0
  148. package/src/adapter/Runtime/AggregateRuntime_Builder_Single.res +347 -0
  149. package/src/adapter/Runtime/AggregateRuntime_Builder_Single.res.mjs +244 -0
  150. package/src/adapter/Runtime/AggregateRuntime_Builder_Single_Async.res +285 -0
  151. package/src/adapter/Runtime/AggregateRuntime_Builder_Single_Async.res.mjs +212 -0
  152. package/src/adapter/Runtime/AutomationSliceEntryPoint.mjs +124 -0
  153. package/src/adapter/Runtime/AutomationSliceRuntime_Builder_Single.res +187 -0
  154. package/src/adapter/Runtime/AutomationSliceRuntime_Builder_Single.res.mjs +147 -0
  155. package/src/adapter/Runtime/CounterEntryPoint.mjs +91 -0
  156. package/src/adapter/Runtime/DcbCommandTopicEntryPoint.mjs +265 -0
  157. package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res +122 -0
  158. package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res.mjs +89 -0
  159. package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res +193 -0
  160. package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res.mjs +137 -0
  161. package/src/adapter/Runtime/EventMapperEntryPoint.mjs +97 -0
  162. package/src/adapter/Runtime/ExtensionPointEntryPoint.mjs +101 -0
  163. package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res +83 -0
  164. package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res.mjs +59 -0
  165. package/src/adapter/Runtime/HandlerFactoryHelpers.mjs +142 -0
  166. package/src/adapter/Runtime/HeartbeatEntryPoint.mjs +38 -0
  167. package/src/adapter/Runtime/PluginExtensionPointEntryPoint.mjs +137 -0
  168. package/src/adapter/Runtime/ReadModelEntryPoint.mjs +143 -0
  169. package/src/adapter/Runtime/RuntimeEnvironment.res +1 -0
  170. package/src/adapter/Runtime/RuntimeEnvironment.res.mjs +9 -0
  171. package/src/adapter/Runtime/RuntimeEnvironment_Lambda.res +254 -0
  172. package/src/adapter/Runtime/RuntimeEnvironment_Lambda.res.mjs +169 -0
  173. package/src/adapter/Runtime/SideEffectEntryPoint.mjs +81 -0
  174. package/src/adapter/Runtime/SideEffectHandlerRuntime_Builder_Single.res +178 -0
  175. package/src/adapter/Runtime/SideEffectHandlerRuntime_Builder_Single.res.mjs +129 -0
  176. package/src/adapter/Runtime/StateChangeSliceRuntime_Builder_Single.res +166 -0
  177. package/src/adapter/Runtime/StateChangeSliceRuntime_Builder_Single.res.mjs +87 -0
  178. package/src/adapter/Runtime/StateViewSliceEntryPoint.mjs +136 -0
  179. package/src/adapter/Runtime/StateViewSliceRuntime_Builder_Single.res +344 -0
  180. package/src/adapter/Runtime/StateViewSliceRuntime_Builder_Single.res.mjs +242 -0
  181. package/src/adapter/Runtime/TaskBucketEntryPoint.mjs +150 -0
  182. package/src/adapter/Runtime/TaskRuntime_Builder_PerBucket.res +123 -0
  183. package/src/adapter/Runtime/TaskRuntime_Builder_PerBucket.res.mjs +74 -0
  184. package/src/adapter/ScheduledPublisher/ScheduledPublisher.res +2 -0
  185. package/src/adapter/ScheduledPublisher/ScheduledPublisher.res.mjs +12 -0
  186. package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents.res +54 -0
  187. package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents.res.mjs +41 -0
  188. package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents_Runtime.res +97 -0
  189. package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents_Runtime.res.mjs +85 -0
  190. package/src/adapter/StateTopic/StateTopic_AppSync.res +418 -0
  191. package/src/adapter/StateTopic/StateTopic_AppSync.res.mjs +295 -0
  192. package/src/adapter/Task/TaskBucket.res +1 -0
  193. package/src/adapter/Task/TaskBucket.res.mjs +9 -0
  194. package/src/adapter/Task/TaskBucket_S3.res +157 -0
  195. package/src/adapter/Task/TaskBucket_S3.res.mjs +108 -0
  196. package/src/adapter/Task/TaskBucket_S3_Runtime.res +11 -0
  197. package/src/adapter/Task/TaskBucket_S3_Runtime.res.mjs +15 -0
  198. package/src/components/Aggregate_Builder.res +1 -0
  199. package/src/components/Aggregate_Builder.res.mjs +25 -0
  200. package/src/components/Aggregate_Builder_Micro.res +63 -0
  201. package/src/components/Aggregate_Builder_Micro.res.mjs +80 -0
  202. package/src/components/Aggregate_Builder_NoResolver.res +61 -0
  203. package/src/components/Aggregate_Builder_NoResolver.res.mjs +80 -0
  204. package/src/components/Aggregate_Builder_PerAggregate.res +57 -0
  205. package/src/components/Aggregate_Builder_PerAggregate.res.mjs +80 -0
  206. package/src/components/Aggregate_Builder_Single.res +59 -0
  207. package/src/components/Aggregate_Builder_Single.res.mjs +80 -0
  208. package/src/components/Aggregate_Builder_Single_Async.res +59 -0
  209. package/src/components/Aggregate_Builder_Single_Async.res.mjs +80 -0
  210. package/src/components/Api/AppSync_Adapter.res +500 -0
  211. package/src/components/Api/AppSync_Adapter.res.mjs +396 -0
  212. package/src/components/AutomationSlice_Builder.res +52 -0
  213. package/src/components/AutomationSlice_Builder.res.mjs +72 -0
  214. package/src/components/AutomationSlice_Builder_Bundled.res.mjs +70 -0
  215. package/src/components/Counter_Builder.res +10 -0
  216. package/src/components/Counter_Builder.res.mjs +16 -0
  217. package/src/components/DataCleaner.res +170 -0
  218. package/src/components/DataCleaner.res.mjs +2 -0
  219. package/src/components/DcbEventLog_Builder.res +8 -0
  220. package/src/components/DcbEventLog_Builder.res.mjs +14 -0
  221. package/src/components/ExtensionPoint_Builder.res +16 -0
  222. package/src/components/ExtensionPoint_Builder.res.mjs +37 -0
  223. package/src/components/ForeignReadModel_Builder.res +19 -0
  224. package/src/components/ForeignReadModel_Builder.res.mjs +48 -0
  225. package/src/components/InboundTranslationSlice_Builder.res +25 -0
  226. package/src/components/InboundTranslationSlice_Builder.res.mjs +31 -0
  227. package/src/components/OutboundTranslationSlice_Builder.res +60 -0
  228. package/src/components/OutboundTranslationSlice_Builder.res.mjs +76 -0
  229. package/src/components/OutboundTranslationSlice_Builder_Bundled.res.mjs +75 -0
  230. package/src/components/Plugin.res +29 -0
  231. package/src/components/Plugin.res.mjs +63 -0
  232. package/src/components/ReadModel_Builder.res +1 -0
  233. package/src/components/ReadModel_Builder.res.mjs +19 -0
  234. package/src/components/ReadModel_Builder_NoResolver.res +55 -0
  235. package/src/components/ReadModel_Builder_NoResolver.res.mjs +64 -0
  236. package/src/components/ReadModel_Builder_NoResolver_Stream.res +60 -0
  237. package/src/components/ReadModel_Builder_NoResolver_Stream.res.mjs +64 -0
  238. package/src/components/ReadModel_Builder_PerReadModel.res +53 -0
  239. package/src/components/ReadModel_Builder_PerReadModel.res.mjs +66 -0
  240. package/src/components/ReadModel_Builder_Single.res +52 -0
  241. package/src/components/ReadModel_Builder_Single.res.mjs +66 -0
  242. package/src/components/ReadModel_Builder_Single_Stream.res +60 -0
  243. package/src/components/ReadModel_Builder_Single_Stream.res.mjs +66 -0
  244. package/src/components/Scheduler.res +1 -0
  245. package/src/components/Scheduler.res.mjs +13 -0
  246. package/src/components/SideEffectHandler.res +1 -0
  247. package/src/components/SideEffectHandler.res.mjs +19 -0
  248. package/src/components/SideEffectHandler_PerSideEffectHandler.res +13 -0
  249. package/src/components/SideEffectHandler_PerSideEffectHandler.res.mjs +52 -0
  250. package/src/components/SideEffectHandler_Single.res +54 -0
  251. package/src/components/SideEffectHandler_Single.res.mjs +60 -0
  252. package/src/components/StateChangeSlice_Builder.res +17 -0
  253. package/src/components/StateChangeSlice_Builder.res.mjs +23 -0
  254. package/src/components/StateViewSlice_Builder.res +46 -0
  255. package/src/components/StateViewSlice_Builder.res.mjs +68 -0
  256. package/src/components/StateViewSlice_Builder_Bundled.res.mjs +69 -0
  257. package/src/components/StateViewSlice_Builder_Stream.res +50 -0
  258. package/src/components/StateViewSlice_Builder_Stream.res.mjs +68 -0
  259. package/src/components/Task_Builder.res +1 -0
  260. package/src/components/Task_Builder.res.mjs +28 -0
  261. package/src/components/Task_Builder_PerBucket.res +22 -0
  262. package/src/components/Task_Builder_PerBucket.res.mjs +63 -0
  263. package/src/components/Vpc.res +214 -0
  264. package/src/components/Vpc.res.mjs +117 -0
  265. package/src/components/Vpc.resi +22 -0
  266. package/src/errors/AppSync_Error.res +36 -0
  267. package/src/errors/AppSync_Error.res.mjs +38 -0
  268. package/src/errors/Cognito_Error.res +36 -0
  269. package/src/errors/Cognito_Error.res.mjs +38 -0
  270. package/src/errors/DynamoDb_Error.res +75 -0
  271. package/src/errors/DynamoDb_Error.res.mjs +86 -0
  272. package/src/errors/Kinesis_Error.res +36 -0
  273. package/src/errors/Kinesis_Error.res.mjs +38 -0
  274. package/src/errors/SNS_Error.res +34 -0
  275. package/src/errors/SNS_Error.res.mjs +38 -0
  276. package/src/errors/SQS_Error.res +40 -0
  277. package/src/errors/SQS_Error.res.mjs +41 -0
  278. package/src/plugin/cloner/ClonerRunner.res +1 -0
  279. package/src/plugin/cloner/ClonerRunner.res.mjs +9 -0
  280. package/src/plugin/cloner/ClonerRunner_Fargate.res +362 -0
  281. package/src/plugin/cloner/ClonerRunner_Fargate.res.mjs +246 -0
  282. package/src/plugin/cloner/ClonerRunner_Fargate_Runtime.res +42 -0
  283. package/src/plugin/cloner/ClonerRunner_Fargate_Runtime.res.mjs +45 -0
  284. package/src/plugin/heartbeat/HeartbeatRunner.res +1 -0
  285. package/src/plugin/heartbeat/HeartbeatRunner.res.mjs +9 -0
  286. package/src/plugin/heartbeat/HeartbeatRunner_CloudWatchEvents.res +96 -0
  287. package/src/plugin/heartbeat/HeartbeatRunner_CloudWatchEvents.res.mjs +69 -0
  288. package/src/plugin/runtime/PluginExtensionPointRuntime_Builder.res +115 -0
  289. package/src/plugin/runtime/PluginExtensionPointRuntime_Builder.res.mjs +88 -0
  290. package/src/plugin/runtime/PluginRuntimeOperations.res +5 -0
  291. package/src/plugin/runtime/PluginRuntimeOperations.res.mjs +14 -0
  292. package/src/plugin/runtime/PluginRuntime_Builder.res +769 -0
  293. package/src/plugin/runtime/PluginRuntime_Builder.res.mjs +464 -0
  294. package/src/plugin/runtime/Util_PluginMessage_Runtime.res +13 -0
  295. package/src/plugin/runtime/Util_PluginMessage_Runtime.res.mjs +19 -0
  296. package/src/plugin/stack/Plugin_ExtensionPoint_Builder.res +28 -0
  297. package/src/plugin/stack/Plugin_ExtensionPoint_Builder.res.mjs +67 -0
  298. package/src/plugin/stack/Plugin_Stack.res +439 -0
  299. package/src/plugin/stack/Plugin_Stack.res.mjs +263 -0
  300. package/src/util/Util.res +29 -0
  301. package/src/util/Util.res.mjs +93 -0
  302. package/src/util/Util_AppSync.res +36 -0
  303. package/src/util/Util_AppSync.res.mjs +35 -0
  304. package/src/util/Util_AppSync_Caller.res +213 -0
  305. package/src/util/Util_AppSync_Caller.res.mjs +170 -0
  306. package/src/util/Util_Bundle.res +255 -0
  307. package/src/util/Util_Bundle.res.mjs +179 -0
  308. package/src/util/Util_Cloudwatch.res +14 -0
  309. package/src/util/Util_Cloudwatch.res.mjs +19 -0
  310. package/src/util/Util_CognitoGroupUser.res +39 -0
  311. package/src/util/Util_CognitoGroupUser.res.mjs +32 -0
  312. package/src/util/Util_CognitoGroupUser_Runtime.res +65 -0
  313. package/src/util/Util_CognitoGroupUser_Runtime.res.mjs +50 -0
  314. package/src/util/Util_Cognito_Runtime.res +52 -0
  315. package/src/util/Util_Cognito_Runtime.res.mjs +35 -0
  316. package/src/util/Util_DeadLetterQueue.res +154 -0
  317. package/src/util/Util_DeadLetterQueue.res.mjs +158 -0
  318. package/src/util/Util_DynamoDb.res +210 -0
  319. package/src/util/Util_DynamoDb.res.mjs +218 -0
  320. package/src/util/Util_DynamoDbStream.res +138 -0
  321. package/src/util/Util_DynamoDbStream.res.mjs +134 -0
  322. package/src/util/Util_DynamoDbStream_Runtime.res +94 -0
  323. package/src/util/Util_DynamoDbStream_Runtime.res.mjs +131 -0
  324. package/src/util/Util_DynamoDb_Runtime.res +216 -0
  325. package/src/util/Util_DynamoDb_Runtime.res.mjs +257 -0
  326. package/src/util/Util_DynamoDb_TableManager.res +23 -0
  327. package/src/util/Util_DynamoDb_TableManager.res.mjs +35 -0
  328. package/src/util/Util_DynamoDb_TableManager.resi +3 -0
  329. package/src/util/Util_Env.res +5 -0
  330. package/src/util/Util_Env.res.mjs +2 -0
  331. package/src/util/Util_EventSourceMapping.res +49 -0
  332. package/src/util/Util_EventSourceMapping.res.mjs +32 -0
  333. package/src/util/Util_HostUiDomain.res +28 -0
  334. package/src/util/Util_HostUiDomain.res.mjs +26 -0
  335. package/src/util/Util_IAM_Role.res +14 -0
  336. package/src/util/Util_IAM_Role.res.mjs +28 -0
  337. package/src/util/Util_Kinesis_Runtime.res +20 -0
  338. package/src/util/Util_Kinesis_Runtime.res.mjs +24 -0
  339. package/src/util/Util_Lambda.res +39 -0
  340. package/src/util/Util_Lambda.res.mjs +45 -0
  341. package/src/util/Util_LocalConfig.res +119 -0
  342. package/src/util/Util_LocalConfig.res.mjs +112 -0
  343. package/src/util/Util_ResourceNaming.res +15 -0
  344. package/src/util/Util_ResourceNaming.res.mjs +26 -0
  345. package/src/util/Util_S3.res +17 -0
  346. package/src/util/Util_S3.res.mjs +30 -0
  347. package/src/util/Util_S3_Runtime.res +11 -0
  348. package/src/util/Util_S3_Runtime.res.mjs +15 -0
  349. package/src/util/Util_SNS.res +33 -0
  350. package/src/util/Util_SNS.res.mjs +50 -0
  351. package/src/util/Util_SNS_FIFO.res +21 -0
  352. package/src/util/Util_SNS_FIFO.res.mjs +27 -0
  353. package/src/util/Util_SNS_Runtime.res +33 -0
  354. package/src/util/Util_SNS_Runtime.res.mjs +27 -0
  355. package/src/util/Util_SQS.res +70 -0
  356. package/src/util/Util_SQS.res.mjs +83 -0
  357. package/src/util/Util_SQS_FIFO.res +16 -0
  358. package/src/util/Util_SQS_FIFO.res.mjs +28 -0
  359. package/src/util/Util_SQS_Runtime.res +169 -0
  360. package/src/util/Util_SQS_Runtime.res.mjs +150 -0
  361. package/src/util/Util_SesPolicy_Runtime.res +54 -0
  362. package/src/util/Util_SesPolicy_Runtime.res.mjs +55 -0
  363. package/src/util/Util_StaticBundle.res +124 -0
  364. package/src/util/Util_StaticBundle.res.mjs +132 -0
  365. package/src/util/Util_Vpc.res +22 -0
  366. package/src/util/Util_Vpc.res.mjs +27 -0
  367. package/tests/AppSync_AdapterTest.res +396 -0
  368. package/tests/AppSync_AdapterTest.res.mjs +326 -0
  369. package/tests/AppSync_Resolver_RetryingTest.res +59 -0
  370. package/tests/AppSync_Resolver_RetryingTest.res.mjs +66 -0
  371. package/tests/Auth_CognitoTest.res +203 -0
  372. package/tests/Auth_CognitoTest.res.mjs +248 -0
  373. package/tests/DcbEventLogStorage_DynamoDb_RuntimeTest.res +602 -0
  374. package/tests/DcbEventLogStorage_DynamoDb_RuntimeTest.res.mjs +742 -0
  375. package/tests/EventLogStorage_DynamoDb_RuntimeTest.res +57 -0
  376. package/tests/EventLogStorage_DynamoDb_RuntimeTest.res.mjs +68 -0
  377. package/tests/MCP_LambdaTest.res +101 -0
  378. package/tests/MCP_LambdaTest.res.mjs +56 -0
  379. package/tests/Util_HostUiDomainTest.res +90 -0
  380. package/tests/Util_HostUiDomainTest.res.mjs +50 -0
  381. package/tests/Util_SQS_RuntimeTest.res +46 -0
  382. package/tests/Util_SQS_RuntimeTest.res.mjs +45 -0
  383. package/tests/Util_StaticBundleTest.res +136 -0
  384. package/tests/Util_StaticBundleTest.res.mjs +149 -0
  385. package/tests/integration/DcbCommandTopicEntryPoint_IntegrationTest.res +101 -0
  386. package/tests/integration/DcbCommandTopicEntryPoint_IntegrationTest.res.mjs +91 -0
  387. package/tests/integration/DcbEventLogStorage_DynamoDb_IntegrationTest.res +315 -0
  388. package/tests/integration/DcbEventLogStorage_DynamoDb_IntegrationTest.res.mjs +435 -0
  389. package/tests/integration/DcbIntegrationHarness.res +102 -0
  390. package/tests/integration/DcbIntegrationHarness.res.mjs +163 -0
  391. package/tests/integration/EpTestSlice.res +28 -0
  392. package/tests/integration/EpTestSlice.res.mjs +43 -0
  393. package/tests/integration/EpTestSliceBehavior.res +18 -0
  394. package/tests/integration/EpTestSliceBehavior.res.mjs +35 -0
@@ -0,0 +1,242 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Stdlib_Dict from "@rescript/runtime/lib/es6/Stdlib_Dict.js";
4
+ import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
5
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
6
+ import * as Pulumi from "@pulumi/pulumi";
7
+ import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
8
+ import * as Primitive_object from "@rescript/runtime/lib/es6/Primitive_object.js";
9
+ import * as Logger$ReventlessCore from "@reventlessdev/reventless-core/src/util/Logger.res.mjs";
10
+ import * as Component$ReventlessCore from "@reventlessdev/reventless-core/src/components/Component.res.mjs";
11
+ import * as Util_Bundle$ReventlessAws from "../../util/Util_Bundle.res.mjs";
12
+ import * as RuntimeEnvironment_Lambda$ReventlessAws from "./RuntimeEnvironment_Lambda.res.mjs";
13
+ import * as EventCollectorChannel_DynamoDbStream$ReventlessAws from "../EventCollector/EventCollectorChannel_DynamoDbStream.res.mjs";
14
+
15
+ let log = Logger$ReventlessCore.fromEnv();
16
+
17
+ function commonPrefix(strings) {
18
+ let first = strings[0];
19
+ if (first !== undefined) {
20
+ return Stdlib_Array.reduce(strings, first, (prefix, s) => {
21
+ let p = prefix;
22
+ while (p !== "" && !s.startsWith(p)) {
23
+ p = p.slice(0, p.length - 1 | 0);
24
+ };
25
+ return p;
26
+ });
27
+ } else {
28
+ return "";
29
+ }
30
+ }
31
+
32
+ let sliceInfos = {};
33
+
34
+ function registerStateViewSlice(name, specModulePath, projectionModulePath, queryDbTableName, queryDbResourcesOpt) {
35
+ let queryDbResources = queryDbResourcesOpt !== undefined ? queryDbResourcesOpt : [];
36
+ sliceInfos[name] = {
37
+ specModulePath: specModulePath,
38
+ projectionModulePath: projectionModulePath,
39
+ queryDbTableName: queryDbTableName,
40
+ queryDbResources: queryDbResources
41
+ };
42
+ }
43
+
44
+ let storedSpecs = [];
45
+
46
+ let grandParent = {
47
+ contents: undefined
48
+ };
49
+
50
+ function forEventCollector(param, eventTopics, resources, memorySizeOpt, timeoutOpt, eventCollector) {
51
+ let memorySize = memorySizeOpt !== undefined ? memorySizeOpt : 1024;
52
+ let timeout = timeoutOpt !== undefined ? timeoutOpt : 30;
53
+ let eventCollectorResource = Component$ReventlessCore.toPulumiResource(eventCollector);
54
+ let channel = eventCollector.channel;
55
+ let eventCollectorName = Stdlib_Option.getOr(eventCollectorResource.__name, "Unnamed");
56
+ let parentResource = eventCollectorResource.__parentResource;
57
+ if (parentResource === undefined) {
58
+ return Stdlib_JsError.throwWithMessage(`forEventCollector(single): eventCollector ` + eventCollectorName + ` has no parent`);
59
+ }
60
+ let parentName = Stdlib_Option.getOr(parentResource.__name, "Unnamed");
61
+ if (grandParent.contents === undefined) {
62
+ grandParent.contents = parentResource.__parentResource;
63
+ }
64
+ let sourceUrns = Pulumi.all(Component$ReventlessCore.outputs(eventCollector).resources.map(param => param.urn));
65
+ storedSpecs.push({
66
+ componentName: parentName,
67
+ parentResource: parentResource,
68
+ sourceUrns: sourceUrns,
69
+ channelSpec: {
70
+ channel: channel,
71
+ eventTopics: eventTopics,
72
+ resources: resources
73
+ },
74
+ memorySize: memorySize,
75
+ timeout: timeout
76
+ });
77
+ log.info("StateViewSliceRuntime_Builder_Single", undefined, `registered ` + eventCollectorName + ` for ` + parentName);
78
+ }
79
+
80
+ let finished = {
81
+ contents: false
82
+ };
83
+
84
+ function buildLambda(parent, handlerOutputs, packageDirs, channelSpecs, memorySizeOpt, timeoutOpt) {
85
+ let memorySize = memorySizeOpt !== undefined ? memorySizeOpt : 1024;
86
+ let timeout = timeoutOpt !== undefined ? timeoutOpt : 30;
87
+ let opts_parent = parent;
88
+ let opts = {
89
+ parent: opts_parent
90
+ };
91
+ let handlerConfigOutput = Pulumi.all(handlerOutputs).apply(handlers => {
92
+ let paths = [];
93
+ handlers.forEach(h => {
94
+ paths.push(h.specModule);
95
+ paths.push(h.projectionModule);
96
+ });
97
+ let base = commonPrefix(paths);
98
+ let baseLen = base.length;
99
+ let firstUrn = Stdlib_Option.map(handlers[0], h => h.sourceUrn);
100
+ let sharedUrn = handlers.every(h => Primitive_object.equal(h.sourceUrn, firstUrn)) ? Stdlib_Option.getOr(firstUrn, "") : "";
101
+ let entries = handlers.map(h => {
102
+ let s = Stdlib_Option.getOr(JSON.stringify(h.specModule.slice(baseLen, h.specModule.length)), `""`);
103
+ let p = Stdlib_Option.getOr(JSON.stringify(h.projectionModule.slice(baseLen, h.projectionModule.length)), `""`);
104
+ let q = Stdlib_Option.getOr(JSON.stringify(h.queryDbTableName), `""`);
105
+ if (sharedUrn !== "") {
106
+ return `{"s":` + s + `,"p":` + p + `,"q":` + q + `}`;
107
+ }
108
+ let u = Stdlib_Option.getOr(JSON.stringify(h.sourceUrn), `""`);
109
+ return `{"s":` + s + `,"p":` + p + `,"q":` + q + `,"u":` + u + `}`;
110
+ }).join(",");
111
+ let baseJson = Stdlib_Option.getOr(JSON.stringify(base), `""`);
112
+ let urnJson = Stdlib_Option.getOr(JSON.stringify(sharedUrn), `""`);
113
+ return `{"v":2,"base":` + baseJson + `,"sourceUrn":` + urnJson + `,"handlers":[` + entries + `]}`;
114
+ });
115
+ let envVars = {};
116
+ envVars["HANDLER_CONFIG"] = handlerConfigOutput;
117
+ packageDirs["@reventlessdev/reventless-aws"] = Util_Bundle$ReventlessAws.resolvePackageRoot("@reventlessdev/reventless-aws");
118
+ packageDirs["@reventlessdev/reventless-core"] = Util_Bundle$ReventlessAws.resolvePackageRoot("@reventlessdev/reventless-core");
119
+ let match = Util_Bundle$ReventlessAws.buildCodeArchive("@reventlessdev/reventless-aws/src/adapter/Runtime/StateViewSliceEntryPoint.mjs", packageDirs, undefined);
120
+ let runtime = RuntimeEnvironment_Lambda$ReventlessAws.makeFromCodeAsset("AllStateViewSlices", match.code, match.sourceCodeHash, envVars, memorySize, timeout, undefined, undefined, undefined, undefined, opts);
121
+ EventCollectorChannel_DynamoDbStream$ReventlessAws.connect("AllStateViewSlices", channelSpecs, runtime, opts);
122
+ }
123
+
124
+ function finishWithDcbEventLog(dcbEventLog) {
125
+ if (finished.contents) {
126
+ return;
127
+ }
128
+ let infoCount = Object.keys(sliceInfos).length;
129
+ if (infoCount > 0) {
130
+ let dcbResource = Component$ReventlessCore.toPulumiResource(dcbEventLog);
131
+ let parent = dcbResource.__parentResource;
132
+ if (parent !== undefined) {
133
+ let dcbOutputs = Component$ReventlessCore.outputs(dcbEventLog);
134
+ let eventTopics = Object.fromEntries([[
135
+ "DcbEventLog",
136
+ dcbOutputs.eventTopic
137
+ ]]);
138
+ let channel = EventCollectorChannel_DynamoDbStream$ReventlessAws.make("AllStateViewSlices", eventTopics, {
139
+ parent: parent
140
+ });
141
+ let handlerOutputs = [];
142
+ let packageDirs = {};
143
+ let allQueryDbResources = [];
144
+ Stdlib_Dict.forEachWithKey(sliceInfos, (info, _name) => {
145
+ info.queryDbResources.forEach(r => {
146
+ allQueryDbResources.push(r);
147
+ });
148
+ let specPkg = Util_Bundle$ReventlessAws.extractPackageName(info.specModulePath);
149
+ packageDirs[specPkg] = Util_Bundle$ReventlessAws.resolvePackageRoot(specPkg);
150
+ let projectionPkg = Util_Bundle$ReventlessAws.extractPackageName(info.projectionModulePath);
151
+ packageDirs[projectionPkg] = Util_Bundle$ReventlessAws.resolvePackageRoot(projectionPkg);
152
+ let etResources = dcbOutputs.eventTopic.resources;
153
+ let sourceUrn = etResources[0];
154
+ let sourceUrn$1 = sourceUrn.urn;
155
+ let handlerJson = Pulumi.all([
156
+ info.queryDbTableName,
157
+ sourceUrn$1
158
+ ]).apply(param => ({
159
+ specModule: info.specModulePath,
160
+ projectionModule: info.projectionModulePath,
161
+ queryDbTableName: param[0],
162
+ sourceUrn: param[1]
163
+ }));
164
+ handlerOutputs.push(handlerJson);
165
+ });
166
+ buildLambda(parent, handlerOutputs, packageDirs, [{
167
+ channel: channel,
168
+ eventTopics: eventTopics,
169
+ resources: allQueryDbResources
170
+ }], undefined, undefined);
171
+ } else {
172
+ log.warn("StateViewSliceRuntime_Builder_Single", undefined, "finishWithDcbEventLog: DCB EventLog has no parent");
173
+ }
174
+ }
175
+ finished.contents = true;
176
+ }
177
+
178
+ function finish() {
179
+ if (finished.contents) {
180
+ return;
181
+ }
182
+ log.info("StateViewSliceRuntime_Builder_Single", undefined, `finish: ` + storedSpecs.length.toString() + ` storedSpecs, ` + Object.keys(sliceInfos).length.toString() + ` sliceInfos, grandParent=` + Stdlib_Option.getOr(Stdlib_Option.map(grandParent.contents, param => "Some"), "None"));
183
+ if (storedSpecs.length !== 0) {
184
+ let match = Stdlib_Array.reduce(storedSpecs, [
185
+ 0,
186
+ 0
187
+ ], (param, param$1) => [
188
+ Math.max(param[0], param$1.memorySize),
189
+ Math.max(param[1], param$1.timeout)
190
+ ]);
191
+ let parent = grandParent.contents;
192
+ if (parent !== undefined) {
193
+ let handlerOutputs = [];
194
+ let packageDirs = {};
195
+ storedSpecs.forEach(spec => {
196
+ let info = sliceInfos[spec.componentName];
197
+ if (info === undefined) {
198
+ return log.warn("StateViewSliceRuntime_Builder_Single", undefined, `no handler registered for ` + spec.componentName);
199
+ }
200
+ let specPkg = Util_Bundle$ReventlessAws.extractPackageName(info.specModulePath);
201
+ packageDirs[specPkg] = Util_Bundle$ReventlessAws.resolvePackageRoot(specPkg);
202
+ let projectionPkg = Util_Bundle$ReventlessAws.extractPackageName(info.projectionModulePath);
203
+ packageDirs[projectionPkg] = Util_Bundle$ReventlessAws.resolvePackageRoot(projectionPkg);
204
+ let handlerJson = Pulumi.all([
205
+ info.queryDbTableName,
206
+ spec.sourceUrns
207
+ ]).apply(param => ({
208
+ specModule: info.specModulePath,
209
+ projectionModule: info.projectionModulePath,
210
+ queryDbTableName: param[0],
211
+ sourceUrn: param[1][0]
212
+ }));
213
+ handlerOutputs.push(handlerJson);
214
+ });
215
+ buildLambda(parent, handlerOutputs, packageDirs, storedSpecs.map(param => param.channelSpec), match[0], match[1]);
216
+ } else {
217
+ log.warn("StateViewSliceRuntime_Builder_Single", undefined, `finish: grandParent not set`);
218
+ }
219
+ }
220
+ finished.contents = true;
221
+ }
222
+
223
+ let EventCollectorChannel;
224
+
225
+ let RuntimeEnvironment;
226
+
227
+ export {
228
+ EventCollectorChannel,
229
+ RuntimeEnvironment,
230
+ log,
231
+ commonPrefix,
232
+ sliceInfos,
233
+ registerStateViewSlice,
234
+ storedSpecs,
235
+ grandParent,
236
+ forEventCollector,
237
+ finished,
238
+ buildLambda,
239
+ finishWithDcbEventLog,
240
+ finish,
241
+ }
242
+ /* log Not a pure module */
@@ -0,0 +1,150 @@
1
+ // TaskBucket Lambda entry point.
2
+ // At cold start: reads HANDLER_CONFIG, dynamically imports callback module,
3
+ // wires TaskBucket_S3_Runtime.handleBucketEvent, dispatches task actions to SQS.
4
+
5
+ import { makeQueueRef, log } from "./HandlerFactoryHelpers.mjs";
6
+ import { handleBucketEvent } from "@reventlessdev/reventless-aws/src/adapter/Task/TaskBucket_S3_Runtime.res.mjs";
7
+ import { publishJsons as sqsPublishJsons } from "@reventlessdev/reventless-aws/src/adapter/CommandTopic/CommandTopicChannel_SQS_Runtime.res.mjs";
8
+ import {
9
+ CloudWatchEventsClient,
10
+ PutRuleCommand,
11
+ PutTargetsCommand,
12
+ RemoveTargetsCommand,
13
+ DeleteRuleCommand,
14
+ } from "@aws-sdk/client-cloudwatch-events";
15
+
16
+ const dynamicImport = (specifier) => import('/var/task/node_modules/' + specifier);
17
+
18
+ // Mirrors ScheduledPublisher_CloudWatchEvents_Runtime.toScheduleExpression — kept
19
+ // in sync manually because that runtime helper isn't bundled in this Lambda.
20
+ function toScheduleExpression(rate) {
21
+ // rate is a serialized variant from Reventless.Schedule.rate
22
+ switch (rate.TAG) {
23
+ case "Single": {
24
+ const [year, month, day, hour, minute] = [rate._0, rate._1, rate._2, rate._3, rate._4];
25
+ return `cron(${minute} ${hour} ${day} ${month} ? ${year})`;
26
+ }
27
+ case "Minutes": {
28
+ const n = rate._0;
29
+ return `rate(${n} minute${n === 1 ? "" : "s"})`;
30
+ }
31
+ case "Hours": {
32
+ const n = rate._0;
33
+ return `rate(${n} hour${n === 1 ? "" : "s"})`;
34
+ }
35
+ case "Days": {
36
+ const n = rate._0;
37
+ return `rate(${n} day${n === 1 ? "" : "s"})`;
38
+ }
39
+ case "Daily":
40
+ return `cron(${rate._1} ${rate._0} * * * *)`;
41
+ case "Weekdays":
42
+ return `cron(${rate._1} ${rate._0} ? * MON-FRI *)`;
43
+ case "WeekdaysAndSaturday":
44
+ return `cron(${rate._1} ${rate._0} ? * MON-SAT *)`;
45
+ default:
46
+ throw new Error(`TaskBucketEntryPoint: unknown schedule rate ${JSON.stringify(rate)}`);
47
+ }
48
+ }
49
+
50
+ let cachedScheduler = null;
51
+ function makeSchedulerOps(schedulerCfg) {
52
+ if (!schedulerCfg) return null;
53
+ if (cachedScheduler) return cachedScheduler;
54
+ const roleArn = process.env[schedulerCfg.roleArnEnv];
55
+ const targetArn = process.env[schedulerCfg.targetArnEnv];
56
+ const targetName = process.env[schedulerCfg.targetNameEnv];
57
+ if (!roleArn || !targetArn || !targetName) {
58
+ log.warn("scheduler env vars missing — schedules will no-op", { comp: "TaskBucketRuntime" });
59
+ return null;
60
+ }
61
+ const client = new CloudWatchEventsClient({});
62
+ cachedScheduler = {
63
+ createSchedule: async (schedule) => {
64
+ await client.send(new PutRuleCommand({
65
+ Name: schedule.name,
66
+ ScheduleExpression: toScheduleExpression(schedule.rate),
67
+ RoleArn: roleArn,
68
+ State: "ENABLED",
69
+ }));
70
+ await client.send(new PutTargetsCommand({
71
+ Rule: schedule.name,
72
+ Targets: [{ Arn: targetArn, Id: targetName, Input: schedule.payload }],
73
+ }));
74
+ },
75
+ deleteSchedule: async (name) => {
76
+ await client.send(new RemoveTargetsCommand({ Rule: name, Ids: [targetName] }));
77
+ await client.send(new DeleteRuleCommand({ Name: name }));
78
+ },
79
+ };
80
+ return cachedScheduler;
81
+ }
82
+
83
+ async function buildHandler() {
84
+ const configStr = process.env["HANDLER_CONFIG"] || "{}";
85
+ const config = JSON.parse(configStr);
86
+
87
+ const callbackModule = await dynamicImport(config.callbackModule);
88
+ const bucketCallback = callbackModule.callback;
89
+ const handleEvents = handleBucketEvent(bucketCallback);
90
+
91
+ // Build publishCommands dict from env var queue URLs. The deploy-side builder
92
+ // writes HANDLER_CONFIG.publishToAggregates as { aggregateName: envVarName }
93
+ // (see TaskRuntime_Builder_PerBucket.res), so iterate accordingly.
94
+ const publishCommandsFns = {};
95
+ for (const [aggName, envVarName] of Object.entries(config.publishToAggregates || {})) {
96
+ const queueUrl = process.env[envVarName] || "";
97
+ if (queueUrl !== "") {
98
+ publishCommandsFns[aggName] = sqsPublishJsons(makeQueueRef(queueUrl), "SQS_FIFO");
99
+ }
100
+ }
101
+
102
+ return async (event, _context) => {
103
+ const taskActions = await handleEvents(event, _context);
104
+
105
+ await Promise.all(taskActions.map(async action => {
106
+ switch (action.TAG) {
107
+ case "PublishCommands": {
108
+ const aggregateName = action._0;
109
+ const cmdJsons = action._1;
110
+ const pub = publishCommandsFns[aggregateName];
111
+ if (pub !== undefined) {
112
+ await pub(cmdJsons);
113
+ } else {
114
+ log.warn(`no publish function for aggregate "${aggregateName}"`, { comp: "TaskBucketRuntime" });
115
+ }
116
+ break;
117
+ }
118
+ case "CreateSchedule": {
119
+ const ops = makeSchedulerOps(config.scheduler);
120
+ if (ops) {
121
+ await ops.createSchedule(action._0);
122
+ } else {
123
+ log.warn("CreateSchedule skipped — no scheduler configured for this Task (add sideEffects to setup)", { comp: "TaskBucketRuntime" });
124
+ }
125
+ break;
126
+ }
127
+ case "DeleteSchedule": {
128
+ const ops = makeSchedulerOps(config.scheduler);
129
+ if (ops) {
130
+ await ops.deleteSchedule(action._0);
131
+ } else {
132
+ log.warn("DeleteSchedule skipped — no scheduler configured for this Task (add sideEffects to setup)", { comp: "TaskBucketRuntime" });
133
+ }
134
+ break;
135
+ }
136
+ default:
137
+ log.warn(`unknown task action TAG ${action.TAG}`, { comp: "TaskBucketRuntime" });
138
+ }
139
+ }));
140
+
141
+ return "";
142
+ };
143
+ }
144
+
145
+ const initPromise = buildHandler();
146
+
147
+ export async function handler(event, context) {
148
+ const s3Handler = await initPromise;
149
+ return await s3Handler(event, context);
150
+ }
@@ -0,0 +1,123 @@
1
+ module RuntimeEnvironment = RuntimeEnvironment.Lambda
2
+ module TaskBucket = TaskBucket.S3
3
+
4
+ type context = PulumiAws.Lambda.context
5
+ type callbackEvent = TaskBucket.callbackEvent
6
+ type runtimeParts = Util.Lambda.runtimeParts
7
+
8
+ let forBucketCallback = (
9
+ ~handler as _,
10
+ ~connect,
11
+ ~memorySize=4096,
12
+ ~timeout=600,
13
+ ~name,
14
+ ~callbackModulePath,
15
+ ~publishToAggregatesQueueUrls,
16
+ ~schedulerConfig: option<ReventlessCore.TaskRuntime_Builder.schedulerConfig>,
17
+ task: ReventlessCore.Task.component,
18
+ ) => {
19
+ let resource = task->ReventlessCore.Component.toPulumiResource
20
+ // `name` is the PascalCase bucket stem (empty for the default bucket); the
21
+ // SideEffectHandler Lambda for this task bucket reads `<Task><Bucket>SideEffectHandler`.
22
+ let fullName = resource.name->Option.getOr("UnnamedTask") ++ name ++ "SideEffectHandler"
23
+
24
+ let envVars: dict<Pulumi.Input.t<string>> = Dict.make()
25
+
26
+ // Build publishToAggregates env var mapping.
27
+ // Task Lambdas use PUBLISH_<Agg>_QUEUE_URL; Extension Point Lambdas use PTA_<Agg>_QUEUE_URL.
28
+ // The prefix difference is intentional — they are distinct feature areas with separate builders.
29
+ // Each entry point reads whichever prefix its own builder writes, so the two sets never clash.
30
+ let publishToAggregatesEnvVars: dict<string> = Dict.make()
31
+ publishToAggregatesQueueUrls->Dict.forEachWithKey((queueUrlOutput, aggName) => {
32
+ let envVar = `PUBLISH_${aggName}_QUEUE_URL`
33
+ envVars->Dict.set(envVar, queueUrlOutput->Pulumi.Output.asInput)
34
+ publishToAggregatesEnvVars->Dict.set(aggName, envVar)
35
+ })
36
+
37
+ // Build HANDLER_CONFIG JSON
38
+ let callbackModule =
39
+ callbackModulePath->JSON.stringifyAny->Option.getOr(`""`)
40
+ let publishToAggregatesJson =
41
+ publishToAggregatesEnvVars
42
+ ->Dict.toArray
43
+ ->Array.map(((aggName, envVar)) =>
44
+ `${aggName->JSON.stringifyAny->Option.getOr(`""`)}: ${envVar->JSON.stringifyAny->Option.getOr(`""`)}`
45
+ )
46
+ ->Array.join(",")
47
+
48
+ // Encode scheduler config (CloudWatch Events role + side-effect target queue)
49
+ // into HANDLER_CONFIG so the bundled Lambda can call PutRule/PutTargets at
50
+ // runtime. None for tasks without a side-effect handler.
51
+ let handlerConfigJson = switch schedulerConfig {
52
+ | None =>
53
+ `{"callbackModule":${callbackModule},"publishToAggregates":{${publishToAggregatesJson}}}`
54
+ ->Pulumi.Output.make
55
+ | Some({schedulerRoleUrn, targetUrn, targetName}) =>
56
+ envVars->Dict.set("SCHEDULER_ROLE_ARN", schedulerRoleUrn->Pulumi.Output.asInput)
57
+ envVars->Dict.set("SCHEDULER_TARGET_ARN", targetUrn->Pulumi.Output.asInput)
58
+ envVars->Dict.set("SCHEDULER_TARGET_NAME", targetName->Pulumi.Output.asInput)
59
+ `{"callbackModule":${callbackModule},"publishToAggregates":{${publishToAggregatesJson}},"scheduler":{"roleArnEnv":"SCHEDULER_ROLE_ARN","targetArnEnv":"SCHEDULER_TARGET_ARN","targetNameEnv":"SCHEDULER_TARGET_NAME"}}`
60
+ ->Pulumi.Output.make
61
+ }
62
+ envVars->Dict.set("HANDLER_CONFIG", handlerConfigJson->Pulumi.Output.asInput)
63
+
64
+ // Build code asset
65
+ let packageDirs: dict<string> = Dict.make()
66
+ let pkg = Util_Bundle.extractPackageName(callbackModulePath)
67
+ packageDirs->Dict.set(pkg, Util_Bundle.resolvePackageRoot(pkg))
68
+
69
+ let {code, sourceCodeHash} = Util_Bundle.buildCodeArchive(
70
+ ~entryPointModule="@reventlessdev/reventless-aws/src/adapter/Runtime/TaskBucketEntryPoint.mjs",
71
+ ~packageDirs,
72
+ )
73
+
74
+ let runtime = RuntimeEnvironment_Lambda.makeFromCodeAsset(
75
+ ~name=fullName,
76
+ ~code,
77
+ ~sourceCodeHash,
78
+ ~envVars,
79
+ ~memorySize,
80
+ ~timeout,
81
+ ~opts={Pulumi.ComponentResource.parent: resource},
82
+ )
83
+
84
+ // Grant the Task Lambda role permission to manage CloudWatch Events rules
85
+ // and pass the scheduler role to events. Only needed when a schedulerConfig
86
+ // is present (Tasks with side effects).
87
+ switch schedulerConfig {
88
+ | None => ()
89
+ | Some({schedulerRoleUrn}) =>
90
+ let lambdaRole = runtime.parts.lambdaRole
91
+ let _ = schedulerRoleUrn->Pulumi.Output.apply(arn => {
92
+ let _ = PulumiAws.IAM.RolePolicy.make(
93
+ ~name=`${fullName}SchedulerPolicy`,
94
+ ~args={
95
+ policy: PulumiAws.PolicyDocument.make(
96
+ ~id=`${fullName}SchedulerPolicy`,
97
+ ~statements=[
98
+ {
99
+ sid: "AllowCloudWatchEvents",
100
+ effect: Allow,
101
+ actions: Action("events:*"),
102
+ resources: AllResources,
103
+ },
104
+ {
105
+ sid: "AllowPassSchedulerRole",
106
+ effect: Allow,
107
+ actions: Action("iam:PassRole"),
108
+ resources: Resource(arn),
109
+ },
110
+ ],
111
+ )
112
+ ->PulumiAws.PolicyDocument.toJsonString
113
+ ->Pulumi.Input.make,
114
+ role: lambdaRole.id->Pulumi.Output.asInput,
115
+ },
116
+ )
117
+ })
118
+ }
119
+
120
+ connect(~runtime)
121
+ }
122
+
123
+ let finish = () => ()
@@ -0,0 +1,74 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Aws from "@pulumi/aws";
4
+ import * as Stdlib_Dict from "@rescript/runtime/lib/es6/Stdlib_Dict.js";
5
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
6
+ import * as Pulumi from "@pulumi/pulumi";
7
+ import * as Component$ReventlessCore from "@reventlessdev/reventless-core/src/components/Component.res.mjs";
8
+ import * as PolicyDocument$PulumiAws from "@reventlessdev/rescript-pulumi-aws/src/IAM/PolicyDocument.res.mjs";
9
+ import * as Util_Bundle$ReventlessAws from "../../util/Util_Bundle.res.mjs";
10
+ import * as RuntimeEnvironment_Lambda$ReventlessAws from "./RuntimeEnvironment_Lambda.res.mjs";
11
+
12
+ function forBucketCallback(param, connect, memorySizeOpt, timeoutOpt, name, callbackModulePath, publishToAggregatesQueueUrls, schedulerConfig, task) {
13
+ let memorySize = memorySizeOpt !== undefined ? memorySizeOpt : 4096;
14
+ let timeout = timeoutOpt !== undefined ? timeoutOpt : 600;
15
+ let resource = Component$ReventlessCore.toPulumiResource(task);
16
+ let fullName = Stdlib_Option.getOr(resource.__name, "UnnamedTask") + name + "SideEffectHandler";
17
+ let envVars = {};
18
+ let publishToAggregatesEnvVars = {};
19
+ Stdlib_Dict.forEachWithKey(publishToAggregatesQueueUrls, (queueUrlOutput, aggName) => {
20
+ let envVar = `PUBLISH_` + aggName + `_QUEUE_URL`;
21
+ envVars[envVar] = queueUrlOutput;
22
+ publishToAggregatesEnvVars[aggName] = envVar;
23
+ });
24
+ let callbackModule = Stdlib_Option.getOr(JSON.stringify(callbackModulePath), `""`);
25
+ let publishToAggregatesJson = Object.entries(publishToAggregatesEnvVars).map(param => Stdlib_Option.getOr(JSON.stringify(param[0]), `""`) + `: ` + Stdlib_Option.getOr(JSON.stringify(param[1]), `""`)).join(",");
26
+ let handlerConfigJson = schedulerConfig !== undefined ? (envVars["SCHEDULER_ROLE_ARN"] = schedulerConfig.schedulerRoleUrn, envVars["SCHEDULER_TARGET_ARN"] = schedulerConfig.targetUrn, envVars["SCHEDULER_TARGET_NAME"] = schedulerConfig.targetName, Pulumi.output(`{"callbackModule":` + callbackModule + `,"publishToAggregates":{` + publishToAggregatesJson + `},"scheduler":{"roleArnEnv":"SCHEDULER_ROLE_ARN","targetArnEnv":"SCHEDULER_TARGET_ARN","targetNameEnv":"SCHEDULER_TARGET_NAME"}}`)) : Pulumi.output(`{"callbackModule":` + callbackModule + `,"publishToAggregates":{` + publishToAggregatesJson + `}}`);
27
+ envVars["HANDLER_CONFIG"] = handlerConfigJson;
28
+ let packageDirs = {};
29
+ let pkg = Util_Bundle$ReventlessAws.extractPackageName(callbackModulePath);
30
+ packageDirs[pkg] = Util_Bundle$ReventlessAws.resolvePackageRoot(pkg);
31
+ let match = Util_Bundle$ReventlessAws.buildCodeArchive("@reventlessdev/reventless-aws/src/adapter/Runtime/TaskBucketEntryPoint.mjs", packageDirs, undefined);
32
+ let runtime = RuntimeEnvironment_Lambda$ReventlessAws.makeFromCodeAsset(fullName, match.code, match.sourceCodeHash, envVars, memorySize, timeout, undefined, undefined, undefined, undefined, {
33
+ parent: resource
34
+ });
35
+ if (schedulerConfig !== undefined) {
36
+ let lambdaRole = runtime.parts.lambdaRole;
37
+ schedulerConfig.schedulerRoleUrn.apply(arn => {
38
+ new (Aws.iam.RolePolicy)(fullName + `SchedulerPolicy`, {
39
+ policy: PolicyDocument$PulumiAws.toJsonString(PolicyDocument$PulumiAws.make(undefined, fullName + `SchedulerPolicy`, [
40
+ {
41
+ Sid: "AllowCloudWatchEvents",
42
+ Effect: "Allow",
43
+ Action: "events:*",
44
+ Resource: "*"
45
+ },
46
+ {
47
+ Sid: "AllowPassSchedulerRole",
48
+ Effect: "Allow",
49
+ Action: "iam:PassRole",
50
+ Resource: arn
51
+ }
52
+ ])),
53
+ role: lambdaRole.id
54
+ });
55
+ });
56
+ }
57
+ return connect(runtime);
58
+ }
59
+
60
+ function finish() {
61
+
62
+ }
63
+
64
+ let RuntimeEnvironment;
65
+
66
+ let TaskBucket;
67
+
68
+ export {
69
+ RuntimeEnvironment,
70
+ TaskBucket,
71
+ forBucketCallback,
72
+ finish,
73
+ }
74
+ /* @pulumi/aws Not a pure module */
@@ -0,0 +1,2 @@
1
+ module CloudWatchEvents = ScheduledPublisher_CloudWatchEvents
2
+ module CloudWatchEvents_Runtime = ScheduledPublisher_CloudWatchEvents_Runtime
@@ -0,0 +1,12 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+
4
+ let CloudWatchEvents;
5
+
6
+ let CloudWatchEvents_Runtime;
7
+
8
+ export {
9
+ CloudWatchEvents,
10
+ CloudWatchEvents_Runtime,
11
+ }
12
+ /* No side effect */
@@ -0,0 +1,54 @@
1
+ let make: ReventlessCore.Scheduler_Adapter.scheduledPublisherMaker = (~name, ~opts) => {
2
+ let role = PulumiAws.IAM.Role.makeWithDefaultPolicy(
3
+ ~name="CloudWatchEventsRole",
4
+ ~servicePrincipal=AWS.CloudwatchEventRule.principal->Pulumi.Output.make,
5
+ ~opts,
6
+ )
7
+
8
+ let _policy = PulumiAws.IAM.Policy.make(
9
+ ~name=name ++ "CloudWatchEventsPolicy",
10
+ ~args={
11
+ PulumiAws.IAM.Policy.policy: role.arn
12
+ ->Pulumi.Output.apply(roleArn => {
13
+ open PulumiAws.PolicyDocument
14
+ PulumiAws.PolicyDocument.make(
15
+ ~id=name ++ "CloudWatchEventsPolicy",
16
+ ~statements=[
17
+ {
18
+ sid: "AllowCloudWatchEvents",
19
+ effect: Allow,
20
+ actions: Action("events:*"),
21
+ resources: AllResources,
22
+ },
23
+ {
24
+ sid: "AllowPassRole",
25
+ effect: Allow,
26
+ actions: Action("iam:PassRole"),
27
+ resources: Resource(`${roleArn}`),
28
+ },
29
+ ],
30
+ )->toJsonString
31
+ })
32
+ ->Pulumi.Output.asInput,
33
+ },
34
+ ~opts,
35
+ )
36
+
37
+ {
38
+ resource: ReventlessInfra.Adapter.make(
39
+ // urn carries the CloudWatch Events role ARN — bundled Lambdas read it
40
+ // via Scheduler.outputs.resource.urn to call PutRule with the right roleArn.
41
+ ~name=role.name,
42
+ ~id=role.id,
43
+ ~urn=role.arn,
44
+ ~service="CloudWatchEvents"->Pulumi.Output.make,
45
+ ~resourceType="aws:cloudwatch:EventRule"->Pulumi.Output.make,
46
+ ),
47
+ operations: role.arn->Pulumi.Output.apply(roleArn => (
48
+ {
49
+ createSchedule: ScheduledPublisher_CloudWatchEvents_Runtime.createSchedule(~roleArn),
50
+ deleteSchedule: ScheduledPublisher_CloudWatchEvents_Runtime.deleteSchedule,
51
+ }: ReventlessInfra.Scheduler.operations
52
+ )),
53
+ }
54
+ }