@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,210 @@
1
+ open PulumiAws.DynamoDb.Table
2
+ @@warning("-44")
3
+ open ReventlessInfra.Adapter
4
+
5
+ let log = ReventlessCore.Logger.fromEnv()
6
+
7
+ let toResourceInfo: table => Pulumi.Output.t<ReventlessInfra.Adapter.resourceInfo> = ({hashKey, rangeKey}) =>
8
+ (hashKey, rangeKey)
9
+ ->Pulumi.Output.all2
10
+ ->Pulumi.Output.apply(((hashKey, rangeKey)) => ReventlessInfra.Adapter.StorageKeys({partitionKey: hashKey, sortKey: rangeKey}))
11
+
12
+ let toResolvedTableOutput = ({name, id, arn, hashKey, rangeKey}) =>
13
+ (name, id, arn, hashKey, rangeKey)
14
+ ->Pulumi.Output.all5
15
+ ->Pulumi.Output.apply(((name, id, arn, hashKey, rangeKey)) => {
16
+ Util_DynamoDb_Runtime.id,
17
+ name,
18
+ arn,
19
+ hashKey,
20
+ rangeKey: ?(rangeKey->Option.map(rangeKey => rangeKey->Nullable.make)),
21
+ })
22
+
23
+ let toResource = (~tags=?, {id, name, arn} as table) =>
24
+ make(
25
+ ~name,
26
+ ~id,
27
+ ~urn=arn,
28
+ ~service=name->Pulumi.Output.apply(_ => AWS.DynamoDb.service),
29
+ ~resourceInfo=table->toResourceInfo,
30
+ ~resourceType="aws:dynamodb:Table"->Pulumi.Output.make,
31
+ ~tags=?tags,
32
+ )
33
+
34
+
35
+ let arn2tableName = arn =>
36
+ switch arn->String.split(":") {
37
+ | [_, _, _service, _region, _account, tableName] => tableName
38
+ | _ => JsError.throwWithMessage("Invalid ARN: " ++ arn)
39
+ }
40
+
41
+ // Workaround when restore enabled: turn on ttl & pointInTimeRecovery again
42
+ let enableTtl: string => promise<ttl> = async tableName => {
43
+ log.info(~comp="DynamoDb", `enableTimeToLive for ${tableName}`)
44
+
45
+ //open AwsSdk.DynamoDb_DynamoDb.UpdateTimeToLiveCommand
46
+ switch await {
47
+ tableName,
48
+ timeToLiveSpecification: {
49
+ enabled: true,
50
+ attributeName: Util_DynamoDb_Runtime.purgeTimeAttributeName,
51
+ },
52
+ }
53
+ ->AwsSdk.DynamoDb_DynamoDb.UpdateTimeToLiveCommand.make
54
+ ->AwsSdk.DynamoDb_DynamoDb.UpdateTimeToLiveCommand.send {
55
+ | res => {
56
+ enabled: res.timeToLiveSpecification.enabled,
57
+ attributeName: res.timeToLiveSpecification.attributeName,
58
+ }
59
+ }
60
+ }
61
+
62
+ let verifyTtl: (~expectedTtl: int=?, table) => Pulumi.Output.t<ttl> = (
63
+ ~expectedTtl=?,
64
+ {name, ttl},
65
+ ) =>
66
+ (name, ttl)
67
+ ->Pulumi.Output.all2
68
+ ->Pulumi.Output.flatMap(((tableName, ttl)) => {
69
+ // Pulumi resolves table.ttl to undefined when no TTL is configured on the table.
70
+ // Cast to Nullable to safely handle this at the JS boundary.
71
+ let ttlOpt: option<ttl> = (ttl->Obj.magic: Nullable.t<ttl>)->Nullable.toOption
72
+ switch (ttlOpt->Option.flatMap(t => t.enabled), expectedTtl) {
73
+ | (None, Some(_))
74
+ | (Some(false), Some(_)) =>
75
+ enableTtl(tableName)
76
+ | _ => ttlOpt->Option.getOr({attributeName: ""})->Promise.resolve
77
+ }->Pulumi.Output.fromPromise
78
+ })
79
+
80
+ let enablePointInTimeRecovery = async tableName => {
81
+ log.info(~comp="DynamoDb", `enablePointInTimeRecovery for ${tableName}`)
82
+
83
+ open AwsSdk.DynamoDb_DynamoDb
84
+
85
+ let updateContinuousBackups = UpdateContinuousBackupsCommand.make({
86
+ tableName,
87
+ pointInTimeRecoverySpecification: {pointInTimeRecoveryEnabled: true},
88
+ })
89
+ switch await updateContinuousBackups->UpdateContinuousBackupsCommand.send {
90
+ | res => {enabled: res.continuousBackupsDescription.continuousBackupsStatus == #ENABLED}
91
+ }
92
+ }
93
+
94
+ let verifyPointInTimeRecovery = (table: table) =>
95
+ (table.name, table.pointInTimeRecovery)
96
+ ->Pulumi.Output.all2
97
+ ->Pulumi.Output.flatMap(((tableName, pointInTimeRecovery)) =>
98
+ switch pointInTimeRecovery.enabled {
99
+ | false => enablePointInTimeRecovery(tableName)
100
+ | true => pointInTimeRecovery->Promise.resolve
101
+ }->Pulumi.Output.fromPromise
102
+ )
103
+
104
+ let updateTable: (~ttl: int=?, table) => table = (~ttl=?, table) => {
105
+ let newTtl = verifyTtl(~expectedTtl=?ttl, table)
106
+ let newPointInTimeRecovery = verifyPointInTimeRecovery(table)
107
+
108
+ {
109
+ ...table,
110
+ ttl: newTtl,
111
+ pointInTimeRecovery: newPointInTimeRecovery,
112
+ }
113
+ }
114
+
115
+ let makeTableArgs = (
116
+ ~attributes,
117
+ ~globalSecondaryIndexes=?,
118
+ ~ttl: option<int>=?,
119
+ ~rangeKey=?,
120
+ ~restoreSourceName=?,
121
+ ~tags=?,
122
+ ~streamEnabled=?,
123
+ ~streamViewType=?,
124
+ ) => {
125
+ let ttl = ttl->Option.map(_ =>
126
+ {
127
+ PulumiAws.DynamoDb.Table.enabled: true,
128
+ attributeName: Util_DynamoDb_Runtime.purgeTimeAttributeName,
129
+ }->Pulumi.Input.make
130
+ )
131
+
132
+ let restoreDateTime = ReventlessCore.Env.restoreDateTime
133
+
134
+ {
135
+ PulumiAws.DynamoDb.Table.attributes: attributes->Pulumi.Input.make,
136
+ hashKey: "id"->Pulumi.Input.make,
137
+ rangeKey: ?(rangeKey->Option.map(Pulumi.Input.make)),
138
+ billingMode: PAY_PER_REQUEST,
139
+ ?globalSecondaryIndexes,
140
+ ?tags,
141
+ ?ttl,
142
+ pointInTimeRecovery: {
143
+ enabled: true,
144
+ }->Pulumi.Input.make,
145
+ restoreSourceName: ?(restoreSourceName->Option.map(Pulumi.Input.make)),
146
+ restoreDateTime: ?(
147
+ restoreSourceName->Option.flatMap(_ => restoreDateTime->Option.map(Pulumi.Input.make))
148
+ ),
149
+ restoreToLatestTime: ?(
150
+ restoreSourceName->Option.map(_ => restoreDateTime->Option.isNone->Pulumi.Input.make)
151
+ ),
152
+ ?streamEnabled,
153
+ ?streamViewType,
154
+ }
155
+ }
156
+
157
+ let option2Str = opt =>
158
+ switch opt {
159
+ | Some(value) => `Some(${value})`
160
+ | None => "None"
161
+ }
162
+
163
+ let makeTable = (
164
+ ~attributes,
165
+ ~globalSecondaryIndexes=?,
166
+ ~ttl: option<int>=?,
167
+ ~rangeKey=?,
168
+ ~tags=?,
169
+ ~opts,
170
+ name,
171
+ ) => {
172
+ let restoreSourceName =
173
+ Pulumi.Config.make(Some("restore"))
174
+ ->Pulumi.Config.getObject("tables")
175
+ ->Option.flatMap(tables => tables->Dict.get(name))
176
+
177
+ let (dependencies, registerResource) = Util_DynamoDb_TableManager.getDependencies()
178
+
179
+ let table = PulumiAws.DynamoDb.Table.make(
180
+ ~name,
181
+ ~args=makeTableArgs(
182
+ ~attributes,
183
+ ~globalSecondaryIndexes?,
184
+ ~ttl?,
185
+ ~rangeKey?,
186
+ ~restoreSourceName?,
187
+ ~tags?,
188
+ ),
189
+ ~opts={
190
+ ...opts,
191
+ dependsOn: dependencies->Pulumi.Output.asInput,
192
+ },
193
+ )
194
+
195
+ registerResource(table->Pulumi.Resource.makeFromJs)
196
+
197
+ restoreSourceName->Option.isNone
198
+ // Workaround when restore enabled
199
+ ? updateTable(~ttl?, table)
200
+ : table
201
+ }
202
+
203
+ let findResource = resources =>
204
+ resources->ReventlessCore.Util.Adapter.findResource(AWS.DynamoDb.service)
205
+
206
+ let findResolvedResource = resources =>
207
+ resources->ReventlessCore.Util.Adapter.findResolvedResource(AWS.DynamoDb.service)
208
+
209
+ let findResourceInOutput = resourcesOutput =>
210
+ resourcesOutput->ReventlessCore.Util.Adapter.findResourceInOutput(AWS.DynamoDb.service)
@@ -0,0 +1,218 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Aws from "@pulumi/aws";
4
+ import * as Output$Pulumi from "@reventlessdev/rescript-pulumi-pulumi/src/Output.res.mjs";
5
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
6
+ import * as Pulumi from "@pulumi/pulumi";
7
+ import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
8
+ import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
9
+ import * as AWS$ReventlessAws from "../adapter/AWS.res.mjs";
10
+ import * as Logger$ReventlessCore from "@reventlessdev/reventless-core/src/util/Logger.res.mjs";
11
+ import * as Adapter$ReventlessInfra from "@reventlessdev/reventless-infra/src/adapter/Adapter.res.mjs";
12
+ import * as ClientDynamodb from "@aws-sdk/client-dynamodb";
13
+ import * as DynamoDb_DynamoDb$AwsSdk from "@reventlessdev/rescript-aws-sdk/src/DynamoDb_DynamoDb.res.mjs";
14
+ import * as Util_Adapter$ReventlessCore from "@reventlessdev/reventless-core/src/util/Util_Adapter.res.mjs";
15
+ import * as Util_DynamoDb_Runtime$ReventlessAws from "./Util_DynamoDb_Runtime.res.mjs";
16
+ import * as Util_DynamoDb_TableManager$ReventlessAws from "./Util_DynamoDb_TableManager.res.mjs";
17
+
18
+ let log = Logger$ReventlessCore.fromEnv();
19
+
20
+ function toResourceInfo(param) {
21
+ return Pulumi.all([
22
+ param.hashKey,
23
+ param.rangeKey
24
+ ]).apply(param => ({
25
+ TAG: "StorageKeys",
26
+ partitionKey: param[0],
27
+ sortKey: param[1]
28
+ }));
29
+ }
30
+
31
+ function toResolvedTableOutput(param) {
32
+ return Pulumi.all([
33
+ param.name,
34
+ param.id,
35
+ param.arn,
36
+ param.hashKey,
37
+ param.rangeKey
38
+ ]).apply(param => ({
39
+ id: param[1],
40
+ name: param[0],
41
+ arn: param[2],
42
+ hashKey: param[3],
43
+ rangeKey: Stdlib_Option.map(param[4], rangeKey => rangeKey)
44
+ }));
45
+ }
46
+
47
+ function toResource(tags, table) {
48
+ let name = table.name;
49
+ return Adapter$ReventlessInfra.make(name, table.id, table.arn, name.apply(param => AWS$ReventlessAws.DynamoDb.service), toResourceInfo(table), undefined, undefined, Pulumi.output("aws:dynamodb:Table"), undefined, tags);
50
+ }
51
+
52
+ function arn2tableName(arn) {
53
+ let match = arn.split(":");
54
+ if (match.length !== 6) {
55
+ return Stdlib_JsError.throwWithMessage("Invalid ARN: " + arn);
56
+ } else {
57
+ return match[5];
58
+ }
59
+ }
60
+
61
+ async function enableTtl(tableName) {
62
+ log.info("DynamoDb", undefined, `enableTimeToLive for ` + tableName);
63
+ let res = await DynamoDb_DynamoDb$AwsSdk.UpdateTimeToLiveCommand.send(new ClientDynamodb.UpdateTimeToLiveCommand({
64
+ TableName: tableName,
65
+ TimeToLiveSpecification: {
66
+ Enabled: true,
67
+ AttributeName: Util_DynamoDb_Runtime$ReventlessAws.purgeTimeAttributeName
68
+ }
69
+ }));
70
+ return {
71
+ attributeName: res.TimeToLiveSpecification.AttributeName,
72
+ enabled: res.TimeToLiveSpecification.Enabled
73
+ };
74
+ }
75
+
76
+ function verifyTtl(expectedTtl, param) {
77
+ return Output$Pulumi.flatMap(Pulumi.all([
78
+ param.name,
79
+ param.ttl
80
+ ]), param => {
81
+ let tableName = param[0];
82
+ let ttlOpt = Primitive_option.fromNullable(param[1]);
83
+ let match = Stdlib_Option.flatMap(ttlOpt, t => t.enabled);
84
+ if (match !== undefined) {
85
+ if (!match && expectedTtl !== undefined) {
86
+ return enableTtl(tableName);
87
+ }
88
+ } else if (expectedTtl !== undefined) {
89
+ return enableTtl(tableName);
90
+ }
91
+ return Promise.resolve(Stdlib_Option.getOr(ttlOpt, {
92
+ attributeName: ""
93
+ }));
94
+ });
95
+ }
96
+
97
+ async function enablePointInTimeRecovery(tableName) {
98
+ log.info("DynamoDb", undefined, `enablePointInTimeRecovery for ` + tableName);
99
+ let updateContinuousBackups = new ClientDynamodb.UpdateContinuousBackupsCommand({
100
+ TableName: tableName,
101
+ PointInTimeRecoverySpecification: {
102
+ PointInTimeRecoveryEnabled: true
103
+ }
104
+ });
105
+ let res = await DynamoDb_DynamoDb$AwsSdk.UpdateContinuousBackupsCommand.send(updateContinuousBackups);
106
+ return {
107
+ enabled: res.ContinuousBackupsDescription.ContinuousBackupsStatus === "ENABLED"
108
+ };
109
+ }
110
+
111
+ function verifyPointInTimeRecovery(table) {
112
+ return Output$Pulumi.flatMap(Pulumi.all([
113
+ table.name,
114
+ table.pointInTimeRecovery
115
+ ]), param => {
116
+ let pointInTimeRecovery = param[1];
117
+ if (pointInTimeRecovery.enabled) {
118
+ return Promise.resolve(pointInTimeRecovery);
119
+ } else {
120
+ return enablePointInTimeRecovery(param[0]);
121
+ }
122
+ });
123
+ }
124
+
125
+ function updateTable(ttl, table) {
126
+ let newTtl = verifyTtl(ttl, table);
127
+ let newPointInTimeRecovery = verifyPointInTimeRecovery(table);
128
+ return {
129
+ arn: table.arn,
130
+ name: table.name,
131
+ id: table.id,
132
+ hashKey: table.hashKey,
133
+ rangeKey: table.rangeKey,
134
+ streamEnabled: table.streamEnabled,
135
+ streamArn: table.streamArn,
136
+ streamLabel: table.streamLabel,
137
+ ttl: newTtl,
138
+ pointInTimeRecovery: newPointInTimeRecovery
139
+ };
140
+ }
141
+
142
+ function makeTableArgs(attributes, globalSecondaryIndexes, ttl, rangeKey, restoreSourceName, tags, streamEnabled, streamViewType) {
143
+ let ttl$1 = Stdlib_Option.map(ttl, param => ({
144
+ attributeName: Util_DynamoDb_Runtime$ReventlessAws.purgeTimeAttributeName,
145
+ enabled: true
146
+ }));
147
+ let restoreDateTime = process.env.RESTORE_DATE_TIME;
148
+ return {
149
+ attributes: attributes,
150
+ hashKey: "id",
151
+ billingMode: "PAY_PER_REQUEST",
152
+ rangeKey: Stdlib_Option.map(rangeKey, prim => prim),
153
+ globalSecondaryIndexes: globalSecondaryIndexes,
154
+ tags: tags,
155
+ streamEnabled: streamEnabled,
156
+ streamViewType: streamViewType,
157
+ ttl: ttl$1,
158
+ pointInTimeRecovery: {
159
+ enabled: true
160
+ },
161
+ restoreSourceName: Stdlib_Option.map(restoreSourceName, prim => prim),
162
+ restoreDateTime: Stdlib_Option.flatMap(restoreSourceName, param => Stdlib_Option.map(restoreDateTime, prim => prim)),
163
+ restoreToLatestTime: Stdlib_Option.map(restoreSourceName, param => Stdlib_Option.isNone(restoreDateTime))
164
+ };
165
+ }
166
+
167
+ function option2Str(opt) {
168
+ if (opt !== undefined) {
169
+ return `Some(` + opt + `)`;
170
+ } else {
171
+ return "None";
172
+ }
173
+ }
174
+
175
+ function makeTable(attributes, globalSecondaryIndexes, ttl, rangeKey, tags, opts, name) {
176
+ let restoreSourceName = Stdlib_Option.flatMap(new Pulumi.Config("restore").getObject("tables"), tables => tables[name]);
177
+ let match = Util_DynamoDb_TableManager$ReventlessAws.getDependencies();
178
+ let newrecord = {...opts};
179
+ let table = new (Aws.dynamodb.Table)(name, makeTableArgs(attributes, globalSecondaryIndexes, ttl, rangeKey, restoreSourceName, tags, undefined, undefined), (newrecord.dependsOn = match[0], newrecord));
180
+ match[1](table);
181
+ if (Stdlib_Option.isNone(restoreSourceName)) {
182
+ return updateTable(ttl, table);
183
+ } else {
184
+ return table;
185
+ }
186
+ }
187
+
188
+ function findResource(resources) {
189
+ return Util_Adapter$ReventlessCore.findResource(resources, AWS$ReventlessAws.DynamoDb.service);
190
+ }
191
+
192
+ function findResolvedResource(resources) {
193
+ return Util_Adapter$ReventlessCore.findResolvedResource(resources, AWS$ReventlessAws.DynamoDb.service);
194
+ }
195
+
196
+ function findResourceInOutput(resourcesOutput) {
197
+ return Util_Adapter$ReventlessCore.findResourceInOutput(resourcesOutput, AWS$ReventlessAws.DynamoDb.service);
198
+ }
199
+
200
+ export {
201
+ log,
202
+ toResourceInfo,
203
+ toResolvedTableOutput,
204
+ toResource,
205
+ arn2tableName,
206
+ enableTtl,
207
+ verifyTtl,
208
+ enablePointInTimeRecovery,
209
+ verifyPointInTimeRecovery,
210
+ updateTable,
211
+ makeTableArgs,
212
+ option2Str,
213
+ makeTable,
214
+ findResource,
215
+ findResolvedResource,
216
+ findResourceInOutput,
217
+ }
218
+ /* log Not a pure module */
@@ -0,0 +1,138 @@
1
+ let toResourceInfo = (table: PulumiAws.DynamoDb.Table.t) =>
2
+ table.streamArn->Pulumi.Output.apply(streamArn => ReventlessInfra.Adapter.StreamSource({sourceUrn: streamArn}))
3
+
4
+ let streamArnFromDynamoDbTableResource = (resource: ReventlessInfra.Adapter.resource) =>
5
+ resource.resourceInfo->Pulumi.Output.apply(resourceInfo =>
6
+ switch resourceInfo {
7
+ | StreamSource({sourceUrn}) => sourceUrn
8
+ | _ =>
9
+ let tableName = resource.name->Pulumi.Output.get
10
+ JsError.throwWithMessage("No streamArn field given for table " ++ tableName)
11
+ }
12
+ )
13
+
14
+ let toResource = (~tags=?, table: PulumiAws.DynamoDb.Table.t): ReventlessInfra.Adapter.resource =>
15
+ ReventlessInfra.Adapter.make(
16
+ ~name=table.name,
17
+ ~id=table.id,
18
+ ~urn=table.arn,
19
+ ~service=table.name->Pulumi.Output.apply(_ => AWS.DynamoDbStream.service),
20
+ ~resourceInfo=table->toResourceInfo,
21
+ ~resourceType="aws:dynamodb:Table"->Pulumi.Output.make,
22
+ ~tags=?tags,
23
+ )
24
+
25
+ let toStreamResource = (table: ReventlessInfra.Adapter.resource): ReventlessInfra.Adapter.resource => {
26
+ let streamArn = table->streamArnFromDynamoDbTableResource
27
+
28
+ ReventlessInfra.Adapter.make(
29
+ ~name=table.name,
30
+ ~id=streamArn,
31
+ ~urn=streamArn,
32
+ ~service=table.name->Pulumi.Output.apply(_ => AWS.DynamoDbStream.service),
33
+ ~resourceType="aws:dynamodb:Stream"->Pulumi.Output.make,
34
+ )
35
+ }
36
+
37
+ // Workaround when restore enabled: turn on stream, ttl & pointInTimeRecovery again
38
+ open AwsSdk.DynamoDb_DynamoDb
39
+
40
+ let log = ReventlessCore.Logger.fromEnv()
41
+
42
+ let enableStream = async tableName => {
43
+ log.info(~comp="DynamoDbStream", `enableStream for ${tableName}`)
44
+
45
+ switch await UpdateTableCommand.make({
46
+ tableName,
47
+ streamSpecification: {
48
+ streamEnabled: true,
49
+ streamViewType: #NEW_IMAGE,
50
+ },
51
+ })->UpdateTableCommand.send {
52
+ | res => (
53
+ res.tableDescription.streamSpecification.streamEnabled,
54
+ Some(res.tableDescription.latestStreamArn),
55
+ res.tableDescription.latestStreamLabel,
56
+ )
57
+ }
58
+ }
59
+
60
+ let verifyStream = (table: PulumiAws.DynamoDb.Table.t) =>
61
+ (table.name, table.streamEnabled, table.streamArn, table.streamLabel)
62
+ ->Pulumi.Output.all4
63
+ ->Pulumi.Output.flatMap(((tableName, streamEnabled, streamArn, streamLabel)) =>
64
+ switch streamEnabled {
65
+ | None
66
+ | Some(false) =>
67
+ enableStream(tableName)
68
+ | Some(true) => (true, Some(streamArn), streamLabel)->Promise.resolve
69
+ }->Pulumi.Output.fromPromise
70
+ )
71
+
72
+ let updateTable: (~ttl: int=?, PulumiAws.DynamoDb.Table.table) => PulumiAws.DynamoDb.Table.table = (
73
+ ~ttl=?,
74
+ table,
75
+ ) => {
76
+ let streamInfo = verifyStream(table)
77
+
78
+ let newTtl = Util_DynamoDb.verifyTtl(~expectedTtl=?ttl, table)
79
+ let newPointInTimeRecovery = Util_DynamoDb.verifyPointInTimeRecovery(table)
80
+
81
+ {
82
+ ...table,
83
+ streamEnabled: streamInfo->Pulumi.Output.apply(((enabled, _, _)) => Some(enabled)),
84
+ streamArn: streamInfo->Pulumi.Output.apply(((_, streamArn, _)) => streamArn->Option.getOr("")),
85
+ streamLabel: streamInfo->Pulumi.Output.apply(((_, _, streamLabel)) => streamLabel),
86
+ ttl: newTtl,
87
+ pointInTimeRecovery: newPointInTimeRecovery,
88
+ }
89
+ }
90
+
91
+ let makeTable = (
92
+ ~attributes,
93
+ ~globalSecondaryIndexes=?,
94
+ ~ttl: option<int>=?,
95
+ ~rangeKey=?,
96
+ ~streamViewType,
97
+ ~tags=?,
98
+ ~opts,
99
+ name,
100
+ ) => {
101
+ let restoreSourceName =
102
+ Pulumi.Config.make(Some("restore"))
103
+ ->Pulumi.Config.getObject("tables")
104
+ ->Option.flatMap(tables => tables->Dict.get(name))
105
+
106
+ let (dependencies, registerResource) = Util_DynamoDb_TableManager.getDependencies()
107
+
108
+ let table = PulumiAws.DynamoDb.Table.make(
109
+ ~name,
110
+ ~args=Util_DynamoDb.makeTableArgs(
111
+ ~attributes,
112
+ ~globalSecondaryIndexes?,
113
+ ~ttl?,
114
+ ~rangeKey?,
115
+ ~restoreSourceName?,
116
+ ~streamEnabled=true,
117
+ ~streamViewType,
118
+ ~tags?,
119
+ ),
120
+ ~opts={
121
+ ...opts,
122
+ dependsOn: dependencies->Pulumi.Output.asInput,
123
+ },
124
+ )
125
+
126
+ registerResource(table->Pulumi.Resource.makeFromJs)
127
+
128
+ restoreSourceName->Option.isNone
129
+ // Workaround when restore enabled
130
+ ? updateTable(~ttl?, table)
131
+ : table
132
+ }
133
+
134
+ let findResource = resources =>
135
+ resources->ReventlessCore.Util.Adapter.findResource(AWS.DynamoDbStream.service)
136
+
137
+ let findResolvedResource = resources =>
138
+ resources->ReventlessCore.Util.Adapter.findResolvedResource(AWS.DynamoDbStream.service)
@@ -0,0 +1,134 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Aws from "@pulumi/aws";
4
+ import * as Output$Pulumi from "@reventlessdev/rescript-pulumi-pulumi/src/Output.res.mjs";
5
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
6
+ import * as Pulumi from "@pulumi/pulumi";
7
+ import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
8
+ import * as AWS$ReventlessAws from "../adapter/AWS.res.mjs";
9
+ import * as Logger$ReventlessCore from "@reventlessdev/reventless-core/src/util/Logger.res.mjs";
10
+ import * as Adapter$ReventlessInfra from "@reventlessdev/reventless-infra/src/adapter/Adapter.res.mjs";
11
+ import * as ClientDynamodb from "@aws-sdk/client-dynamodb";
12
+ import * as DynamoDb_DynamoDb$AwsSdk from "@reventlessdev/rescript-aws-sdk/src/DynamoDb_DynamoDb.res.mjs";
13
+ import * as Util_Adapter$ReventlessCore from "@reventlessdev/reventless-core/src/util/Util_Adapter.res.mjs";
14
+ import * as Util_DynamoDb$ReventlessAws from "./Util_DynamoDb.res.mjs";
15
+ import * as Util_DynamoDb_TableManager$ReventlessAws from "./Util_DynamoDb_TableManager.res.mjs";
16
+
17
+ function toResourceInfo(table) {
18
+ return table.streamArn.apply(streamArn => ({
19
+ TAG: "StreamSource",
20
+ sourceUrn: streamArn
21
+ }));
22
+ }
23
+
24
+ function streamArnFromDynamoDbTableResource(resource) {
25
+ return resource.resourceInfo.apply(resourceInfo => {
26
+ if (typeof resourceInfo === "object" && resourceInfo.TAG === "StreamSource") {
27
+ return resourceInfo.sourceUrn;
28
+ }
29
+ let tableName = resource.name.get();
30
+ return Stdlib_JsError.throwWithMessage("No streamArn field given for table " + tableName);
31
+ });
32
+ }
33
+
34
+ function toResource(tags, table) {
35
+ return Adapter$ReventlessInfra.make(table.name, table.id, table.arn, table.name.apply(param => AWS$ReventlessAws.DynamoDbStream.service), toResourceInfo(table), undefined, undefined, Pulumi.output("aws:dynamodb:Table"), undefined, tags);
36
+ }
37
+
38
+ function toStreamResource(table) {
39
+ let streamArn = streamArnFromDynamoDbTableResource(table);
40
+ return Adapter$ReventlessInfra.make(table.name, streamArn, streamArn, table.name.apply(param => AWS$ReventlessAws.DynamoDbStream.service), undefined, undefined, undefined, Pulumi.output("aws:dynamodb:Stream"), undefined, undefined);
41
+ }
42
+
43
+ let log = Logger$ReventlessCore.fromEnv();
44
+
45
+ async function enableStream(tableName) {
46
+ log.info("DynamoDbStream", undefined, `enableStream for ` + tableName);
47
+ let res = await DynamoDb_DynamoDb$AwsSdk.UpdateTableCommand.send(new ClientDynamodb.UpdateTableCommand({
48
+ TableName: tableName,
49
+ StreamSpecification: {
50
+ StreamEnabled: true,
51
+ StreamViewType: "NEW_IMAGE"
52
+ }
53
+ }));
54
+ return [
55
+ res.TableDescription.StreamSpecification.StreamEnabled,
56
+ res.TableDescription.LatestStreamArn,
57
+ res.TableDescription.LatestStreamLabel
58
+ ];
59
+ }
60
+
61
+ function verifyStream(table) {
62
+ return Output$Pulumi.flatMap(Pulumi.all([
63
+ table.name,
64
+ table.streamEnabled,
65
+ table.streamArn,
66
+ table.streamLabel
67
+ ]), param => {
68
+ let streamEnabled = param[1];
69
+ let tableName = param[0];
70
+ if (streamEnabled !== undefined && streamEnabled) {
71
+ return Promise.resolve([
72
+ true,
73
+ param[2],
74
+ param[3]
75
+ ]);
76
+ } else {
77
+ return enableStream(tableName);
78
+ }
79
+ });
80
+ }
81
+
82
+ function updateTable(ttl, table) {
83
+ let streamInfo = verifyStream(table);
84
+ let newTtl = Util_DynamoDb$ReventlessAws.verifyTtl(ttl, table);
85
+ let newPointInTimeRecovery = Util_DynamoDb$ReventlessAws.verifyPointInTimeRecovery(table);
86
+ return {
87
+ arn: table.arn,
88
+ name: table.name,
89
+ id: table.id,
90
+ hashKey: table.hashKey,
91
+ rangeKey: table.rangeKey,
92
+ streamEnabled: streamInfo.apply(param => param[0]),
93
+ streamArn: streamInfo.apply(param => Stdlib_Option.getOr(param[1], "")),
94
+ streamLabel: streamInfo.apply(param => param[2]),
95
+ ttl: newTtl,
96
+ pointInTimeRecovery: newPointInTimeRecovery
97
+ };
98
+ }
99
+
100
+ function makeTable(attributes, globalSecondaryIndexes, ttl, rangeKey, streamViewType, tags, opts, name) {
101
+ let restoreSourceName = Stdlib_Option.flatMap(new Pulumi.Config("restore").getObject("tables"), tables => tables[name]);
102
+ let match = Util_DynamoDb_TableManager$ReventlessAws.getDependencies();
103
+ let newrecord = {...opts};
104
+ let table = new (Aws.dynamodb.Table)(name, Util_DynamoDb$ReventlessAws.makeTableArgs(attributes, globalSecondaryIndexes, ttl, rangeKey, restoreSourceName, tags, true, streamViewType), (newrecord.dependsOn = match[0], newrecord));
105
+ match[1](table);
106
+ if (Stdlib_Option.isNone(restoreSourceName)) {
107
+ return updateTable(ttl, table);
108
+ } else {
109
+ return table;
110
+ }
111
+ }
112
+
113
+ function findResource(resources) {
114
+ return Util_Adapter$ReventlessCore.findResource(resources, AWS$ReventlessAws.DynamoDbStream.service);
115
+ }
116
+
117
+ function findResolvedResource(resources) {
118
+ return Util_Adapter$ReventlessCore.findResolvedResource(resources, AWS$ReventlessAws.DynamoDbStream.service);
119
+ }
120
+
121
+ export {
122
+ toResourceInfo,
123
+ streamArnFromDynamoDbTableResource,
124
+ toResource,
125
+ toStreamResource,
126
+ log,
127
+ enableStream,
128
+ verifyStream,
129
+ updateTable,
130
+ makeTable,
131
+ findResource,
132
+ findResolvedResource,
133
+ }
134
+ /* log Not a pure module */