@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,178 @@
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 sideEffectInfo = {
10
+ sideEffectModulePaths: array<string>,
11
+ }
12
+
13
+ let sideEffectInfos: dict<sideEffectInfo> = Dict.make()
14
+
15
+ let registerSideEffectHandler = (~sideEffectHandlerName, ~sideEffectModulePaths) =>
16
+ sideEffectInfos->Dict.set(sideEffectHandlerName, {sideEffectModulePaths: sideEffectModulePaths})
17
+
18
+ type storedSpec = {
19
+ componentName: string,
20
+ parentResource: Pulumi.Resource.t,
21
+ sourceUrns: Pulumi.Output.t<array<string>>,
22
+ channelSpec: ReventlessCore.EventCollector_Adapter.channelSpec<
23
+ EventCollectorChannel.callbackEvent,
24
+ context,
25
+ EventCollectorChannel.channelParts,
26
+ >,
27
+ memorySize: int,
28
+ timeout: int,
29
+ }
30
+
31
+ let storedSpecs: array<storedSpec> = []
32
+ let grandParent = ref(None)
33
+
34
+ let forEventCollector: ReventlessCore.Runtime.forEventCollector<
35
+ ReventlessCore.Runtime.effectHandler<
36
+ EventCollectorChannel.callbackEvent,
37
+ context,
38
+ unit,
39
+ string,
40
+ >,
41
+ ReventlessCore.EventCollector.component,
42
+ > = (
43
+ ~handler as _,
44
+ ~eventTopics,
45
+ ~resources,
46
+ ~memorySize=1024,
47
+ ~timeout=30,
48
+ eventCollector,
49
+ ) => {
50
+ let eventCollectorResource = eventCollector->ReventlessCore.Component.toPulumiResource
51
+ let channel = eventCollector->ReventlessCore.EventCollector_Adapter.channel
52
+ let eventCollectorName = eventCollectorResource.name->Option.getOr("Unnamed")
53
+
54
+ switch eventCollectorResource.parent {
55
+ | Some(parentResource) =>
56
+ let parentName = parentResource.name->Option.getOr("Unnamed")
57
+ if grandParent.contents == None {
58
+ grandParent := parentResource.parent
59
+ }
60
+
61
+ let sourceUrns =
62
+ (eventCollector->ReventlessCore.Component.outputs).resources
63
+ ->Array.map(({urn}) => urn)
64
+ ->Pulumi.Output.all
65
+
66
+ storedSpecs
67
+ ->Array.push({
68
+ componentName: parentName,
69
+ parentResource,
70
+ sourceUrns,
71
+ channelSpec: {channel, eventTopics, resources},
72
+ memorySize,
73
+ timeout,
74
+ })
75
+ ->ignore
76
+
77
+ log.info(
78
+ ~comp="SideEffectHandlerRuntime_Builder_Single",
79
+ `registered ${eventCollectorName} for ${parentName}`,
80
+ )
81
+ | None =>
82
+ JsError.throwWithMessage(
83
+ `forEventCollector(single): eventCollector ${eventCollectorName} has no parent`,
84
+ )
85
+ }
86
+ }
87
+
88
+ let finished = ref(false)
89
+
90
+ let finish = () =>
91
+ if !finished.contents {
92
+ if storedSpecs->Array.length > 0 {
93
+ let (maxMemorySize, maxTimeout) = storedSpecs->Array.reduce((0, 0), (
94
+ (accMemorySize, accTimeout),
95
+ {memorySize, timeout},
96
+ ) => {
97
+ (Math.Int.max(accMemorySize, memorySize), Math.Int.max(accTimeout, timeout))
98
+ })
99
+
100
+ switch grandParent.contents {
101
+ | Some(parent) =>
102
+ let opts = {Pulumi.ComponentResource.parent: parent}
103
+
104
+ // Build HANDLER_CONFIG as a single JSON env var.
105
+ let handlerOutputs: array<Pulumi.Output.t<string>> = []
106
+ let packageDirs: dict<string> = Dict.make()
107
+
108
+ storedSpecs->Array.forEach(spec => {
109
+ switch sideEffectInfos->Dict.get(spec.componentName) {
110
+ | Some(info) =>
111
+ // Collect unique user packages for the code asset
112
+ info.sideEffectModulePaths->Array.forEach(modPath => {
113
+ let pkg = Util_Bundle.extractPackageName(modPath)
114
+ packageDirs->Dict.set(pkg, Util_Bundle.resolvePackageRoot(pkg))
115
+ })
116
+
117
+ // Build JSON array of module paths
118
+ let modulesJson =
119
+ info.sideEffectModulePaths
120
+ ->Array.map(p => p->JSON.stringifyAny->Option.getOr(`""`))
121
+ ->Array.join(",")
122
+
123
+ let handlerJson =
124
+ spec.sourceUrns
125
+ ->Pulumi.Output.apply(urns => {
126
+ let sourceUrn = urns->Array.getUnsafe(0)
127
+ `{"sideEffectModules":[${modulesJson}],"sourceUrn":"${sourceUrn}"}`
128
+ })
129
+ let _ = handlerOutputs->Array.push(handlerJson)
130
+ | None =>
131
+ log.warn(
132
+ ~comp="SideEffectHandlerRuntime_Builder_Single",
133
+ `no handler registered for ${spec.componentName}`,
134
+ )
135
+ }
136
+ })
137
+
138
+ let handlerConfigOutput =
139
+ Pulumi.Output.all(handlerOutputs)
140
+ ->Pulumi.Output.apply(handlers =>
141
+ `{"handlers":[${handlers->Array.join(",")}]}`
142
+ )
143
+
144
+ let envVars: dict<Pulumi.Input.t<string>> = Dict.make()
145
+ envVars->Dict.set("HANDLER_CONFIG", handlerConfigOutput->Pulumi.Output.asInput)
146
+
147
+ // Build AssetArchive: static re-export + user packages
148
+ let {code, sourceCodeHash} = Util_Bundle.buildCodeArchive(
149
+ ~entryPointModule="@reventlessdev/reventless-aws/src/adapter/Runtime/SideEffectEntryPoint.mjs",
150
+ ~packageDirs,
151
+ )
152
+
153
+ let runtime = RuntimeEnvironment_Lambda.makeFromCodeAsset(
154
+ ~name="AllSideEffectHandlers",
155
+ ~code,
156
+ ~sourceCodeHash,
157
+ ~envVars,
158
+ ~memorySize=maxMemorySize,
159
+ ~timeout=maxTimeout,
160
+ ~opts,
161
+ )
162
+
163
+ let channelSpecs = storedSpecs->Array.map(({channelSpec}) => channelSpec)
164
+ let _connectResources = EventCollectorChannel.connect(
165
+ ~name="AllSideEffectHandlers",
166
+ ~channelSpecs,
167
+ ~runtime,
168
+ ~opts,
169
+ )
170
+ | None =>
171
+ log.warn(
172
+ ~comp="SideEffectHandlerRuntime_Builder_Single",
173
+ `finish: grandParent not set`,
174
+ )
175
+ }
176
+ }
177
+ finished := true
178
+ }
@@ -0,0 +1,129 @@
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 Logger$ReventlessCore from "@reventlessdev/reventless-core/src/util/Logger.res.mjs";
8
+ import * as Component$ReventlessCore from "@reventlessdev/reventless-core/src/components/Component.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
+ import * as EventCollectorChannel_DynamoDbStream$ReventlessAws from "../EventCollector/EventCollectorChannel_DynamoDbStream.res.mjs";
12
+
13
+ let log = Logger$ReventlessCore.fromEnv();
14
+
15
+ let sideEffectInfos = {};
16
+
17
+ function registerSideEffectHandler(sideEffectHandlerName, sideEffectModulePaths) {
18
+ sideEffectInfos[sideEffectHandlerName] = {
19
+ sideEffectModulePaths: sideEffectModulePaths
20
+ };
21
+ }
22
+
23
+ let storedSpecs = [];
24
+
25
+ let grandParent = {
26
+ contents: undefined
27
+ };
28
+
29
+ function forEventCollector(param, eventTopics, resources, memorySizeOpt, timeoutOpt, eventCollector) {
30
+ let memorySize = memorySizeOpt !== undefined ? memorySizeOpt : 1024;
31
+ let timeout = timeoutOpt !== undefined ? timeoutOpt : 30;
32
+ let eventCollectorResource = Component$ReventlessCore.toPulumiResource(eventCollector);
33
+ let channel = eventCollector.channel;
34
+ let eventCollectorName = Stdlib_Option.getOr(eventCollectorResource.__name, "Unnamed");
35
+ let parentResource = eventCollectorResource.__parentResource;
36
+ if (parentResource === undefined) {
37
+ return Stdlib_JsError.throwWithMessage(`forEventCollector(single): eventCollector ` + eventCollectorName + ` has no parent`);
38
+ }
39
+ let parentName = Stdlib_Option.getOr(parentResource.__name, "Unnamed");
40
+ if (grandParent.contents === undefined) {
41
+ grandParent.contents = parentResource.__parentResource;
42
+ }
43
+ let sourceUrns = Pulumi.all(Component$ReventlessCore.outputs(eventCollector).resources.map(param => param.urn));
44
+ storedSpecs.push({
45
+ componentName: parentName,
46
+ parentResource: parentResource,
47
+ sourceUrns: sourceUrns,
48
+ channelSpec: {
49
+ channel: channel,
50
+ eventTopics: eventTopics,
51
+ resources: resources
52
+ },
53
+ memorySize: memorySize,
54
+ timeout: timeout
55
+ });
56
+ log.info("SideEffectHandlerRuntime_Builder_Single", undefined, `registered ` + eventCollectorName + ` for ` + parentName);
57
+ }
58
+
59
+ let finished = {
60
+ contents: false
61
+ };
62
+
63
+ function finish() {
64
+ if (finished.contents) {
65
+ return;
66
+ }
67
+ if (storedSpecs.length !== 0) {
68
+ let match = Stdlib_Array.reduce(storedSpecs, [
69
+ 0,
70
+ 0
71
+ ], (param, param$1) => [
72
+ Math.max(param[0], param$1.memorySize),
73
+ Math.max(param[1], param$1.timeout)
74
+ ]);
75
+ let parent = grandParent.contents;
76
+ if (parent !== undefined) {
77
+ let opts_parent = parent;
78
+ let opts = {
79
+ parent: opts_parent
80
+ };
81
+ let handlerOutputs = [];
82
+ let packageDirs = {};
83
+ storedSpecs.forEach(spec => {
84
+ let info = sideEffectInfos[spec.componentName];
85
+ if (info === undefined) {
86
+ return log.warn("SideEffectHandlerRuntime_Builder_Single", undefined, `no handler registered for ` + spec.componentName);
87
+ }
88
+ info.sideEffectModulePaths.forEach(modPath => {
89
+ let pkg = Util_Bundle$ReventlessAws.extractPackageName(modPath);
90
+ packageDirs[pkg] = Util_Bundle$ReventlessAws.resolvePackageRoot(pkg);
91
+ });
92
+ let modulesJson = info.sideEffectModulePaths.map(p => Stdlib_Option.getOr(JSON.stringify(p), `""`)).join(",");
93
+ let handlerJson = spec.sourceUrns.apply(urns => {
94
+ let sourceUrn = urns[0];
95
+ return `{"sideEffectModules":[` + modulesJson + `],"sourceUrn":"` + sourceUrn + `"}`;
96
+ });
97
+ handlerOutputs.push(handlerJson);
98
+ });
99
+ let handlerConfigOutput = Pulumi.all(handlerOutputs).apply(handlers => `{"handlers":[` + handlers.join(",") + `]}`);
100
+ let envVars = {};
101
+ envVars["HANDLER_CONFIG"] = handlerConfigOutput;
102
+ let match$1 = Util_Bundle$ReventlessAws.buildCodeArchive("@reventlessdev/reventless-aws/src/adapter/Runtime/SideEffectEntryPoint.mjs", packageDirs, undefined);
103
+ let runtime = RuntimeEnvironment_Lambda$ReventlessAws.makeFromCodeAsset("AllSideEffectHandlers", match$1.code, match$1.sourceCodeHash, envVars, match[0], match[1], undefined, undefined, undefined, undefined, opts);
104
+ let channelSpecs = storedSpecs.map(param => param.channelSpec);
105
+ EventCollectorChannel_DynamoDbStream$ReventlessAws.connect("AllSideEffectHandlers", channelSpecs, runtime, opts);
106
+ } else {
107
+ log.warn("SideEffectHandlerRuntime_Builder_Single", undefined, `finish: grandParent not set`);
108
+ }
109
+ }
110
+ finished.contents = true;
111
+ }
112
+
113
+ let EventCollectorChannel;
114
+
115
+ let RuntimeEnvironment;
116
+
117
+ export {
118
+ EventCollectorChannel,
119
+ RuntimeEnvironment,
120
+ log,
121
+ sideEffectInfos,
122
+ registerSideEffectHandler,
123
+ storedSpecs,
124
+ grandParent,
125
+ forEventCollector,
126
+ finished,
127
+ finish,
128
+ }
129
+ /* log Not a pure module */
@@ -0,0 +1,166 @@
1
+ // Runtime builder for the DCB StateChange command-handler Lambda.
2
+ //
3
+ // Builds the `<Plugin>DcbCmdHandler` (sync) / `<Plugin>DcbAsyncCmdHandler` (async)
4
+ // Lambda that runs all of a plugin's StateChangeSlice command handlers — the
5
+ // "Single" deployment strategy (one shared Lambda per plugin). DCB StateChange
6
+ // has no other topology, so there is no `_PerSlice`/`_Micro` variant.
7
+ //
8
+ // Mirrors StateViewSliceRuntime_Builder_Single so the two DCB slice runtimes are
9
+ // discoverable side by side. The registration state (which slices, table name,
10
+ // per-flavor commandHandlerConfig) is plugin-runtime-level and stays in
11
+ // PluginRuntime_Builder; its `forDcbCommandTopic` is a thin delegator that reads
12
+ // those refs and calls the build below. This module owns only the build.
13
+
14
+ let log = ReventlessCore.Logger.fromEnv()
15
+
16
+ // `slicePaths`: `(specPath, behaviorPath)` per StateChangeSlice (already merged
17
+ // from auto- and manually-registered sources by the caller).
18
+ let forDcbCommandTopic = (
19
+ ~slicePaths: array<(string, string)>,
20
+ ~dcbTableName: option<Pulumi.Output.t<string>>,
21
+ ~pluginName: string,
22
+ ~syncConfig: ReventlessCore.Runtime.commandHandlerConfig,
23
+ ~asyncConfig: ReventlessCore.Runtime.commandHandlerConfig,
24
+ ~connect,
25
+ dcbCommandTopic,
26
+ ) =>
27
+ if slicePaths->Array.length == 0 {
28
+ log.warn(
29
+ ~comp="StateChangeSliceRuntime_Builder_Single",
30
+ "forDcbCommandTopic skipped (no slice specs)",
31
+ )
32
+ } else {
33
+ let commandTopicResource = dcbCommandTopic->ReventlessCore.Component.toPulumiResource
34
+ // The CommandTopic resource is named `<Plugin>Dcb` (sync) or `<Plugin>DcbAsync`
35
+ // (async) by Dcb_Builder. Detect async off that bare stem (below), then append
36
+ // the canonical `CmdHandler` Lambda kind so the command-handler Lambda is
37
+ // greppable alongside the aggregate lineage.
38
+ let baseName = commandTopicResource.name->Option.getOr("UnnamedDcb")
39
+ let opts = {Pulumi.ComponentResource.parent: commandTopicResource}
40
+
41
+ // Extract SQS queue from the DCB CommandTopic
42
+ let channel = dcbCommandTopic->ReventlessCore.CommandTopic_Adapter.channel
43
+ let channelParts: Util.SQS.channelParts = Obj.magic(channel.parts)
44
+ let queue = channelParts.queue
45
+
46
+ let dcbTableName = switch dcbTableName {
47
+ | Some(tableName) => tableName
48
+ | None => Pulumi.Output.make("NOT_AVAILABLE")
49
+ }
50
+
51
+ // The async DCB CommandTopic is named `<Plugin>DcbAsync` by Dcb_Builder, so the
52
+ // bare stem's `Async` suffix is an unambiguous signal. Flip
53
+ // DcbCommandTopicEntryPoint into async dispatch — Route 1 returns CommandPending
54
+ // instead of running the slice handler inline.
55
+ let isAsync = baseName->String.endsWith("Async")
56
+ let name = baseName ++ "CmdHandler"
57
+
58
+ let cfg = isAsync ? asyncConfig : syncConfig
59
+
60
+ let envVars: dict<Pulumi.Input.t<string>> = Dict.make()
61
+ envVars->Dict.set("DCB_TABLE", dcbTableName->Pulumi.Output.asInput)
62
+ envVars->Dict.set("QUEUE_URL", queue.id->Pulumi.Output.asInput)
63
+ if isAsync {
64
+ envVars->Dict.set("DISPATCH_MODE", "async"->Pulumi.Input.make)
65
+ }
66
+ cfg.envVars->Option.forEach(extra =>
67
+ extra->Dict.forEachWithKey((value, key) => {
68
+ if envVars->Dict.get(key)->Option.isNone {
69
+ envVars->Dict.set(key, value->Pulumi.Output.make->Pulumi.Output.asInput)
70
+ }
71
+ })
72
+ )
73
+
74
+ // Build HANDLER_CONFIG JSON: array of {spec, behavior} objects so the entry point
75
+ // can dynamically import both modules and apply the curried StateChangeSlice_Callback.Make
76
+ // functor (Make(Spec)(Behavior)).
77
+ let sliceModulesJson =
78
+ slicePaths
79
+ ->Array.map(((specPath, behaviorPath)) => {
80
+ let s = specPath->JSON.stringifyAny->Option.getOr(`""`)
81
+ let b = behaviorPath->JSON.stringifyAny->Option.getOr(`""`)
82
+ `{"spec":${s},"behavior":${b}}`
83
+ })
84
+ ->Array.join(",")
85
+
86
+ let handlerConfigJson =
87
+ Pulumi.Output.all2((dcbTableName, queue.id))
88
+ ->Pulumi.Output.apply(((table, queueUrl)) => {
89
+ let pluginNameJson = pluginName->JSON.stringifyAny->Option.getOr(`""`)
90
+ `{"dcbEventLogTableName":"${table}","queueUrl":"${queueUrl}","pluginName":${pluginNameJson},"stateChangeSliceModules":[${sliceModulesJson}]}`
91
+ })
92
+ envVars->Dict.set("HANDLER_CONFIG", handlerConfigJson->Pulumi.Output.asInput)
93
+
94
+ // Build code asset
95
+ let packageDirs: dict<string> = Dict.make()
96
+ slicePaths->Array.forEach(((specPath, behaviorPath)) => {
97
+ let specPkg = Util_Bundle.extractPackageName(specPath)
98
+ packageDirs->Dict.set(specPkg, Util_Bundle.resolvePackageRoot(specPkg))
99
+ let behaviorPkg = Util_Bundle.extractPackageName(behaviorPath)
100
+ packageDirs->Dict.set(behaviorPkg, Util_Bundle.resolvePackageRoot(behaviorPkg))
101
+ })
102
+ // Include the framework packages alongside the entry point so the deployed
103
+ // Lambda picks up uncommitted local changes without waiting for the Lambda
104
+ // Layer rebuild (the layer fetches @reventlessdev/reventless-* from GitHub
105
+ // Packages, not the local pnpm workspace). reventless-core is critical here
106
+ // because StateChangeSlice_Callback (the actual command handler) lives in core.
107
+ packageDirs->Dict.set(
108
+ "@reventlessdev/reventless-aws",
109
+ Util_Bundle.resolvePackageRoot("@reventlessdev/reventless-aws"),
110
+ )
111
+ packageDirs->Dict.set(
112
+ "@reventlessdev/reventless-core",
113
+ Util_Bundle.resolvePackageRoot("@reventlessdev/reventless-core"),
114
+ )
115
+
116
+ let {code, sourceCodeHash} = Util_Bundle.buildCodeArchive(
117
+ ~entryPointModule="@reventlessdev/reventless-aws/src/adapter/Runtime/DcbCommandTopicEntryPoint.mjs",
118
+ ~packageDirs,
119
+ )
120
+
121
+ cfg.sqsBatchSize->Option.forEach(CommandTopicChannel.SQS.setBatchSize)
122
+
123
+ let runtime = RuntimeEnvironment_Lambda.makeFromCodeAsset(
124
+ ~name,
125
+ ~code,
126
+ ~sourceCodeHash,
127
+ ~envVars,
128
+ ~memorySize=?cfg.memorySize,
129
+ ~timeout=?cfg.timeout,
130
+ ~reservedConcurrency=?cfg.reservedConcurrency,
131
+ ~ephemeralStorageMb=?cfg.ephemeralStorageMb,
132
+ ~logRetentionDays=?cfg.logRetentionDays,
133
+ // This is the StateChangeSlice command handler — provision the DCB
134
+ // retry/conflict metric filters (takes effect when logRetentionDays is set).
135
+ ~dcbMetrics=true,
136
+ ~opts,
137
+ )
138
+
139
+ // The DCB command topic Lambda is invoked directly by AppSync (Route 1) and
140
+ // needs sqs:SendMessage to publish commands to the FIFO queue for processing.
141
+ // makeWithDefaultPolicy only grants sqs:Receive* (for SQS trigger Route 2).
142
+ let _ = queue.arn->Pulumi.Output.apply(queueArn => {
143
+ PulumiAws.IAM.RolePolicy.make(
144
+ ~name=`${name}-sqsSend`,
145
+ ~args={
146
+ policy: PulumiAws.PolicyDocument.make(
147
+ ~id=`${name}-sqsSendPolicy`,
148
+ ~statements=[
149
+ {
150
+ sid: "AllowSqsSend",
151
+ effect: Allow,
152
+ actions: Action("sqs:SendMessage"),
153
+ resources: Resource(queueArn),
154
+ },
155
+ ],
156
+ )
157
+ ->PulumiAws.PolicyDocument.toJsonString
158
+ ->Pulumi.Input.make,
159
+ role: runtime.parts.lambdaRole.id->Pulumi.Output.asInput,
160
+ },
161
+ )
162
+ })
163
+
164
+ connect(~runtime)
165
+ CommandTopicChannel.SQS.clearBatchSize()
166
+ }
@@ -0,0 +1,87 @@
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 Logger$ReventlessCore from "@reventlessdev/reventless-core/src/util/Logger.res.mjs";
8
+ import * as Component$ReventlessCore from "@reventlessdev/reventless-core/src/components/Component.res.mjs";
9
+ import * as PolicyDocument$PulumiAws from "@reventlessdev/rescript-pulumi-aws/src/IAM/PolicyDocument.res.mjs";
10
+ import * as Util_Bundle$ReventlessAws from "../../util/Util_Bundle.res.mjs";
11
+ import * as CommandTopicChannel_SQS$ReventlessAws from "../CommandTopic/CommandTopicChannel_SQS.res.mjs";
12
+ import * as RuntimeEnvironment_Lambda$ReventlessAws from "./RuntimeEnvironment_Lambda.res.mjs";
13
+
14
+ let log = Logger$ReventlessCore.fromEnv();
15
+
16
+ function forDcbCommandTopic(slicePaths, dcbTableName, pluginName, syncConfig, asyncConfig, connect, dcbCommandTopic) {
17
+ if (slicePaths.length === 0) {
18
+ return log.warn("StateChangeSliceRuntime_Builder_Single", undefined, "forDcbCommandTopic skipped (no slice specs)");
19
+ }
20
+ let commandTopicResource = Component$ReventlessCore.toPulumiResource(dcbCommandTopic);
21
+ let baseName = Stdlib_Option.getOr(commandTopicResource.__name, "UnnamedDcb");
22
+ let opts_parent = commandTopicResource;
23
+ let opts = {
24
+ parent: opts_parent
25
+ };
26
+ let channel = dcbCommandTopic.channel;
27
+ let channelParts = channel.parts;
28
+ let queue = channelParts.queue;
29
+ let dcbTableName$1 = dcbTableName !== undefined ? dcbTableName : Pulumi.output("NOT_AVAILABLE");
30
+ let isAsync = baseName.endsWith("Async");
31
+ let name = baseName + "CmdHandler";
32
+ let cfg = isAsync ? asyncConfig : syncConfig;
33
+ let envVars = {};
34
+ envVars["DCB_TABLE"] = dcbTableName$1;
35
+ envVars["QUEUE_URL"] = queue.id;
36
+ if (isAsync) {
37
+ envVars["DISPATCH_MODE"] = "async";
38
+ }
39
+ Stdlib_Option.forEach(cfg.envVars, extra => Stdlib_Dict.forEachWithKey(extra, (value, key) => {
40
+ if (Stdlib_Option.isNone(envVars[key])) {
41
+ envVars[key] = Pulumi.output(value);
42
+ return;
43
+ }
44
+ }));
45
+ let sliceModulesJson = slicePaths.map(param => {
46
+ let s = Stdlib_Option.getOr(JSON.stringify(param[0]), `""`);
47
+ let b = Stdlib_Option.getOr(JSON.stringify(param[1]), `""`);
48
+ return `{"spec":` + s + `,"behavior":` + b + `}`;
49
+ }).join(",");
50
+ let handlerConfigJson = Pulumi.all([
51
+ dcbTableName$1,
52
+ queue.id
53
+ ]).apply(param => {
54
+ let pluginNameJson = Stdlib_Option.getOr(JSON.stringify(pluginName), `""`);
55
+ return `{"dcbEventLogTableName":"` + param[0] + `","queueUrl":"` + param[1] + `","pluginName":` + pluginNameJson + `,"stateChangeSliceModules":[` + sliceModulesJson + `]}`;
56
+ });
57
+ envVars["HANDLER_CONFIG"] = handlerConfigJson;
58
+ let packageDirs = {};
59
+ slicePaths.forEach(param => {
60
+ let specPkg = Util_Bundle$ReventlessAws.extractPackageName(param[0]);
61
+ packageDirs[specPkg] = Util_Bundle$ReventlessAws.resolvePackageRoot(specPkg);
62
+ let behaviorPkg = Util_Bundle$ReventlessAws.extractPackageName(param[1]);
63
+ packageDirs[behaviorPkg] = Util_Bundle$ReventlessAws.resolvePackageRoot(behaviorPkg);
64
+ });
65
+ packageDirs["@reventlessdev/reventless-aws"] = Util_Bundle$ReventlessAws.resolvePackageRoot("@reventlessdev/reventless-aws");
66
+ packageDirs["@reventlessdev/reventless-core"] = Util_Bundle$ReventlessAws.resolvePackageRoot("@reventlessdev/reventless-core");
67
+ let match = Util_Bundle$ReventlessAws.buildCodeArchive("@reventlessdev/reventless-aws/src/adapter/Runtime/DcbCommandTopicEntryPoint.mjs", packageDirs, undefined);
68
+ Stdlib_Option.forEach(cfg.sqsBatchSize, CommandTopicChannel_SQS$ReventlessAws.setBatchSize);
69
+ let runtime = RuntimeEnvironment_Lambda$ReventlessAws.makeFromCodeAsset(name, match.code, match.sourceCodeHash, envVars, cfg.memorySize, cfg.timeout, cfg.reservedConcurrency, cfg.ephemeralStorageMb, cfg.logRetentionDays, true, opts);
70
+ queue.arn.apply(queueArn => new (Aws.iam.RolePolicy)(name + `-sqsSend`, {
71
+ policy: PolicyDocument$PulumiAws.toJsonString(PolicyDocument$PulumiAws.make(undefined, name + `-sqsSendPolicy`, [{
72
+ Sid: "AllowSqsSend",
73
+ Effect: "Allow",
74
+ Action: "sqs:SendMessage",
75
+ Resource: queueArn
76
+ }])),
77
+ role: runtime.parts.lambdaRole.id
78
+ }));
79
+ connect(runtime);
80
+ CommandTopicChannel_SQS$ReventlessAws.clearBatchSize();
81
+ }
82
+
83
+ export {
84
+ log,
85
+ forDcbCommandTopic,
86
+ }
87
+ /* log Not a pure module */