@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,170 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Stdlib_JSON from "@rescript/runtime/lib/es6/Stdlib_JSON.js";
4
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
5
+ import * as HashNode from "@smithy/hash-node";
6
+ import * as SignatureV4 from "@smithy/signature-v4";
7
+ import * as Logger$ReventlessCore from "@reventlessdev/reventless-core/src/util/Logger.res.mjs";
8
+ import * as CredentialProviderNode from "@aws-sdk/credential-provider-node";
9
+
10
+ let log = Logger$ReventlessCore.fromEnv();
11
+
12
+ let sha256 = HashNode.Hash.bind(null, "sha256");
13
+
14
+ function graphqlEnum(name) {
15
+ return Object.fromEntries([[
16
+ "__enum",
17
+ name
18
+ ]]);
19
+ }
20
+
21
+ function jsonToLiteral(value) {
22
+ if (value === null) {
23
+ return "null";
24
+ }
25
+ if (Array.isArray(value)) {
26
+ return `[` + value.map(jsonToLiteral).join(", ") + `]`;
27
+ }
28
+ switch (typeof value) {
29
+ case "boolean" :
30
+ if (value) {
31
+ return "true";
32
+ } else {
33
+ return "false";
34
+ }
35
+ case "string" :
36
+ let escaped = value.replaceAll("\\", "\\\\").replaceAll("\"", "\\\"");
37
+ return `"` + escaped + `"`;
38
+ case "number" :
39
+ return value.toString();
40
+ case "object" :
41
+ let match = value["__enum"];
42
+ if (typeof match === "string") {
43
+ return match;
44
+ }
45
+ let pairs = Object.entries(value).map(param => param[0] + `: ` + jsonToLiteral(param[1]));
46
+ return `{` + pairs.join(", ") + `}`;
47
+ }
48
+ }
49
+
50
+ function buildQuery(mutation, variablesDict) {
51
+ let args = Object.entries(variablesDict).map(param => param[0] + `: ` + jsonToLiteral(param[1])).join(", ");
52
+ return `mutation { ` + mutation + `(` + args + `) }`;
53
+ }
54
+
55
+ async function sendQuery(endpoint, region, queryString) {
56
+ let url = new URL(endpoint);
57
+ let hostname = url.hostname;
58
+ let path = url.pathname;
59
+ let body = JSON.stringify(Object.fromEntries([[
60
+ "query",
61
+ queryString
62
+ ]]));
63
+ let credProvider = CredentialProviderNode.defaultProvider();
64
+ let signer = new SignatureV4.SignatureV4({
65
+ service: "appsync",
66
+ region: region,
67
+ credentials: credProvider,
68
+ sha256: sha256
69
+ });
70
+ let headers = Object.fromEntries([
71
+ [
72
+ "content-type",
73
+ "application/json"
74
+ ],
75
+ [
76
+ "host",
77
+ hostname
78
+ ]
79
+ ]);
80
+ let request = {
81
+ method: "POST",
82
+ hostname: hostname,
83
+ path: path,
84
+ headers: headers,
85
+ body: body
86
+ };
87
+ let signed = await signer.sign(request);
88
+ let response = await fetch(endpoint, {
89
+ method: "POST",
90
+ headers: signed.headers,
91
+ body: signed.body
92
+ });
93
+ let json = await response.json();
94
+ let d = Stdlib_JSON.Decode.object(json);
95
+ if (d === undefined) {
96
+ return;
97
+ }
98
+ let errors = d["errors"];
99
+ if (errors !== undefined) {
100
+ log.error("Util_AppSync_Caller", errors, "query errors");
101
+ return;
102
+ } else {
103
+ return d["data"];
104
+ }
105
+ }
106
+
107
+ async function sendMutation(endpoint, region, mutation, variables) {
108
+ let url = new URL(endpoint);
109
+ let hostname = url.hostname;
110
+ let path = url.pathname;
111
+ let str = JSON.stringify(variables);
112
+ let variablesDict;
113
+ if (str !== undefined) {
114
+ let d = JSON.parse(str);
115
+ variablesDict = typeof d === "object" && d !== null && !Array.isArray(d) ? d : ({});
116
+ } else {
117
+ variablesDict = {};
118
+ }
119
+ let query = buildQuery(mutation, variablesDict);
120
+ let body = JSON.stringify(Object.fromEntries([[
121
+ "query",
122
+ query
123
+ ]]));
124
+ let credProvider = CredentialProviderNode.defaultProvider();
125
+ let signer = new SignatureV4.SignatureV4({
126
+ service: "appsync",
127
+ region: region,
128
+ credentials: credProvider,
129
+ sha256: sha256
130
+ });
131
+ let headers = Object.fromEntries([
132
+ [
133
+ "content-type",
134
+ "application/json"
135
+ ],
136
+ [
137
+ "host",
138
+ hostname
139
+ ]
140
+ ]);
141
+ let request = {
142
+ method: "POST",
143
+ hostname: hostname,
144
+ path: path,
145
+ headers: headers,
146
+ body: body
147
+ };
148
+ let signed = await signer.sign(request);
149
+ let response = await fetch(endpoint, {
150
+ method: "POST",
151
+ headers: signed.headers,
152
+ body: signed.body
153
+ });
154
+ let json = await response.json();
155
+ let errors = Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(json), d => d["errors"]);
156
+ if (errors !== undefined) {
157
+ return log.error("Util_AppSync_Caller", errors, mutation + ` errors`);
158
+ }
159
+ }
160
+
161
+ export {
162
+ log,
163
+ sha256,
164
+ graphqlEnum,
165
+ jsonToLiteral,
166
+ buildQuery,
167
+ sendQuery,
168
+ sendMutation,
169
+ }
170
+ /* log Not a pure module */
@@ -0,0 +1,255 @@
1
+ // Node.js path bindings
2
+ @module("path") external dirname: string => string = "dirname"
3
+ @module("path") external join2: (string, string) => string = "join"
4
+ @module("path") external relative: (string, string) => string = "relative"
5
+
6
+ // Node.js fs bindings
7
+ @module("fs") external existsSync: string => bool = "existsSync"
8
+ @module("fs") external readFileSync: (string, string) => string = "readFileSync"
9
+ type dirent
10
+ @module("fs") external readdirSync: (string, {"withFileTypes": bool}) => array<dirent> = "readdirSync"
11
+ @send external isDirectory: dirent => bool = "isDirectory"
12
+ @get external direntName: dirent => string = "name"
13
+
14
+ // Node.js crypto bindings
15
+ type hashObj
16
+ @module("crypto") external createHash: string => hashObj = "createHash"
17
+ @send external update: (hashObj, string) => hashObj = "update"
18
+ @send external digest: (hashObj, string) => string = "digest"
19
+
20
+ // URL global
21
+ type urlObj
22
+ @new external newURL: string => urlObj = "URL"
23
+ @get external pathname: urlObj => string = "pathname"
24
+
25
+ // module.createRequire
26
+ type requireFn
27
+ @module("module") external createRequire: string => requireFn = "createRequire"
28
+ @send external requireResolve: (requireFn, string) => string = "resolve"
29
+
30
+ // process.cwd
31
+ @val @scope("process") external cwd: unit => string = "cwd"
32
+
33
+ // Module-level state: cache populated by getModuleSpecifier
34
+ let packageRootCache: dict<string> = Dict.make()
35
+ let localRequire: requireFn = createRequire(%raw("import.meta.url"))
36
+
37
+ /**
38
+ * Convert an import.meta.url file URL to an npm module specifier.
39
+ * Walks up from the file to find the nearest package.json, reads the package name,
40
+ * and constructs the npm specifier from packageName + relative path.
41
+ */
42
+ let getModuleSpecifier = (importMetaUrl: string): string => {
43
+ if !(importMetaUrl->String.startsWith("file://")) {
44
+ importMetaUrl
45
+ } else {
46
+ let filePath = newURL(importMetaUrl)->pathname
47
+ let dirRef = ref(dirname(filePath))
48
+ let resultRef: ref<option<string>> = ref(None)
49
+ while dirRef.contents != "/" && resultRef.contents->Option.isNone {
50
+ let dir = dirRef.contents
51
+ let pkgPath = join2(dir, "package.json")
52
+ if existsSync(pkgPath) {
53
+ let pkgText = readFileSync(pkgPath, "utf-8")
54
+ switch pkgText->JSON.parseOrThrow->JSON.Decode.object {
55
+ | Some(obj) =>
56
+ switch obj->Dict.get("name")->Option.flatMap(JSON.Decode.string) {
57
+ | Some(pkgName) =>
58
+ packageRootCache->Dict.set(pkgName, dir)
59
+ let relPath = relative(dir, filePath)
60
+ resultRef := Some(pkgName ++ "/" ++ relPath)
61
+ | None => dirRef := dirname(dir)
62
+ }
63
+ | None => dirRef := dirname(dir)
64
+ }
65
+ } else {
66
+ dirRef := dirname(dir)
67
+ }
68
+ }
69
+ switch resultRef.contents {
70
+ | Some(specifier) => specifier
71
+ | None => JsError.throwWithMessage(`No package.json found for ${filePath}`)
72
+ }
73
+ }
74
+ }
75
+
76
+ /**
77
+ * Extract the npm package name from a module specifier.
78
+ * Handles scoped packages (@scope/pkg/path) and unscoped (pkg/path).
79
+ */
80
+ let extractPackageName = (specifier: string): string => {
81
+ let parts = specifier->String.split("/")
82
+ if specifier->String.startsWith("@") {
83
+ parts->Array.getUnsafe(0) ++ "/" ++ parts->Array.getUnsafe(1)
84
+ } else {
85
+ parts->Array.getUnsafe(0)
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Resolve the root directory of an npm package.
91
+ * Fast path: populated by getModuleSpecifier when it walks the package tree.
92
+ */
93
+ let resolvePackageRoot = (packageName: string): string => {
94
+ switch packageRootCache->Dict.get(packageName) {
95
+ | Some(cachedRoot) => cachedRoot
96
+ | None =>
97
+ try {
98
+ let pkgJsonPath = localRequire->requireResolve(packageName ++ "/package.json")
99
+ dirname(pkgJsonPath)
100
+ } catch {
101
+ | _ =>
102
+ let cwdRequire = createRequire(cwd() ++ "/index.js")
103
+ let pkgJsonPath = cwdRequire->requireResolve(packageName ++ "/package.json")
104
+ dirname(pkgJsonPath)
105
+ }
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Compute a SHA256 hash of a string, returned as base64.
111
+ */
112
+ let hashString = (str: string): string =>
113
+ createHash("sha256")->update(str)->digest("base64")
114
+
115
+ let isSkippedDir = (n: string) =>
116
+ n == "node_modules" ||
117
+ n == "lib" ||
118
+ n == "cjs" ||
119
+ n == "dts" ||
120
+ n == "tests" ||
121
+ n == "test" ||
122
+ n == "__mocks__" ||
123
+ n == "__tests__" ||
124
+ n == ".git" ||
125
+ n == "coverage"
126
+
127
+ // Reads file as a string for content hashing; Buffer would be slightly more
128
+ // efficient but utf-8 keeps the hash stable across platforms and matches what
129
+ // Lambda will execute.
130
+ @module("fs") external readFileAsString: (string, string) => string = "readFileSync"
131
+
132
+ let rec walkDir = (
133
+ ~dir: string,
134
+ ~prefix: string,
135
+ ~assets: dict<Pulumi.Archive.assetOrArchive>,
136
+ ~paths: array<(string, string)>,
137
+ ) => {
138
+ let entries = readdirSync(dir, {"withFileTypes": true})
139
+ entries->Array.forEach(entry => {
140
+ let entryName = entry->direntName
141
+ if entry->isDirectory {
142
+ if !isSkippedDir(entryName) {
143
+ let newPrefix = prefix == "" ? entryName : prefix ++ "/" ++ entryName
144
+ walkDir(~dir=join2(dir, entryName), ~prefix=newPrefix, ~assets, ~paths)
145
+ }
146
+ } else if entryName == "package.json" || entryName->String.endsWith(".mjs") || entryName->String.endsWith(".js") {
147
+ let relPath = prefix == "" ? entryName : prefix ++ "/" ++ entryName
148
+ let absPath = join2(dir, entryName)
149
+ assets->Dict.set(
150
+ relPath,
151
+ Pulumi.Asset.fileAsset(absPath)->Pulumi.Archive.assetToAssetOrArchive,
152
+ )
153
+ paths->Array.push((relPath, absPath))
154
+ }
155
+ })
156
+ }
157
+
158
+ /**
159
+ * Create a filtered AssetArchive from a package directory.
160
+ * Only includes *.mjs and package.json; excludes node_modules/, lib/, tests/, etc.
161
+ * Returns both the archive and a content hash covering every bundled file so
162
+ * callers can produce a sourceCodeHash that changes when any source changes.
163
+ */
164
+ let createFilteredPackageArchive = (packageRoot: string): (Pulumi.Archive.t, string) => {
165
+ let assets: dict<Pulumi.Archive.assetOrArchive> = Dict.make()
166
+ let paths: array<(string, string)> = []
167
+ walkDir(~dir=packageRoot, ~prefix="", ~assets, ~paths)
168
+ // Sort so the hash is stable across filesystem traversal order.
169
+ paths->Array.sort(((a, _), (b, _)) => String.compare(a, b))
170
+ let combined =
171
+ paths
172
+ ->Array.map(((relPath, absPath)) => `${relPath}:${readFileAsString(absPath, "utf-8")}`)
173
+ ->Array.join("\n---\n")
174
+ (Pulumi.Archive.assetArchive(assets), hashString(combined))
175
+ }
176
+
177
+ type codeArchive = {
178
+ code: Pulumi.Archive.t,
179
+ sourceCodeHash: string,
180
+ }
181
+
182
+ /**
183
+ * Build a Lambda code AssetArchive with a static re-export entry point and optional user packages.
184
+ * Centralises the archive-building pattern used by every runtime builder.
185
+ *
186
+ * When @reventlessdev/reventless-aws is bundled, effect is automatically co-bundled.
187
+ * The entry points in reventless-aws import effect statically, and ESM resolution
188
+ * walks up from /var/task/node_modules/reventless-aws/... — it never reaches the
189
+ * Lambda layer at /opt/nodejs/node_modules. Bundling effect alongside ensures it
190
+ * is found at /var/task/node_modules/effect.
191
+ */
192
+ let buildCodeArchive = (
193
+ ~entryPointModule: string,
194
+ ~packageDirs: dict<string>,
195
+ // Extra string-typed assets to drop at the root of the asset zip. Keys are
196
+ // filenames (e.g. "pluginDefinition.json"); values are the file contents.
197
+ // The Lambda runtime extracts the zip to /var/task, so entry-point code can
198
+ // read each file via `readFileSync("/var/task/<filename>", "utf-8")` or
199
+ // (preferred) `readFileSync(new URL("./<filename>", import.meta.url))`.
200
+ // Used to ship payloads that would otherwise blow the 5120-byte
201
+ // UpdateFunctionConfiguration limit when packed into HANDLER_CONFIG.
202
+ ~extraStringAssets: dict<string>=Dict.make(),
203
+ ): codeArchive => {
204
+ let reExportCode = `export { handler } from "${entryPointModule}";`
205
+ let archiveContents: dict<Pulumi.Archive.assetOrArchive> = Dict.make()
206
+ archiveContents->Dict.set(
207
+ "index.mjs",
208
+ Pulumi.Asset.stringAsset(reExportCode)->Pulumi.Archive.assetToAssetOrArchive,
209
+ )
210
+ extraStringAssets->Dict.forEachWithKey((content, fileName) => {
211
+ archiveContents->Dict.set(
212
+ fileName,
213
+ Pulumi.Asset.stringAsset(content)->Pulumi.Archive.assetToAssetOrArchive,
214
+ )
215
+ })
216
+ // Co-bundle effect whenever reventless-aws is bundled (see comment above).
217
+ let allPackageDirs =
218
+ if packageDirs->Dict.has("@reventlessdev/reventless-aws") &&
219
+ !(packageDirs->Dict.has("effect")) {
220
+ let dirs = packageDirs->Dict.copy
221
+ dirs->Dict.set("effect", resolvePackageRoot("effect"))
222
+ dirs
223
+ } else {
224
+ packageDirs
225
+ }
226
+ let packageContentHashes: ref<array<string>> = ref([])
227
+ allPackageDirs->Dict.forEachWithKey((pkgRoot, pkgName) => {
228
+ let (archive, contentHash) = createFilteredPackageArchive(pkgRoot)
229
+ archiveContents->Dict.set(
230
+ `node_modules/${pkgName}`,
231
+ archive->Pulumi.Archive.archiveToAssetOrArchive,
232
+ )
233
+ packageContentHashes.contents->Array.push(`${pkgName}:${contentHash}`)
234
+ })
235
+ // Extra-asset content participates in the source hash so a change to
236
+ // pluginDefinition.json triggers a Lambda code update.
237
+ let extraHashEntries: array<string> = []
238
+ let extraKeys = extraStringAssets->Dict.keysToArray
239
+ extraKeys->Array.sort(String.compare)
240
+ extraKeys->Array.forEach(k => {
241
+ let v = extraStringAssets->Dict.get(k)->Option.getOr("")
242
+ extraHashEntries->Array.push(`${k}:${v}`)
243
+ })
244
+ let code = Pulumi.Archive.assetArchive(archiveContents)
245
+ packageContentHashes.contents->Array.sort(String.compare)
246
+ let sourceCodeHash =
247
+ hashString(
248
+ reExportCode ++
249
+ "\n---\n" ++
250
+ packageContentHashes.contents->Array.join(",") ++
251
+ "\n---\n" ++
252
+ extraHashEntries->Array.join("\n"),
253
+ )
254
+ {code, sourceCodeHash}
255
+ }
@@ -0,0 +1,179 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Fs from "fs";
4
+ import * as Path from "path";
5
+ import * as Crypto from "crypto";
6
+ import * as Module from "module";
7
+ import * as Stdlib_Dict from "@rescript/runtime/lib/es6/Stdlib_Dict.js";
8
+ import * as Stdlib_JSON from "@rescript/runtime/lib/es6/Stdlib_JSON.js";
9
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
10
+ import * as Pulumi from "@pulumi/pulumi";
11
+ import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
12
+ import * as Primitive_string from "@rescript/runtime/lib/es6/Primitive_string.js";
13
+
14
+ let packageRootCache = {};
15
+
16
+ let localRequire = Module.createRequire(import.meta.url);
17
+
18
+ function getModuleSpecifier(importMetaUrl) {
19
+ if (!importMetaUrl.startsWith("file://")) {
20
+ return importMetaUrl;
21
+ }
22
+ let filePath = new URL(importMetaUrl).pathname;
23
+ let dirRef = Path.dirname(filePath);
24
+ let resultRef;
25
+ while (dirRef !== "/" && Stdlib_Option.isNone(resultRef)) {
26
+ let dir = dirRef;
27
+ let pkgPath = Path.join(dir, "package.json");
28
+ if (Fs.existsSync(pkgPath)) {
29
+ let pkgText = Fs.readFileSync(pkgPath, "utf-8");
30
+ let obj = Stdlib_JSON.Decode.object(JSON.parse(pkgText));
31
+ if (obj !== undefined) {
32
+ let pkgName = Stdlib_Option.flatMap(obj["name"], Stdlib_JSON.Decode.string);
33
+ if (pkgName !== undefined) {
34
+ packageRootCache[pkgName] = dir;
35
+ let relPath = Path.relative(dir, filePath);
36
+ resultRef = pkgName + "/" + relPath;
37
+ } else {
38
+ dirRef = Path.dirname(dir);
39
+ }
40
+ } else {
41
+ dirRef = Path.dirname(dir);
42
+ }
43
+ } else {
44
+ dirRef = Path.dirname(dir);
45
+ }
46
+ };
47
+ let specifier = resultRef;
48
+ if (specifier !== undefined) {
49
+ return specifier;
50
+ } else {
51
+ return Stdlib_JsError.throwWithMessage(`No package.json found for ` + filePath);
52
+ }
53
+ }
54
+
55
+ function extractPackageName(specifier) {
56
+ let parts = specifier.split("/");
57
+ if (specifier.startsWith("@")) {
58
+ return parts[0] + "/" + parts[1];
59
+ } else {
60
+ return parts[0];
61
+ }
62
+ }
63
+
64
+ function resolvePackageRoot(packageName) {
65
+ let cachedRoot = packageRootCache[packageName];
66
+ if (cachedRoot !== undefined) {
67
+ return cachedRoot;
68
+ }
69
+ try {
70
+ return Path.dirname(localRequire.resolve(packageName + "/package.json"));
71
+ } catch (exn) {
72
+ let cwdRequire = Module.createRequire(process.cwd() + "/index.js");
73
+ return Path.dirname(cwdRequire.resolve(packageName + "/package.json"));
74
+ }
75
+ }
76
+
77
+ function hashString(str) {
78
+ return Crypto.createHash("sha256").update(str).digest("base64");
79
+ }
80
+
81
+ function isSkippedDir(n) {
82
+ if (n === "node_modules" || n === "lib" || n === "cjs" || n === "dts" || n === "tests" || n === "test" || n === "__mocks__" || n === "__tests__" || n === ".git") {
83
+ return true;
84
+ } else {
85
+ return n === "coverage";
86
+ }
87
+ }
88
+
89
+ function walkDir(dir, prefix, assets, paths) {
90
+ let entries = Fs.readdirSync(dir, {
91
+ withFileTypes: true
92
+ });
93
+ entries.forEach(entry => {
94
+ let entryName = entry.name;
95
+ if (entry.isDirectory()) {
96
+ if (isSkippedDir(entryName)) {
97
+ return;
98
+ }
99
+ let newPrefix = prefix === "" ? entryName : prefix + "/" + entryName;
100
+ return walkDir(Path.join(dir, entryName), newPrefix, assets, paths);
101
+ }
102
+ if (!(entryName === "package.json" || entryName.endsWith(".mjs") || entryName.endsWith(".js"))) {
103
+ return;
104
+ }
105
+ let relPath = prefix === "" ? entryName : prefix + "/" + entryName;
106
+ let absPath = Path.join(dir, entryName);
107
+ assets[relPath] = new (Pulumi.asset.FileAsset)(absPath);
108
+ paths.push([
109
+ relPath,
110
+ absPath
111
+ ]);
112
+ });
113
+ }
114
+
115
+ function createFilteredPackageArchive(packageRoot) {
116
+ let assets = {};
117
+ let paths = [];
118
+ walkDir(packageRoot, "", assets, paths);
119
+ paths.sort((param, param$1) => Primitive_string.compare(param[0], param$1[0]));
120
+ let combined = paths.map(param => param[0] + `:` + Fs.readFileSync(param[1], "utf-8")).join("\n---\n");
121
+ return [
122
+ new (Pulumi.asset.AssetArchive)(assets),
123
+ hashString(combined)
124
+ ];
125
+ }
126
+
127
+ function buildCodeArchive(entryPointModule, packageDirs, extraStringAssetsOpt) {
128
+ let extraStringAssets = extraStringAssetsOpt !== undefined ? extraStringAssetsOpt : ({});
129
+ let reExportCode = `export { handler } from "` + entryPointModule + `";`;
130
+ let archiveContents = {};
131
+ archiveContents["index.mjs"] = new (Pulumi.asset.StringAsset)(reExportCode);
132
+ Stdlib_Dict.forEachWithKey(extraStringAssets, (content, fileName) => {
133
+ archiveContents[fileName] = new (Pulumi.asset.StringAsset)(content);
134
+ });
135
+ let allPackageDirs;
136
+ if ("@reventlessdev/reventless-aws" in packageDirs && !("effect" in packageDirs)) {
137
+ let dirs = Object.assign({}, packageDirs);
138
+ dirs["effect"] = resolvePackageRoot("effect");
139
+ allPackageDirs = dirs;
140
+ } else {
141
+ allPackageDirs = packageDirs;
142
+ }
143
+ let packageContentHashes = {
144
+ contents: []
145
+ };
146
+ Stdlib_Dict.forEachWithKey(allPackageDirs, (pkgRoot, pkgName) => {
147
+ let match = createFilteredPackageArchive(pkgRoot);
148
+ archiveContents[`node_modules/` + pkgName] = match[0];
149
+ packageContentHashes.contents.push(pkgName + `:` + match[1]);
150
+ });
151
+ let extraHashEntries = [];
152
+ let extraKeys = Object.keys(extraStringAssets);
153
+ extraKeys.sort(Primitive_string.compare);
154
+ extraKeys.forEach(k => {
155
+ let v = Stdlib_Option.getOr(extraStringAssets[k], "");
156
+ extraHashEntries.push(k + `:` + v);
157
+ });
158
+ let code = new (Pulumi.asset.AssetArchive)(archiveContents);
159
+ packageContentHashes.contents.sort(Primitive_string.compare);
160
+ let sourceCodeHash = hashString(reExportCode + "\n---\n" + packageContentHashes.contents.join(",") + "\n---\n" + extraHashEntries.join("\n"));
161
+ return {
162
+ code: code,
163
+ sourceCodeHash: sourceCodeHash
164
+ };
165
+ }
166
+
167
+ export {
168
+ packageRootCache,
169
+ localRequire,
170
+ getModuleSpecifier,
171
+ extractPackageName,
172
+ resolvePackageRoot,
173
+ hashString,
174
+ isSkippedDir,
175
+ walkDir,
176
+ createFilteredPackageArchive,
177
+ buildCodeArchive,
178
+ }
179
+ /* localRequire Not a pure module */
@@ -0,0 +1,14 @@
1
+ module EventRule = {
2
+ let toResource: PulumiAws.Cloudwatch.EventRule.t => ReventlessInfra.Adapter.resource = ({
3
+ id,
4
+ name,
5
+ arn,
6
+ }) =>
7
+ ReventlessInfra.Adapter.make(
8
+ ~name,
9
+ ~id,
10
+ ~urn=arn,
11
+ ~service=name->Pulumi.Output.apply(_ => AWS.CloudwatchEventRule.service),
12
+ ~resourceType="aws:cloudwatch:EventRule"->Pulumi.Output.make,
13
+ )
14
+ }
@@ -0,0 +1,19 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Pulumi from "@pulumi/pulumi";
4
+ import * as AWS$ReventlessAws from "../adapter/AWS.res.mjs";
5
+ import * as Adapter$ReventlessInfra from "@reventlessdev/reventless-infra/src/adapter/Adapter.res.mjs";
6
+
7
+ function toResource(param) {
8
+ let name = param.name;
9
+ return Adapter$ReventlessInfra.make(name, param.id, param.arn, name.apply(param => AWS$ReventlessAws.CloudwatchEventRule.service), undefined, undefined, undefined, Pulumi.output("aws:cloudwatch:EventRule"), undefined, undefined);
10
+ }
11
+
12
+ let EventRule = {
13
+ toResource: toResource
14
+ };
15
+
16
+ export {
17
+ EventRule,
18
+ }
19
+ /* @pulumi/pulumi Not a pure module */
@@ -0,0 +1,39 @@
1
+ let addUserGroup = (~name: string, ~userPoolId: Pulumi.Output.t<string>) =>
2
+ PulumiAws.Cognito.UserGroup.make(
3
+ ~name="UserGroup-" ++ name,
4
+ ~args={
5
+ PulumiAws.Cognito.UserGroup.name: name->Pulumi.Input.make,
6
+ userPoolId: userPoolId->Pulumi.Output.asInput,
7
+ },
8
+ )
9
+
10
+ let makeAddRemoveUserToGroupPolicy = (
11
+ ~name: string,
12
+ ~userPoolArn: Pulumi.Output.t<string>,
13
+ ~opts: option<Pulumi.CustomResourceOptions.t>=?,
14
+ ) =>
15
+ userPoolArn->Pulumi.Output.apply(userPoolArn => {
16
+ open PulumiAws.PolicyDocument
17
+ PulumiAws.IAM.Policy.make(
18
+ ~name=name ++ "AddRemoveUserToGroup",
19
+ ~args={
20
+ PulumiAws.IAM.Policy.policy: PulumiAws.PolicyDocument.make(
21
+ ~id=name ++ "UserPoolPolicy",
22
+ ~statements=[
23
+ {
24
+ sid: "AllowAdminAddRemoveUserToGroup",
25
+ effect: Allow,
26
+ actions: Actions([
27
+ "cognito-idp:AdminAddUserToGroup",
28
+ "cognito-idp:AdminRemoveUserFromGroup",
29
+ ]),
30
+ resources: Resource(`${userPoolArn}`),
31
+ },
32
+ ],
33
+ )
34
+ ->toJsonString
35
+ ->Pulumi.Input.make,
36
+ },
37
+ ~opts?,
38
+ )
39
+ })