@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,122 @@
1
+ module EventCollectorChannel = EventCollectorChannel.DynamoDbStream
2
+ module RuntimeEnvironment = RuntimeEnvironment.Lambda
3
+
4
+ let log = ReventlessCore.Logger.fromEnv()
5
+
6
+ type context = PulumiAws.Lambda.context
7
+ type runtimeParts = Util.Lambda.runtimeParts
8
+
9
+ type readModelInfo = {
10
+ specModulePath: string,
11
+ mappingsModulePath: string,
12
+ queryDbTableName: Pulumi.Output.t<string>,
13
+ }
14
+
15
+ let readModelInfos: dict<readModelInfo> = Dict.make()
16
+
17
+ let registerReadModel = (
18
+ ~readModelName,
19
+ ~specModulePath,
20
+ ~mappingsModulePath,
21
+ ~queryDbTableName,
22
+ ) =>
23
+ readModelInfos->Dict.set(
24
+ readModelName,
25
+ {specModulePath, mappingsModulePath, queryDbTableName},
26
+ )
27
+
28
+ let forEventCollector: ReventlessCore.Runtime.forEventCollector<
29
+ ReventlessCore.Runtime.effectHandler<
30
+ EventCollectorChannel.callbackEvent,
31
+ context,
32
+ unit,
33
+ string,
34
+ >,
35
+ ReventlessCore.EventCollector.component,
36
+ > = (
37
+ ~handler as _,
38
+ ~eventTopics,
39
+ ~resources,
40
+ ~memorySize=1024,
41
+ ~timeout=30,
42
+ eventCollector,
43
+ ) => {
44
+ let eventCollectorResource = eventCollector->ReventlessCore.Component.toPulumiResource
45
+ let channel = eventCollector->ReventlessCore.EventCollector_Adapter.channel
46
+ let eventCollectorName = eventCollectorResource.name->Option.getOr("Unnamed")
47
+
48
+ switch eventCollectorResource.parent {
49
+ | Some(parentResource) =>
50
+ let parentName = parentResource.name->Option.getOr("Unnamed")
51
+
52
+ switch readModelInfos->Dict.get(parentName) {
53
+ | Some(info) =>
54
+ let sourceUrns =
55
+ (eventCollector->ReventlessCore.Component.outputs).resources
56
+ ->Array.map(({urn}) => urn)
57
+ ->Pulumi.Output.all
58
+
59
+ let name = eventCollectorResource.name->ReventlessCore.ComponentType.nameOpt(
60
+ ReventlessCore.EventCollector.componentType,
61
+ )
62
+ let opts = {Pulumi.ComponentResource.parent: eventCollectorResource}
63
+
64
+ // Build HANDLER_CONFIG with single handler
65
+ let specModule =
66
+ info.specModulePath->JSON.stringifyAny->Option.getOr(`""`)
67
+ let mappingsModule =
68
+ info.mappingsModulePath->JSON.stringifyAny->Option.getOr(`""`)
69
+
70
+ let handlerConfigOutput =
71
+ Pulumi.Output.all2((info.queryDbTableName, sourceUrns))
72
+ ->Pulumi.Output.apply(((tableName, urns)) => {
73
+ let sourceUrn = urns->Array.getUnsafe(0)
74
+ `{"handlers":[{"specModule":${specModule},"mappingsModule":${mappingsModule},"queryDbTableName":"${tableName}","sourceUrn":"${sourceUrn}"}]}`
75
+ })
76
+
77
+ let envVars: dict<Pulumi.Input.t<string>> = Dict.make()
78
+ envVars->Dict.set("HANDLER_CONFIG", handlerConfigOutput->Pulumi.Output.asInput)
79
+
80
+ // Collect user packages
81
+ let packageDirs: dict<string> = Dict.make()
82
+ let specPkg = Util_Bundle.extractPackageName(info.specModulePath)
83
+ let mappingsPkg = Util_Bundle.extractPackageName(info.mappingsModulePath)
84
+ packageDirs->Dict.set(specPkg, Util_Bundle.resolvePackageRoot(specPkg))
85
+ packageDirs->Dict.set(mappingsPkg, Util_Bundle.resolvePackageRoot(mappingsPkg))
86
+
87
+ // Build AssetArchive: static re-export + user packages
88
+ let {code, sourceCodeHash} = Util_Bundle.buildCodeArchive(
89
+ ~entryPointModule="@reventlessdev/reventless-aws/src/adapter/Runtime/ReadModelEntryPoint.mjs",
90
+ ~packageDirs,
91
+ )
92
+
93
+ let runtime = RuntimeEnvironment_Lambda.makeFromCodeAsset(
94
+ ~name,
95
+ ~code,
96
+ ~sourceCodeHash,
97
+ ~envVars,
98
+ ~memorySize,
99
+ ~timeout,
100
+ ~opts,
101
+ )
102
+
103
+ let _connectResources = EventCollectorChannel.connect(
104
+ ~name,
105
+ ~channelSpecs=[{channel, eventTopics, resources}],
106
+ ~runtime,
107
+ ~opts,
108
+ )
109
+ | None =>
110
+ log.warn(
111
+ ~comp="EventCollectorRuntime_Builder_PerEventCollector",
112
+ `no bundled info registered for ${parentName}`,
113
+ )
114
+ }
115
+ | None =>
116
+ JsError.throwWithMessage(
117
+ `forEventCollector(bundled): eventCollector ${eventCollectorName} has no parent`,
118
+ )
119
+ }
120
+ }
121
+
122
+ let finish = () => ()
@@ -0,0 +1,89 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
4
+ import * as Pulumi from "@pulumi/pulumi";
5
+ import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
6
+ import * as Logger$ReventlessCore from "@reventlessdev/reventless-core/src/util/Logger.res.mjs";
7
+ import * as Component$ReventlessCore from "@reventlessdev/reventless-core/src/components/Component.res.mjs";
8
+ import * as Util_Bundle$ReventlessAws from "../../util/Util_Bundle.res.mjs";
9
+ import * as ComponentType$ReventlessCore from "@reventlessdev/reventless-core/src/ComponentType.res.mjs";
10
+ import * as EventCollector$ReventlessCore from "@reventlessdev/reventless-core/src/components/EventCollector/EventCollector.res.mjs";
11
+ import * as RuntimeEnvironment_Lambda$ReventlessAws from "./RuntimeEnvironment_Lambda.res.mjs";
12
+ import * as EventCollectorChannel_DynamoDbStream$ReventlessAws from "../EventCollector/EventCollectorChannel_DynamoDbStream.res.mjs";
13
+
14
+ let log = Logger$ReventlessCore.fromEnv();
15
+
16
+ let readModelInfos = {};
17
+
18
+ function registerReadModel(readModelName, specModulePath, mappingsModulePath, queryDbTableName) {
19
+ readModelInfos[readModelName] = {
20
+ specModulePath: specModulePath,
21
+ mappingsModulePath: mappingsModulePath,
22
+ queryDbTableName: queryDbTableName
23
+ };
24
+ }
25
+
26
+ function forEventCollector(param, eventTopics, resources, memorySizeOpt, timeoutOpt, eventCollector) {
27
+ let memorySize = memorySizeOpt !== undefined ? memorySizeOpt : 1024;
28
+ let timeout = timeoutOpt !== undefined ? timeoutOpt : 30;
29
+ let eventCollectorResource = Component$ReventlessCore.toPulumiResource(eventCollector);
30
+ let channel = eventCollector.channel;
31
+ let eventCollectorName = Stdlib_Option.getOr(eventCollectorResource.__name, "Unnamed");
32
+ let parentResource = eventCollectorResource.__parentResource;
33
+ if (parentResource === undefined) {
34
+ return Stdlib_JsError.throwWithMessage(`forEventCollector(bundled): eventCollector ` + eventCollectorName + ` has no parent`);
35
+ }
36
+ let parentName = Stdlib_Option.getOr(parentResource.__name, "Unnamed");
37
+ let info = readModelInfos[parentName];
38
+ if (info === undefined) {
39
+ return log.warn("EventCollectorRuntime_Builder_PerEventCollector", undefined, `no bundled info registered for ` + parentName);
40
+ }
41
+ let sourceUrns = Pulumi.all(Component$ReventlessCore.outputs(eventCollector).resources.map(param => param.urn));
42
+ let name = ComponentType$ReventlessCore.nameOpt(eventCollectorResource.__name, EventCollector$ReventlessCore.componentType);
43
+ let opts_parent = eventCollectorResource;
44
+ let opts = {
45
+ parent: opts_parent
46
+ };
47
+ let specModule = Stdlib_Option.getOr(JSON.stringify(info.specModulePath), `""`);
48
+ let mappingsModule = Stdlib_Option.getOr(JSON.stringify(info.mappingsModulePath), `""`);
49
+ let handlerConfigOutput = Pulumi.all([
50
+ info.queryDbTableName,
51
+ sourceUrns
52
+ ]).apply(param => {
53
+ let sourceUrn = param[1][0];
54
+ return `{"handlers":[{"specModule":` + specModule + `,"mappingsModule":` + mappingsModule + `,"queryDbTableName":"` + param[0] + `","sourceUrn":"` + sourceUrn + `"}]}`;
55
+ });
56
+ let envVars = {};
57
+ envVars["HANDLER_CONFIG"] = handlerConfigOutput;
58
+ let packageDirs = {};
59
+ let specPkg = Util_Bundle$ReventlessAws.extractPackageName(info.specModulePath);
60
+ let mappingsPkg = Util_Bundle$ReventlessAws.extractPackageName(info.mappingsModulePath);
61
+ packageDirs[specPkg] = Util_Bundle$ReventlessAws.resolvePackageRoot(specPkg);
62
+ packageDirs[mappingsPkg] = Util_Bundle$ReventlessAws.resolvePackageRoot(mappingsPkg);
63
+ let match = Util_Bundle$ReventlessAws.buildCodeArchive("@reventlessdev/reventless-aws/src/adapter/Runtime/ReadModelEntryPoint.mjs", packageDirs, undefined);
64
+ let runtime = RuntimeEnvironment_Lambda$ReventlessAws.makeFromCodeAsset(name, match.code, match.sourceCodeHash, envVars, memorySize, timeout, undefined, undefined, undefined, undefined, opts);
65
+ EventCollectorChannel_DynamoDbStream$ReventlessAws.connect(name, [{
66
+ channel: channel,
67
+ eventTopics: eventTopics,
68
+ resources: resources
69
+ }], runtime, opts);
70
+ }
71
+
72
+ function finish() {
73
+
74
+ }
75
+
76
+ let EventCollectorChannel;
77
+
78
+ let RuntimeEnvironment;
79
+
80
+ export {
81
+ EventCollectorChannel,
82
+ RuntimeEnvironment,
83
+ log,
84
+ readModelInfos,
85
+ registerReadModel,
86
+ forEventCollector,
87
+ finish,
88
+ }
89
+ /* log Not a pure module */
@@ -0,0 +1,193 @@
1
+ module EventCollectorChannel = EventCollectorChannel.DynamoDbStream
2
+ module RuntimeEnvironment = RuntimeEnvironment.Lambda
3
+
4
+ let log = ReventlessCore.Logger.fromEnv()
5
+
6
+ type context = PulumiAws.Lambda.context
7
+ type runtimeParts = Util.Lambda.runtimeParts
8
+
9
+ type readModelInfo = {
10
+ specModulePath: string,
11
+ mappingsModulePath: string,
12
+ queryDbTableName: Pulumi.Output.t<string>,
13
+ }
14
+
15
+ let readModelInfos: dict<readModelInfo> = Dict.make()
16
+
17
+ let registerReadModel = (
18
+ ~readModelName,
19
+ ~specModulePath,
20
+ ~mappingsModulePath,
21
+ ~queryDbTableName,
22
+ ) =>
23
+ readModelInfos->Dict.set(
24
+ readModelName,
25
+ {specModulePath, mappingsModulePath, queryDbTableName},
26
+ )
27
+
28
+ type storedSpec = {
29
+ componentName: string,
30
+ parentResource: Pulumi.Resource.t,
31
+ sourceUrns: Pulumi.Output.t<array<string>>,
32
+ channelSpec: ReventlessCore.EventCollector_Adapter.channelSpec<
33
+ EventCollectorChannel.callbackEvent,
34
+ context,
35
+ EventCollectorChannel.channelParts,
36
+ >,
37
+ memorySize: int,
38
+ timeout: int,
39
+ }
40
+
41
+ let storedSpecs: array<storedSpec> = []
42
+ let grandParent = ref(None)
43
+
44
+ let forEventCollector: ReventlessCore.Runtime.forEventCollector<
45
+ ReventlessCore.Runtime.effectHandler<
46
+ EventCollectorChannel.callbackEvent,
47
+ context,
48
+ unit,
49
+ string,
50
+ >,
51
+ ReventlessCore.EventCollector.component,
52
+ > = (
53
+ ~handler as _,
54
+ ~eventTopics,
55
+ ~resources,
56
+ ~memorySize=1024,
57
+ ~timeout=30,
58
+ eventCollector,
59
+ ) => {
60
+ let eventCollectorResource = eventCollector->ReventlessCore.Component.toPulumiResource
61
+ let channel = eventCollector->ReventlessCore.EventCollector_Adapter.channel
62
+ let eventCollectorName = eventCollectorResource.name->Option.getOr("Unnamed")
63
+
64
+ switch eventCollectorResource.parent {
65
+ | Some(parentResource) =>
66
+ let parentName = parentResource.name->Option.getOr("Unnamed")
67
+ if grandParent.contents == None {
68
+ grandParent := parentResource.parent
69
+ }
70
+
71
+ let sourceUrns =
72
+ (eventCollector->ReventlessCore.Component.outputs).resources
73
+ ->Array.map(({urn}) => urn)
74
+ ->Pulumi.Output.all
75
+
76
+ storedSpecs
77
+ ->Array.push({
78
+ componentName: parentName,
79
+ parentResource,
80
+ sourceUrns,
81
+ channelSpec: {channel, eventTopics, resources},
82
+ memorySize,
83
+ timeout,
84
+ })
85
+ ->ignore
86
+
87
+ log.info(
88
+ ~comp="EventCollectorRuntime_Builder_Single",
89
+ `registered ${eventCollectorName} for ${parentName}`,
90
+ )
91
+ | None =>
92
+ JsError.throwWithMessage(
93
+ `forEventCollector(single): eventCollector ${eventCollectorName} has no parent`,
94
+ )
95
+ }
96
+ }
97
+
98
+ let finished = ref(false)
99
+
100
+ let finish = () =>
101
+ if !finished.contents {
102
+ if storedSpecs->Array.length > 0 {
103
+ let (maxMemorySize, maxTimeout) = storedSpecs->Array.reduce((0, 0), (
104
+ (accMemorySize, accTimeout),
105
+ {memorySize, timeout},
106
+ ) => {
107
+ (Math.Int.max(accMemorySize, memorySize), Math.Int.max(accTimeout, timeout))
108
+ })
109
+
110
+ switch grandParent.contents {
111
+ | Some(parent) =>
112
+ let opts = {Pulumi.ComponentResource.parent: parent}
113
+
114
+ let handlerOutputs: array<Pulumi.Output.t<string>> = []
115
+ let packageDirs: dict<string> = Dict.make()
116
+
117
+ // Sort by componentName before serializing so the resulting
118
+ // HANDLER_CONFIG.handlers array is stable across deploys. Without
119
+ // this, the push order depends on platform-init order which can vary
120
+ // between Node.js runs, producing pointless Lambda env-var "updates"
121
+ // on every `pulumi up` even when nothing meaningful changed.
122
+ let sortedSpecs =
123
+ storedSpecs->Array.toSorted((a, b) => String.compare(a.componentName, b.componentName))
124
+
125
+ sortedSpecs->Array.forEach(spec => {
126
+ switch readModelInfos->Dict.get(spec.componentName) {
127
+ | Some(info) =>
128
+ // Collect unique user packages for the code asset
129
+ let specPkg = Util_Bundle.extractPackageName(info.specModulePath)
130
+ let mappingsPkg = Util_Bundle.extractPackageName(info.mappingsModulePath)
131
+ packageDirs->Dict.set(specPkg, Util_Bundle.resolvePackageRoot(specPkg))
132
+ packageDirs->Dict.set(mappingsPkg, Util_Bundle.resolvePackageRoot(mappingsPkg))
133
+
134
+ let specModule =
135
+ info.specModulePath->JSON.stringifyAny->Option.getOr(`""`)
136
+ let mappingsModule =
137
+ info.mappingsModulePath->JSON.stringifyAny->Option.getOr(`""`)
138
+
139
+ let handlerJson =
140
+ Pulumi.Output.all2((info.queryDbTableName, spec.sourceUrns))
141
+ ->Pulumi.Output.apply(((tableName, urns)) => {
142
+ let sourceUrn = urns->Array.getUnsafe(0)
143
+ `{"specModule":${specModule},"mappingsModule":${mappingsModule},"queryDbTableName":"${tableName}","sourceUrn":"${sourceUrn}"}`
144
+ })
145
+ let _ = handlerOutputs->Array.push(handlerJson)
146
+ | None =>
147
+ log.warn(
148
+ ~comp="EventCollectorRuntime_Builder_Single",
149
+ `no handler registered for ${spec.componentName}`,
150
+ )
151
+ }
152
+ })
153
+
154
+ let handlerConfigOutput =
155
+ Pulumi.Output.all(handlerOutputs)
156
+ ->Pulumi.Output.apply(handlers =>
157
+ `{"handlers":[${handlers->Array.join(",")}]}`
158
+ )
159
+
160
+ let envVars: dict<Pulumi.Input.t<string>> = Dict.make()
161
+ envVars->Dict.set("HANDLER_CONFIG", handlerConfigOutput->Pulumi.Output.asInput)
162
+
163
+ let {code, sourceCodeHash} = Util_Bundle.buildCodeArchive(
164
+ ~entryPointModule="@reventlessdev/reventless-aws/src/adapter/Runtime/ReadModelEntryPoint.mjs",
165
+ ~packageDirs,
166
+ )
167
+
168
+ let runtime = RuntimeEnvironment_Lambda.makeFromCodeAsset(
169
+ ~name="AllReadModels",
170
+ ~code,
171
+ ~sourceCodeHash,
172
+ ~envVars,
173
+ ~memorySize=maxMemorySize,
174
+ ~timeout=maxTimeout,
175
+ ~opts,
176
+ )
177
+
178
+ let channelSpecs = storedSpecs->Array.map(({channelSpec}) => channelSpec)
179
+ let _connectResources = EventCollectorChannel.connect(
180
+ ~name="AllReadModels",
181
+ ~channelSpecs,
182
+ ~runtime,
183
+ ~opts,
184
+ )
185
+ | None =>
186
+ log.warn(
187
+ ~comp="EventCollectorRuntime_Builder_Single",
188
+ `finish: grandParent not set`,
189
+ )
190
+ }
191
+ }
192
+ finished := true
193
+ }
@@ -0,0 +1,137 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
4
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
5
+ import * as Pulumi from "@pulumi/pulumi";
6
+ import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
7
+ import * as Primitive_string from "@rescript/runtime/lib/es6/Primitive_string.js";
8
+ import * as Logger$ReventlessCore from "@reventlessdev/reventless-core/src/util/Logger.res.mjs";
9
+ import * as Component$ReventlessCore from "@reventlessdev/reventless-core/src/components/Component.res.mjs";
10
+ import * as Util_Bundle$ReventlessAws from "../../util/Util_Bundle.res.mjs";
11
+ import * as RuntimeEnvironment_Lambda$ReventlessAws from "./RuntimeEnvironment_Lambda.res.mjs";
12
+ import * as EventCollectorChannel_DynamoDbStream$ReventlessAws from "../EventCollector/EventCollectorChannel_DynamoDbStream.res.mjs";
13
+
14
+ let log = Logger$ReventlessCore.fromEnv();
15
+
16
+ let readModelInfos = {};
17
+
18
+ function registerReadModel(readModelName, specModulePath, mappingsModulePath, queryDbTableName) {
19
+ readModelInfos[readModelName] = {
20
+ specModulePath: specModulePath,
21
+ mappingsModulePath: mappingsModulePath,
22
+ queryDbTableName: queryDbTableName
23
+ };
24
+ }
25
+
26
+ let storedSpecs = [];
27
+
28
+ let grandParent = {
29
+ contents: undefined
30
+ };
31
+
32
+ function forEventCollector(param, eventTopics, resources, memorySizeOpt, timeoutOpt, eventCollector) {
33
+ let memorySize = memorySizeOpt !== undefined ? memorySizeOpt : 1024;
34
+ let timeout = timeoutOpt !== undefined ? timeoutOpt : 30;
35
+ let eventCollectorResource = Component$ReventlessCore.toPulumiResource(eventCollector);
36
+ let channel = eventCollector.channel;
37
+ let eventCollectorName = Stdlib_Option.getOr(eventCollectorResource.__name, "Unnamed");
38
+ let parentResource = eventCollectorResource.__parentResource;
39
+ if (parentResource === undefined) {
40
+ return Stdlib_JsError.throwWithMessage(`forEventCollector(single): eventCollector ` + eventCollectorName + ` has no parent`);
41
+ }
42
+ let parentName = Stdlib_Option.getOr(parentResource.__name, "Unnamed");
43
+ if (grandParent.contents === undefined) {
44
+ grandParent.contents = parentResource.__parentResource;
45
+ }
46
+ let sourceUrns = Pulumi.all(Component$ReventlessCore.outputs(eventCollector).resources.map(param => param.urn));
47
+ storedSpecs.push({
48
+ componentName: parentName,
49
+ parentResource: parentResource,
50
+ sourceUrns: sourceUrns,
51
+ channelSpec: {
52
+ channel: channel,
53
+ eventTopics: eventTopics,
54
+ resources: resources
55
+ },
56
+ memorySize: memorySize,
57
+ timeout: timeout
58
+ });
59
+ log.info("EventCollectorRuntime_Builder_Single", undefined, `registered ` + eventCollectorName + ` for ` + parentName);
60
+ }
61
+
62
+ let finished = {
63
+ contents: false
64
+ };
65
+
66
+ function finish() {
67
+ if (finished.contents) {
68
+ return;
69
+ }
70
+ if (storedSpecs.length !== 0) {
71
+ let match = Stdlib_Array.reduce(storedSpecs, [
72
+ 0,
73
+ 0
74
+ ], (param, param$1) => [
75
+ Math.max(param[0], param$1.memorySize),
76
+ Math.max(param[1], param$1.timeout)
77
+ ]);
78
+ let parent = grandParent.contents;
79
+ if (parent !== undefined) {
80
+ let opts_parent = parent;
81
+ let opts = {
82
+ parent: opts_parent
83
+ };
84
+ let handlerOutputs = [];
85
+ let packageDirs = {};
86
+ let sortedSpecs = storedSpecs.toSorted((a, b) => Primitive_string.compare(a.componentName, b.componentName));
87
+ sortedSpecs.forEach(spec => {
88
+ let info = readModelInfos[spec.componentName];
89
+ if (info === undefined) {
90
+ return log.warn("EventCollectorRuntime_Builder_Single", undefined, `no handler registered for ` + spec.componentName);
91
+ }
92
+ let specPkg = Util_Bundle$ReventlessAws.extractPackageName(info.specModulePath);
93
+ let mappingsPkg = Util_Bundle$ReventlessAws.extractPackageName(info.mappingsModulePath);
94
+ packageDirs[specPkg] = Util_Bundle$ReventlessAws.resolvePackageRoot(specPkg);
95
+ packageDirs[mappingsPkg] = Util_Bundle$ReventlessAws.resolvePackageRoot(mappingsPkg);
96
+ let specModule = Stdlib_Option.getOr(JSON.stringify(info.specModulePath), `""`);
97
+ let mappingsModule = Stdlib_Option.getOr(JSON.stringify(info.mappingsModulePath), `""`);
98
+ let handlerJson = Pulumi.all([
99
+ info.queryDbTableName,
100
+ spec.sourceUrns
101
+ ]).apply(param => {
102
+ let sourceUrn = param[1][0];
103
+ return `{"specModule":` + specModule + `,"mappingsModule":` + mappingsModule + `,"queryDbTableName":"` + param[0] + `","sourceUrn":"` + sourceUrn + `"}`;
104
+ });
105
+ handlerOutputs.push(handlerJson);
106
+ });
107
+ let handlerConfigOutput = Pulumi.all(handlerOutputs).apply(handlers => `{"handlers":[` + handlers.join(",") + `]}`);
108
+ let envVars = {};
109
+ envVars["HANDLER_CONFIG"] = handlerConfigOutput;
110
+ let match$1 = Util_Bundle$ReventlessAws.buildCodeArchive("@reventlessdev/reventless-aws/src/adapter/Runtime/ReadModelEntryPoint.mjs", packageDirs, undefined);
111
+ let runtime = RuntimeEnvironment_Lambda$ReventlessAws.makeFromCodeAsset("AllReadModels", match$1.code, match$1.sourceCodeHash, envVars, match[0], match[1], undefined, undefined, undefined, undefined, opts);
112
+ let channelSpecs = storedSpecs.map(param => param.channelSpec);
113
+ EventCollectorChannel_DynamoDbStream$ReventlessAws.connect("AllReadModels", channelSpecs, runtime, opts);
114
+ } else {
115
+ log.warn("EventCollectorRuntime_Builder_Single", undefined, `finish: grandParent not set`);
116
+ }
117
+ }
118
+ finished.contents = true;
119
+ }
120
+
121
+ let EventCollectorChannel;
122
+
123
+ let RuntimeEnvironment;
124
+
125
+ export {
126
+ EventCollectorChannel,
127
+ RuntimeEnvironment,
128
+ log,
129
+ readModelInfos,
130
+ registerReadModel,
131
+ storedSpecs,
132
+ grandParent,
133
+ forEventCollector,
134
+ finished,
135
+ finish,
136
+ }
137
+ /* log Not a pure module */
@@ -0,0 +1,97 @@
1
+ // EventMapper Lambda entry point (Micro mode).
2
+ // At cold start: reads HANDLER_CONFIG, dynamically imports Target Spec and Mappings,
3
+ // wires EventMapper_Callback.MakeCounterHandler + MakeEventCollectorHandler.
4
+
5
+ import * as Effect from "effect/Effect";
6
+ import { $$String as IdString } from "@reventlessdev/reventless-spec/src/types/Id.res.mjs";
7
+ import { patchSpecId, makeQueueRef, log, pluginName } from "./HandlerFactoryHelpers.mjs";
8
+ import { tag as requestContextTag } from "@reventlessdev/reventless-core/src/RequestContext.res.mjs";
9
+ import { MakeCounterHandler, MakeEventCollectorHandler } from "@reventlessdev/reventless-core/src/components/EventMapper/EventMapper_Callback.res.mjs";
10
+ import { publishJsons as sqsPublishJsons } from "@reventlessdev/reventless-aws/src/adapter/CommandTopic/CommandTopicChannel_SQS_Runtime.res.mjs";
11
+ import { handleStreamEvent } from "@reventlessdev/reventless-aws/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream_Runtime.res.mjs";
12
+
13
+ const dynamicImport = (specifier) => import('/var/task/node_modules/' + specifier);
14
+
15
+ // Patch Source.Id on each mapping
16
+ function patchMappingsSourceIds(mappingsModule) {
17
+ return {
18
+ ...mappingsModule,
19
+ mappings: (mappingsModule.mappings || []).map((mapping) => ({
20
+ ...mapping,
21
+ Source: {
22
+ ...mapping.Source,
23
+ Id: mapping.Source.Id || IdString,
24
+ },
25
+ })),
26
+ };
27
+ }
28
+
29
+ // Set at handler entry; read by runEffect to tag logs with the Lambda request id.
30
+ let _currentRequestId = "unknown";
31
+
32
+ function runEffect(correlationId, effect) {
33
+ let e = effect
34
+ // Promote correlationId/requestId/plugin to top-level JSON log fields —
35
+ // decoded by EffectLogger.install() from Effect log annotations. Harmless
36
+ // no-op if the unified logger isn't installed.
37
+ .pipe(Effect.annotateLogs("correlationId", correlationId || "unknown"))
38
+ .pipe(Effect.annotateLogs("requestId", _currentRequestId));
39
+ if (pluginName) e = e.pipe(Effect.annotateLogs("plugin", pluginName));
40
+ return e
41
+ .pipe(Effect.provideService(requestContextTag, { correlationId: correlationId || "unknown" }))
42
+ .pipe(Effect.runPromise);
43
+ }
44
+
45
+ function groupBySource(records) {
46
+ const dict = {};
47
+ records.forEach(record => {
48
+ const arn = record.eventSourceARN;
49
+ const existing = dict[arn] || [];
50
+ dict[arn] = existing.concat([record]);
51
+ });
52
+ return dict;
53
+ }
54
+
55
+ async function buildHandler() {
56
+ const configStr = process.env["HANDLER_CONFIG"] || "{}";
57
+ const config = JSON.parse(configStr);
58
+
59
+ const targetSpecModule = await dynamicImport(config.targetSpecModule);
60
+ const mappingsModule = await dynamicImport(config.mappingsModule);
61
+
62
+ const patchedTarget = patchSpecId(targetSpecModule);
63
+ const patchedMappings = patchMappingsSourceIds(mappingsModule);
64
+
65
+ const publishJsons = sqsPublishJsons(makeQueueRef(config.queueUrl), "SQS_FIFO");
66
+ const queryEngine = {
67
+ query: async () => { log.error("queryEngine not available in bundled mode", { comp: "EventMapperEntryPoint" }); return []; },
68
+ get: async () => { log.error("queryEngine not available in bundled mode", { comp: "EventMapperEntryPoint" }); return undefined; },
69
+ };
70
+
71
+ const counterHandler = MakeCounterHandler(patchedTarget)(patchedMappings)({ publishJsons, queryEngine });
72
+ const noopAsync = async (_) => {};
73
+ const eventCollectorHandler = MakeEventCollectorHandler({
74
+ publishJsons,
75
+ count: noopAsync,
76
+ addToCounterTarget: noopAsync,
77
+ commonEventsHandler: counterHandler.commonEventsHandler,
78
+ });
79
+
80
+ return (event, context) => handleStreamEvent(eventCollectorHandler.handleJsonEvents, event, context);
81
+ }
82
+
83
+ const initPromise = buildHandler();
84
+
85
+ export async function handler(event, context) {
86
+ _currentRequestId = context?.awsRequestId || "unknown";
87
+ const streamHandler = await initPromise;
88
+ const records = event.Records || [];
89
+ const grouped = groupBySource(records);
90
+
91
+ await Promise.all(Object.entries(grouped).map(async ([arn, subRecords]) => {
92
+ log.debug("processing " + arn, { comp: "EventMapperRuntime" });
93
+ await runEffect(undefined, streamHandler({ Records: subRecords }, context));
94
+ }));
95
+
96
+ return "";
97
+ }