@codemation/host 0.0.1

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 (358) hide show
  1. package/README.md +75 -0
  2. package/dist/CodemationConfig-XCkSV2dj.d.ts +168 -0
  3. package/dist/CodemationConsumerConfigLoader-Dmm2TzAA.d.ts +61 -0
  4. package/dist/CodemationConsumerConfigLoader-scS_RQMy.js +334 -0
  5. package/dist/CodemationConsumerConfigLoader-scS_RQMy.js.map +1 -0
  6. package/dist/CodemationFrontendBootstrapRequest-CE6DjOWJ.js +5768 -0
  7. package/dist/CodemationFrontendBootstrapRequest-CE6DjOWJ.js.map +1 -0
  8. package/dist/CodemationPluginListMerger-BNmaoXQL.js +49 -0
  9. package/dist/CodemationPluginListMerger-BNmaoXQL.js.map +1 -0
  10. package/dist/CodemationPluginListMerger-BRYqEk0y.d.ts +793 -0
  11. package/dist/CodemationWhitelabelConfig-DgbjgtrR.d.ts +48 -0
  12. package/dist/ConsoleLogger-ClPU7jtc.js +35 -0
  13. package/dist/ConsoleLogger-ClPU7jtc.js.map +1 -0
  14. package/dist/CredentialServices-BKBGe7l3.js +1030 -0
  15. package/dist/CredentialServices-BKBGe7l3.js.map +1 -0
  16. package/dist/CredentialServices-DpDpm8mL.d.ts +291 -0
  17. package/dist/LogLevelPolicy-4cq9z0TI.d.ts +37 -0
  18. package/dist/PrismaMigrationDeployer-B1E_gYz7.js +8212 -0
  19. package/dist/PrismaMigrationDeployer-B1E_gYz7.js.map +1 -0
  20. package/dist/ServerLoggerFactory-BRHxIDS7.js +340 -0
  21. package/dist/ServerLoggerFactory-BRHxIDS7.js.map +1 -0
  22. package/dist/WorkflowViewContracts-DCLpTn25.d.ts +47 -0
  23. package/dist/chunk-7V6ThxGB.js +39 -0
  24. package/dist/client-Yh7-CQud.d.ts +21995 -0
  25. package/dist/client.d.ts +12 -0
  26. package/dist/client.js +15 -0
  27. package/dist/client.js.map +1 -0
  28. package/dist/consumer.d.ts +5 -0
  29. package/dist/consumer.js +7 -0
  30. package/dist/credentials.d.ts +50 -0
  31. package/dist/credentials.js +11 -0
  32. package/dist/credentials.js.map +1 -0
  33. package/dist/decorate-B-N_5S4p.js +10 -0
  34. package/dist/decorateParam-BTcc3KNk.js +15 -0
  35. package/dist/devServerSidecar.d.ts +52 -0
  36. package/dist/devServerSidecar.js +131 -0
  37. package/dist/devServerSidecar.js.map +1 -0
  38. package/dist/index-Bs4F1IsC.d.ts +1044 -0
  39. package/dist/index.d.ts +19 -0
  40. package/dist/index.js +14 -0
  41. package/dist/nextServer.d.ts +89 -0
  42. package/dist/nextServer.js +127 -0
  43. package/dist/nextServer.js.map +1 -0
  44. package/dist/persistenceServer-K5eqlZm3.d.ts +36 -0
  45. package/dist/persistenceServer-W9uRw0dJ.js +19 -0
  46. package/dist/persistenceServer-W9uRw0dJ.js.map +1 -0
  47. package/dist/persistenceServer.d.ts +6 -0
  48. package/dist/persistenceServer.js +6 -0
  49. package/dist/server-BBdsATju.d.ts +132 -0
  50. package/dist/server-BiHSuA13.js +175 -0
  51. package/dist/server-BiHSuA13.js.map +1 -0
  52. package/dist/server.d.ts +9 -0
  53. package/dist/server.js +13 -0
  54. package/package.json +152 -0
  55. package/playwright.config.ts +74 -0
  56. package/prisma/migrations/20260315063514_init/migration.sql +16 -0
  57. package/prisma/migrations/20260316090000_workflow_debugger_overlay/migration.sql +9 -0
  58. package/prisma/migrations/20260317120000_trigger_state_store/migration.sql +3 -0
  59. package/prisma/migrations/20260317153000_trigger_setup_state/migration.sql +8 -0
  60. package/prisma/migrations/20260318110000_credentials_v2/migration.sql +49 -0
  61. package/prisma/migrations/20260319110000_credential_oauth2_material/migration.sql +28 -0
  62. package/prisma/migrations/20260319200000_codemation_auth_tables/migration.sql +56 -0
  63. package/prisma/migrations/20260320140000_user_invites_account_status/migration.sql +20 -0
  64. package/prisma/migrations/20260325120000_workflow_activation/migration.sql +8 -0
  65. package/prisma/migrations/migration_lock.toml +3 -0
  66. package/prisma/schema.prisma +179 -0
  67. package/prisma.config.ts +12 -0
  68. package/scripts/ensure-prisma-runtime-sourcemaps.mjs +42 -0
  69. package/scripts/integration-database-global-setup.mjs +30 -0
  70. package/src/application/ApplicationRequestError.ts +12 -0
  71. package/src/application/auth/AuthenticatedPrincipal.ts +5 -0
  72. package/src/application/auth/SessionVerifier.ts +5 -0
  73. package/src/application/binary/OverlayPinnedBinaryUploadService.ts +119 -0
  74. package/src/application/binary/RunBinaryAttachmentLookupService.ts +139 -0
  75. package/src/application/binary/RunStateBinaryStorageKeysCollector.ts +57 -0
  76. package/src/application/bus/Command.ts +3 -0
  77. package/src/application/bus/CommandBus.ts +5 -0
  78. package/src/application/bus/CommandHandler.ts +5 -0
  79. package/src/application/bus/DomainEvent.ts +1 -0
  80. package/src/application/bus/DomainEventBus.ts +5 -0
  81. package/src/application/bus/DomainEventHandler.ts +5 -0
  82. package/src/application/bus/Query.ts +3 -0
  83. package/src/application/bus/QueryBus.ts +5 -0
  84. package/src/application/bus/QueryHandler.ts +5 -0
  85. package/src/application/commands/AcceptUserInviteCommand.ts +10 -0
  86. package/src/application/commands/AcceptUserInviteCommandHandler.ts +19 -0
  87. package/src/application/commands/CopyRunToWorkflowDebuggerCommand.ts +14 -0
  88. package/src/application/commands/CopyRunToWorkflowDebuggerCommandHandler.ts +56 -0
  89. package/src/application/commands/CreateCredentialInstanceCommand.ts +9 -0
  90. package/src/application/commands/CreateCredentialInstanceCommandHandler.ts +28 -0
  91. package/src/application/commands/CredentialCommandHandlers.ts +10 -0
  92. package/src/application/commands/DeleteCredentialInstanceCommand.ts +7 -0
  93. package/src/application/commands/DeleteCredentialInstanceCommandHandler.ts +27 -0
  94. package/src/application/commands/HandleWebhookInvocationCommand.ts +12 -0
  95. package/src/application/commands/HandleWebhookInvocationCommandHandler.ts +42 -0
  96. package/src/application/commands/InviteUserCommand.ts +12 -0
  97. package/src/application/commands/InviteUserCommandHandler.ts +22 -0
  98. package/src/application/commands/RegenerateUserInviteCommand.ts +12 -0
  99. package/src/application/commands/RegenerateUserInviteCommandHandler.ts +24 -0
  100. package/src/application/commands/ReplaceMutableRunWorkflowSnapshotCommand.ts +12 -0
  101. package/src/application/commands/ReplaceMutableRunWorkflowSnapshotCommandHandler.ts +47 -0
  102. package/src/application/commands/ReplaceWorkflowDebuggerOverlayCommand.ts +14 -0
  103. package/src/application/commands/ReplaceWorkflowDebuggerOverlayCommandHandler.ts +35 -0
  104. package/src/application/commands/ReplayWorkflowNodeCommand.ts +12 -0
  105. package/src/application/commands/ReplayWorkflowNodeCommandHandler.ts +164 -0
  106. package/src/application/commands/SetPinnedNodeInputCommand.ts +13 -0
  107. package/src/application/commands/SetPinnedNodeInputCommandHandler.ts +50 -0
  108. package/src/application/commands/SetWorkflowActivationCommand.ts +10 -0
  109. package/src/application/commands/SetWorkflowActivationCommandHandler.ts +39 -0
  110. package/src/application/commands/StartWorkflowRunCommand.ts +8 -0
  111. package/src/application/commands/StartWorkflowRunCommandHandler.ts +286 -0
  112. package/src/application/commands/TestCredentialInstanceCommand.ts +9 -0
  113. package/src/application/commands/TestCredentialInstanceCommandHandler.ts +28 -0
  114. package/src/application/commands/UpdateCredentialInstanceCommand.ts +12 -0
  115. package/src/application/commands/UpdateCredentialInstanceCommandHandler.ts +28 -0
  116. package/src/application/commands/UpdateUserAccountStatusCommand.ts +12 -0
  117. package/src/application/commands/UpdateUserAccountStatusCommandHandler.ts +24 -0
  118. package/src/application/commands/UploadOverlayPinnedBinaryCommand.ts +16 -0
  119. package/src/application/commands/UploadOverlayPinnedBinaryCommandHandler.ts +31 -0
  120. package/src/application/commands/UpsertCredentialBindingCommand.ts +11 -0
  121. package/src/application/commands/UpsertCredentialBindingCommandHandler.ts +28 -0
  122. package/src/application/commands/UpsertLocalBootstrapUserCommand.ts +12 -0
  123. package/src/application/commands/UpsertLocalBootstrapUserCommandHandler.ts +24 -0
  124. package/src/application/commands/UserAccountCommandHandlers.ts +10 -0
  125. package/src/application/contracts/CredentialContractsRegistry.ts +88 -0
  126. package/src/application/contracts/RunContracts.ts +41 -0
  127. package/src/application/contracts/WorkflowDebuggerContracts.ts +12 -0
  128. package/src/application/contracts/WorkflowViewContracts.ts +40 -0
  129. package/src/application/contracts/WorkflowWebsocketMessage.ts +8 -0
  130. package/src/application/contracts/userDirectoryContracts.types.ts +60 -0
  131. package/src/application/dev/BootRuntimeSnapshotHolder.ts +19 -0
  132. package/src/application/dev/BootRuntimeSummary.types.ts +11 -0
  133. package/src/application/dev/DevBootstrapSummaryAssembler.ts +84 -0
  134. package/src/application/dev/DevBootstrapSummaryJson.types.ts +9 -0
  135. package/src/application/logging/LogFilter.ts +7 -0
  136. package/src/application/logging/Logger.ts +10 -0
  137. package/src/application/mapping/DataMapper.ts +3 -0
  138. package/src/application/mapping/WorkflowDefinitionMapper.ts +171 -0
  139. package/src/application/mapping/WorkflowPolicyUiPresentationFactory.ts +39 -0
  140. package/src/application/queries/CredentialQueryHandlers.ts +12 -0
  141. package/src/application/queries/GetCredentialFieldEnvStatusQuery.ts +5 -0
  142. package/src/application/queries/GetCredentialFieldEnvStatusQueryHandler.ts +52 -0
  143. package/src/application/queries/GetCredentialInstanceQuery.ts +9 -0
  144. package/src/application/queries/GetCredentialInstanceQueryHandler.ts +27 -0
  145. package/src/application/queries/GetCredentialInstanceWithSecretsQuery.ts +9 -0
  146. package/src/application/queries/GetCredentialInstanceWithSecretsQueryHandler.ts +27 -0
  147. package/src/application/queries/GetRunBinaryAttachmentQuery.ts +11 -0
  148. package/src/application/queries/GetRunBinaryAttachmentQueryHandler.ts +23 -0
  149. package/src/application/queries/GetRunStateQuery.ts +8 -0
  150. package/src/application/queries/GetRunStateQueryHandler.ts +21 -0
  151. package/src/application/queries/GetWorkflowCredentialHealthQuery.ts +9 -0
  152. package/src/application/queries/GetWorkflowCredentialHealthQueryHandler.ts +27 -0
  153. package/src/application/queries/GetWorkflowDebuggerOverlayQuery.ts +8 -0
  154. package/src/application/queries/GetWorkflowDebuggerOverlayQueryHandler.ts +28 -0
  155. package/src/application/queries/GetWorkflowDetailQuery.ts +8 -0
  156. package/src/application/queries/GetWorkflowDetailQueryHandler.ts +24 -0
  157. package/src/application/queries/GetWorkflowOverlayBinaryAttachmentQuery.ts +11 -0
  158. package/src/application/queries/GetWorkflowOverlayBinaryAttachmentQueryHandler.ts +23 -0
  159. package/src/application/queries/GetWorkflowSummariesQuery.ts +4 -0
  160. package/src/application/queries/GetWorkflowSummariesQueryHandler.ts +23 -0
  161. package/src/application/queries/ListCredentialInstancesQuery.ts +5 -0
  162. package/src/application/queries/ListCredentialInstancesQueryHandler.ts +27 -0
  163. package/src/application/queries/ListCredentialTypesQuery.ts +5 -0
  164. package/src/application/queries/ListCredentialTypesQueryHandler.ts +28 -0
  165. package/src/application/queries/ListUserAccountsQuery.ts +5 -0
  166. package/src/application/queries/ListUserAccountsQueryHandler.ts +22 -0
  167. package/src/application/queries/ListWorkflowRunsQuery.ts +8 -0
  168. package/src/application/queries/ListWorkflowRunsQueryHandler.ts +21 -0
  169. package/src/application/queries/UserAccountQueryHandlers.ts +4 -0
  170. package/src/application/queries/VerifyUserInviteQuery.ts +9 -0
  171. package/src/application/queries/VerifyUserInviteQueryHandler.ts +21 -0
  172. package/src/application/runs/WorkflowRunRetentionPruneScheduler.ts +98 -0
  173. package/src/application/websocket/WorkflowRunEventWebsocketRelay.ts +36 -0
  174. package/src/application/websocket/WorkflowWebsocketPublisher.ts +5 -0
  175. package/src/application/workflows/WebhookEndpointPathValidator.ts +35 -0
  176. package/src/application/workflows/WorkflowDebuggerOverlayStateFactory.ts +122 -0
  177. package/src/applicationTokens.ts +72 -0
  178. package/src/bootstrap/CodemationBootstrapRequest.ts +27 -0
  179. package/src/bootstrap/CodemationContainerFactory.ts +310 -0
  180. package/src/bootstrap/CodemationContainerRegistration.ts +23 -0
  181. package/src/bootstrap/CodemationContainerRegistrationRegistrar.ts +42 -0
  182. package/src/bootstrap/CodemationFrontendBootstrapRequest.ts +16 -0
  183. package/src/bootstrap/CodemationWorkerBootstrapRequest.ts +19 -0
  184. package/src/bootstrap/PreparedCodemationRuntime.ts +37 -0
  185. package/src/bootstrap/PreparedCodemationRuntimeFactory.ts +308 -0
  186. package/src/bootstrap/boot/CliRuntimeBootService.ts +27 -0
  187. package/src/bootstrap/boot/FrontendRuntimeBootService.ts +86 -0
  188. package/src/bootstrap/boot/WorkerRuntimeBootService.ts +64 -0
  189. package/src/bootstrap/runtime/AppConfigFactory.ts +57 -0
  190. package/src/bootstrap/runtime/ResolvedImplementationSelectionFactory.ts +118 -0
  191. package/src/client.ts +3 -0
  192. package/src/codemationApplication.ts +311 -0
  193. package/src/consumer.ts +4 -0
  194. package/src/credentials.ts +24 -0
  195. package/src/devServerSidecar.ts +10 -0
  196. package/src/domain/credentials/CredentialBindingService.ts +139 -0
  197. package/src/domain/credentials/CredentialFieldEnvOverlayService.ts +60 -0
  198. package/src/domain/credentials/CredentialInstanceService.ts +391 -0
  199. package/src/domain/credentials/CredentialMaterialResolver.ts +55 -0
  200. package/src/domain/credentials/CredentialRuntimeMaterialService.ts +39 -0
  201. package/src/domain/credentials/CredentialSecretCipher.ts +70 -0
  202. package/src/domain/credentials/CredentialServices.ts +145 -0
  203. package/src/domain/credentials/CredentialSessionServiceImpl.ts +119 -0
  204. package/src/domain/credentials/CredentialTestService.ts +73 -0
  205. package/src/domain/credentials/CredentialTypeRegistryImpl.ts +29 -0
  206. package/src/domain/credentials/OAuth2ConnectServiceFactory.ts +396 -0
  207. package/src/domain/credentials/OAuth2ProviderRegistry.ts +75 -0
  208. package/src/domain/credentials/WorkflowCredentialNodeResolver.ts +246 -0
  209. package/src/domain/runs/WorkflowRunRepository.ts +11 -0
  210. package/src/domain/users/UserAccountServiceRegistry.ts +315 -0
  211. package/src/domain/users/userLoginMethodLabels.types.ts +29 -0
  212. package/src/domain/workflows/WorkflowActivationPreflight.ts +32 -0
  213. package/src/domain/workflows/WorkflowActivationPreflightRules.ts +77 -0
  214. package/src/domain/workflows/WorkflowActivationRepository.ts +9 -0
  215. package/src/domain/workflows/WorkflowDebuggerOverlayRepository.ts +7 -0
  216. package/src/domain/workflows/WorkflowDebuggerOverlayState.ts +8 -0
  217. package/src/domain/workflows/WorkflowDefinitionRepository.ts +11 -0
  218. package/src/index.ts +58 -0
  219. package/src/infrastructure/auth/AuthJsSessionVerifier.ts +26 -0
  220. package/src/infrastructure/auth/DevelopmentSessionBypassVerifier.ts +12 -0
  221. package/src/infrastructure/binary/BinaryBodyNodeReadableFactory.ts +22 -0
  222. package/src/infrastructure/binary/CountingSha256Transform.ts +26 -0
  223. package/src/infrastructure/binary/LocalFilesystemBinaryStorageRegistry.ts +86 -0
  224. package/src/infrastructure/config/CodemationPluginRegistrar.ts +44 -0
  225. package/src/infrastructure/credentials/FrameworkBuiltinCredentialTypesRegistrar.ts +21 -0
  226. package/src/infrastructure/credentials/OpenAiApiKeyCredentialHealthTester.ts +89 -0
  227. package/src/infrastructure/credentials/OpenAiApiKeyCredentialShapes.types.ts +15 -0
  228. package/src/infrastructure/credentials/OpenAiApiKeyCredentialTypeFactory.ts +47 -0
  229. package/src/infrastructure/di/HandlesCommandRegistry.ts +24 -0
  230. package/src/infrastructure/di/HandlesDomainEventRegistry.ts +24 -0
  231. package/src/infrastructure/di/HandlesQueryRegistry.ts +24 -0
  232. package/src/infrastructure/di/InMemoryCommandBus.ts +47 -0
  233. package/src/infrastructure/di/InMemoryDomainEventBus.ts +47 -0
  234. package/src/infrastructure/di/InMemoryQueryBus.ts +45 -0
  235. package/src/infrastructure/ids/CodemationIdFactory.ts +12 -0
  236. package/src/infrastructure/logging/BrowserLogger.ts +1 -0
  237. package/src/infrastructure/logging/BrowserLoggerFactory.ts +14 -0
  238. package/src/infrastructure/logging/ConsoleLogger.ts +41 -0
  239. package/src/infrastructure/logging/FilteringLogger.ts +38 -0
  240. package/src/infrastructure/logging/LogLevelPolicy.ts +148 -0
  241. package/src/infrastructure/logging/LogLevelPolicyFactory.ts +16 -0
  242. package/src/infrastructure/logging/PerformanceLogPolicy.ts +10 -0
  243. package/src/infrastructure/logging/PerformanceLogPolicyFactory.ts +14 -0
  244. package/src/infrastructure/logging/ServerLogger.ts +1 -0
  245. package/src/infrastructure/logging/ServerLoggerFactory.ts +28 -0
  246. package/src/infrastructure/persistence/CodemationPostgresPrismaClientFactory.ts +9 -0
  247. package/src/infrastructure/persistence/CredentialPersistenceStore.ts +139 -0
  248. package/src/infrastructure/persistence/DatabasePersistenceResolver.ts +91 -0
  249. package/src/infrastructure/persistence/InMemoryTriggerSetupStateRepository.ts +23 -0
  250. package/src/infrastructure/persistence/InMemoryWorkflowActivationRepository.ts +18 -0
  251. package/src/infrastructure/persistence/InMemoryWorkflowDebuggerOverlayRepository.ts +16 -0
  252. package/src/infrastructure/persistence/InMemoryWorkflowRunRepository.ts +94 -0
  253. package/src/infrastructure/persistence/PrismaClientFactory.ts +26 -0
  254. package/src/infrastructure/persistence/PrismaCredentialStore.ts +368 -0
  255. package/src/infrastructure/persistence/PrismaMigrationDeployer.ts +184 -0
  256. package/src/infrastructure/persistence/PrismaTriggerSetupStateRepository.ts +68 -0
  257. package/src/infrastructure/persistence/PrismaWorkflowActivationRepository.ts +36 -0
  258. package/src/infrastructure/persistence/PrismaWorkflowDebuggerOverlayRepository.ts +65 -0
  259. package/src/infrastructure/persistence/PrismaWorkflowRunRepository.ts +243 -0
  260. package/src/infrastructure/persistence/RuntimeWorkflowActivationPolicy.ts +27 -0
  261. package/src/infrastructure/persistence/SchedulerPersistenceCompatibilityValidator.ts +20 -0
  262. package/src/infrastructure/persistence/WorkflowDefinitionRepositoryAdapter.ts +31 -0
  263. package/src/infrastructure/persistence/WorkflowRunRepository.ts +46 -0
  264. package/src/infrastructure/persistence/generated/prisma/client.d.ts +1 -0
  265. package/src/infrastructure/persistence/generated/prisma/default.d.ts +1 -0
  266. package/src/infrastructure/persistence/generated/prisma/edge.d.ts +1 -0
  267. package/src/infrastructure/persistence/generated/prisma/index.d.ts +4766 -0
  268. package/src/infrastructure/persistence/generated/prisma/package.json +144 -0
  269. package/src/infrastructure/persistence/generated/prisma/query_compiler_fast_bg.wasm +0 -0
  270. package/src/infrastructure/persistence/generated/prisma/runtime/client.d.ts +3358 -0
  271. package/src/infrastructure/persistence/generated/prisma/runtime/index-browser.d.ts +90 -0
  272. package/src/infrastructure/persistence/generated/prisma/schema.prisma +35 -0
  273. package/src/infrastructure/persistence/generated/prisma/wasm-edge-light-loader.mjs +5 -0
  274. package/src/infrastructure/persistence/generated/prisma/wasm-worker-loader.mjs +5 -0
  275. package/src/infrastructure/persistence/generated/prisma-client/client.d.ts +1 -0
  276. package/src/infrastructure/persistence/generated/prisma-client/client.js +5 -0
  277. package/src/infrastructure/persistence/generated/prisma-client/default.d.ts +1 -0
  278. package/src/infrastructure/persistence/generated/prisma-client/default.js +5 -0
  279. package/src/infrastructure/persistence/generated/prisma-client/edge.d.ts +1 -0
  280. package/src/infrastructure/persistence/generated/prisma-client/edge.js +299 -0
  281. package/src/infrastructure/persistence/generated/prisma-client/index-browser.js +325 -0
  282. package/src/infrastructure/persistence/generated/prisma-client/index.d.ts +21623 -0
  283. package/src/infrastructure/persistence/generated/prisma-client/index.js +299 -0
  284. package/src/infrastructure/persistence/generated/prisma-client/package.json +144 -0
  285. package/src/infrastructure/persistence/generated/prisma-client/query_compiler_fast_bg.js +2 -0
  286. package/src/infrastructure/persistence/generated/prisma-client/query_compiler_fast_bg.wasm +0 -0
  287. package/src/infrastructure/persistence/generated/prisma-client/query_compiler_fast_bg.wasm-base64.js +2 -0
  288. package/src/infrastructure/persistence/generated/prisma-client/runtime/client.d.ts +3358 -0
  289. package/src/infrastructure/persistence/generated/prisma-client/runtime/client.js +86 -0
  290. package/src/infrastructure/persistence/generated/prisma-client/runtime/client.js.map +1 -0
  291. package/src/infrastructure/persistence/generated/prisma-client/runtime/index-browser.d.ts +90 -0
  292. package/src/infrastructure/persistence/generated/prisma-client/runtime/index-browser.js +6 -0
  293. package/src/infrastructure/persistence/generated/prisma-client/runtime/index-browser.js.map +1 -0
  294. package/src/infrastructure/persistence/generated/prisma-client/runtime/wasm-compiler-edge.js +76 -0
  295. package/src/infrastructure/persistence/generated/prisma-client/runtime/wasm-compiler-edge.js.map +1 -0
  296. package/src/infrastructure/persistence/generated/prisma-client/schema.prisma +179 -0
  297. package/src/infrastructure/persistence/generated/prisma-client/wasm-edge-light-loader.mjs +5 -0
  298. package/src/infrastructure/persistence/generated/prisma-client/wasm-worker-loader.mjs +5 -0
  299. package/src/infrastructure/runtime/LiveWorkflowRepository.ts +14 -0
  300. package/src/infrastructure/runtime/WorkerRuntimeScheduler.ts +35 -0
  301. package/src/infrastructure/server/http/ServerHttpRouteParams.ts +1 -0
  302. package/src/infrastructure/webhooks/RequestToWebhookItemMapper.ts +128 -0
  303. package/src/nextServer.ts +31 -0
  304. package/src/persistenceServer.ts +5 -0
  305. package/src/presentation/config/AppConfig.ts +25 -0
  306. package/src/presentation/config/CodemationAppContext.ts +19 -0
  307. package/src/presentation/config/CodemationApplicationFacade.ts +5 -0
  308. package/src/presentation/config/CodemationAuthConfig.ts +31 -0
  309. package/src/presentation/config/CodemationClassToken.ts +3 -0
  310. package/src/presentation/config/CodemationConfig.ts +86 -0
  311. package/src/presentation/config/CodemationConfigNormalizer.ts +179 -0
  312. package/src/presentation/config/CodemationLogConfig.ts +22 -0
  313. package/src/presentation/config/CodemationPackageManifest.ts +9 -0
  314. package/src/presentation/config/CodemationPlugin.ts +20 -0
  315. package/src/presentation/config/CodemationPluginListMerger.ts +46 -0
  316. package/src/presentation/config/CodemationWhitelabelConfig.ts +9 -0
  317. package/src/presentation/config/CodemationWorkflowDiscovery.ts +3 -0
  318. package/src/presentation/http/ApiPaths.ts +165 -0
  319. package/src/presentation/http/CodemationServerGatewayFactory.ts +120 -0
  320. package/src/presentation/http/HttpRequestJsonBodyReader.ts +12 -0
  321. package/src/presentation/http/ServerHttpErrorResponseFactory.ts +33 -0
  322. package/src/presentation/http/ServerHttpRouteParams.ts +1 -0
  323. package/src/presentation/http/hono/CodemationHonoApiAppFactory.ts +64 -0
  324. package/src/presentation/http/hono/HonoApiRouteRegistrar.ts +5 -0
  325. package/src/presentation/http/hono/HonoHttpAnonymousRoutePolicyRegistry.ts +27 -0
  326. package/src/presentation/http/hono/registrars/BinaryHonoApiRouteRegistrar.ts +21 -0
  327. package/src/presentation/http/hono/registrars/CredentialHonoApiRouteRegistrar.ts +34 -0
  328. package/src/presentation/http/hono/registrars/DevHonoApiRouteRegistrar.ts +17 -0
  329. package/src/presentation/http/hono/registrars/OAuth2HonoApiRouteRegistrar.ts +18 -0
  330. package/src/presentation/http/hono/registrars/RunHonoApiRouteRegistrar.ts +31 -0
  331. package/src/presentation/http/hono/registrars/UserHonoApiRouteRegistrar.ts +24 -0
  332. package/src/presentation/http/hono/registrars/WebhookHonoApiRouteRegistrar.ts +23 -0
  333. package/src/presentation/http/hono/registrars/WhitelabelHonoApiRouteRegistrar.ts +18 -0
  334. package/src/presentation/http/hono/registrars/WorkflowHonoApiRouteRegistrar.ts +33 -0
  335. package/src/presentation/http/routeHandlers/BinaryHttpRouteHandlerFactory.ts +101 -0
  336. package/src/presentation/http/routeHandlers/CredentialHttpRouteHandler.ts +129 -0
  337. package/src/presentation/http/routeHandlers/DevBootstrapSummaryHttpRouteHandler.ts +21 -0
  338. package/src/presentation/http/routeHandlers/OAuth2HttpRouteHandlerFactory.ts +129 -0
  339. package/src/presentation/http/routeHandlers/RunHttpRouteHandler.ts +82 -0
  340. package/src/presentation/http/routeHandlers/UserHttpRouteHandlerFactory.ts +109 -0
  341. package/src/presentation/http/routeHandlers/WebhookHttpRouteHandler.ts +42 -0
  342. package/src/presentation/http/routeHandlers/WhitelabelLogoHttpRouteHandler.ts +96 -0
  343. package/src/presentation/http/routeHandlers/WorkflowHttpRouteHandler.ts +104 -0
  344. package/src/presentation/server/CodemationConsumerAppResolver.ts +82 -0
  345. package/src/presentation/server/CodemationConsumerConfigExportsResolver.ts +33 -0
  346. package/src/presentation/server/CodemationConsumerConfigLoader.ts +270 -0
  347. package/src/presentation/server/CodemationPluginDiscovery.ts +151 -0
  348. package/src/presentation/server/CodemationTsyringeParamInfoReader.ts +26 -0
  349. package/src/presentation/server/CodemationTsyringeTypeInfoRegistrar.ts +121 -0
  350. package/src/presentation/server/DevelopmentRuntimeRouteGuard.ts +59 -0
  351. package/src/presentation/server/DiscoveredWorkflowsEmptyMessageFactory.ts +11 -0
  352. package/src/presentation/server/WorkflowDefinitionExportsResolver.ts +24 -0
  353. package/src/presentation/server/WorkflowDiscoveryPathSegmentsComputer.ts +53 -0
  354. package/src/presentation/server/WorkflowModulePathFinder.ts +47 -0
  355. package/src/presentation/websocket/WorkflowWebsocketServer.ts +169 -0
  356. package/src/server.ts +14 -0
  357. package/tsconfig.json +10 -0
  358. package/vitest.shared.ts +45 -0
