@reventlessdev/reventless-core 3.0.0-alpha.134

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 (502) hide show
  1. package/CHANGELOG.md +1355 -0
  2. package/LICENSE +202 -0
  3. package/README.md +173 -0
  4. package/__mocks__/emptyModule.js +2 -0
  5. package/jest.setup.cjs +5 -0
  6. package/package.json +73 -0
  7. package/rescript.json +41 -0
  8. package/scripts/deploy.sh +6 -0
  9. package/scripts/post-deploy.sh +5 -0
  10. package/scripts/pre-deploy.sh +18 -0
  11. package/scripts/pulumi-up.sh +30 -0
  12. package/src/Behavior.res +18 -0
  13. package/src/Behavior.res.mjs +2 -0
  14. package/src/ComponentType.res +125 -0
  15. package/src/ComponentType.res.mjs +199 -0
  16. package/src/Env.res +5 -0
  17. package/src/Env.res.mjs +2 -0
  18. package/src/Mapper.res +36 -0
  19. package/src/Mapper.res.mjs +18 -0
  20. package/src/Mapper1toN.res +107 -0
  21. package/src/Mapper1toN.res.mjs +2 -0
  22. package/src/MapperNto1.res +78 -0
  23. package/src/MapperNto1.res.mjs +35 -0
  24. package/src/Message.res +353 -0
  25. package/src/Message.res.mjs +418 -0
  26. package/src/PluginRuntimeOperations.res +15 -0
  27. package/src/PluginRuntimeOperations.res.mjs +2 -0
  28. package/src/Projection.res +447 -0
  29. package/src/Projection.res.mjs +712 -0
  30. package/src/ProjectionMapper.res +44 -0
  31. package/src/ProjectionMapper.res.mjs +51 -0
  32. package/src/RequestContext.res +42 -0
  33. package/src/RequestContext.res.mjs +39 -0
  34. package/src/adapter/Adapter.res +178 -0
  35. package/src/adapter/Adapter.res.mjs +201 -0
  36. package/src/adapter/AdapterDeploytime.res +56 -0
  37. package/src/adapter/AdapterDeploytime.res.mjs +42 -0
  38. package/src/adapter/Auth/Auth_Adapter.res +42 -0
  39. package/src/adapter/Auth/Auth_Adapter.res.mjs +2 -0
  40. package/src/adapter/Runtime/AggregateRuntime_Builder.res +22 -0
  41. package/src/adapter/Runtime/AggregateRuntime_Builder.res.mjs +2 -0
  42. package/src/adapter/Runtime/AggregateRuntime_Builder_Common.res +259 -0
  43. package/src/adapter/Runtime/AggregateRuntime_Builder_Common.res.mjs +190 -0
  44. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res +92 -0
  45. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res.mjs +59 -0
  46. package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate.res +52 -0
  47. package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate.res.mjs +49 -0
  48. package/src/adapter/Runtime/AggregateRuntime_Builder_Single.res +64 -0
  49. package/src/adapter/Runtime/AggregateRuntime_Builder_Single.res.mjs +59 -0
  50. package/src/adapter/Runtime/EventCollectorRuntime_Builder.res +11 -0
  51. package/src/adapter/Runtime/EventCollectorRuntime_Builder.res.mjs +2 -0
  52. package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res +46 -0
  53. package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res.mjs +40 -0
  54. package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res +204 -0
  55. package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res.mjs +150 -0
  56. package/src/adapter/Runtime/ExtensionPointRuntime_Builder.res +18 -0
  57. package/src/adapter/Runtime/ExtensionPointRuntime_Builder.res.mjs +2 -0
  58. package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res +36 -0
  59. package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res.mjs +28 -0
  60. package/src/adapter/Runtime/PluginRuntime_Builder.res +23 -0
  61. package/src/adapter/Runtime/PluginRuntime_Builder.res.mjs +2 -0
  62. package/src/adapter/Runtime/PluginRuntime_Builder_Micro.res +97 -0
  63. package/src/adapter/Runtime/PluginRuntime_Builder_Micro.res.mjs +62 -0
  64. package/src/adapter/Runtime/PluginRuntime_Builder_Single.res +89 -0
  65. package/src/adapter/Runtime/PluginRuntime_Builder_Single.res.mjs +62 -0
  66. package/src/adapter/Runtime/Runtime.res +106 -0
  67. package/src/adapter/Runtime/Runtime.res.mjs +22 -0
  68. package/src/adapter/Runtime/TaskRuntime_Builder.res +32 -0
  69. package/src/adapter/Runtime/TaskRuntime_Builder.res.mjs +2 -0
  70. package/src/adapter/Runtime/TaskRuntime_Builder_PerBucket.res +42 -0
  71. package/src/adapter/Runtime/TaskRuntime_Builder_PerBucket.res.mjs +29 -0
  72. package/src/admin/AdminApi.res +88 -0
  73. package/src/admin/AdminApi.res.mjs +89 -0
  74. package/src/admin/Admin_Callback.res +27 -0
  75. package/src/admin/Admin_Callback.res.mjs +20 -0
  76. package/src/admin/Platform_Admin.res +402 -0
  77. package/src/admin/Platform_Admin.res.mjs +250 -0
  78. package/src/admin/Platform_Admin_Structure.res +125 -0
  79. package/src/admin/Platform_Admin_Structure.res.mjs +182 -0
  80. package/src/admin/Platform_ComponentDefinitionsApi.res +160 -0
  81. package/src/admin/Platform_ComponentDefinitionsApi.res.mjs +299 -0
  82. package/src/admin/Platform_UIFragmentsApi.res +55 -0
  83. package/src/admin/Platform_UIFragmentsApi.res.mjs +124 -0
  84. package/src/admin/UIFragmentRegistryProjection.res +43 -0
  85. package/src/admin/UIFragmentRegistryProjection.res.mjs +81 -0
  86. package/src/admin/UIFragmentRegistryReadModelSpec.res +13 -0
  87. package/src/admin/UIFragmentRegistryReadModelSpec.res.mjs +40 -0
  88. package/src/components/Aggregate/Aggregate.res +96 -0
  89. package/src/components/Aggregate/Aggregate.res.mjs +82 -0
  90. package/src/components/Aggregate/Aggregate_Builder.res +175 -0
  91. package/src/components/Aggregate/Aggregate_Builder.res.mjs +119 -0
  92. package/src/components/Aggregate/Aggregate_Callback.res +273 -0
  93. package/src/components/Aggregate/Aggregate_Callback.res.mjs +208 -0
  94. package/src/components/Api/ApiAllowedStatesHelpers.res +19 -0
  95. package/src/components/Api/ApiAllowedStatesHelpers.res.mjs +16 -0
  96. package/src/components/Api/ApiNoApiHelpers.res +13 -0
  97. package/src/components/Api/ApiNoApiHelpers.res.mjs +29 -0
  98. package/src/components/Api/Api_Builder.res +40 -0
  99. package/src/components/Api/Api_Builder.res.mjs +33 -0
  100. package/src/components/Api/Api_Naming.res +92 -0
  101. package/src/components/Api/Api_Naming.res.mjs +103 -0
  102. package/src/components/Api/Api_Operations.res +13 -0
  103. package/src/components/Api/Api_Operations.res.mjs +12 -0
  104. package/src/components/Api/GraphQL_FragmentGenerator.res +612 -0
  105. package/src/components/Api/GraphQL_FragmentGenerator.res.mjs +503 -0
  106. package/src/components/Api/GraphQL_SchemaInspector.res +156 -0
  107. package/src/components/Api/GraphQL_SchemaInspector.res.mjs +123 -0
  108. package/src/components/Api/GraphQL_Stitcher.res +271 -0
  109. package/src/components/Api/GraphQL_Stitcher.res.mjs +229 -0
  110. package/src/components/Api/MCP_SchemaGenerator.res +185 -0
  111. package/src/components/Api/MCP_SchemaGenerator.res.mjs +146 -0
  112. package/src/components/Api/SchemaType.res +126 -0
  113. package/src/components/Api/SchemaType.res.mjs +143 -0
  114. package/src/components/Api/SuryToJsonSchema.res +142 -0
  115. package/src/components/Api/SuryToJsonSchema.res.mjs +210 -0
  116. package/src/components/AutomationSlice/AutomationSlice.res +39 -0
  117. package/src/components/AutomationSlice/AutomationSlice.res.mjs +24 -0
  118. package/src/components/AutomationSlice/AutomationSlice_Builder.res +207 -0
  119. package/src/components/AutomationSlice/AutomationSlice_Builder.res.mjs +123 -0
  120. package/src/components/AutomationSlice/AutomationSlice_Callback.res +212 -0
  121. package/src/components/AutomationSlice/AutomationSlice_Callback.res.mjs +189 -0
  122. package/src/components/Builder_Helpers.res +196 -0
  123. package/src/components/Builder_Helpers.res.mjs +142 -0
  124. package/src/components/Cloner.res +84 -0
  125. package/src/components/Cloner.res.mjs +88 -0
  126. package/src/components/CommandGenerator/CommandGenerator.res +54 -0
  127. package/src/components/CommandGenerator/CommandGenerator.res.mjs +15 -0
  128. package/src/components/CommandGenerator/CommandGenerator_Adapter.res +22 -0
  129. package/src/components/CommandGenerator/CommandGenerator_Adapter.res.mjs +2 -0
  130. package/src/components/CommandGenerator/CommandGenerator_Builder.res +70 -0
  131. package/src/components/CommandGenerator/CommandGenerator_Builder.res.mjs +68 -0
  132. package/src/components/CommandGenerator/CommandGenerator_Callback.res +191 -0
  133. package/src/components/CommandGenerator/CommandGenerator_Callback.res.mjs +161 -0
  134. package/src/components/CommandTopic/CommandTopic.res +79 -0
  135. package/src/components/CommandTopic/CommandTopic.res.mjs +68 -0
  136. package/src/components/CommandTopic/CommandTopic_Adapter.res +53 -0
  137. package/src/components/CommandTopic/CommandTopic_Adapter.res.mjs +2 -0
  138. package/src/components/CommandTopic/CommandTopic_Builder.res +146 -0
  139. package/src/components/CommandTopic/CommandTopic_Builder.res.mjs +127 -0
  140. package/src/components/CommandTopic/CommandTopic_Callback.res +38 -0
  141. package/src/components/CommandTopic/CommandTopic_Callback.res.mjs +49 -0
  142. package/src/components/CommandTopic/CommandTopic_Helpers.res +176 -0
  143. package/src/components/CommandTopic/CommandTopic_Helpers.res.mjs +195 -0
  144. package/src/components/CommandTopic/CommandTopic_Operations.res +40 -0
  145. package/src/components/CommandTopic/CommandTopic_Operations.res.mjs +49 -0
  146. package/src/components/Component.res +1 -0
  147. package/src/components/Component.res.mjs +34 -0
  148. package/src/components/Component.resi +1 -0
  149. package/src/components/Counter/Counter.res +47 -0
  150. package/src/components/Counter/Counter.res.mjs +55 -0
  151. package/src/components/Counter/Counter_Adapter.res +18 -0
  152. package/src/components/Counter/Counter_Adapter.res.mjs +2 -0
  153. package/src/components/Counter/Counter_Builder.res +142 -0
  154. package/src/components/Counter/Counter_Builder.res.mjs +112 -0
  155. package/src/components/Counter/Counter_Callback.res +94 -0
  156. package/src/components/Counter/Counter_Callback.res.mjs +70 -0
  157. package/src/components/Counter/Counter_Operations.res +70 -0
  158. package/src/components/Counter/Counter_Operations.res.mjs +91 -0
  159. package/src/components/Dcb/Dcb_Builder.res +971 -0
  160. package/src/components/Dcb/Dcb_Builder.res.mjs +572 -0
  161. package/src/components/DcbEventLog/DcbEventLog.res +43 -0
  162. package/src/components/DcbEventLog/DcbEventLog.res.mjs +24 -0
  163. package/src/components/DcbEventLog/DcbEventLog_Adapter.res +57 -0
  164. package/src/components/DcbEventLog/DcbEventLog_Adapter.res.mjs +2 -0
  165. package/src/components/DcbEventLog/DcbEventLog_Builder.res +72 -0
  166. package/src/components/DcbEventLog/DcbEventLog_Builder.res.mjs +67 -0
  167. package/src/components/DcbEventLog/DcbEventLog_Operations.res +160 -0
  168. package/src/components/DcbEventLog/DcbEventLog_Operations.res.mjs +121 -0
  169. package/src/components/EventCollector/EventCollector.res +34 -0
  170. package/src/components/EventCollector/EventCollector.res.mjs +9 -0
  171. package/src/components/EventCollector/EventCollector_Adapter.res +45 -0
  172. package/src/components/EventCollector/EventCollector_Adapter.res.mjs +2 -0
  173. package/src/components/EventCollector/EventCollector_Builder.res +91 -0
  174. package/src/components/EventCollector/EventCollector_Builder.res.mjs +64 -0
  175. package/src/components/EventLog/EventLog.res +27 -0
  176. package/src/components/EventLog/EventLog.res.mjs +13 -0
  177. package/src/components/EventLog/EventLog_Adapter.res +15 -0
  178. package/src/components/EventLog/EventLog_Adapter.res.mjs +2 -0
  179. package/src/components/EventLog/EventLog_Builder.res +65 -0
  180. package/src/components/EventLog/EventLog_Builder.res.mjs +57 -0
  181. package/src/components/EventLog/EventLog_Operations.res +209 -0
  182. package/src/components/EventLog/EventLog_Operations.res.mjs +202 -0
  183. package/src/components/EventLog/EventPublish_Callback.res +29 -0
  184. package/src/components/EventLog/EventPublish_Callback.res.mjs +32 -0
  185. package/src/components/EventMapper/EventMapper.res +72 -0
  186. package/src/components/EventMapper/EventMapper.res.mjs +54 -0
  187. package/src/components/EventMapper/EventMapper_Builder.res +128 -0
  188. package/src/components/EventMapper/EventMapper_Builder.res.mjs +81 -0
  189. package/src/components/EventMapper/EventMapper_Callback.res +323 -0
  190. package/src/components/EventMapper/EventMapper_Callback.res.mjs +231 -0
  191. package/src/components/EventTopic/EventTopic.res +69 -0
  192. package/src/components/EventTopic/EventTopic.res.mjs +50 -0
  193. package/src/components/EventTopic/EventTopic_Adapter.res +15 -0
  194. package/src/components/EventTopic/EventTopic_Adapter.res.mjs +2 -0
  195. package/src/components/EventTopic/EventTopic_Builder.res +53 -0
  196. package/src/components/EventTopic/EventTopic_Builder.res.mjs +46 -0
  197. package/src/components/EventTopic/EventTopic_Operations.res +37 -0
  198. package/src/components/EventTopic/EventTopic_Operations.res.mjs +39 -0
  199. package/src/components/Extension/Extension.res +32 -0
  200. package/src/components/Extension/Extension.res.mjs +9 -0
  201. package/src/components/Extension/Extension_Builder.res +82 -0
  202. package/src/components/Extension/Extension_Builder.res.mjs +57 -0
  203. package/src/components/Extension/Extension_Operations.res +203 -0
  204. package/src/components/Extension/Extension_Operations.res.mjs +154 -0
  205. package/src/components/ExtensionPoint/ExtensionPoint.res +49 -0
  206. package/src/components/ExtensionPoint/ExtensionPoint.res.mjs +25 -0
  207. package/src/components/ExtensionPoint/ExtensionPoint_Builder.res +163 -0
  208. package/src/components/ExtensionPoint/ExtensionPoint_Builder.res.mjs +113 -0
  209. package/src/components/ExtensionPoint/ExtensionPoint_Callback.res +110 -0
  210. package/src/components/ExtensionPoint/ExtensionPoint_Callback.res.mjs +76 -0
  211. package/src/components/ExtensionPoint/ExtensionPoint_Operations.res +146 -0
  212. package/src/components/ExtensionPoint/ExtensionPoint_Operations.res.mjs +122 -0
  213. package/src/components/Heartbeat/Heartbeat.res +25 -0
  214. package/src/components/Heartbeat/Heartbeat.res.mjs +9 -0
  215. package/src/components/Heartbeat/Heartbeat_Adapter.res +14 -0
  216. package/src/components/Heartbeat/Heartbeat_Adapter.res.mjs +2 -0
  217. package/src/components/Heartbeat/Heartbeat_Builder.res +43 -0
  218. package/src/components/Heartbeat/Heartbeat_Builder.res.mjs +47 -0
  219. package/src/components/Heartbeat/Heartbeat_Callback.res +32 -0
  220. package/src/components/Heartbeat/Heartbeat_Callback.res.mjs +40 -0
  221. package/src/components/InboundTranslationSlice/InboundTranslationSlice.res +34 -0
  222. package/src/components/InboundTranslationSlice/InboundTranslationSlice.res.mjs +24 -0
  223. package/src/components/InboundTranslationSlice/InboundTranslationSlice_Builder.res +98 -0
  224. package/src/components/InboundTranslationSlice/InboundTranslationSlice_Builder.res.mjs +87 -0
  225. package/src/components/InboundTranslationSlice/InboundTranslationSlice_Callback.res +191 -0
  226. package/src/components/InboundTranslationSlice/InboundTranslationSlice_Callback.res.mjs +175 -0
  227. package/src/components/OutboundTranslationSlice/OutboundTranslationSlice.res +35 -0
  228. package/src/components/OutboundTranslationSlice/OutboundTranslationSlice.res.mjs +24 -0
  229. package/src/components/OutboundTranslationSlice/OutboundTranslationSlice_Builder.res +181 -0
  230. package/src/components/OutboundTranslationSlice/OutboundTranslationSlice_Builder.res.mjs +137 -0
  231. package/src/components/OutboundTranslationSlice/OutboundTranslationSlice_Callback.res +173 -0
  232. package/src/components/OutboundTranslationSlice/OutboundTranslationSlice_Callback.res.mjs +173 -0
  233. package/src/components/QueryDb/QueryDb.res +74 -0
  234. package/src/components/QueryDb/QueryDb.res.mjs +37 -0
  235. package/src/components/QueryDb/QueryDb_Adapter.res +78 -0
  236. package/src/components/QueryDb/QueryDb_Adapter.res.mjs +17 -0
  237. package/src/components/QueryDb/QueryDb_Builder.res +76 -0
  238. package/src/components/QueryDb/QueryDb_Builder.res.mjs +53 -0
  239. package/src/components/QueryDb/QueryDb_Callback.res +18 -0
  240. package/src/components/QueryDb/QueryDb_Callback.res.mjs +21 -0
  241. package/src/components/QueryDb/QueryDb_Operations.res +116 -0
  242. package/src/components/QueryDb/QueryDb_Operations.res.mjs +165 -0
  243. package/src/components/ReadModel/ReadModel.res +42 -0
  244. package/src/components/ReadModel/ReadModel.res.mjs +27 -0
  245. package/src/components/ReadModel/ReadModel_Builder.res +155 -0
  246. package/src/components/ReadModel/ReadModel_Builder.res.mjs +101 -0
  247. package/src/components/ReadModel/ReadModel_Callback.res +48 -0
  248. package/src/components/ReadModel/ReadModel_Callback.res.mjs +48 -0
  249. package/src/components/Scheduler/Scheduler.res +13 -0
  250. package/src/components/Scheduler/Scheduler.res.mjs +9 -0
  251. package/src/components/Scheduler/Scheduler_Adapter.res +13 -0
  252. package/src/components/Scheduler/Scheduler_Adapter.res.mjs +2 -0
  253. package/src/components/Scheduler/Scheduler_Builder.res +19 -0
  254. package/src/components/Scheduler/Scheduler_Builder.res.mjs +29 -0
  255. package/src/components/SideEffectHandler/SideEffectHandler.res +30 -0
  256. package/src/components/SideEffectHandler/SideEffectHandler.res.mjs +12 -0
  257. package/src/components/SideEffectHandler/SideEffectHandler_Builder.res +117 -0
  258. package/src/components/SideEffectHandler/SideEffectHandler_Builder.res.mjs +64 -0
  259. package/src/components/SideEffectHandler/SideEffectHandler_Callback.res +116 -0
  260. package/src/components/SideEffectHandler/SideEffectHandler_Callback.res.mjs +95 -0
  261. package/src/components/StateChangeSlice/StateChangeSlice.res +38 -0
  262. package/src/components/StateChangeSlice/StateChangeSlice.res.mjs +17 -0
  263. package/src/components/StateChangeSlice/StateChangeSlice_Builder.res +91 -0
  264. package/src/components/StateChangeSlice/StateChangeSlice_Builder.res.mjs +81 -0
  265. package/src/components/StateChangeSlice/StateChangeSlice_Callback.res +412 -0
  266. package/src/components/StateChangeSlice/StateChangeSlice_Callback.res.mjs +299 -0
  267. package/src/components/StateTopic.res +91 -0
  268. package/src/components/StateTopic.res.mjs +41 -0
  269. package/src/components/StateViewSlice/StateViewSlice.res +33 -0
  270. package/src/components/StateViewSlice/StateViewSlice.res.mjs +24 -0
  271. package/src/components/StateViewSlice/StateViewSlice_Builder.res +176 -0
  272. package/src/components/StateViewSlice/StateViewSlice_Builder.res.mjs +134 -0
  273. package/src/components/StateViewSlice/StateViewSlice_Callback.res +64 -0
  274. package/src/components/StateViewSlice/StateViewSlice_Callback.res.mjs +56 -0
  275. package/src/components/Task/Task.res +81 -0
  276. package/src/components/Task/Task.res.mjs +51 -0
  277. package/src/components/Task/Task_Adapter.res +31 -0
  278. package/src/components/Task/Task_Adapter.res.mjs +2 -0
  279. package/src/components/Task/Task_Builder.res +223 -0
  280. package/src/components/Task/Task_Builder.res.mjs +115 -0
  281. package/src/plugin/api/PluginBaseFragment.res +104 -0
  282. package/src/plugin/api/PluginBaseFragment.res.mjs +64 -0
  283. package/src/plugin/component/Plugin.res +100 -0
  284. package/src/plugin/component/Plugin.res.mjs +61 -0
  285. package/src/plugin/component/Plugin_Builder.res +1017 -0
  286. package/src/plugin/component/Plugin_Builder.res.mjs +608 -0
  287. package/src/plugin/component/Plugin_BuiltHook.res +141 -0
  288. package/src/plugin/component/Plugin_BuiltHook.res.mjs +39 -0
  289. package/src/plugin/component/Plugin_Callback.res +98 -0
  290. package/src/plugin/component/Plugin_Callback.res.mjs +55 -0
  291. package/src/plugin/component/Plugin_Helpers.res +1730 -0
  292. package/src/plugin/component/Plugin_Helpers.res.mjs +1010 -0
  293. package/src/plugin/component/Plugin_ResolverError.res +27 -0
  294. package/src/plugin/component/Plugin_ResolverError.res.mjs +21 -0
  295. package/src/plugin/component/Plugin_Structure.res +570 -0
  296. package/src/plugin/component/Plugin_Structure.res.mjs +458 -0
  297. package/src/plugin/component/Plugin_SubscriptionSchema.res +103 -0
  298. package/src/plugin/component/Plugin_SubscriptionSchema.res.mjs +71 -0
  299. package/src/plugin/component/SchemaWalker.res +164 -0
  300. package/src/plugin/component/SchemaWalker.res.mjs +183 -0
  301. package/src/plugin/connect/PluginConnectExtension_Builder.res +14 -0
  302. package/src/plugin/connect/PluginConnectExtension_Builder.res.mjs +36 -0
  303. package/src/plugin/connect/PluginConnectExtension_Mapping.res +76 -0
  304. package/src/plugin/connect/PluginConnectExtension_Mapping.res.mjs +89 -0
  305. package/src/plugin/connect/PluginExtensionPoint_Builder.res +39 -0
  306. package/src/plugin/connect/PluginExtensionPoint_Builder.res.mjs +33 -0
  307. package/src/plugin/connect/PluginExtensionPoint_Plugin.res +231 -0
  308. package/src/plugin/connect/PluginExtensionPoint_Plugin.res.mjs +353 -0
  309. package/src/plugin/lifecycle/PluginBehavior.res +250 -0
  310. package/src/plugin/lifecycle/PluginBehavior.res.mjs +391 -0
  311. package/src/plugin/lifecycle/PluginSpec.res +84 -0
  312. package/src/plugin/lifecycle/PluginSpec.res.mjs +148 -0
  313. package/src/plugin/lifecycle/PluginsProjection.res +154 -0
  314. package/src/plugin/lifecycle/PluginsProjection.res.mjs +230 -0
  315. package/src/plugin/lifecycle/PluginsReadModelSpec.res +66 -0
  316. package/src/plugin/lifecycle/PluginsReadModelSpec.res.mjs +58 -0
  317. package/src/util/AWS.res +7 -0
  318. package/src/util/AWS.res.mjs +20 -0
  319. package/src/util/CSV.res +27 -0
  320. package/src/util/CSV.res.mjs +56 -0
  321. package/src/util/CommandPublisher.res +133 -0
  322. package/src/util/CommandPublisher.res.mjs +161 -0
  323. package/src/util/CsvStream.res +39 -0
  324. package/src/util/CsvStream.res.mjs +42 -0
  325. package/src/util/EffectLogger.res +178 -0
  326. package/src/util/EffectLogger.res.mjs +171 -0
  327. package/src/util/FTP.res +69 -0
  328. package/src/util/FTP.res.mjs +101 -0
  329. package/src/util/FTPHandler.res +142 -0
  330. package/src/util/FTPHandler.res.mjs +136 -0
  331. package/src/util/Hash.res +1 -0
  332. package/src/util/Hash.res.mjs +10 -0
  333. package/src/util/Interstack.res +74 -0
  334. package/src/util/Interstack.res.mjs +126 -0
  335. package/src/util/Interstack.resi +25 -0
  336. package/src/util/LogFormat.res +222 -0
  337. package/src/util/LogFormat.res.mjs +257 -0
  338. package/src/util/Logger.res +196 -0
  339. package/src/util/Logger.res.mjs +238 -0
  340. package/src/util/Lru.res +51 -0
  341. package/src/util/Lru.res.mjs +59 -0
  342. package/src/util/Lru.resi +32 -0
  343. package/src/util/Metrics.res +32 -0
  344. package/src/util/Metrics.res.mjs +42 -0
  345. package/src/util/OutputFailsafeDeploytime.res +16 -0
  346. package/src/util/OutputFailsafeDeploytime.res.mjs +20 -0
  347. package/src/util/OutputFailsafeRuntime.res +6 -0
  348. package/src/util/OutputFailsafeRuntime.res.mjs +15 -0
  349. package/src/util/OutputLogger.res +9 -0
  350. package/src/util/OutputLogger.res.mjs +19 -0
  351. package/src/util/ResourceQuery.res +14 -0
  352. package/src/util/ResourceQuery.res.mjs +17 -0
  353. package/src/util/ResourceQueryRuntime.res +17 -0
  354. package/src/util/ResourceQueryRuntime.res.mjs +18 -0
  355. package/src/util/ScheduleOps.res +124 -0
  356. package/src/util/ScheduleOps.res.mjs +132 -0
  357. package/src/util/Util.res +12 -0
  358. package/src/util/Util.res.mjs +42 -0
  359. package/src/util/Util_Adapter.res +97 -0
  360. package/src/util/Util_Adapter.res.mjs +82 -0
  361. package/src/util/Util_AdapterRuntime.res +39 -0
  362. package/src/util/Util_AdapterRuntime.res.mjs +42 -0
  363. package/src/util/Util_Array.res +2 -0
  364. package/src/util/Util_Array.res.mjs +12 -0
  365. package/src/util/Util_Error.res +16 -0
  366. package/src/util/Util_Error.res.mjs +19 -0
  367. package/src/util/Util_Promise.res +67 -0
  368. package/src/util/Util_Promise.res.mjs +105 -0
  369. package/src/util/Util_Pulumi.res +35 -0
  370. package/src/util/Util_Pulumi.res.mjs +55 -0
  371. package/src/util/Util_Pulumi.resi +21 -0
  372. package/src/util/Util_QueryDb.res +14 -0
  373. package/src/util/Util_QueryDb.res.mjs +21 -0
  374. package/src/util/Util_QueryDbRuntime.res +11 -0
  375. package/src/util/Util_QueryDbRuntime.res.mjs +19 -0
  376. package/src/util/Util_ReadModel.res +2 -0
  377. package/src/util/Util_ReadModel.res.mjs +10 -0
  378. package/src/util/Util_StackRefs.res +24 -0
  379. package/src/util/Util_StackRefs.res.mjs +39 -0
  380. package/src/util/Validation.res +75 -0
  381. package/src/util/Validation.res.mjs +181 -0
  382. package/tests/.gitkeep +0 -0
  383. package/tests/IdentityTest.res +155 -0
  384. package/tests/IdentityTest.res.mjs +174 -0
  385. package/tests/admin/Platform_ComponentDefinitionsApiTest.res +237 -0
  386. package/tests/admin/Platform_ComponentDefinitionsApiTest.res.mjs +298 -0
  387. package/tests/admin/Platform_UIFragmentsApiTest.res +96 -0
  388. package/tests/admin/Platform_UIFragmentsApiTest.res.mjs +101 -0
  389. package/tests/aggregate/AggregateCallbackTest.res +81 -0
  390. package/tests/aggregate/AggregateCallbackTest.res.mjs +140 -0
  391. package/tests/aggregate/AggregateCausationTest.res +49 -0
  392. package/tests/aggregate/AggregateCausationTest.res.mjs +44 -0
  393. package/tests/aggregate/AggregateConflictTest.res +212 -0
  394. package/tests/aggregate/AggregateConflictTest.res.mjs +363 -0
  395. package/tests/aggregate/AggregateFixtures.res +177 -0
  396. package/tests/aggregate/AggregateFixtures.res.mjs +285 -0
  397. package/tests/aggregate/AggregateRejectionTest.res +139 -0
  398. package/tests/aggregate/AggregateRejectionTest.res.mjs +163 -0
  399. package/tests/api/ApiNoApiTest.res +62 -0
  400. package/tests/api/ApiNoApiTest.res.mjs +90 -0
  401. package/tests/api/GraphQL_StitcherTest.res +107 -0
  402. package/tests/api/GraphQL_StitcherTest.res.mjs +99 -0
  403. package/tests/api/SimpleTest.res +7 -0
  404. package/tests/api/SimpleTest.res.mjs +10 -0
  405. package/tests/api/SuryToJsonSchemaTest.res +405 -0
  406. package/tests/api/SuryToJsonSchemaTest.res.mjs +623 -0
  407. package/tests/commandgenerator/CommandGeneratorCallbackTest.res +128 -0
  408. package/tests/commandgenerator/CommandGeneratorCallbackTest.res.mjs +160 -0
  409. package/tests/commandgenerator/CommandGeneratorFixtures.res +139 -0
  410. package/tests/commandgenerator/CommandGeneratorFixtures.res.mjs +197 -0
  411. package/tests/commandtopic/CommandTopicCallbackFixtures.res +87 -0
  412. package/tests/commandtopic/CommandTopicCallbackFixtures.res.mjs +152 -0
  413. package/tests/commandtopic/CommandTopicCallbackTest.res +66 -0
  414. package/tests/commandtopic/CommandTopicCallbackTest.res.mjs +106 -0
  415. package/tests/commandtopic/CommandTopicHelpersRejectionTest.res +83 -0
  416. package/tests/commandtopic/CommandTopicHelpersRejectionTest.res.mjs +109 -0
  417. package/tests/counter/CounterCallbackTest.res +83 -0
  418. package/tests/counter/CounterCallbackTest.res.mjs +140 -0
  419. package/tests/counter/CounterFixtures.res +57 -0
  420. package/tests/counter/CounterFixtures.res.mjs +67 -0
  421. package/tests/dcb/DcbDecodeTest.res +122 -0
  422. package/tests/dcb/DcbDecodeTest.res.mjs +194 -0
  423. package/tests/dcb/DcbEventLogOperationsTest.res +195 -0
  424. package/tests/dcb/DcbEventLogOperationsTest.res.mjs +268 -0
  425. package/tests/dcb/DcbFixtures.res +422 -0
  426. package/tests/dcb/DcbFixtures.res.mjs +534 -0
  427. package/tests/dcb/DcbScopeInferenceTest.res +242 -0
  428. package/tests/dcb/DcbScopeInferenceTest.res.mjs +480 -0
  429. package/tests/dcb/DcbStateChangeSliceTest.res +362 -0
  430. package/tests/dcb/DcbStateChangeSliceTest.res.mjs +546 -0
  431. package/tests/dcb/DcbTagTest.res +978 -0
  432. package/tests/dcb/DcbTagTest.res.mjs +867 -0
  433. package/tests/dcb/DcbValidationTest.res +349 -0
  434. package/tests/dcb/DcbValidationTest.res.mjs +476 -0
  435. package/tests/eventlog/EventLogFixtures.res +113 -0
  436. package/tests/eventlog/EventLogFixtures.res.mjs +166 -0
  437. package/tests/eventlog/EventLogOperationsTest.res +96 -0
  438. package/tests/eventlog/EventLogOperationsTest.res.mjs +192 -0
  439. package/tests/eventlog/EventLogRetryTest.res +121 -0
  440. package/tests/eventlog/EventLogRetryTest.res.mjs +171 -0
  441. package/tests/eventmapper/EventMapperCallbackTest.res +134 -0
  442. package/tests/eventmapper/EventMapperCallbackTest.res.mjs +141 -0
  443. package/tests/eventmapper/EventMapperFixtures.res +255 -0
  444. package/tests/eventmapper/EventMapperFixtures.res.mjs +440 -0
  445. package/tests/eventmapper/EventMapperTest.res +53 -0
  446. package/tests/eventmapper/EventMapperTest.res.mjs +83 -0
  447. package/tests/eventtopic/EventTopicFixtures.res +36 -0
  448. package/tests/eventtopic/EventTopicFixtures.res.mjs +65 -0
  449. package/tests/eventtopic/EventTopicOperationsTest.res +48 -0
  450. package/tests/eventtopic/EventTopicOperationsTest.res.mjs +71 -0
  451. package/tests/extensionpoint/ExtensionPointCallbackTest.res +84 -0
  452. package/tests/extensionpoint/ExtensionPointCallbackTest.res.mjs +94 -0
  453. package/tests/extensionpoint/ExtensionPointFixtures.res +173 -0
  454. package/tests/extensionpoint/ExtensionPointFixtures.res.mjs +205 -0
  455. package/tests/extensionpoint/ExtensionPointOperationsTest.res +261 -0
  456. package/tests/extensionpoint/ExtensionPointOperationsTest.res.mjs +304 -0
  457. package/tests/ftp/FTPTest.res +64 -0
  458. package/tests/ftp/FTPTest.res.mjs +88 -0
  459. package/tests/logger/LogFormatTest.res +348 -0
  460. package/tests/logger/LogFormatTest.res.mjs +309 -0
  461. package/tests/message/MessageTest.res +95 -0
  462. package/tests/message/MessageTest.res.mjs +93 -0
  463. package/tests/message/MetaEnvelopeTest.res +200 -0
  464. package/tests/message/MetaEnvelopeTest.res.mjs +188 -0
  465. package/tests/plugin/ManifestVisibilityTest.res +137 -0
  466. package/tests/plugin/ManifestVisibilityTest.res.mjs +205 -0
  467. package/tests/plugin/PluginSpecExperiment.res +13 -0
  468. package/tests/plugin/PluginSpecExperiment.res.mjs +31 -0
  469. package/tests/plugin/PluginStructureTest.res +298 -0
  470. package/tests/plugin/PluginStructureTest.res.mjs +388 -0
  471. package/tests/plugin/PluginVersionTest.res +34 -0
  472. package/tests/plugin/PluginVersionTest.res.mjs +30 -0
  473. package/tests/plugin/SchemaWalkerTest.res +115 -0
  474. package/tests/plugin/SchemaWalkerTest.res.mjs +160 -0
  475. package/tests/plugin/StateChangeSlice/PsPlaceOrder.res +24 -0
  476. package/tests/plugin/StateChangeSlice/PsPlaceOrder.res.mjs +62 -0
  477. package/tests/plugin/StateChangeSlice/PsShipOrder.res +29 -0
  478. package/tests/plugin/StateChangeSlice/PsShipOrder.res.mjs +69 -0
  479. package/tests/plugin/StateViewSlice/PsAnnotatedView.res +24 -0
  480. package/tests/plugin/StateViewSlice/PsAnnotatedView.res.mjs +94 -0
  481. package/tests/plugin/StateViewSlice/PsAvailableProductsView.res +18 -0
  482. package/tests/plugin/StateViewSlice/PsAvailableProductsView.res.mjs +69 -0
  483. package/tests/plugin/StateViewSlice/PsCustomersView.res +22 -0
  484. package/tests/plugin/StateViewSlice/PsCustomersView.res.mjs +69 -0
  485. package/tests/plugin/StateViewSlice/PsOrdersView.res +20 -0
  486. package/tests/plugin/StateViewSlice/PsOrdersView.res.mjs +81 -0
  487. package/tests/poc/StructuralSubtypingPoc.res +211 -0
  488. package/tests/poc/StructuralSubtypingPoc.res.mjs +61 -0
  489. package/tests/querydb/QueryDbFixtures.res +65 -0
  490. package/tests/querydb/QueryDbFixtures.res.mjs +135 -0
  491. package/tests/querydb/QueryDbOperationsTest.res +94 -0
  492. package/tests/querydb/QueryDbOperationsTest.res.mjs +168 -0
  493. package/tests/sideeffecthandler/SideEffectHandlerCallbackTest.res +56 -0
  494. package/tests/sideeffecthandler/SideEffectHandlerCallbackTest.res.mjs +77 -0
  495. package/tests/sideeffecthandler/SideEffectHandlerFixtures.res +96 -0
  496. package/tests/sideeffecthandler/SideEffectHandlerFixtures.res.mjs +139 -0
  497. package/tests/util/CsvStreamTest.res +54 -0
  498. package/tests/util/CsvStreamTest.res.mjs +51 -0
  499. package/tests/util/LruTest.res +73 -0
  500. package/tests/util/LruTest.res.mjs +105 -0
  501. package/tests/util/MetricsTest.res +36 -0
  502. package/tests/util/MetricsTest.res.mjs +53 -0
