@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,175 @@
1
+ import { u as ApplicationTokens } from "./CredentialServices-BKBGe7l3.js";
2
+ import { _ as GetWorkflowDetailQuery, c as WorkflowDefinitionMapper, g as GetWorkflowSummariesQuery, i as CodemationHonoApiApp, n as CodemationBootstrapRequest, r as CodemationApplication, t as CodemationFrontendBootstrapRequest } from "./CodemationFrontendBootstrapRequest-CE6DjOWJ.js";
3
+ import { readFile, readdir } from "node:fs/promises";
4
+ import path from "node:path";
5
+ import { pathToFileURL } from "node:url";
6
+ import { accessSync } from "node:fs";
7
+
8
+ //#region src/presentation/http/CodemationServerGatewayFactory.ts
9
+ var CodemationServerGateway = class CodemationServerGateway {
10
+ static contextsByConfig = /* @__PURE__ */ new WeakMap();
11
+ constructor(config, consumerRoot, configSource, workflowSources = [], env) {
12
+ this.config = config;
13
+ this.consumerRoot = consumerRoot;
14
+ this.configSource = configSource;
15
+ this.workflowSources = workflowSources;
16
+ this.env = env;
17
+ }
18
+ async dispatch(request) {
19
+ return await (await this.getContext()).httpApi.fetch(request);
20
+ }
21
+ async prepare() {
22
+ await this.getContext();
23
+ }
24
+ async close() {
25
+ const cachedContext = CodemationServerGateway.contextsByConfig.get(this.config);
26
+ if (!cachedContext) return;
27
+ CodemationServerGateway.contextsByConfig.delete(this.config);
28
+ await (await cachedContext).application.stop();
29
+ }
30
+ async loadWorkflowSummaries() {
31
+ const context = await this.getContext();
32
+ return (await context.queryBus.execute(new GetWorkflowSummariesQuery())).map((workflow) => context.workflowDefinitionMapper.toSummary(workflow));
33
+ }
34
+ async loadWorkflowDetail(workflowId) {
35
+ const context = await this.getContext();
36
+ const workflow = await context.queryBus.execute(new GetWorkflowDetailQuery(workflowId));
37
+ if (!workflow) throw new Error(`Unknown workflowId: ${workflowId}`);
38
+ return await context.workflowDefinitionMapper.map(workflow);
39
+ }
40
+ getContext() {
41
+ const cachedContext = CodemationServerGateway.contextsByConfig.get(this.config);
42
+ if (cachedContext) return cachedContext;
43
+ const nextContext = this.createContext();
44
+ CodemationServerGateway.contextsByConfig.set(this.config, nextContext);
45
+ return nextContext;
46
+ }
47
+ async createContext() {
48
+ const bootstrapRequest = new CodemationBootstrapRequest({
49
+ repoRoot: this.detectWorkspaceRoot(this.consumerRoot),
50
+ consumerRoot: this.consumerRoot,
51
+ env: this.env,
52
+ workflowSources: this.resolveWorkflowSources()
53
+ });
54
+ const application = new CodemationApplication();
55
+ application.useConfig(this.config);
56
+ await application.applyPlugins(bootstrapRequest);
57
+ await application.prepareContainer(bootstrapRequest);
58
+ await application.bootFrontend(new CodemationFrontendBootstrapRequest({ bootstrap: bootstrapRequest }));
59
+ return {
60
+ application,
61
+ httpApi: application.getContainer().resolve(CodemationHonoApiApp),
62
+ queryBus: application.getContainer().resolve(ApplicationTokens.QueryBus),
63
+ workflowDefinitionMapper: application.getContainer().resolve(WorkflowDefinitionMapper)
64
+ };
65
+ }
66
+ resolveWorkflowSources() {
67
+ if (this.workflowSources.length > 0) return [...this.workflowSources];
68
+ if (!this.configSource || !this.config.workflows || this.config.workflows.length === 0) return [];
69
+ return [this.configSource];
70
+ }
71
+ detectWorkspaceRoot(startDirectory) {
72
+ let currentDirectory = path.resolve(startDirectory);
73
+ while (true) try {
74
+ accessSync(path.resolve(currentDirectory, "pnpm-workspace.yaml"));
75
+ return currentDirectory;
76
+ } catch {
77
+ const parentDirectory = path.dirname(currentDirectory);
78
+ if (parentDirectory === currentDirectory) return startDirectory;
79
+ currentDirectory = parentDirectory;
80
+ }
81
+ }
82
+ };
83
+
84
+ //#endregion
85
+ //#region src/presentation/server/CodemationPluginDiscovery.ts
86
+ var CodemationPluginDiscovery = class {
87
+ async discover(consumerRoot) {
88
+ const nodeModulesRoot = path.resolve(consumerRoot, "node_modules");
89
+ const packageRoots = await this.collectPackageRoots(nodeModulesRoot);
90
+ const discoveredPackages = [];
91
+ for (const packageRoot of packageRoots) {
92
+ const packageJson = await this.readPackageJson(path.resolve(packageRoot, "package.json"));
93
+ const pluginManifest = packageJson.codemation?.plugin;
94
+ if (!packageJson.name || !pluginManifest || pluginManifest.kind !== "plugin") continue;
95
+ discoveredPackages.push({
96
+ packageName: packageJson.name,
97
+ packageRoot,
98
+ manifest: pluginManifest,
99
+ developmentEntry: this.resolveDevelopmentPluginEntry(packageJson)
100
+ });
101
+ }
102
+ return discoveredPackages.sort((left, right) => left.packageName.localeCompare(right.packageName));
103
+ }
104
+ async resolvePlugins(consumerRoot) {
105
+ const discoveredPackages = await this.discover(consumerRoot);
106
+ return await this.resolveDiscoveredPackages(discoveredPackages);
107
+ }
108
+ async resolveDiscoveredPackages(discoveredPackages) {
109
+ const resolvedPackages = [];
110
+ for (const discoveredPackage of discoveredPackages) resolvedPackages.push({
111
+ ...discoveredPackage,
112
+ plugin: await this.loadPlugin(discoveredPackage)
113
+ });
114
+ return resolvedPackages;
115
+ }
116
+ async collectPackageRoots(nodeModulesRoot) {
117
+ try {
118
+ const entries = await readdir(nodeModulesRoot, { withFileTypes: true });
119
+ const packageRoots = [];
120
+ for (const entry of entries) {
121
+ if (!entry.isDirectory() && !entry.isSymbolicLink()) continue;
122
+ if (entry.name.startsWith("@")) {
123
+ const scopedEntries = await readdir(path.resolve(nodeModulesRoot, entry.name), { withFileTypes: true });
124
+ for (const scopedEntry of scopedEntries) if (scopedEntry.isDirectory() || scopedEntry.isSymbolicLink()) packageRoots.push(path.resolve(nodeModulesRoot, entry.name, scopedEntry.name));
125
+ continue;
126
+ }
127
+ packageRoots.push(path.resolve(nodeModulesRoot, entry.name));
128
+ }
129
+ return packageRoots;
130
+ } catch {
131
+ return [];
132
+ }
133
+ }
134
+ async readPackageJson(packageJsonPath) {
135
+ try {
136
+ const rawPackageJson = await readFile(packageJsonPath, "utf8");
137
+ return JSON.parse(rawPackageJson);
138
+ } catch {
139
+ return {};
140
+ }
141
+ }
142
+ async loadPlugin(discoveredPackage) {
143
+ const importedModule = await import(pathToFileURL(path.resolve(discoveredPackage.packageRoot, this.resolvePluginEntry(discoveredPackage))).href);
144
+ const pluginExportName = discoveredPackage.manifest.exportName;
145
+ const exportedValue = (pluginExportName ? importedModule[pluginExportName] : void 0) ?? importedModule.default ?? importedModule.codemationPlugin;
146
+ const plugin = this.resolvePluginValue(exportedValue);
147
+ if (!plugin) throw new Error(`Plugin package "${discoveredPackage.packageName}" did not export a Codemation plugin instance.`);
148
+ return plugin;
149
+ }
150
+ resolvePluginValue(value) {
151
+ if (this.isPlugin(value)) return value;
152
+ if (this.isPluginConstructor(value)) return new value();
153
+ return null;
154
+ }
155
+ isPlugin(value) {
156
+ return Boolean(value) && typeof value === "object" && typeof value.register === "function";
157
+ }
158
+ isPluginConstructor(value) {
159
+ return typeof value === "function" && this.isPlugin(value.prototype);
160
+ }
161
+ resolvePluginEntry(discoveredPackage) {
162
+ if (process.env.CODEMATION_PREFER_PLUGIN_SOURCE_ENTRY === "true" && typeof discoveredPackage.developmentEntry === "string" && discoveredPackage.developmentEntry.trim().length > 0) return discoveredPackage.developmentEntry;
163
+ return discoveredPackage.manifest.entry;
164
+ }
165
+ resolveDevelopmentPluginEntry(packageJson) {
166
+ const exportRecord = packageJson.exports?.["./codemation-plugin"];
167
+ if (!exportRecord || typeof exportRecord !== "object") return;
168
+ const importPath = exportRecord.import;
169
+ return typeof importPath === "string" && importPath.trim().length > 0 ? importPath : void 0;
170
+ }
171
+ };
172
+
173
+ //#endregion
174
+ export { CodemationServerGateway as n, CodemationPluginDiscovery as t };
175
+ //# sourceMappingURL=server-BiHSuA13.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-BiHSuA13.js","names":["config: CodemationConfig","consumerRoot: string","configSource?: string","workflowSources: ReadonlyArray<string>","env?: Readonly<NodeJS.ProcessEnv>","discoveredPackages: CodemationDiscoveredPluginPackage[]","resolvedPackages: CodemationResolvedPluginPackage[]","packageRoots: string[]"],"sources":["../src/presentation/http/CodemationServerGatewayFactory.ts","../src/presentation/server/CodemationPluginDiscovery.ts"],"sourcesContent":["import { accessSync } from \"node:fs\";\nimport path from \"node:path\";\nimport type { QueryBus } from \"../../application/bus/QueryBus\";\nimport type { WorkflowDto, WorkflowSummary } from \"../../application/contracts/WorkflowViewContracts\";\nimport { WorkflowDefinitionMapper } from \"../../application/mapping/WorkflowDefinitionMapper\";\nimport { GetWorkflowDetailQuery } from \"../../application/queries/GetWorkflowDetailQuery\";\nimport { GetWorkflowSummariesQuery } from \"../../application/queries/GetWorkflowSummariesQuery\";\nimport { ApplicationTokens } from \"../../applicationTokens\";\nimport { CodemationApplication } from \"../../codemationApplication\";\nimport { CodemationBootstrapRequest } from \"../../bootstrap/CodemationBootstrapRequest\";\nimport { CodemationFrontendBootstrapRequest } from \"../../bootstrap/CodemationFrontendBootstrapRequest\";\nimport type { CodemationConfig } from \"../config/CodemationConfig\";\nimport { CodemationHonoApiApp } from \"./hono/CodemationHonoApiAppFactory\";\n\ntype ServerGatewayContext = Readonly<{\n application: CodemationApplication;\n httpApi: CodemationHonoApiApp;\n queryBus: QueryBus;\n workflowDefinitionMapper: WorkflowDefinitionMapper;\n}>;\n\nexport class CodemationServerGateway {\n private static readonly contextsByConfig = new WeakMap<object, Promise<ServerGatewayContext>>();\n\n constructor(\n private readonly config: CodemationConfig,\n private readonly consumerRoot: string,\n private readonly configSource?: string,\n private readonly workflowSources: ReadonlyArray<string> = [],\n private readonly env?: Readonly<NodeJS.ProcessEnv>,\n ) {}\n\n async dispatch(request: Request): Promise<Response> {\n return await (await this.getContext()).httpApi.fetch(request);\n }\n\n async prepare(): Promise<void> {\n await this.getContext();\n }\n\n async close(): Promise<void> {\n const cachedContext = CodemationServerGateway.contextsByConfig.get(this.config as object);\n if (!cachedContext) {\n return;\n }\n CodemationServerGateway.contextsByConfig.delete(this.config as object);\n await (await cachedContext).application.stop();\n }\n\n async loadWorkflowSummaries(): Promise<ReadonlyArray<WorkflowSummary>> {\n const context = await this.getContext();\n const workflows = await context.queryBus.execute(new GetWorkflowSummariesQuery());\n return workflows.map((workflow) => context.workflowDefinitionMapper.toSummary(workflow));\n }\n\n async loadWorkflowDetail(workflowId: string): Promise<WorkflowDto> {\n const context = await this.getContext();\n const workflow = await context.queryBus.execute(new GetWorkflowDetailQuery(workflowId));\n if (!workflow) {\n throw new Error(`Unknown workflowId: ${workflowId}`);\n }\n return await context.workflowDefinitionMapper.map(workflow);\n }\n\n private getContext(): Promise<ServerGatewayContext> {\n const cachedContext = CodemationServerGateway.contextsByConfig.get(this.config as object);\n if (cachedContext) {\n return cachedContext;\n }\n const nextContext = this.createContext();\n CodemationServerGateway.contextsByConfig.set(this.config as object, nextContext);\n return nextContext;\n }\n\n private async createContext(): Promise<ServerGatewayContext> {\n const repoRoot = this.detectWorkspaceRoot(this.consumerRoot);\n const bootstrapRequest = new CodemationBootstrapRequest({\n repoRoot,\n consumerRoot: this.consumerRoot,\n env: this.env,\n workflowSources: this.resolveWorkflowSources(),\n });\n const application = new CodemationApplication();\n application.useConfig(this.config);\n await application.applyPlugins(bootstrapRequest);\n await application.prepareContainer(bootstrapRequest);\n await application.bootFrontend(new CodemationFrontendBootstrapRequest({ bootstrap: bootstrapRequest }));\n return {\n application,\n httpApi: application.getContainer().resolve(CodemationHonoApiApp),\n queryBus: application.getContainer().resolve(ApplicationTokens.QueryBus),\n workflowDefinitionMapper: application.getContainer().resolve(WorkflowDefinitionMapper),\n };\n }\n\n private resolveWorkflowSources(): ReadonlyArray<string> {\n if (this.workflowSources.length > 0) {\n return [...this.workflowSources];\n }\n if (!this.configSource || !this.config.workflows || this.config.workflows.length === 0) {\n return [];\n }\n return [this.configSource];\n }\n private detectWorkspaceRoot(startDirectory: string): string {\n let currentDirectory = path.resolve(startDirectory);\n while (true) {\n try {\n accessSync(path.resolve(currentDirectory, \"pnpm-workspace.yaml\"));\n return currentDirectory;\n } catch {\n const parentDirectory = path.dirname(currentDirectory);\n if (parentDirectory === currentDirectory) {\n return startDirectory;\n }\n currentDirectory = parentDirectory;\n }\n }\n }\n}\n","import type { CodemationPackageManifest } from \"../config/CodemationPackageManifest\";\nimport type { CodemationPlugin } from \"../config/CodemationPlugin\";\nimport { readFile, readdir } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nexport type CodemationDiscoveredPluginPackage = Readonly<{\n packageName: string;\n packageRoot: string;\n manifest: NonNullable<CodemationPackageManifest[\"plugin\"]>;\n developmentEntry?: string;\n}>;\n\nexport type CodemationResolvedPluginPackage = Readonly<\n CodemationDiscoveredPluginPackage & {\n plugin: CodemationPlugin;\n }\n>;\n\ntype PackageJsonShape = Readonly<{\n codemation?: CodemationPackageManifest;\n name?: string;\n exports?: Readonly<Record<string, unknown>>;\n}>;\n\nexport class CodemationPluginDiscovery {\n async discover(consumerRoot: string): Promise<ReadonlyArray<CodemationDiscoveredPluginPackage>> {\n const nodeModulesRoot = path.resolve(consumerRoot, \"node_modules\");\n const packageRoots = await this.collectPackageRoots(nodeModulesRoot);\n const discoveredPackages: CodemationDiscoveredPluginPackage[] = [];\n for (const packageRoot of packageRoots) {\n const packageJson = await this.readPackageJson(path.resolve(packageRoot, \"package.json\"));\n const pluginManifest = packageJson.codemation?.plugin;\n if (!packageJson.name || !pluginManifest || pluginManifest.kind !== \"plugin\") {\n continue;\n }\n discoveredPackages.push({\n packageName: packageJson.name,\n packageRoot,\n manifest: pluginManifest,\n developmentEntry: this.resolveDevelopmentPluginEntry(packageJson),\n });\n }\n return discoveredPackages.sort((left, right) => left.packageName.localeCompare(right.packageName));\n }\n\n async resolvePlugins(consumerRoot: string): Promise<ReadonlyArray<CodemationResolvedPluginPackage>> {\n const discoveredPackages = await this.discover(consumerRoot);\n return await this.resolveDiscoveredPackages(discoveredPackages);\n }\n\n async resolveDiscoveredPackages(\n discoveredPackages: ReadonlyArray<CodemationDiscoveredPluginPackage>,\n ): Promise<ReadonlyArray<CodemationResolvedPluginPackage>> {\n const resolvedPackages: CodemationResolvedPluginPackage[] = [];\n for (const discoveredPackage of discoveredPackages) {\n resolvedPackages.push({\n ...discoveredPackage,\n plugin: await this.loadPlugin(discoveredPackage),\n });\n }\n return resolvedPackages;\n }\n\n private async collectPackageRoots(nodeModulesRoot: string): Promise<ReadonlyArray<string>> {\n try {\n const entries = await readdir(nodeModulesRoot, { withFileTypes: true });\n const packageRoots: string[] = [];\n for (const entry of entries) {\n if (!entry.isDirectory() && !entry.isSymbolicLink()) {\n continue;\n }\n if (entry.name.startsWith(\"@\")) {\n const scopedEntries = await readdir(path.resolve(nodeModulesRoot, entry.name), { withFileTypes: true });\n for (const scopedEntry of scopedEntries) {\n if (scopedEntry.isDirectory() || scopedEntry.isSymbolicLink()) {\n packageRoots.push(path.resolve(nodeModulesRoot, entry.name, scopedEntry.name));\n }\n }\n continue;\n }\n packageRoots.push(path.resolve(nodeModulesRoot, entry.name));\n }\n return packageRoots;\n } catch {\n return [];\n }\n }\n\n private async readPackageJson(packageJsonPath: string): Promise<PackageJsonShape> {\n try {\n const rawPackageJson = await readFile(packageJsonPath, \"utf8\");\n return JSON.parse(rawPackageJson) as PackageJsonShape;\n } catch {\n return {};\n }\n }\n\n private async loadPlugin(discoveredPackage: CodemationDiscoveredPluginPackage): Promise<CodemationPlugin> {\n const pluginModulePath = path.resolve(discoveredPackage.packageRoot, this.resolvePluginEntry(discoveredPackage));\n const importedModule = (await import(pathToFileURL(pluginModulePath).href)) as Record<string, unknown>;\n const pluginExportName = discoveredPackage.manifest.exportName;\n const explicitExport = pluginExportName ? importedModule[pluginExportName] : undefined;\n const exportedValue = explicitExport ?? importedModule.default ?? importedModule.codemationPlugin;\n const plugin = this.resolvePluginValue(exportedValue);\n if (!plugin) {\n throw new Error(`Plugin package \"${discoveredPackage.packageName}\" did not export a Codemation plugin instance.`);\n }\n return plugin;\n }\n\n private resolvePluginValue(value: unknown): CodemationPlugin | null {\n if (this.isPlugin(value)) {\n return value;\n }\n if (this.isPluginConstructor(value)) {\n return new value();\n }\n return null;\n }\n\n private isPlugin(value: unknown): value is CodemationPlugin {\n return (\n Boolean(value) && typeof value === \"object\" && typeof (value as { register?: unknown }).register === \"function\"\n );\n }\n\n private isPluginConstructor(value: unknown): value is new () => CodemationPlugin {\n return typeof value === \"function\" && this.isPlugin(value.prototype);\n }\n\n private resolvePluginEntry(discoveredPackage: CodemationDiscoveredPluginPackage): string {\n if (\n process.env.CODEMATION_PREFER_PLUGIN_SOURCE_ENTRY === \"true\" &&\n typeof discoveredPackage.developmentEntry === \"string\" &&\n discoveredPackage.developmentEntry.trim().length > 0\n ) {\n return discoveredPackage.developmentEntry;\n }\n return discoveredPackage.manifest.entry;\n }\n\n private resolveDevelopmentPluginEntry(packageJson: PackageJsonShape): string | undefined {\n const exportRecord = packageJson.exports?.[\"./codemation-plugin\"];\n if (!exportRecord || typeof exportRecord !== \"object\") {\n return undefined;\n }\n const importPath = (exportRecord as { import?: unknown }).import;\n return typeof importPath === \"string\" && importPath.trim().length > 0 ? importPath : undefined;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import "./CodemationWhitelabelConfig-DgbjgtrR.js";
2
+ import "./index-Bs4F1IsC.js";
3
+ import "./CodemationConfig-XCkSV2dj.js";
4
+ import { i as CodemationConsumerAppResolver, n as CodemationConsumerConfigResolution, r as CodemationConsumerApp, t as CodemationConsumerConfigLoader } from "./CodemationConsumerConfigLoader-Dmm2TzAA.js";
5
+ import { t as PrismaClient } from "./client-Yh7-CQud.js";
6
+ import "./WorkflowViewContracts-DCLpTn25.js";
7
+ import { a as CodemationResolvedPluginPackage, i as CodemationPluginDiscovery, n as WorkflowModulePathFinder, o as CodemationServerGateway, r as CodemationDiscoveredPluginPackage, s as ApiPaths, t as WorkflowDiscoveryPathSegmentsComputer } from "./server-BBdsATju.js";
8
+ import { n as CodemationPostgresPrismaClientFactory } from "./persistenceServer-K5eqlZm3.js";
9
+ export { ApiPaths, CodemationConsumerApp, CodemationConsumerAppResolver, CodemationConsumerConfigLoader, CodemationConsumerConfigResolution, CodemationDiscoveredPluginPackage, CodemationPluginDiscovery, CodemationPostgresPrismaClientFactory, CodemationResolvedPluginPackage, CodemationServerGateway, PrismaClient, WorkflowDiscoveryPathSegmentsComputer, WorkflowModulePathFinder };
package/dist/server.js ADDED
@@ -0,0 +1,13 @@
1
+ import "./ConsoleLogger-ClPU7jtc.js";
2
+ import "./ServerLoggerFactory-BRHxIDS7.js";
3
+ import { i as CodemationConsumerAppResolver, n as WorkflowDiscoveryPathSegmentsComputer, r as WorkflowModulePathFinder, t as CodemationConsumerConfigLoader } from "./CodemationConsumerConfigLoader-scS_RQMy.js";
4
+ import "./decorateParam-BTcc3KNk.js";
5
+ import "./decorate-B-N_5S4p.js";
6
+ import "./CredentialServices-BKBGe7l3.js";
7
+ import { o as ApiPaths } from "./CodemationFrontendBootstrapRequest-CE6DjOWJ.js";
8
+ import "./PrismaMigrationDeployer-B1E_gYz7.js";
9
+ import { n as CodemationPostgresPrismaClientFactory, t as import_client } from "./persistenceServer-W9uRw0dJ.js";
10
+ import { n as CodemationServerGateway, t as CodemationPluginDiscovery } from "./server-BiHSuA13.js";
11
+
12
+ var PrismaClient = import_client.PrismaClient;
13
+ export { ApiPaths, CodemationConsumerAppResolver, CodemationConsumerConfigLoader, CodemationPluginDiscovery, CodemationPostgresPrismaClientFactory, CodemationServerGateway, PrismaClient, WorkflowDiscoveryPathSegmentsComputer, WorkflowModulePathFinder };
package/package.json ADDED
@@ -0,0 +1,152 @@
1
+ {
2
+ "name": "@codemation/host",
3
+ "version": "0.0.1",
4
+ "publishConfig": {
5
+ "access": "public"
6
+ },
7
+ "author": "Made Relevant B.V.",
8
+ "homepage": "https://www.maderelevant.com",
9
+ "type": "module",
10
+ "main": "./dist/index.js",
11
+ "module": "./dist/index.js",
12
+ "types": "./dist/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "development": {
17
+ "import": "./src/index.ts"
18
+ },
19
+ "import": "./dist/index.js"
20
+ },
21
+ "./client": {
22
+ "types": "./dist/client.d.ts",
23
+ "development": {
24
+ "import": "./src/client.ts"
25
+ },
26
+ "import": "./dist/client.js"
27
+ },
28
+ "./credentials": {
29
+ "types": "./dist/credentials.d.ts",
30
+ "development": {
31
+ "import": "./src/credentials.ts"
32
+ },
33
+ "import": "./dist/credentials.js"
34
+ },
35
+ "./consumer": {
36
+ "types": "./dist/consumer.d.ts",
37
+ "development": {
38
+ "import": "./src/consumer.ts"
39
+ },
40
+ "import": "./dist/consumer.js"
41
+ },
42
+ "./next/server": {
43
+ "types": "./dist/nextServer.d.ts",
44
+ "development": {
45
+ "import": "./src/nextServer.ts"
46
+ },
47
+ "import": "./dist/nextServer.js"
48
+ },
49
+ "./server": {
50
+ "types": "./dist/server.d.ts",
51
+ "development": {
52
+ "import": "./src/server.ts"
53
+ },
54
+ "import": "./dist/server.js"
55
+ },
56
+ "./dev-server-sidecar": {
57
+ "types": "./dist/devServerSidecar.d.ts",
58
+ "development": {
59
+ "import": "./src/devServerSidecar.ts"
60
+ },
61
+ "import": "./dist/devServerSidecar.js"
62
+ },
63
+ "./persistence": {
64
+ "types": "./dist/persistenceServer.d.ts",
65
+ "development": {
66
+ "import": "./src/persistenceServer.ts"
67
+ },
68
+ "import": "./dist/persistenceServer.js"
69
+ }
70
+ },
71
+ "dependencies": {
72
+ "@auth/core": "^0.34.3",
73
+ "@electric-sql/pglite": "^0.4.2",
74
+ "@electric-sql/pglite-socket": "^0.1.2",
75
+ "@monaco-editor/react": "^4.7.0",
76
+ "@prisma/adapter-pg": "^7.0.0",
77
+ "@prisma/client": "^7.0.0",
78
+ "@prisma/client-runtime-utils": "^7.5.0",
79
+ "@tanstack/react-query": "^5.90.21",
80
+ "@types/bcryptjs": "^3.0.0",
81
+ "@uiw/react-json-view": "2.0.0-alpha.41",
82
+ "@xyflow/react": "^12.10.1",
83
+ "bcryptjs": "^3.0.3",
84
+ "dagre": "^0.8.5",
85
+ "date-fns": "^4.1.0",
86
+ "hono": "^4.12.8",
87
+ "jose": "^6.2.2",
88
+ "lucide-react": "^0.577.0",
89
+ "monaco-editor": "^0.55.1",
90
+ "next-auth": "^4.24.13",
91
+ "pg": "^8.16.3",
92
+ "pglite-prisma-adapter": "^0.7.2",
93
+ "pretty-ms": "^9.3.0",
94
+ "prisma": "^7.0.0",
95
+ "rc-tree": "^5.13.1",
96
+ "react": "^19.2.4",
97
+ "react-dom": "^19.2.4",
98
+ "react-router-dom": "^7.13.1",
99
+ "react-use-websocket": "^4.13.0",
100
+ "reflect-metadata": "^0.2.2",
101
+ "sanitize-filename": "^1.6.4",
102
+ "serialize-javascript": "^7.0.4",
103
+ "tsx": "^4.21.0",
104
+ "ws": "^8.19.0",
105
+ "zxcvbn": "^4.4.2",
106
+ "@codemation/core": "0.0.1",
107
+ "@codemation/core-nodes": "0.0.1",
108
+ "@codemation/eventbus-redis": "0.0.1",
109
+ "@codemation/queue-bullmq": "0.0.1"
110
+ },
111
+ "devDependencies": {
112
+ "@playwright/test": "^1.58.2",
113
+ "@tanstack/react-router": "^1.167.3",
114
+ "@testing-library/jest-dom": "^6.9.1",
115
+ "@testing-library/react": "^16.3.2",
116
+ "@types/dagre": "^0.7.54",
117
+ "@types/node": "^25.3.5",
118
+ "@types/pg": "^8.15.5",
119
+ "@types/react": "^19.2.14",
120
+ "@types/react-dom": "^19.2.3",
121
+ "@types/serialize-javascript": "^5.0.4",
122
+ "@types/ws": "^8.18.1",
123
+ "@types/zxcvbn": "^4.4.5",
124
+ "@vitest/coverage-v8": "^4.0.18",
125
+ "dotenv": "^17.3.1",
126
+ "eslint": "^10.0.3",
127
+ "jsdom": "^28.1.0",
128
+ "monocart-coverage-reports": "^2.12.9",
129
+ "monocart-reporter": "^2.10.0",
130
+ "testcontainers": "^10.28.0",
131
+ "tsdown": "^0.15.5",
132
+ "typescript": "^5.9.3",
133
+ "vitest": "^4.0.18",
134
+ "@codemation/core-nodes-gmail": "0.0.1"
135
+ },
136
+ "scripts": {
137
+ "prisma:generate": "prisma generate && node ./scripts/ensure-prisma-runtime-sourcemaps.mjs",
138
+ "build": "tsdown src/index.ts src/client.ts src/credentials.ts src/consumer.ts src/nextServer.ts src/server.ts src/devServerSidecar.ts src/persistenceServer.ts --out-dir dist --sourcemap",
139
+ "dev": "tsdown src/index.ts src/client.ts src/credentials.ts src/consumer.ts src/nextServer.ts src/server.ts src/devServerSidecar.ts src/persistenceServer.ts --out-dir dist --sourcemap --watch",
140
+ "typecheck": "tsc -p tsconfig.json --noEmit",
141
+ "lint": "eslint .",
142
+ "test": "pnpm -w exec concurrently -m 5 -c auto -n unit,integration,ui,browser,e2e \"pnpm run test:unit\" \"pnpm run test:integration\" \"pnpm run test:ui\" \"pnpm run test:browser\" \"pnpm run test:e2e\"",
143
+ "test:unit": "vitest run --config vitest.unit.config.ts",
144
+ "test:integration": "vitest run --config vitest.integration.config.ts",
145
+ "test:ui": "vitest run --config vitest.ui.config.ts",
146
+ "test:browser": "pnpm exec tsx test/playwright/scripts/run-browser-e2e.ts",
147
+ "test:browser:install": "playwright install chromium",
148
+ "test:e2e": "vitest run --config vitest.e2e.config.ts",
149
+ "coverage": "pnpm -w run coverage",
150
+ "coverage:credentials": "vitest run --config vitest.unit.config.ts test/credentialsScreen.test.tsx --coverage --coverage.provider=v8 --coverage.reporter=text-summary --coverage.reporter=text --coverage.reportsDirectory=./coverage/credentials-unit --coverage.include=../next-host/src/features/credentials/CredentialsScreen.tsx && vitest run --config vitest.integration.config.ts test/http/credentialInstances.integration.test.ts --coverage --coverage.provider=v8 --coverage.reporter=text-summary --coverage.reporter=text --coverage.reportsDirectory=./coverage/credentials-integration --coverage.include=src/presentation/http/routeHandlers/CredentialHttpRouteHandler.ts --coverage.include=src/presentation/http/routeHandlers/OAuth2HttpRouteHandler.ts --coverage.include=src/application/commands/CredentialCommandHandlers.ts --coverage.include=src/application/queries/CredentialQueryHandlers.ts --coverage.include=src/domain/credentials/**/*.ts --coverage.include=src/infrastructure/persistence/CredentialPersistenceStore.ts"
151
+ }
152
+ }
@@ -0,0 +1,74 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { defineConfig, devices } from "@playwright/test";
5
+ import type { CodemationPlaywrightPreparedEnvironment } from "./test/playwright/scripts/CodemationPlaywrightEnvironmentPreparer";
6
+
7
+ const hostPackageRoot = path.dirname(fileURLToPath(import.meta.url));
8
+ const repoRoot = path.resolve(hostPackageRoot, "..", "..");
9
+ const preparedPath = path.join(hostPackageRoot, "test/playwright/.e2e-prepared.json");
10
+
11
+ if (!fs.existsSync(preparedPath)) {
12
+ throw new Error(
13
+ `Missing ${preparedPath}. Run pnpm run test:browser from @codemation/host (or pnpm exec tsx test/playwright/scripts/run-browser-e2e.ts).`,
14
+ );
15
+ }
16
+
17
+ const prepared = JSON.parse(fs.readFileSync(preparedPath, "utf8")) as CodemationPlaywrightPreparedEnvironment;
18
+
19
+ const webServerEnv: NodeJS.ProcessEnv = {
20
+ ...process.env,
21
+ ...prepared.serverEnv,
22
+ };
23
+
24
+ export default defineConfig({
25
+ /**
26
+ * Must exceed sequential harness waits: {@link CodemationPlaywrightUiHarness} allows up to 120s
27
+ * for workflow API readiness and up to 120s+120s for canvas node completion; cold CI needs headroom.
28
+ */
29
+ timeout: 300_000,
30
+ testDir: path.join(hostPackageRoot, "test/playwright/specs"),
31
+ globalTeardown: path.join(hostPackageRoot, "test/playwright/global-teardown.ts"),
32
+ forbidOnly: Boolean(process.env.CI),
33
+ retries: process.env.CI ? 1 : 0,
34
+ reporter: [
35
+ ["list"],
36
+ [
37
+ "monocart-reporter",
38
+ {
39
+ name: "Codemation browser",
40
+ outputFile: path.join(repoRoot, "coverage/raw/browser/monocart-report.html"),
41
+ coverage: {
42
+ outputDir: path.join(repoRoot, "coverage/raw/browser"),
43
+ lcov: true,
44
+ sourceFilter: (sourcePath: string) =>
45
+ sourcePath.includes("packages/next-host/src") || sourcePath.includes("packages/host/src"),
46
+ },
47
+ },
48
+ ],
49
+ ],
50
+ use: {
51
+ /** Align with app URL and AUTH_URL so Auth.js cookies are not split across localhost vs 127.0.0.1. */
52
+ baseURL: "http://localhost:3001",
53
+ trace: "retain-on-failure",
54
+ video: "retain-on-failure",
55
+ },
56
+ projects: [
57
+ {
58
+ name: "chromium",
59
+ use: { ...devices["Desktop Chrome"] },
60
+ },
61
+ ],
62
+ webServer: {
63
+ /** Production-style `next start` via CLI (not `codemation dev`). Heavy turbo + consumer build runs in CodemationPlaywrightEnvironmentPreparer so this only boots the server. */
64
+ command: "pnpm run e2e:serve-web",
65
+ cwd: repoRoot,
66
+ env: webServerEnv,
67
+ url: "http://localhost:3001",
68
+ // Always start a fresh server so DATABASE_URL/AUTH_SECRET from `.e2e-prepared.json` match the DB that was provisioned for this run (reuse can leave a stale server on port 3001).
69
+ reuseExistingServer: false,
70
+ timeout: 180_000,
71
+ stdout: "pipe",
72
+ stderr: "pipe",
73
+ },
74
+ });
@@ -0,0 +1,16 @@
1
+ -- CreateSchema
2
+ CREATE SCHEMA IF NOT EXISTS "public";
3
+
4
+ -- CreateTable
5
+ CREATE TABLE "Run" (
6
+ "run_id" TEXT NOT NULL,
7
+ "workflow_id" TEXT NOT NULL,
8
+ "started_at" TEXT NOT NULL,
9
+ "status" TEXT NOT NULL,
10
+ "parent_json" TEXT,
11
+ "execution_options_json" TEXT,
12
+ "updated_at" TEXT NOT NULL,
13
+ "state_json" TEXT NOT NULL,
14
+
15
+ CONSTRAINT "Run_pkey" PRIMARY KEY ("run_id")
16
+ );
@@ -0,0 +1,9 @@
1
+ -- CreateTable
2
+ CREATE TABLE "WorkflowDebuggerOverlay" (
3
+ "workflow_id" TEXT NOT NULL,
4
+ "updated_at" TEXT NOT NULL,
5
+ "copied_from_run_id" TEXT,
6
+ "state_json" TEXT NOT NULL,
7
+
8
+ CONSTRAINT "WorkflowDebuggerOverlay_pkey" PRIMARY KEY ("workflow_id")
9
+ );
@@ -0,0 +1,3 @@
1
+ -- Superseded by 20260317153000_trigger_setup_state.
2
+ -- This migration folder is kept intentionally as a no-op so Prisma migrate
3
+ -- deploy can traverse the historical migration chain without failing.
@@ -0,0 +1,8 @@
1
+ CREATE TABLE "TriggerSetupState" (
2
+ "workflow_id" TEXT NOT NULL,
3
+ "node_id" TEXT NOT NULL,
4
+ "updated_at" TEXT NOT NULL,
5
+ "state_json" TEXT NOT NULL,
6
+
7
+ CONSTRAINT "TriggerSetupState_pkey" PRIMARY KEY ("workflow_id","node_id")
8
+ );
@@ -0,0 +1,49 @@
1
+ CREATE TABLE "CredentialInstance" (
2
+ "instance_id" TEXT NOT NULL,
3
+ "type_id" TEXT NOT NULL,
4
+ "display_name" TEXT NOT NULL,
5
+ "source_kind" TEXT NOT NULL,
6
+ "public_config_json" TEXT NOT NULL,
7
+ "secret_ref_json" TEXT NOT NULL,
8
+ "tags_json" TEXT NOT NULL,
9
+ "setup_status" TEXT NOT NULL,
10
+ "created_at" TEXT NOT NULL,
11
+ "updated_at" TEXT NOT NULL,
12
+
13
+ CONSTRAINT "CredentialInstance_pkey" PRIMARY KEY ("instance_id")
14
+ );
15
+
16
+ CREATE TABLE "CredentialSecretMaterial" (
17
+ "instance_id" TEXT NOT NULL,
18
+ "encrypted_json" TEXT NOT NULL,
19
+ "encryption_key_id" TEXT NOT NULL,
20
+ "schema_version" INTEGER NOT NULL,
21
+ "updated_at" TEXT NOT NULL,
22
+
23
+ CONSTRAINT "CredentialSecretMaterial_pkey" PRIMARY KEY ("instance_id")
24
+ );
25
+
26
+ CREATE TABLE "CredentialBinding" (
27
+ "workflow_id" TEXT NOT NULL,
28
+ "node_id" TEXT NOT NULL,
29
+ "slot_key" TEXT NOT NULL,
30
+ "instance_id" TEXT NOT NULL,
31
+ "updated_at" TEXT NOT NULL,
32
+
33
+ CONSTRAINT "CredentialBinding_pkey" PRIMARY KEY ("workflow_id", "node_id", "slot_key")
34
+ );
35
+
36
+ CREATE TABLE "CredentialTestResult" (
37
+ "test_id" TEXT NOT NULL,
38
+ "instance_id" TEXT NOT NULL,
39
+ "status" TEXT NOT NULL,
40
+ "message" TEXT,
41
+ "details_json" TEXT NOT NULL,
42
+ "tested_at" TEXT NOT NULL,
43
+ "expires_at" TEXT,
44
+
45
+ CONSTRAINT "CredentialTestResult_pkey" PRIMARY KEY ("test_id")
46
+ );
47
+
48
+ CREATE INDEX "CredentialBinding_instance_id_idx" ON "CredentialBinding"("instance_id");
49
+ CREATE INDEX "CredentialTestResult_instance_id_tested_at_idx" ON "CredentialTestResult"("instance_id", "tested_at");
@@ -0,0 +1,28 @@
1
+ CREATE TABLE "CredentialOAuth2Material" (
2
+ "instance_id" TEXT NOT NULL,
3
+ "encrypted_json" TEXT NOT NULL,
4
+ "encryption_key_id" TEXT NOT NULL,
5
+ "schema_version" INTEGER NOT NULL,
6
+ "provider_id" TEXT NOT NULL,
7
+ "connected_email" TEXT,
8
+ "connected_at" TEXT,
9
+ "scopes_json" TEXT NOT NULL,
10
+ "updated_at" TEXT NOT NULL,
11
+
12
+ CONSTRAINT "CredentialOAuth2Material_pkey" PRIMARY KEY ("instance_id")
13
+ );
14
+
15
+ CREATE TABLE "CredentialOAuth2State" (
16
+ "state" TEXT NOT NULL,
17
+ "instance_id" TEXT NOT NULL,
18
+ "code_verifier" TEXT,
19
+ "provider_id" TEXT,
20
+ "requested_scopes_json" TEXT NOT NULL,
21
+ "created_at" TEXT NOT NULL,
22
+ "expires_at" TEXT NOT NULL,
23
+
24
+ CONSTRAINT "CredentialOAuth2State_pkey" PRIMARY KEY ("state")
25
+ );
26
+
27
+ CREATE INDEX "CredentialOAuth2State_instance_id_idx" ON "CredentialOAuth2State"("instance_id");
28
+ CREATE INDEX "CredentialOAuth2State_expires_at_idx" ON "CredentialOAuth2State"("expires_at");
@@ -0,0 +1,56 @@
1
+ -- Auth.js directory tables (JWT session strategy; optional DB sessions for adapter)
2
+
3
+ CREATE TABLE "codemation_auth_user" (
4
+ "id" TEXT NOT NULL,
5
+ "name" TEXT,
6
+ "email" TEXT,
7
+ "email_verified" TIMESTAMP(3),
8
+ "image" TEXT,
9
+ "password_hash" TEXT,
10
+
11
+ CONSTRAINT "codemation_auth_user_pkey" PRIMARY KEY ("id")
12
+ );
13
+
14
+ CREATE UNIQUE INDEX "codemation_auth_user_email_key" ON "codemation_auth_user"("email");
15
+
16
+ CREATE TABLE "codemation_auth_account" (
17
+ "id" TEXT NOT NULL,
18
+ "user_id" TEXT NOT NULL,
19
+ "type" TEXT NOT NULL,
20
+ "provider" TEXT NOT NULL,
21
+ "provider_account_id" TEXT NOT NULL,
22
+ "refresh_token" TEXT,
23
+ "access_token" TEXT,
24
+ "expires_at" INTEGER,
25
+ "token_type" TEXT,
26
+ "scope" TEXT,
27
+ "id_token" TEXT,
28
+ "session_state" TEXT,
29
+
30
+ CONSTRAINT "codemation_auth_account_pkey" PRIMARY KEY ("id")
31
+ );
32
+
33
+ CREATE UNIQUE INDEX "codemation_auth_account_provider_provider_account_id_key" ON "codemation_auth_account"("provider", "provider_account_id");
34
+
35
+ CREATE TABLE "codemation_auth_session" (
36
+ "id" TEXT NOT NULL,
37
+ "session_token" TEXT NOT NULL,
38
+ "user_id" TEXT NOT NULL,
39
+ "expires" TIMESTAMP(3) NOT NULL,
40
+
41
+ CONSTRAINT "codemation_auth_session_pkey" PRIMARY KEY ("id")
42
+ );
43
+
44
+ CREATE UNIQUE INDEX "codemation_auth_session_session_token_key" ON "codemation_auth_session"("session_token");
45
+
46
+ CREATE TABLE "codemation_auth_verification_token" (
47
+ "identifier" TEXT NOT NULL,
48
+ "token" TEXT NOT NULL,
49
+ "expires" TIMESTAMP(3) NOT NULL,
50
+
51
+ CONSTRAINT "codemation_auth_verification_token_identifier_token_key" UNIQUE ("identifier", "token")
52
+ );
53
+
54
+ ALTER TABLE "codemation_auth_account" ADD CONSTRAINT "codemation_auth_account_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "codemation_auth_user"("id") ON DELETE CASCADE ON UPDATE CASCADE;
55
+
56
+ ALTER TABLE "codemation_auth_session" ADD CONSTRAINT "codemation_auth_session_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "codemation_auth_user"("id") ON DELETE CASCADE ON UPDATE CASCADE;