@@ -0,0 +1,3 @@
1
+ export abstract class Query<TResult> {
2
+ protected readonly __resultType?: TResult;
3
+ }
@@ -0,0 +1,5 @@
1
+ import type { Query } from "./Query";
2
+
3
+ export interface QueryBus {
4
+ execute<TResult>(query: Query<TResult>): Promise<TResult>;
5
+ }
@@ -0,0 +1,5 @@
1
+ import type { Query } from "./Query";
2
+
3
+ export abstract class QueryHandler<TQuery extends Query<TResult>, TResult> {
4
+ abstract execute(query: TQuery): Promise<TResult>;
5
+ }
@@ -0,0 +1,10 @@
1
+ import { Command } from "../bus/Command";
2
+
3
+ export class AcceptUserInviteCommand extends Command<void> {
4
+ constructor(
5
+ public readonly token: string,
6
+ public readonly password: string,
7
+ ) {
8
+ super();
9
+ }
10
+ }
@@ -0,0 +1,19 @@
1
+ import { inject } from "@codemation/core";
2
+
3
+ import { CommandHandler } from "../bus/CommandHandler";
4
+
5
+ import { HandlesCommand } from "../../infrastructure/di/HandlesCommandRegistry";
6
+
7
+ import { UserAccountService } from "../../domain/users/UserAccountServiceRegistry";
8
+ import { AcceptUserInviteCommand } from "./AcceptUserInviteCommand";
9
+
10
+ @HandlesCommand.forCommand(AcceptUserInviteCommand)
11
+ export class AcceptUserInviteCommandHandler extends CommandHandler<AcceptUserInviteCommand, void> {
12
+ constructor(@inject(UserAccountService) private readonly userAccounts: UserAccountService) {
13
+ super();
14
+ }
15
+
16
+ async execute(command: AcceptUserInviteCommand): Promise<void> {
17
+ await this.userAccounts.acceptInvite(command.token, command.password);
18
+ }
19
+ }
@@ -0,0 +1,14 @@
1
+ import { Command } from "../bus/Command";
2
+ import type {
3
+ CopyRunToWorkflowDebuggerRequest,
4
+ WorkflowDebuggerOverlayResponse,
5
+ } from "../contracts/WorkflowDebuggerContracts";
6
+
7
+ export class CopyRunToWorkflowDebuggerCommand extends Command<WorkflowDebuggerOverlayResponse> {
8
+ constructor(
9
+ public readonly workflowId: string,
10
+ public readonly body: CopyRunToWorkflowDebuggerRequest,
11
+ ) {
12
+ super();
13
+ }
14
+ }
@@ -0,0 +1,56 @@
1
+ import { inject } from "@codemation/core";
2
+ import { ApplicationTokens } from "../../applicationTokens";
3
+ import type { WorkflowRunRepository } from "../../domain/runs/WorkflowRunRepository";
4
+ import type { WorkflowDebuggerOverlayRepository } from "../../domain/workflows/WorkflowDebuggerOverlayRepository";
5
+ import type { WorkflowDebuggerOverlayState } from "../../domain/workflows/WorkflowDebuggerOverlayState";
6
+ import type { WorkflowDefinitionRepository } from "../../domain/workflows/WorkflowDefinitionRepository";
7
+ import { HandlesCommand } from "../../infrastructure/di/HandlesCommandRegistry";
8
+ import { ApplicationRequestError } from "../ApplicationRequestError";
9
+ import { CommandHandler } from "../bus/CommandHandler";
10
+ import type { WorkflowDebuggerOverlayResponse } from "../contracts/WorkflowDebuggerContracts";
11
+ import { WorkflowDebuggerOverlayStateFactory } from "../workflows/WorkflowDebuggerOverlayStateFactory";
12
+ import { CopyRunToWorkflowDebuggerCommand } from "./CopyRunToWorkflowDebuggerCommand";
13
+
14
+ @HandlesCommand.forCommand(CopyRunToWorkflowDebuggerCommand)
15
+ export class CopyRunToWorkflowDebuggerCommandHandler extends CommandHandler<
16
+ CopyRunToWorkflowDebuggerCommand,
17
+ WorkflowDebuggerOverlayResponse
18
+ > {
19
+ constructor(
20
+ @inject(ApplicationTokens.WorkflowRunRepository)
21
+ private readonly workflowRunRepository: WorkflowRunRepository,
22
+ @inject(ApplicationTokens.WorkflowDefinitionRepository)
23
+ private readonly workflowDefinitionRepository: WorkflowDefinitionRepository,
24
+ @inject(ApplicationTokens.WorkflowDebuggerOverlayRepository)
25
+ private readonly workflowDebuggerOverlayRepository: WorkflowDebuggerOverlayRepository,
26
+ ) {
27
+ super();
28
+ }
29
+
30
+ async execute(command: CopyRunToWorkflowDebuggerCommand): Promise<WorkflowDebuggerOverlayState> {
31
+ if (!command.body.sourceRunId) {
32
+ throw new ApplicationRequestError(400, "Missing sourceRunId");
33
+ }
34
+ const workflowId = decodeURIComponent(command.workflowId);
35
+ const sourceState = await this.workflowRunRepository.load(command.body.sourceRunId);
36
+ if (!sourceState) {
37
+ throw new ApplicationRequestError(404, "Unknown runId");
38
+ }
39
+ if (sourceState.workflowId !== workflowId) {
40
+ throw new ApplicationRequestError(400, "Run does not belong to the requested workflow");
41
+ }
42
+ const workflow = await this.workflowDefinitionRepository.getDefinition(workflowId);
43
+ if (!workflow) {
44
+ throw new ApplicationRequestError(404, "Unknown workflowId");
45
+ }
46
+ const existingOverlay = await this.workflowDebuggerOverlayRepository.load(workflowId);
47
+ const nextOverlay = WorkflowDebuggerOverlayStateFactory.copyRunStateToOverlay({
48
+ workflowId,
49
+ sourceState,
50
+ liveWorkflowNodeIds: new Set(workflow.nodes.map((node) => node.id)),
51
+ existingOverlay,
52
+ });
53
+ await this.workflowDebuggerOverlayRepository.save(nextOverlay);
54
+ return nextOverlay;
55
+ }
56
+ }
@@ -0,0 +1,9 @@
1
+ import type { CreateCredentialInstanceRequest, CredentialInstanceDto } from "../contracts/CredentialContractsRegistry";
2
+
3
+ import { Command } from "../bus/Command";
4
+
5
+ export class CreateCredentialInstanceCommand extends Command<CredentialInstanceDto> {
6
+ constructor(public readonly body: CreateCredentialInstanceRequest) {
7
+ super();
8
+ }
9
+ }
@@ -0,0 +1,28 @@
1
+ import { inject } from "@codemation/core";
2
+
3
+ import type { CredentialInstanceDto } from "../contracts/CredentialContractsRegistry";
4
+
5
+ import { CommandHandler } from "../bus/CommandHandler";
6
+
7
+ import { HandlesCommand } from "../../infrastructure/di/HandlesCommandRegistry";
8
+
9
+ import { CredentialInstanceService } from "../../domain/credentials/CredentialServices";
10
+
11
+ import { CreateCredentialInstanceCommand } from "./CreateCredentialInstanceCommand";
12
+
13
+ @HandlesCommand.forCommand(CreateCredentialInstanceCommand)
14
+ export class CreateCredentialInstanceCommandHandler extends CommandHandler<
15
+ CreateCredentialInstanceCommand,
16
+ CredentialInstanceDto
17
+ > {
18
+ constructor(
19
+ @inject(CredentialInstanceService)
20
+ private readonly credentialInstanceService: CredentialInstanceService,
21
+ ) {
22
+ super();
23
+ }
24
+
25
+ async execute(command: CreateCredentialInstanceCommand): Promise<CredentialInstanceDto> {
26
+ return await this.credentialInstanceService.create(command.body);
27
+ }
28
+ }
@@ -0,0 +1,10 @@
1
+ export { CreateCredentialInstanceCommand } from "./CreateCredentialInstanceCommand";
2
+ export { CreateCredentialInstanceCommandHandler } from "./CreateCredentialInstanceCommandHandler";
3
+ export { DeleteCredentialInstanceCommand } from "./DeleteCredentialInstanceCommand";
4
+ export { DeleteCredentialInstanceCommandHandler } from "./DeleteCredentialInstanceCommandHandler";
5
+ export { TestCredentialInstanceCommand } from "./TestCredentialInstanceCommand";
6
+ export { TestCredentialInstanceCommandHandler } from "./TestCredentialInstanceCommandHandler";
7
+ export { UpdateCredentialInstanceCommand } from "./UpdateCredentialInstanceCommand";
8
+ export { UpdateCredentialInstanceCommandHandler } from "./UpdateCredentialInstanceCommandHandler";
9
+ export { UpsertCredentialBindingCommand } from "./UpsertCredentialBindingCommand";
10
+ export { UpsertCredentialBindingCommandHandler } from "./UpsertCredentialBindingCommandHandler";
@@ -0,0 +1,7 @@
1
+ import { Command } from "../bus/Command";
2
+
3
+ export class DeleteCredentialInstanceCommand extends Command<Readonly<{ ok: true }>> {
4
+ constructor(public readonly instanceId: string) {
5
+ super();
6
+ }
7
+ }
@@ -0,0 +1,27 @@
1
+ import { inject } from "@codemation/core";
2
+
3
+ import { CommandHandler } from "../bus/CommandHandler";
4
+
5
+ import { HandlesCommand } from "../../infrastructure/di/HandlesCommandRegistry";
6
+
7
+ import { DeleteCredentialInstanceCommand } from "./DeleteCredentialInstanceCommand";
8
+
9
+ import { CredentialInstanceService } from "../../domain/credentials/CredentialServices";
10
+
11
+ @HandlesCommand.forCommand(DeleteCredentialInstanceCommand)
12
+ export class DeleteCredentialInstanceCommandHandler extends CommandHandler<
13
+ DeleteCredentialInstanceCommand,
14
+ Readonly<{ ok: true }>
15
+ > {
16
+ constructor(
17
+ @inject(CredentialInstanceService)
18
+ private readonly credentialInstanceService: CredentialInstanceService,
19
+ ) {
20
+ super();
21
+ }
22
+
23
+ async execute(command: DeleteCredentialInstanceCommand): Promise<Readonly<{ ok: true }>> {
24
+ await this.credentialInstanceService.delete(command.instanceId);
25
+ return { ok: true };
26
+ }
27
+ }
@@ -0,0 +1,12 @@
1
+ import type { Item } from "@codemation/core";
2
+ import { Command } from "../bus/Command";
3
+
4
+ export class HandleWebhookInvocationCommand extends Command<unknown> {
5
+ constructor(
6
+ public readonly endpointPath: string,
7
+ public readonly requestMethod: string,
8
+ public readonly requestItem: Item,
9
+ ) {
10
+ super();
11
+ }
12
+ }
@@ -0,0 +1,42 @@
1
+ import type { WebhookRunResult } from "@codemation/core";
2
+ import { inject } from "@codemation/core";
3
+ import { RunIntentService } from "@codemation/core/bootstrap";
4
+ import { HandlesCommand } from "../../infrastructure/di/HandlesCommandRegistry";
5
+ import { ApplicationRequestError } from "../ApplicationRequestError";
6
+ import { CommandHandler } from "../bus/CommandHandler";
7
+ import { HandleWebhookInvocationCommand } from "./HandleWebhookInvocationCommand";
8
+
9
+ @HandlesCommand.forCommand(HandleWebhookInvocationCommand)
10
+ export class HandleWebhookInvocationCommandHandler extends CommandHandler<HandleWebhookInvocationCommand, unknown> {
11
+ constructor(
12
+ @inject(RunIntentService)
13
+ private readonly runIntentService: RunIntentService,
14
+ ) {
15
+ super();
16
+ }
17
+
18
+ async execute(command: HandleWebhookInvocationCommand): Promise<unknown> {
19
+ try {
20
+ const requestMethod = command.requestMethod.toUpperCase() as "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
21
+ const endpointPath = decodeURIComponent(command.endpointPath);
22
+ const resolution = this.runIntentService.resolveWebhookTrigger({ endpointPath, method: requestMethod });
23
+ if (resolution.status === "notFound") {
24
+ throw new ApplicationRequestError(404, "Unknown webhook endpoint");
25
+ }
26
+ if (resolution.status === "methodNotAllowed") {
27
+ throw new ApplicationRequestError(405, "Method not allowed");
28
+ }
29
+ const result = (await this.runIntentService.runWebhookMatch({
30
+ match: resolution.match,
31
+ requestItem: command.requestItem,
32
+ })) satisfies WebhookRunResult;
33
+ return result.response.at(-1)?.json ?? null;
34
+ } catch (error) {
35
+ if (error instanceof ApplicationRequestError) {
36
+ throw error;
37
+ }
38
+ const message = error instanceof Error ? error.message : String(error);
39
+ throw new ApplicationRequestError(400, message);
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,12 @@
1
+ import type { InviteUserResponseDto } from "../contracts/userDirectoryContracts.types";
2
+
3
+ import { Command } from "../bus/Command";
4
+
5
+ export class InviteUserCommand extends Command<InviteUserResponseDto> {
6
+ constructor(
7
+ public readonly email: string,
8
+ public readonly requestOrigin: string,
9
+ ) {
10
+ super();
11
+ }
12
+ }
@@ -0,0 +1,22 @@
1
+ import { inject } from "@codemation/core";
2
+
3
+ import type { InviteUserResponseDto } from "../contracts/userDirectoryContracts.types";
4
+
5
+ import { CommandHandler } from "../bus/CommandHandler";
6
+
7
+ import { HandlesCommand } from "../../infrastructure/di/HandlesCommandRegistry";
8
+
9
+ import { UserAccountService } from "../../domain/users/UserAccountServiceRegistry";
10
+
11
+ import { InviteUserCommand } from "./InviteUserCommand";
12
+
13
+ @HandlesCommand.forCommand(InviteUserCommand)
14
+ export class InviteUserCommandHandler extends CommandHandler<InviteUserCommand, InviteUserResponseDto> {
15
+ constructor(@inject(UserAccountService) private readonly userAccounts: UserAccountService) {
16
+ super();
17
+ }
18
+
19
+ async execute(command: InviteUserCommand): Promise<InviteUserResponseDto> {
20
+ return await this.userAccounts.inviteUser(command.email, command.requestOrigin);
21
+ }
22
+ }
@@ -0,0 +1,12 @@
1
+ import type { InviteUserResponseDto } from "../contracts/userDirectoryContracts.types";
2
+
3
+ import { Command } from "../bus/Command";
4
+
5
+ export class RegenerateUserInviteCommand extends Command<InviteUserResponseDto> {
6
+ constructor(
7
+ public readonly userId: string,
8
+ public readonly requestOrigin: string,
9
+ ) {
10
+ super();
11
+ }
12
+ }
@@ -0,0 +1,24 @@
1
+ import { inject } from "@codemation/core";
2
+
3
+ import type { InviteUserResponseDto } from "../contracts/userDirectoryContracts.types";
4
+
5
+ import { CommandHandler } from "../bus/CommandHandler";
6
+
7
+ import { HandlesCommand } from "../../infrastructure/di/HandlesCommandRegistry";
8
+
9
+ import { UserAccountService } from "../../domain/users/UserAccountServiceRegistry";
10
+ import { RegenerateUserInviteCommand } from "./RegenerateUserInviteCommand";
11
+
12
+ @HandlesCommand.forCommand(RegenerateUserInviteCommand)
13
+ export class RegenerateUserInviteCommandHandler extends CommandHandler<
14
+ RegenerateUserInviteCommand,
15
+ InviteUserResponseDto
16
+ > {
17
+ constructor(@inject(UserAccountService) private readonly userAccounts: UserAccountService) {
18
+ super();
19
+ }
20
+
21
+ async execute(command: RegenerateUserInviteCommand): Promise<InviteUserResponseDto> {
22
+ return await this.userAccounts.regenerateInvite(command.userId, command.requestOrigin);
23
+ }
24
+ }
@@ -0,0 +1,12 @@
1
+ import type { PersistedRunState } from "@codemation/core";
2
+ import { Command } from "../bus/Command";
3
+ import type { UpdateRunWorkflowSnapshotRequest } from "../contracts/RunContracts";
4
+
5
+ export class ReplaceMutableRunWorkflowSnapshotCommand extends Command<PersistedRunState> {
6
+ constructor(
7
+ public readonly runId: string,
8
+ public readonly body: UpdateRunWorkflowSnapshotRequest,
9
+ ) {
10
+ super();
11
+ }
12
+ }
@@ -0,0 +1,47 @@
1
+ import { inject, type PersistedRunState } from "@codemation/core";
2
+ import { ApplicationTokens } from "../../applicationTokens";
3
+ import type { WorkflowRunRepository } from "../../domain/runs/WorkflowRunRepository";
4
+ import { HandlesCommand } from "../../infrastructure/di/HandlesCommandRegistry";
5
+ import { ApplicationRequestError } from "../ApplicationRequestError";
6
+ import { CommandHandler } from "../bus/CommandHandler";
7
+ import { ReplaceMutableRunWorkflowSnapshotCommand } from "./ReplaceMutableRunWorkflowSnapshotCommand";
8
+
9
+ @HandlesCommand.forCommand(ReplaceMutableRunWorkflowSnapshotCommand)
10
+ export class ReplaceMutableRunWorkflowSnapshotCommandHandler extends CommandHandler<
11
+ ReplaceMutableRunWorkflowSnapshotCommand,
12
+ PersistedRunState
13
+ > {
14
+ constructor(
15
+ @inject(ApplicationTokens.WorkflowRunRepository)
16
+ private readonly workflowRunRepository: WorkflowRunRepository,
17
+ ) {
18
+ super();
19
+ }
20
+
21
+ async execute(command: ReplaceMutableRunWorkflowSnapshotCommand): Promise<PersistedRunState> {
22
+ if (!command.body.workflowSnapshot) {
23
+ throw new ApplicationRequestError(400, "Missing workflowSnapshot");
24
+ }
25
+ const state = await this.workflowRunRepository.load(command.runId);
26
+ if (!state) {
27
+ throw new ApplicationRequestError(404, "Unknown runId");
28
+ }
29
+ if (!state.executionOptions?.isMutable) {
30
+ throw new ApplicationRequestError(403, `Run ${state.runId} is immutable`);
31
+ }
32
+ await this.workflowRunRepository.save({
33
+ ...state,
34
+ status: "completed",
35
+ pending: undefined,
36
+ queue: [],
37
+ outputsByNode: {},
38
+ nodeSnapshotsByNodeId: {},
39
+ workflowSnapshot: command.body.workflowSnapshot,
40
+ });
41
+ const updated = await this.workflowRunRepository.load(state.runId);
42
+ if (!updated) {
43
+ throw new ApplicationRequestError(404, "Unknown runId");
44
+ }
45
+ return updated;
46
+ }
47
+ }
@@ -0,0 +1,14 @@
1
+ import { Command } from "../bus/Command";
2
+ import type {
3
+ UpdateWorkflowDebuggerOverlayRequest,
4
+ WorkflowDebuggerOverlayResponse,
5
+ } from "../contracts/WorkflowDebuggerContracts";
6
+
7
+ export class ReplaceWorkflowDebuggerOverlayCommand extends Command<WorkflowDebuggerOverlayResponse> {
8
+ constructor(
9
+ public readonly workflowId: string,
10
+ public readonly body: UpdateWorkflowDebuggerOverlayRequest,
11
+ ) {
12
+ super();
13
+ }
14
+ }
@@ -0,0 +1,35 @@
1
+ import { inject } from "@codemation/core";
2
+ import { ApplicationTokens } from "../../applicationTokens";
3
+ import type { WorkflowDebuggerOverlayRepository } from "../../domain/workflows/WorkflowDebuggerOverlayRepository";
4
+ import type { WorkflowDebuggerOverlayState } from "../../domain/workflows/WorkflowDebuggerOverlayState";
5
+ import { HandlesCommand } from "../../infrastructure/di/HandlesCommandRegistry";
6
+ import { ApplicationRequestError } from "../ApplicationRequestError";
7
+ import { CommandHandler } from "../bus/CommandHandler";
8
+ import type { WorkflowDebuggerOverlayResponse } from "../contracts/WorkflowDebuggerContracts";
9
+ import { WorkflowDebuggerOverlayStateFactory } from "../workflows/WorkflowDebuggerOverlayStateFactory";
10
+ import { ReplaceWorkflowDebuggerOverlayCommand } from "./ReplaceWorkflowDebuggerOverlayCommand";
11
+
12
+ @HandlesCommand.forCommand(ReplaceWorkflowDebuggerOverlayCommand)
13
+ export class ReplaceWorkflowDebuggerOverlayCommandHandler extends CommandHandler<
14
+ ReplaceWorkflowDebuggerOverlayCommand,
15
+ WorkflowDebuggerOverlayResponse
16
+ > {
17
+ constructor(
18
+ @inject(ApplicationTokens.WorkflowDebuggerOverlayRepository)
19
+ private readonly workflowDebuggerOverlayRepository: WorkflowDebuggerOverlayRepository,
20
+ ) {
21
+ super();
22
+ }
23
+
24
+ async execute(command: ReplaceWorkflowDebuggerOverlayCommand): Promise<WorkflowDebuggerOverlayState> {
25
+ if (!command.body.currentState) {
26
+ throw new ApplicationRequestError(400, "Missing currentState");
27
+ }
28
+ const nextState = WorkflowDebuggerOverlayStateFactory.replaceCurrentState({
29
+ workflowId: decodeURIComponent(command.workflowId),
30
+ currentState: command.body.currentState,
31
+ });
32
+ await this.workflowDebuggerOverlayRepository.save(nextState);
33
+ return nextState;
34
+ }
35
+ }
@@ -0,0 +1,12 @@
1
+ import { Command } from "../bus/Command";
2
+ import type { RunCommandResult, RunNodeRequest } from "../contracts/RunContracts";
3
+
4
+ export class ReplayWorkflowNodeCommand extends Command<RunCommandResult> {
5
+ constructor(
6
+ public readonly runId: string,
7
+ public readonly nodeId: string,
8
+ public readonly body: RunNodeRequest,
9
+ ) {
10
+ super();
11
+ }
12
+ }
@@ -0,0 +1,164 @@
1
+ import type {
2
+ Items,
3
+ PersistedMutableRunState,
4
+ PersistedRunState,
5
+ RunCurrentState,
6
+ WorkflowDefinition,
7
+ } from "@codemation/core";
8
+ import { ItemsInputNormalizer, inject } from "@codemation/core";
9
+ import { RunIntentService } from "@codemation/core/bootstrap";
10
+ import { Engine } from "@codemation/core/bootstrap";
11
+ import { ApplicationTokens } from "../../applicationTokens";
12
+ import type { WorkflowRunRepository } from "../../domain/runs/WorkflowRunRepository";
13
+ import { HandlesCommand } from "../../infrastructure/di/HandlesCommandRegistry";
14
+ import { ApplicationRequestError } from "../ApplicationRequestError";
15
+ import { CommandHandler } from "../bus/CommandHandler";
16
+ import type { RunCommandResult } from "../contracts/RunContracts";
17
+ import { ReplayWorkflowNodeCommand } from "./ReplayWorkflowNodeCommand";
18
+
19
+ @HandlesCommand.forCommand(ReplayWorkflowNodeCommand)
20
+ export class ReplayWorkflowNodeCommandHandler extends CommandHandler<ReplayWorkflowNodeCommand, RunCommandResult> {
21
+ constructor(
22
+ @inject(Engine)
23
+ private readonly engine: Engine,
24
+ @inject(ItemsInputNormalizer)
25
+ private readonly itemsInputNormalizer: ItemsInputNormalizer,
26
+ @inject(RunIntentService)
27
+ private readonly runIntentService: RunIntentService,
28
+ @inject(ApplicationTokens.WorkflowRunRepository)
29
+ private readonly workflowRunRepository: WorkflowRunRepository,
30
+ ) {
31
+ super();
32
+ }
33
+
34
+ async execute(command: ReplayWorkflowNodeCommand): Promise<RunCommandResult> {
35
+ const state = await this.workflowRunRepository.load(command.runId);
36
+ if (!state) {
37
+ throw new ApplicationRequestError(404, "Unknown runId");
38
+ }
39
+ this.ensureMutable(state);
40
+ const workflow = this.resolveWorkflow(state);
41
+ if (!workflow) {
42
+ throw new ApplicationRequestError(404, "Unknown workflow for run");
43
+ }
44
+ const decodedNodeId = decodeURIComponent(command.nodeId);
45
+ const mode = command.body.mode ?? state.executionOptions?.mode ?? "manual";
46
+ const requestedItems = await this.resolveRequestedItems({
47
+ workflow,
48
+ nodeId: decodedNodeId,
49
+ items: command.body.items,
50
+ synthesizeTriggerItems: command.body.synthesizeTriggerItems,
51
+ });
52
+ const mutableStateBase = this.cloneMutableState(state.mutableState) ?? { nodesById: {} };
53
+ const mutableState = requestedItems
54
+ ? ({
55
+ nodesById: {
56
+ ...mutableStateBase.nodesById,
57
+ [decodedNodeId]: {
58
+ ...(mutableStateBase.nodesById[decodedNodeId] ?? {}),
59
+ lastDebugInput: requestedItems,
60
+ },
61
+ },
62
+ } satisfies PersistedMutableRunState)
63
+ : mutableStateBase;
64
+ const executionOptions = {
65
+ mode,
66
+ sourceWorkflowId: state.executionOptions?.sourceWorkflowId ?? state.workflowId,
67
+ sourceRunId: state.executionOptions?.sourceRunId ?? state.runId,
68
+ derivedFromRunId: state.runId,
69
+ isMutable: true,
70
+ } as const;
71
+ const result = await this.runIntentService.rerunFromNode({
72
+ workflow,
73
+ nodeId: decodedNodeId,
74
+ currentState: this.cloneRunCurrentState(state, mutableState),
75
+ items: requestedItems,
76
+ executionOptions,
77
+ workflowSnapshot: this.cloneWorkflowSnapshot(state.workflowSnapshot),
78
+ mutableState,
79
+ });
80
+ const nextState = await this.workflowRunRepository.load(result.runId);
81
+ return {
82
+ runId: result.runId,
83
+ workflowId: result.workflowId,
84
+ startedAt: result.startedAt,
85
+ status: result.status,
86
+ state: nextState ?? null,
87
+ };
88
+ }
89
+
90
+ private ensureMutable(state: PersistedRunState): void {
91
+ if (!state.executionOptions?.isMutable) {
92
+ throw new ApplicationRequestError(403, `Run ${state.runId} is immutable`);
93
+ }
94
+ }
95
+
96
+ private resolveWorkflow(state: PersistedRunState): WorkflowDefinition | undefined {
97
+ return this.engine.resolveWorkflowSnapshot({
98
+ workflowId: state.workflowId,
99
+ workflowSnapshot: state.workflowSnapshot,
100
+ });
101
+ }
102
+
103
+ private cloneMutableState(mutableState: PersistedRunState["mutableState"]): PersistedMutableRunState | undefined {
104
+ if (!mutableState) {
105
+ return undefined;
106
+ }
107
+ return JSON.parse(JSON.stringify(mutableState)) as PersistedMutableRunState;
108
+ }
109
+
110
+ private cloneWorkflowSnapshot(
111
+ workflowSnapshot: PersistedRunState["workflowSnapshot"],
112
+ ): PersistedRunState["workflowSnapshot"] {
113
+ if (!workflowSnapshot) {
114
+ return undefined;
115
+ }
116
+ return JSON.parse(JSON.stringify(workflowSnapshot)) as NonNullable<PersistedRunState["workflowSnapshot"]>;
117
+ }
118
+
119
+ private cloneRunCurrentState(
120
+ state: PersistedRunState,
121
+ mutableState: PersistedMutableRunState | undefined,
122
+ ): RunCurrentState {
123
+ return {
124
+ outputsByNode: JSON.parse(JSON.stringify(state.outputsByNode)) as RunCurrentState["outputsByNode"],
125
+ nodeSnapshotsByNodeId: JSON.parse(
126
+ JSON.stringify(state.nodeSnapshotsByNodeId),
127
+ ) as RunCurrentState["nodeSnapshotsByNodeId"],
128
+ mutableState,
129
+ };
130
+ }
131
+
132
+ private async resolveRequestedItems(
133
+ args: Readonly<{
134
+ workflow: WorkflowDefinition;
135
+ nodeId: string;
136
+ items: Items | undefined | null;
137
+ synthesizeTriggerItems: boolean | undefined;
138
+ }>,
139
+ ): Promise<Items | undefined> {
140
+ const normalizedItems = args.items == null ? undefined : this.itemsInputNormalizer.normalize(args.items);
141
+ if (!this.shouldSynthesizeTriggerItems(args.workflow, args.nodeId, args.synthesizeTriggerItems, normalizedItems)) {
142
+ return normalizedItems;
143
+ }
144
+ return await this.engine.createTriggerTestItems({
145
+ workflow: args.workflow,
146
+ nodeId: args.nodeId,
147
+ });
148
+ }
149
+
150
+ private shouldSynthesizeTriggerItems(
151
+ workflow: WorkflowDefinition,
152
+ nodeId: string,
153
+ synthesizeTriggerItems: boolean | undefined,
154
+ normalizedItems: Items | undefined,
155
+ ): boolean {
156
+ if (synthesizeTriggerItems) {
157
+ return true;
158
+ }
159
+ if (normalizedItems && normalizedItems.length > 0) {
160
+ return false;
161
+ }
162
+ return workflow.nodes.find((node) => node.id === nodeId)?.kind === "trigger";
163
+ }
164
+ }
@@ -0,0 +1,13 @@
1
+ import type { PersistedRunState } from "@codemation/core";
2
+ import { Command } from "../bus/Command";
3
+ import type { UpdateRunNodePinRequest } from "../contracts/RunContracts";
4
+
5
+ export class SetPinnedNodeInputCommand extends Command<PersistedRunState> {
6
+ constructor(
7
+ public readonly runId: string,
8
+ public readonly nodeId: string,
9
+ public readonly body: UpdateRunNodePinRequest,
10
+ ) {
11
+ super();
12
+ }
13
+ }