@@ -0,0 +1,88 @@
1
+ open ReventlessInfra.Api
2
+
3
+ @schema
4
+ type cloneArgs = {restoreDateTime?: string}
5
+
6
+ let cloneMutationEntry: mutationSchemaEntry = {
7
+ fieldNames: [Api_Naming.adminField(~name="Clone")],
8
+ commandSchema: cloneArgsSchema->S.castToUnknown,
9
+ description: "Clone the system to a specific point in time",
10
+ }
11
+
12
+ // Aggregate-derived admin mutations come from
13
+ // `PluginBaseFragment.pluginAggregateMutationEntries` so they end up in the
14
+ // stitched SDL (the AWS path pushes `AdminApi.baseFragment` directly). The
15
+ // corresponding resolver wiring is fired in parallel by
16
+ // `Plugin_Helpers.registerAdminAggregateMutations` from `Platform_Admin.construct`.
17
+ let mutationEntries = (~cloner: bool) => {
18
+ let base = PluginBaseFragment.pluginAggregateMutationEntries
19
+ if cloner {
20
+ Array.concat(base, [cloneMutationEntry])
21
+ } else {
22
+ base
23
+ }
24
+ }
25
+
26
+ let queryEntries = PluginBaseFragment.queryEntries
27
+
28
+ // UIFragment lifecycle Source C subscriptions.
29
+ // Mutations are called by the backend when UIFragment events occur;
30
+ // AppSync routes via @aws_subscribe to onUIFragmentChange subscribers.
31
+ // manifest is serialised as a JSON string (String scalar, not AWSJSON).
32
+
33
+ let uiFragmentSubscriptionTypes = [
34
+ `enum UIFragmentChangeKind {\n Registered\n Updated\n Deregistered\n}`,
35
+ `type UIFragmentChangeEvent {\n pluginId: ID!\n changeKind: UIFragmentChangeKind!\n manifest: String\n}`,
36
+ ]
37
+
38
+ let uiFragmentMutationFields = [
39
+ ` Platform_UIFragmentRegistered(pluginId: ID!, manifest: String): UIFragmentChangeEvent`,
40
+ ` Platform_UIFragmentUpdated(pluginId: ID!, manifest: String): UIFragmentChangeEvent`,
41
+ ` Platform_UIFragmentDeregistered(pluginId: ID!): UIFragmentChangeEvent`,
42
+ ]
43
+
44
+ let uiFragmentSubscriptionField = ` onUIFragmentChange: UIFragmentChangeEvent\n @aws_subscribe(mutations: ["Platform_UIFragmentRegistered", "Platform_UIFragmentUpdated", "Platform_UIFragmentDeregistered"])`
45
+
46
+ // Plugin lifecycle Source C subscription. Mirrors the UIFragment pattern: the
47
+ // platform invokes `Platform_PluginStatusChanged` after writing the new status
48
+ // to the Plugin read model; AppSync routes that mutation via `@aws_subscribe`
49
+ // to live `onPluginStatusChange` subscribers (host shell). The status enum
50
+ // matches `PluginsReadModelSpec.status` so consumers can mirror tier 1 / tier 2
51
+ // transitions exactly.
52
+ let pluginStatusSubscriptionTypes = [
53
+ `enum PluginStatus {\n Connected\n Disconnected\n Inactive\n Retired\n}`,
54
+ `type PluginStatusChangeEvent {\n pluginId: ID!\n status: PluginStatus!\n}`,
55
+ ]
56
+
57
+ let pluginStatusMutationFields = [
58
+ ` Platform_PluginStatusChanged(pluginId: ID!, status: PluginStatus!): PluginStatusChangeEvent`,
59
+ ]
60
+
61
+ let pluginStatusSubscriptionField = ` onPluginStatusChange: PluginStatusChangeEvent\n @aws_subscribe(mutations: ["Platform_PluginStatusChanged"])`
62
+
63
+ let baseFragment = (~cloner: bool) => {
64
+ let base = GraphQL_FragmentGenerator.generate(~mutationEntries=mutationEntries(~cloner), ~queryEntries)
65
+ let parts = GraphQL_Stitcher.decode(base)
66
+ // Source C subscriptions for the admin Plugin aggregate mutations.
67
+ // The standard auto-resolver flow (CommandGeneratorResolvers_AppSync.make)
68
+ // always creates a Subscription.onX resolver per mutation field; without the
69
+ // matching SDL fields, AppSync's CreateResolver fails with "Type not found".
70
+ let pluginAggregateSubscriptionFields =
71
+ Plugin_SubscriptionSchema.sourceCFields(~mutationEntries=PluginBaseFragment.pluginAggregateMutationEntries)
72
+ GraphQL_Stitcher.encode({
73
+ types: parts.types
74
+ ->Array.concat(uiFragmentSubscriptionTypes)
75
+ ->Array.concat(pluginStatusSubscriptionTypes)
76
+ ->Array.concat(Platform_ComponentDefinitionsApi.sdlTypes)
77
+ ->Array.concat(Platform_UIFragmentsApi.sdlTypes),
78
+ queries: Array.concat(
79
+ parts.queries,
80
+ [Platform_ComponentDefinitionsApi.sdlQueryField, Platform_UIFragmentsApi.sdlQueryField],
81
+ ),
82
+ mutations: parts.mutations
83
+ ->Array.concat(uiFragmentMutationFields)
84
+ ->Array.concat(pluginStatusMutationFields),
85
+ subscriptions: [uiFragmentSubscriptionField, pluginStatusSubscriptionField]
86
+ ->Array.concat(pluginAggregateSubscriptionFields),
87
+ })
88
+ }
@@ -0,0 +1,89 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as S from "sury/src/S.res.mjs";
4
+ import * as Api_Naming$ReventlessCore from "../components/Api/Api_Naming.res.mjs";
5
+ import * as GraphQL_Stitcher$ReventlessCore from "../components/Api/GraphQL_Stitcher.res.mjs";
6
+ import * as PluginBaseFragment$ReventlessCore from "../plugin/api/PluginBaseFragment.res.mjs";
7
+ import * as Platform_UIFragmentsApi$ReventlessCore from "./Platform_UIFragmentsApi.res.mjs";
8
+ import * as GraphQL_FragmentGenerator$ReventlessCore from "../components/Api/GraphQL_FragmentGenerator.res.mjs";
9
+ import * as Plugin_SubscriptionSchema$ReventlessCore from "../plugin/component/Plugin_SubscriptionSchema.res.mjs";
10
+ import * as Platform_ComponentDefinitionsApi$ReventlessCore from "./Platform_ComponentDefinitionsApi.res.mjs";
11
+
12
+ let cloneArgsSchema = S.schema(s => ({
13
+ restoreDateTime: s.m(S.option(S.string))
14
+ }));
15
+
16
+ let cloneMutationEntry_fieldNames = [Api_Naming$ReventlessCore.adminField("Clone")];
17
+
18
+ let cloneMutationEntry_description = "Clone the system to a specific point in time";
19
+
20
+ let cloneMutationEntry = {
21
+ fieldNames: cloneMutationEntry_fieldNames,
22
+ commandSchema: cloneArgsSchema,
23
+ description: cloneMutationEntry_description
24
+ };
25
+
26
+ function mutationEntries(cloner) {
27
+ if (cloner) {
28
+ return PluginBaseFragment$ReventlessCore.pluginAggregateMutationEntries.concat([cloneMutationEntry]);
29
+ } else {
30
+ return PluginBaseFragment$ReventlessCore.pluginAggregateMutationEntries;
31
+ }
32
+ }
33
+
34
+ let uiFragmentSubscriptionTypes = [
35
+ `enum UIFragmentChangeKind {\n Registered\n Updated\n Deregistered\n}`,
36
+ `type UIFragmentChangeEvent {\n pluginId: ID!\n changeKind: UIFragmentChangeKind!\n manifest: String\n}`
37
+ ];
38
+
39
+ let uiFragmentMutationFields = [
40
+ ` Platform_UIFragmentRegistered(pluginId: ID!, manifest: String): UIFragmentChangeEvent`,
41
+ ` Platform_UIFragmentUpdated(pluginId: ID!, manifest: String): UIFragmentChangeEvent`,
42
+ ` Platform_UIFragmentDeregistered(pluginId: ID!): UIFragmentChangeEvent`
43
+ ];
44
+
45
+ let uiFragmentSubscriptionField = ` onUIFragmentChange: UIFragmentChangeEvent\n @aws_subscribe(mutations: ["Platform_UIFragmentRegistered", "Platform_UIFragmentUpdated", "Platform_UIFragmentDeregistered"])`;
46
+
47
+ let pluginStatusSubscriptionTypes = [
48
+ `enum PluginStatus {\n Connected\n Disconnected\n Inactive\n Retired\n}`,
49
+ `type PluginStatusChangeEvent {\n pluginId: ID!\n status: PluginStatus!\n}`
50
+ ];
51
+
52
+ let pluginStatusMutationFields = [` Platform_PluginStatusChanged(pluginId: ID!, status: PluginStatus!): PluginStatusChangeEvent`];
53
+
54
+ let pluginStatusSubscriptionField = ` onPluginStatusChange: PluginStatusChangeEvent\n @aws_subscribe(mutations: ["Platform_PluginStatusChanged"])`;
55
+
56
+ function baseFragment(cloner) {
57
+ let base = GraphQL_FragmentGenerator$ReventlessCore.generate(mutationEntries(cloner), PluginBaseFragment$ReventlessCore.queryEntries);
58
+ let parts = GraphQL_Stitcher$ReventlessCore.decode(base);
59
+ let pluginAggregateSubscriptionFields = Plugin_SubscriptionSchema$ReventlessCore.sourceCFields(PluginBaseFragment$ReventlessCore.pluginAggregateMutationEntries);
60
+ return GraphQL_Stitcher$ReventlessCore.encode({
61
+ types: parts.types.concat(uiFragmentSubscriptionTypes).concat(pluginStatusSubscriptionTypes).concat(Platform_ComponentDefinitionsApi$ReventlessCore.sdlTypes).concat(Platform_UIFragmentsApi$ReventlessCore.sdlTypes),
62
+ mutations: parts.mutations.concat(uiFragmentMutationFields).concat(pluginStatusMutationFields),
63
+ queries: parts.queries.concat([
64
+ Platform_ComponentDefinitionsApi$ReventlessCore.sdlQueryField,
65
+ Platform_UIFragmentsApi$ReventlessCore.sdlQueryField
66
+ ]),
67
+ subscriptions: [
68
+ uiFragmentSubscriptionField,
69
+ pluginStatusSubscriptionField
70
+ ].concat(pluginAggregateSubscriptionFields)
71
+ });
72
+ }
73
+
74
+ let queryEntries = PluginBaseFragment$ReventlessCore.queryEntries;
75
+
76
+ export {
77
+ cloneArgsSchema,
78
+ cloneMutationEntry,
79
+ mutationEntries,
80
+ queryEntries,
81
+ uiFragmentSubscriptionTypes,
82
+ uiFragmentMutationFields,
83
+ uiFragmentSubscriptionField,
84
+ pluginStatusSubscriptionTypes,
85
+ pluginStatusMutationFields,
86
+ pluginStatusSubscriptionField,
87
+ baseFragment,
88
+ }
89
+ /* cloneArgsSchema Not a pure module */
@@ -0,0 +1,27 @@
1
+ module type Spec = {
2
+ let pluginDefinition: Reventless.Plugin.pluginDefinition
3
+ let outgoingExtensionPointJsonEventsHandlers: array<ExtensionPoint.jsonEventsHandler>
4
+ }
5
+
6
+ module type T = {
7
+ let handleJsonEvents: EventCollector.jsonEventsHandler
8
+ }
9
+
10
+ module Make = (Spec: Spec): T => {
11
+ let handleJsonEvents: EventCollector.jsonEventsHandler = stream =>
12
+ stream
13
+ ->Stream.mapEffect(eventJson' =>
14
+ EffectLogger.logInfo(
15
+ ~comp="Admin",
16
+ `handleJsonEvents: outgoing event: ${LogFormat.event'JsonToLogMessage(eventJson')}`,
17
+ )->Effect.zipRight(
18
+ Effect.all(
19
+ Spec.outgoingExtensionPointJsonEventsHandlers->Array.map(handleEvent =>
20
+ Effect.promise(() => handleEvent(eventJson', Spec.pluginDefinition))
21
+ ),
22
+ {"concurrency": "unbounded"},
23
+ )->Effect.map(_ => ())
24
+ )
25
+ )
26
+ ->Stream.runDrain
27
+ }
@@ -0,0 +1,20 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Effect from "effect/Effect";
4
+ import * as Stream from "effect/Stream";
5
+ import * as LogFormat$ReventlessCore from "../util/LogFormat.res.mjs";
6
+ import * as EffectLogger$ReventlessCore from "../util/EffectLogger.res.mjs";
7
+
8
+ function Make(Spec) {
9
+ let handleJsonEvents = stream => Stream.runDrain(Stream.mapEffect(stream, eventJson$p => Effect.zipRight(EffectLogger$ReventlessCore.logInfo("Admin", undefined, `handleJsonEvents: outgoing event: ` + LogFormat$ReventlessCore.event$pJsonToLogMessage(eventJson$p)), Effect.map(Effect.all(Spec.outgoingExtensionPointJsonEventsHandlers.map(handleEvent => Effect.promise(() => handleEvent(eventJson$p, Spec.pluginDefinition))), {
10
+ concurrency: "unbounded"
11
+ }), param => {}))));
12
+ return {
13
+ handleJsonEvents: handleJsonEvents
14
+ };
15
+ }
16
+
17
+ export {
18
+ Make,
19
+ }
20
+ /* effect/Effect Not a pure module */
@@ -0,0 +1,402 @@
1
+ module type Config = {
2
+ let silent: bool
3
+ let splitApi: bool
4
+ let cloner: bool
5
+ let hooks: Plugin_Helpers.platformHooks
6
+ }
7
+
8
+ type outputs = {
9
+ adminFragment: ReventlessInfra.Api.schemaFragment,
10
+ dcbMutationEntries: array<ReventlessInfra.Api.mutationSchemaEntry>,
11
+ dcbQueryEntries: array<ReventlessInfra.Api.querySchemaEntry>,
12
+ dcbEventLogEntries: array<ReventlessInfra.Api.eventLogSchemaEntry>,
13
+ extensionPointsOutputs: Pulumi.Output.t<array<ExtensionPoint.outputs>>,
14
+ aggregatesOutputs: dict<Aggregate.outputs>,
15
+ readModelsOutputs: dict<ReadModel.outputs>,
16
+ dcbEventLogOutputs: option<DcbEventLog.outputs>,
17
+ stateChangeSlicesOutputs: dict<StateChangeSlice.outputs>,
18
+ stateViewSlicesOutputs: dict<StateViewSlice.outputs>,
19
+ automationSlicesOutputs: dict<AutomationSlice.outputs>,
20
+ outboundTranslationSlicesOutputs: dict<OutboundTranslationSlice.outputs>,
21
+ inboundTranslationSlicesOutputs: dict<InboundTranslationSlice.outputs>,
22
+ }
23
+
24
+ module Make = (
25
+ RuntimeEnvironment: Runtime.Environment,
26
+ EventCollectorChannel: EventCollector_Adapter.Channel
27
+ with type runtimeParts = RuntimeEnvironment.parts,
28
+ QueryEngineAdapter: QueryDb_Adapter.QueryEngineAdapter,
29
+ ClonerRunner: Cloner.Adapter.Runner,
30
+ AdminRuntimeBuilder: PluginRuntime_Builder.T
31
+ with module EventCollectorChannel = EventCollectorChannel
32
+ and type runtimeParts = RuntimeEnvironment.parts,
33
+ DcbEventLogStorage: DcbEventLog_Adapter.Storage,
34
+ DcbEventTopicPublisher: EventTopic_Adapter.Publisher,
35
+ DcbCommandTopicChannel: CommandTopic_Adapter.Channel,
36
+ DcbCommandTopicChannelAsync: CommandTopic_Adapter.Channel,
37
+ Config: Config,
38
+ ) => {
39
+ include Builder_Helpers
40
+
41
+ module MakeEventCollectorHelper = (
42
+ RE: Runtime.Environment,
43
+ ECC: EventCollector_Adapter.Channel with type runtimeParts = RE.parts,
44
+ RB: PluginRuntime_Builder.T with module EventCollectorChannel = ECC,
45
+ ) => {
46
+ module AdminEventCollector = EventCollector_Builder.Make(RE, ECC)
47
+ let make = (~name, ~eventTopics, ~opts) => {
48
+ let eventCollector = AdminEventCollector.make(~name, ~eventTopics, ~opts)
49
+ let eventCollectorOutputs = eventCollector->Component.outputs
50
+ (eventCollector, eventCollectorOutputs)
51
+ }
52
+
53
+ let connect = (
54
+ ~eventCollector: EventCollector.component,
55
+ ~eventTopics: EventTopic.allOutputs,
56
+ ~extensionPointsOutputs: array<ExtensionPoint.outputs>,
57
+ ~extensionPointsOutgoingJsonEventsHandlers,
58
+ ) => {
59
+ let resources =
60
+ extensionPointsOutputs
61
+ ->Array.map(extensionPoint => extensionPoint.eventTopic)
62
+ ->Pulumi.Output.all
63
+ ->Pulumi.Output.apply(eventTopics =>
64
+ eventTopics
65
+ ->Array.map(eventTopic => eventTopic.resources)
66
+ ->Array.flat
67
+ )
68
+
69
+ resources->Pulumi.Output.apply(resources => {
70
+ let fakePluginDefinition: Reventless.Plugin.pluginDefinition = {
71
+ id: "Admin@INTERNAL",
72
+ name: "Admin",
73
+ version: "INTERNAL",
74
+ extensionPoints: [],
75
+ extensions: [],
76
+ eventCollector: "NOT-SET",
77
+ extensionProtocols: [],
78
+ apiSchemaFragment: None,
79
+ apiTarget: None,
80
+ uiFragments: None,
81
+ structure: None,
82
+ dcbEventLog: None,
83
+ }
84
+
85
+ module Callback = Admin_Callback.Make({
86
+ let pluginDefinition = fakePluginDefinition
87
+ let outgoingExtensionPointJsonEventsHandlers = extensionPointsOutgoingJsonEventsHandlers
88
+ })
89
+ let handler = AdminEventCollector.makeHandler(
90
+ ~eventCollector,
91
+ ~jsonEventsHandler=Callback.handleJsonEvents,
92
+ )
93
+ eventCollector->RB.forPluginEventCollector(~handler, ~eventTopics, ~resources)
94
+ })
95
+ }
96
+ }
97
+
98
+ type api = ClonerRunner.api
99
+
100
+ let construct = (
101
+ ~version as _,
102
+ ~extensionPoints: array<module(ReventlessInfra.ExtensionPoint.T)>,
103
+ ~aggregates: array<module(ReventlessInfra.Aggregate.T with type api = api)>,
104
+ ~readModels: array<module(ReventlessInfra.ReadModel.T with type api = api and type role = 'role)>,
105
+ ~scheduler: Pulumi.Output.t<Scheduler.operations>,
106
+ ~resourceNaming: ReventlessInfra.ResourceNaming.operations,
107
+ ~api: ClonerRunner.api,
108
+ ~apiRole: 'role,
109
+ ~stateChangeSlices: array<module(ReventlessInfra.StateChangeSlice.T)>,
110
+ ~stateViewSlices: array<module(ReventlessInfra.StateViewSlice.T)>,
111
+ ~automationSlices: array<module(ReventlessInfra.AutomationSlice.T)>,
112
+ ~outboundTranslationSlices: array<module(ReventlessInfra.OutboundTranslationSlice.T)>,
113
+ ~inboundTranslationSlices: array<module(ReventlessInfra.InboundTranslationSlice.T)>,
114
+ ) => {
115
+ let name = "Admin"
116
+ let opts: Pulumi.ComponentResource.options = {}
117
+
118
+ // Construct DCB components and derive DCB-specific API schema entries
119
+ module DcbBuilder = Dcb_Builder.Make(
120
+ DcbEventLogStorage,
121
+ DcbEventTopicPublisher,
122
+ DcbCommandTopicChannel,
123
+ DcbCommandTopicChannelAsync,
124
+ AdminRuntimeBuilder,
125
+ Config,
126
+ )
127
+ // Aggregates constructed early so multi-source AutomationSlices created
128
+ // inside DcbBuilder can subscribe to Aggregate event topics.
129
+ let aggregatesWithoutEventMappers = aggregates->createAggregatesWithoutEventMappers(~api, opts)
130
+ let aggregateEventTopics = Aggregate.allEventTopics(aggregatesWithoutEventMappers)
131
+
132
+ // Wire CommandGenerator → AppSync / in-memory GraphQL resolvers via
133
+ // `mutationResolverHook` and populate `aggregateMutationFieldsRegistry`.
134
+ // The matching SDL entries are owned by
135
+ // `PluginBaseFragment.pluginAggregateMutationEntries` (picked up via
136
+ // `AdminApi.mutationEntries`) so the AWS path that pushes
137
+ // `AdminApi.baseFragment` directly stays aligned with the in-memory path.
138
+ aggregates->Plugin_Helpers.registerAdminAggregateMutations(~hooks=Config.hooks)
139
+
140
+ let dcbResult = DcbBuilder.construct(
141
+ ~name,
142
+ ~childName=name,
143
+ ~aggregateEventTopics,
144
+ ~stateChangeSlices,
145
+ ~stateViewSlices,
146
+ ~automationSlices,
147
+ ~outboundTranslationSlices,
148
+ ~inboundTranslationSlices,
149
+ ~opts,
150
+ )
151
+
152
+ // Admin schema — composed from actual config. `AdminApi.mutationEntries`
153
+ // already includes the auto-derived `Platform_Plugin_Activate`/`Deactivate`
154
+ // entries (via `PluginBaseFragment.pluginAggregateMutationEntries`) so the
155
+ // SDL stays in sync with the resolver wiring fired above.
156
+ let adminMutationEntries = AdminApi.mutationEntries(~cloner=Config.cloner)
157
+ let allMutationEntries = Array.concat(adminMutationEntries, dcbResult.mutationEntries)
158
+ let allQueryEntries = Array.concat(AdminApi.queryEntries, dcbResult.queryEntries)
159
+ let adminFragment = GraphQL_FragmentGenerator.generate(
160
+ ~mutationEntries=allMutationEntries,
161
+ ~queryEntries=allQueryEntries,
162
+ )
163
+
164
+ // Register DCB schema entries via hooks (same path as plugins)
165
+ if dcbResult.mutationEntries->Array.length > 0 || dcbResult.queryEntries->Array.length > 0 {
166
+ switch Config.hooks.schemaTypeRegistrationHook {
167
+ | Some(registerTypes) =>
168
+ let parts = GraphQL_Stitcher.decode(adminFragment)
169
+ registerTypes(parts.types)
170
+ | None => ()
171
+ }
172
+
173
+ switch Config.hooks.mcpSchemaRegistrationHook {
174
+ | Some(registerMcp) =>
175
+ registerMcp({
176
+ pluginName: "Admin",
177
+ mutationEntries: allMutationEntries,
178
+ queryEntries: allQueryEntries,
179
+ eventLogEntries: dcbResult.eventLogEntries,
180
+ subscriptionFields: GraphQL_Stitcher.decode(adminFragment).subscriptions,
181
+ })
182
+ | None => ()
183
+ }
184
+ }
185
+
186
+ // Reuse aggregateEventTopics computed above as the base for ReadModels' allEventTopics.
187
+ let allEventTopics = aggregateEventTopics
188
+ switch dcbResult.dcbEventLogOutputs {
189
+ | Some(dcbOutputs) => allEventTopics->Dict.set(name ++ "DcbEventLog", dcbOutputs.eventTopic)
190
+ | None => ()
191
+ }
192
+
193
+ // Pre-populate the query field names + state schema registries for admin
194
+ // read models. Plugin_Builder does this for plugin-owned read models inside
195
+ // its own loop, but admin RMs are passed in from outside and skip that path.
196
+ // Without these entries, QueryDbResolvers_{AppSync,GraphQL}.make falls back
197
+ // to lowercased Spec.name field names (e.g. `plugin`/`plugins`), which don't
198
+ // match the `Platform_Plugin`/`Platform_Plugins` SDL fields declared by
199
+ // PluginBaseFragment.queryEntries — leaving the SDL fields without a
200
+ // resolver and producing "Cannot return null for non-nullable type" errors.
201
+ AdminApi.queryEntries->Array.forEach(entry => {
202
+ let prefix = "Platform_"
203
+ let entityName = if entry.returnTypeName->String.startsWith(prefix) {
204
+ entry.returnTypeName->String.slice(
205
+ ~start=prefix->String.length,
206
+ ~end=entry.returnTypeName->String.length,
207
+ )
208
+ } else {
209
+ entry.returnTypeName
210
+ }
211
+ // Registry key MUST match the read-model `Spec.name` because
212
+ // `QueryDbResolvers_{AppSync,GraphQL}.make` looks up the registry by
213
+ // `Spec.name` (which is also what `QueryDb_Builder.Make` passes as the
214
+ // `~name` argument). Prefer `entry.specName` when provided; fall back
215
+ // to the singular form derived from `returnTypeName` for backward
216
+ // compatibility with entries whose Spec.name equals the singular
217
+ // entity name (a read model whose `Spec.name` is already singular). Without this alignment,
218
+ // plural-named read models (e.g. `Plugins`) miss the registry and
219
+ // fall through to `name->uncapitalize` / `name ++ "s"` field names
220
+ // (`plugins`, `Pluginss`, `PluginssByIds`) that don't exist in the
221
+ // pushed SDL — CreateResolver then loops on
222
+ // `NotFoundException: No field named ...`.
223
+ let registryKey = entry.specName->Option.getOr(entityName)
224
+ let (labelField, _searchableFields) = Plugin_Structure.labelFieldsFromStateSchema(
225
+ ~entityName,
226
+ entry.stateSchema,
227
+ )
228
+ let qn: Api_Naming.queryNames = {
229
+ singleFieldName: entry.singleFieldName,
230
+ listFieldName: entry.listFieldName,
231
+ returnTypeName: entry.returnTypeName,
232
+ pluralTypeName: entry.listFieldName,
233
+ includeIdParam: entry.includeIdParam->Option.getOr(true),
234
+ connectionSpec: entry.connectionSpec->Option.getOr(true),
235
+ labelField,
236
+ connectionFilterTypeName: entry.returnTypeName ++ "Filter",
237
+ }
238
+ Plugin_Helpers.queryFieldNamesRegistry->Dict.set(registryKey, qn)
239
+ Plugin_Helpers.stateSchemaRegistry->Dict.set(registryKey, entry.stateSchema)
240
+ })
241
+
242
+ let readModelsOutputs = readModels->createReadModels(~api, ~apiRole, allEventTopics, opts)
243
+
244
+ let allQueryDbs = readModelsOutputs->ReadModel.allQueryDbs
245
+ // Merge DCB StateViewSlice / InboundTranslation QueryDbs into allQueryDbs so the
246
+ // resolver-makers wired below also cover admin DCB slice fields (mirrors the
247
+ // plugin-side merge at Plugin_Builder.res).
248
+ dcbResult.stateViewSlicesOutputs
249
+ ->Dict.toArray
250
+ ->Array.forEach(((k, v)) => allQueryDbs->Dict.set(k, v.queryDb))
251
+ dcbResult.inboundTranslationSlicesOutputs
252
+ ->Dict.toArray
253
+ ->Array.forEach(((k, v)) => allQueryDbs->Dict.set(k, v.queryDb))
254
+
255
+ // Wire subscription infrastructure (StateTopic) for admin RMs + DCB slices.
256
+ // Mirrors Plugin_Builder's hook fire at Plugin_Builder.res:729 — gives the
257
+ // AWS platform access to admin's allQueryDbs / allEventTopics so the
258
+ // shared StateTopic Lambda's registry sees admin stream-enabled tables.
259
+ let eventLogEntriesFromAggregates =
260
+ aggregates->Array.map((module(M: ReventlessInfra.Aggregate.T with type api = api)) => {
261
+ ReventlessInfra.Api.busKey: M.Spec.name ++ "Aggr" ++ "EventLog",
262
+ displayName: M.Spec.name,
263
+ eventSchema: M.Spec.eventSchema->S.castToUnknown,
264
+ })
265
+ let eventLogEntries = Array.concat(eventLogEntriesFromAggregates, dcbResult.eventLogEntries)
266
+ Config.hooks.subscriptionInfraHook->Option.forEach(hook =>
267
+ hook({allQueryDbs, allEventTopics, eventLogEntries, opts})
268
+ )
269
+
270
+ let queryEngine = QueryEngineAdapter.make(allQueryDbs)
271
+
272
+ // Invoke each QueryDb's deferred resolversMaker so AppSync resolvers are
273
+ // actually attached to the admin-prefixed Connection fields (Platform_Plugins,
274
+ // …). Without this, ReadModel_Builder_Single
275
+ // produces the resolverMaker closure but it is never called, and AppSync
276
+ // returns "Cannot return null for non-nullable type" for the Connection field.
277
+ //
278
+ // Gate the actual CreateResolver SDK calls on the admin schema push (when
279
+ // the platform supplies preAdminResolversSchemaHook). AppSync holds an
280
+ // API-level lock during StartSchemaCreation and rejects concurrent
281
+ // CreateResolver / UpdateResolver / CreateDataSource with
282
+ // ConcurrentModificationException — mirrors Plugin_Builder's schemaPushed
283
+ // pattern at Plugin_Builder.res:452-466. The barrier collects:
284
+ // • the names of all admin read-model DDB resources, AND
285
+ // • each read model's AppSync DataSource name
286
+ // so the schema push waits for the underlying DDB tables *and* their
287
+ // DataSources to be fully created. Including DataSource names is what
288
+ // prevents the schema push from racing CreateDataSource on a freshly
289
+ // renamed read model (e.g. the Plugin → Plugins rename), where the new
290
+ // DataSource is still being created when StartSchemaCreation reports
291
+ // ACTIVE and the next CreateDataSource then hits a busy API with a 409.
292
+ // Platforms with no hook (e.g. in-memory) return an already-resolved
293
+ // Output and createResolvers fires immediately, as before.
294
+ let adminBarrier = {
295
+ let resourceNames =
296
+ readModelsOutputs
297
+ ->Dict.valuesToArray
298
+ ->Array.flatMap(rm => rm.queryDb.resources->Array.map(r => r.name))
299
+ let dataSourceNames =
300
+ readModelsOutputs
301
+ ->Dict.valuesToArray
302
+ ->Array.map(rm => rm.queryDb.dataSourceName)
303
+ resourceNames
304
+ ->Array.concat(dataSourceNames)
305
+ ->Pulumi.Output.all
306
+ ->Pulumi.Output.apply(_ => ())
307
+ }
308
+ let adminSchemaPushed = switch Config.hooks.preAdminResolversSchemaHook {
309
+ | Some(push) => push(~adminBarrier)
310
+ | None => Pulumi.Output.make()
311
+ }
312
+ let _resolvers = adminSchemaPushed->Pulumi.Output.apply(() =>
313
+ allQueryDbs->createResolvers
314
+ )
315
+
316
+ let extensionPointsOutputs =
317
+ (
318
+ aggregateResources->Pulumi.Output.allDict,
319
+ publishToAggregates->Pulumi.Output.allDict,
320
+ queryEngine,
321
+ scheduler,
322
+ )
323
+ ->Pulumi.Output.all4
324
+ ->Pulumi.Output.apply(((aggregateResources, publishToAggregates, queryEngine, scheduler)) => {
325
+ let _aggregatesOutputs = addEventMappers(allEventTopics, queryEngine)
326
+
327
+ let (
328
+ extensionPointsOutputs,
329
+ extensionPointsOutgoingJsonEventsHandlers,
330
+ _extensionPointRegistryInfos,
331
+ ) =
332
+ extensionPoints->createExtensionPoints(
333
+ ~aggregateResources,
334
+ ~publishToAggregates,
335
+ ~scheduler,
336
+ ~queryEngine,
337
+ ~resourceNaming,
338
+ ~opts,
339
+ )
340
+
341
+ let aggregateNames =
342
+ extensionPointsOutputs
343
+ ->Array.map(extensionPointOutputs =>
344
+ extensionPointOutputs.aggregateNames->Belt.Set.String.fromArray
345
+ )
346
+ ->Array.reduce(Belt.Set.String.empty, (acc, names) => acc->Belt.Set.String.union(names))
347
+
348
+ let aggregatesOutputs = addEventMappers(allEventTopics, queryEngine)
349
+ let eventTopics = aggregatesOutputs->Aggregate.filterEventTopics(aggregateNames)
350
+
351
+ module EventCollectorHelper = MakeEventCollectorHelper(
352
+ RuntimeEnvironment,
353
+ EventCollectorChannel,
354
+ AdminRuntimeBuilder,
355
+ )
356
+ let (eventCollector, _eventCollectorOutputs) = EventCollectorHelper.make(
357
+ ~name,
358
+ ~eventTopics,
359
+ ~opts,
360
+ )
361
+
362
+ let _ =
363
+ extensionPointsOutgoingJsonEventsHandlers
364
+ ->Pulumi.Output.all
365
+ ->Pulumi.Output.flatMap(extensionPointsOutgoingJsonEventsHandlers =>
366
+ EventCollectorHelper.connect(
367
+ ~eventCollector,
368
+ ~eventTopics,
369
+ ~extensionPointsOutputs,
370
+ ~extensionPointsOutgoingJsonEventsHandlers,
371
+ )
372
+ )
373
+
374
+ // Connect DCB command topic to its runtime (if DCB is configured)
375
+ dcbResult.dcbRuntimeSetup->Option.forEach(dcbRuntimeSetup => dcbRuntimeSetup())
376
+
377
+ extensionPointsOutputs
378
+ })
379
+
380
+ // Cloner (opt-in)
381
+ if Config.cloner {
382
+ module Cloner = Cloner.Make(ClonerRunner)
383
+ let _cloner = Cloner.make(~api, ~opts)
384
+ }
385
+
386
+ {
387
+ adminFragment,
388
+ dcbMutationEntries: dcbResult.mutationEntries,
389
+ dcbQueryEntries: dcbResult.queryEntries,
390
+ dcbEventLogEntries: dcbResult.eventLogEntries,
391
+ extensionPointsOutputs,
392
+ aggregatesOutputs: aggregatesWithoutEventMappers,
393
+ readModelsOutputs,
394
+ dcbEventLogOutputs: dcbResult.dcbEventLogOutputs,
395
+ stateChangeSlicesOutputs: dcbResult.stateChangeSlicesOutputs,
396
+ stateViewSlicesOutputs: dcbResult.stateViewSlicesOutputs,
397
+ automationSlicesOutputs: dcbResult.automationSlicesOutputs,
398
+ outboundTranslationSlicesOutputs: dcbResult.outboundTranslationSlicesOutputs,
399
+ inboundTranslationSlicesOutputs: dcbResult.inboundTranslationSlicesOutputs,
400
+ }
401
+ }
402
+ }