@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,53 @@
1
+ import path from "node:path";
2
+
3
+ import { WorkflowModulePathFinder } from "./WorkflowModulePathFinder";
4
+
5
+ export class WorkflowDiscoveryPathSegmentsComputer {
6
+ compute(
7
+ args: Readonly<{
8
+ consumerRoot: string;
9
+ workflowDiscoveryDirectories: ReadonlyArray<string>;
10
+ absoluteWorkflowModulePath: string;
11
+ }>,
12
+ ): readonly string[] | undefined {
13
+ const normalizedConsumer = path.resolve(args.consumerRoot);
14
+ const normalizedWorkflowPath = path.resolve(args.absoluteWorkflowModulePath);
15
+ const directories =
16
+ args.workflowDiscoveryDirectories.length > 0
17
+ ? args.workflowDiscoveryDirectories
18
+ : [...WorkflowModulePathFinder.defaultWorkflowDirectories];
19
+
20
+ let bestRoot: string | null = null;
21
+ for (const directory of directories) {
22
+ const absoluteDirectory = path.resolve(normalizedConsumer, directory);
23
+ const isPrefix =
24
+ normalizedWorkflowPath === absoluteDirectory ||
25
+ normalizedWorkflowPath.startsWith(`${absoluteDirectory}${path.sep}`);
26
+ if (!isPrefix) {
27
+ continue;
28
+ }
29
+ if (!bestRoot || absoluteDirectory.length > bestRoot.length) {
30
+ bestRoot = absoluteDirectory;
31
+ }
32
+ }
33
+ if (!bestRoot) {
34
+ return undefined;
35
+ }
36
+ const relative = path.relative(bestRoot, normalizedWorkflowPath);
37
+ if (relative.startsWith("..") || path.isAbsolute(relative)) {
38
+ return undefined;
39
+ }
40
+ if (relative.length === 0) {
41
+ return undefined;
42
+ }
43
+ const parts = relative.split(path.sep).filter((segment) => segment.length > 0);
44
+ if (parts.length === 0) {
45
+ return undefined;
46
+ }
47
+ const lastIndex = parts.length - 1;
48
+ const last = parts[lastIndex] ?? "";
49
+ const ext = path.extname(last);
50
+ parts[lastIndex] = ext ? last.slice(0, -ext.length) : last;
51
+ return parts;
52
+ }
53
+ }
@@ -0,0 +1,47 @@
1
+ import { readdir } from "node:fs/promises";
2
+ import path from "node:path";
3
+
4
+ export class WorkflowModulePathFinder {
5
+ static readonly defaultWorkflowDirectories = ["src/workflows", "workflows"] as const;
6
+ private readonly workflowExtensions = new Set([".ts", ".js", ".mts", ".mjs"]);
7
+
8
+ async discoverModulePaths(
9
+ args: Readonly<{
10
+ consumerRoot: string;
11
+ workflowDirectories: ReadonlyArray<string> | undefined;
12
+ exists: (absolutePath: string) => Promise<boolean>;
13
+ }>,
14
+ ): Promise<ReadonlyArray<string>> {
15
+ const directories = args.workflowDirectories ?? WorkflowModulePathFinder.defaultWorkflowDirectories;
16
+ const workflowModulePaths: string[] = [];
17
+ for (const directory of directories) {
18
+ const absoluteDirectory = path.resolve(args.consumerRoot, directory);
19
+ if (!(await args.exists(absoluteDirectory))) {
20
+ continue;
21
+ }
22
+ workflowModulePaths.push(...(await this.collectWorkflowModulePaths(absoluteDirectory)));
23
+ }
24
+ return workflowModulePaths;
25
+ }
26
+
27
+ private async collectWorkflowModulePaths(directoryPath: string): Promise<ReadonlyArray<string>> {
28
+ const entries = await readdir(directoryPath, { withFileTypes: true });
29
+ const workflowModulePaths: string[] = [];
30
+ for (const entry of entries) {
31
+ const entryPath = path.resolve(directoryPath, entry.name);
32
+ if (entry.isDirectory()) {
33
+ workflowModulePaths.push(...(await this.collectWorkflowModulePaths(entryPath)));
34
+ continue;
35
+ }
36
+ if (this.isWorkflowModulePath(entryPath)) {
37
+ workflowModulePaths.push(entryPath);
38
+ }
39
+ }
40
+ return workflowModulePaths;
41
+ }
42
+
43
+ private isWorkflowModulePath(modulePath: string): boolean {
44
+ const extension = path.extname(modulePath);
45
+ return this.workflowExtensions.has(extension) && !modulePath.endsWith(".d.ts");
46
+ }
47
+ }
@@ -0,0 +1,169 @@
1
+ import { WebSocket, WebSocketServer } from "ws";
2
+ import type { WorkflowWebsocketMessage } from "../../application/contracts/WorkflowWebsocketMessage";
3
+ import type { Logger } from "../../application/logging/Logger";
4
+ import type { WorkflowWebsocketPublisher } from "../../application/websocket/WorkflowWebsocketPublisher";
5
+ import { ApiPaths } from "../http/ApiPaths";
6
+
7
+ type WorkflowWebsocketClientMessage =
8
+ | Readonly<{ kind: "subscribe"; roomId: string }>
9
+ | Readonly<{ kind: "unsubscribe"; roomId: string }>;
10
+
11
+ type WorkflowWebsocketControlMessage =
12
+ | Readonly<{ kind: "ready" }>
13
+ | Readonly<{ kind: "subscribed"; roomId: string }>
14
+ | Readonly<{ kind: "unsubscribed"; roomId: string }>
15
+ | Readonly<{ kind: "error"; message: string }>;
16
+
17
+ type WorkflowWebsocketServerMessage = WorkflowWebsocketControlMessage | WorkflowWebsocketMessage;
18
+
19
+ export class WorkflowWebsocketServer implements WorkflowWebsocketPublisher {
20
+ private websocketServer: WebSocketServer | null = null;
21
+ private readonly sockets = new Set<WebSocket>();
22
+ private readonly roomIdsBySocket = new Map<WebSocket, Set<string>>();
23
+ private started = false;
24
+
25
+ constructor(
26
+ private readonly port: number,
27
+ private readonly bindHost: string,
28
+ private readonly logger: Logger,
29
+ ) {}
30
+
31
+ async start(): Promise<void> {
32
+ if (this.started) {
33
+ return;
34
+ }
35
+ const websocketServer = new WebSocketServer({
36
+ host: this.bindHost,
37
+ port: this.port,
38
+ path: ApiPaths.workflowWebsocket(),
39
+ });
40
+ this.websocketServer = websocketServer;
41
+ websocketServer.on("connection", (socket) => {
42
+ void this.connect(socket);
43
+ });
44
+ try {
45
+ await this.awaitListening(websocketServer);
46
+ } catch (error) {
47
+ this.websocketServer = null;
48
+ await this.closeAfterFailedStart(websocketServer);
49
+ throw error;
50
+ }
51
+ this.logger.debug(`listening on ws://${this.bindHost}:${this.port}${ApiPaths.workflowWebsocket()}`);
52
+ this.started = true;
53
+ }
54
+
55
+ async stop(): Promise<void> {
56
+ if (!this.websocketServer) {
57
+ return;
58
+ }
59
+ this.started = false;
60
+ for (const socket of this.sockets) {
61
+ socket.removeAllListeners();
62
+ socket.terminate();
63
+ }
64
+ this.sockets.clear();
65
+ this.roomIdsBySocket.clear();
66
+ const websocketServer = this.websocketServer;
67
+ this.websocketServer = null;
68
+ await new Promise<void>((resolve, reject) => {
69
+ websocketServer.close((error) => {
70
+ if (error) {
71
+ reject(error);
72
+ return;
73
+ }
74
+ resolve();
75
+ });
76
+ });
77
+ }
78
+
79
+ async publishToRoom(roomId: string, message: WorkflowWebsocketMessage): Promise<void> {
80
+ let deliveredSocketCount = 0;
81
+ for (const [socket, roomIds] of this.roomIdsBySocket) {
82
+ if (socket.readyState !== WebSocket.OPEN || !roomIds.has(roomId)) {
83
+ continue;
84
+ }
85
+ socket.send(JSON.stringify(message satisfies WorkflowWebsocketServerMessage));
86
+ deliveredSocketCount += 1;
87
+ }
88
+ if (message.kind === "event") {
89
+ const event = message.event;
90
+ const eventLabel =
91
+ "snapshot" in event && event.snapshot
92
+ ? `${event.kind}:${event.runId}:${event.snapshot.nodeId}:${event.snapshot.status}`
93
+ : `${event.kind}:${event.runId}`;
94
+ this.logger.debug(`published room=${roomId} sockets=${deliveredSocketCount} event=${eventLabel}`);
95
+ return;
96
+ }
97
+ this.logger.debug(`published room=${roomId} sockets=${deliveredSocketCount} kind=${message.kind}`);
98
+ }
99
+
100
+ private async connect(socket: WebSocket): Promise<void> {
101
+ this.sockets.add(socket);
102
+ this.roomIdsBySocket.set(socket, new Set());
103
+ this.logger.debug(`client connected activeSockets=${this.sockets.size}`);
104
+ socket.send(JSON.stringify({ kind: "ready" } satisfies WorkflowWebsocketServerMessage));
105
+ socket.on("message", (rawData) => {
106
+ void this.handleMessage(socket, rawData);
107
+ });
108
+ socket.on("close", () => {
109
+ this.sockets.delete(socket);
110
+ this.roomIdsBySocket.delete(socket);
111
+ this.logger.debug(`client disconnected activeSockets=${this.sockets.size}`);
112
+ });
113
+ socket.on("error", () => {
114
+ this.sockets.delete(socket);
115
+ this.roomIdsBySocket.delete(socket);
116
+ this.logger.warn(`client socket error activeSockets=${this.sockets.size}`);
117
+ });
118
+ }
119
+
120
+ private async handleMessage(socket: WebSocket, rawData: unknown): Promise<void> {
121
+ try {
122
+ const message = this.parseClientMessage(rawData);
123
+ if (message.kind === "subscribe") {
124
+ this.roomIdsBySocket.get(socket)?.add(message.roomId);
125
+ this.logger.debug(`subscribed room=${message.roomId}`);
126
+ socket.send(
127
+ JSON.stringify({ kind: "subscribed", roomId: message.roomId } satisfies WorkflowWebsocketServerMessage),
128
+ );
129
+ return;
130
+ }
131
+ this.roomIdsBySocket.get(socket)?.delete(message.roomId);
132
+ this.logger.debug(`unsubscribed room=${message.roomId}`);
133
+ socket.send(
134
+ JSON.stringify({ kind: "unsubscribed", roomId: message.roomId } satisfies WorkflowWebsocketServerMessage),
135
+ );
136
+ } catch (error) {
137
+ const exception = error instanceof Error ? error : new Error(String(error));
138
+ this.logger.warn(`failed to handle client message: ${exception.message}`);
139
+ socket.send(
140
+ JSON.stringify({ kind: "error", message: exception.message } satisfies WorkflowWebsocketServerMessage),
141
+ );
142
+ }
143
+ }
144
+
145
+ private async awaitListening(websocketServer: WebSocketServer): Promise<void> {
146
+ await new Promise<void>((resolve, reject) => {
147
+ websocketServer.once("listening", () => resolve());
148
+ websocketServer.once("error", reject);
149
+ });
150
+ }
151
+
152
+ private async closeAfterFailedStart(websocketServer: WebSocketServer): Promise<void> {
153
+ await new Promise<void>((resolve) => {
154
+ websocketServer.close(() => resolve());
155
+ });
156
+ }
157
+
158
+ private parseClientMessage(rawData: unknown): WorkflowWebsocketClientMessage {
159
+ const value = typeof rawData === "string" ? rawData : Buffer.isBuffer(rawData) ? rawData.toString("utf8") : "";
160
+ const message = JSON.parse(value) as Readonly<{ kind?: unknown; roomId?: unknown }>;
161
+ if (message.kind === "subscribe" && typeof message.roomId === "string") {
162
+ return { kind: "subscribe", roomId: message.roomId };
163
+ }
164
+ if (message.kind === "unsubscribe" && typeof message.roomId === "string") {
165
+ return { kind: "unsubscribe", roomId: message.roomId };
166
+ }
167
+ throw new Error("Unsupported websocket client message.");
168
+ }
169
+ }
package/src/server.ts ADDED
@@ -0,0 +1,14 @@
1
+ export { CodemationPostgresPrismaClientFactory, PrismaClient } from "./persistenceServer";
2
+ export { ApiPaths } from "./presentation/http/ApiPaths";
3
+ export { CodemationServerGateway } from "./presentation/http/CodemationServerGatewayFactory";
4
+ export { CodemationConsumerAppResolver } from "./presentation/server/CodemationConsumerAppResolver";
5
+ export type { CodemationConsumerApp } from "./presentation/server/CodemationConsumerAppResolver";
6
+ export { CodemationConsumerConfigLoader } from "./presentation/server/CodemationConsumerConfigLoader";
7
+ export type { CodemationConsumerConfigResolution } from "./presentation/server/CodemationConsumerConfigLoader";
8
+ export { CodemationPluginDiscovery } from "./presentation/server/CodemationPluginDiscovery";
9
+ export type {
10
+ CodemationDiscoveredPluginPackage,
11
+ CodemationResolvedPluginPackage,
12
+ } from "./presentation/server/CodemationPluginDiscovery";
13
+ export { WorkflowModulePathFinder } from "./presentation/server/WorkflowModulePathFinder";
14
+ export { WorkflowDiscoveryPathSegmentsComputer } from "./presentation/server/WorkflowDiscoveryPathSegmentsComputer";
package/tsconfig.json ADDED
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "types": ["node"],
5
+ "jsx": "react-jsx",
6
+ "noEmit": true
7
+ },
8
+ "include": ["src/**/*.ts", "src/**/*.tsx", "test/**/*.ts", "test/**/*.tsx", "vitest*.ts"],
9
+ "exclude": ["node_modules", "dist"]
10
+ }
@@ -0,0 +1,45 @@
1
+ import path from "node:path";
2
+
3
+ const hostSrc = path.resolve(import.meta.dirname, "./src");
4
+ const nextHostSrc = path.resolve(import.meta.dirname, "../next-host/src");
5
+
6
+ export const hostVitestSharedConfig = {
7
+ esbuild: {
8
+ jsx: "automatic" as const,
9
+ jsxImportSource: "react",
10
+ },
11
+ resolve: {
12
+ alias: [
13
+ { find: "@codemation/core/browser", replacement: path.resolve(import.meta.dirname, "../core/src/browser.ts") },
14
+ { find: /^@codemation\/host-src\/(.+)$/, replacement: `${hostSrc}/$1` },
15
+ { find: /^@codemation\/next-host\/src\/(.+)$/, replacement: `${nextHostSrc}/$1` },
16
+ { find: "@codemation/host/client", replacement: path.resolve(import.meta.dirname, "./src/client.ts") },
17
+ { find: "@codemation/host/server", replacement: path.resolve(import.meta.dirname, "./src/server.ts") },
18
+ {
19
+ find: "@codemation/host/persistence",
20
+ replacement: path.resolve(import.meta.dirname, "./src/persistenceServer.ts"),
21
+ },
22
+ { find: "@codemation/host", replacement: path.resolve(import.meta.dirname, "./src/index.ts") },
23
+ { find: "@codemation/core-nodes", replacement: path.resolve(import.meta.dirname, "../core-nodes/src/index.ts") },
24
+ {
25
+ find: "@codemation/queue-bullmq",
26
+ replacement: path.resolve(import.meta.dirname, "../queue-bullmq/src/index.ts"),
27
+ },
28
+ {
29
+ find: "@codemation/eventbus-redis",
30
+ replacement: path.resolve(import.meta.dirname, "../eventbus-redis/src/index.ts"),
31
+ },
32
+ { find: "@codemation/core/testing", replacement: path.resolve(import.meta.dirname, "../core/src/testing.ts") },
33
+ {
34
+ find: "@codemation/core/bootstrap",
35
+ replacement: path.resolve(import.meta.dirname, "../core/src/bootstrap/index.ts"),
36
+ },
37
+ { find: "@codemation/core", replacement: path.resolve(import.meta.dirname, "../core/src/index.ts") },
38
+ {
39
+ find: "next/navigation",
40
+ replacement: path.resolve(import.meta.dirname, "./test/nextNavigationStub.ts"),
41
+ },
42
+ { find: /^@\//, replacement: `${nextHostSrc}/` },
43
+ ],
44
+ },
45
+ };