@codemation/host 0.0.5 → 0.0.11

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 (132) hide show
  1. package/README.md +3 -3
  2. package/dist/{PrismaMigrationDeployer-B7cHGrXP.js → AppConfigFactory-DWIz2hy-.js} +104 -58
  3. package/dist/AppConfigFactory-DWIz2hy-.js.map +1 -0
  4. package/dist/{client-Yh7-CQud.d.ts → AppConfigFactory-DmHOpg8O.d.ts} +52 -31
  5. package/dist/{CodemationFrontendBootstrapRequest-CNEk-C4D.js → AppContainerFactory-B5eRpvAa.js} +3269 -3374
  6. package/dist/AppContainerFactory-B5eRpvAa.js.map +1 -0
  7. package/dist/{CodemationWhitelabelConfig-DgbjgtrR.d.ts → CodemationAuthConfig-Bh2cCNCI.d.ts} +32 -2
  8. package/dist/{CodemationConfig-XCkSV2dj.d.ts → CodemationConfig-D2ULNkec.d.ts} +53 -49
  9. package/dist/CodemationConfigNormalizer-CBLxXaRV.d.ts +9 -0
  10. package/dist/{CodemationConsumerConfigLoader-scS_RQMy.js → CodemationConsumerConfigLoader-BBzAr6L_.js} +128 -3
  11. package/dist/CodemationConsumerConfigLoader-BBzAr6L_.js.map +1 -0
  12. package/dist/{CodemationConsumerConfigLoader-Dmm2TzAA.d.ts → CodemationConsumerConfigLoader-BLvzcfb7.d.ts} +4 -4
  13. package/dist/CodemationPluginListMerger-B0-e4CJ6.d.ts +391 -0
  14. package/dist/{CodemationPluginListMerger-BNmaoXQL.js → CodemationPluginListMerger-DrVOw9KP.js} +18 -10
  15. package/dist/CodemationPluginListMerger-DrVOw9KP.js.map +1 -0
  16. package/dist/{CredentialServices-DpDpm8mL.d.ts → CredentialServices-BeuMtqYA.d.ts} +3 -3
  17. package/dist/{CredentialServices-BKBGe7l3.js → CredentialServices-DNb3CZwW.js} +3 -3
  18. package/dist/CredentialServices-DNb3CZwW.js.map +1 -0
  19. package/dist/FrontendAppConfig-D50wjj_n.d.ts +27 -0
  20. package/dist/{WorkflowViewContracts-DCLpTn25.d.ts → FrontendAppConfigFactory-Bj-DZNlt.d.ts} +29 -2
  21. package/dist/FrontendAppConfigJsonCodec-1_L7H_Qo.d.ts +20 -0
  22. package/dist/FrontendAppConfigJsonCodec-nOCQI0ag.js +84 -0
  23. package/dist/FrontendAppConfigJsonCodec-nOCQI0ag.js.map +1 -0
  24. package/dist/{LogLevelPolicy-4cq9z0TI.d.ts → LogLevelPolicy-BS_NlAOg.d.ts} +2 -2
  25. package/dist/{ServerLoggerFactory-BRHxIDS7.js → ServerLoggerFactory-BltIIDfQ.js} +4 -129
  26. package/dist/ServerLoggerFactory-BltIIDfQ.js.map +1 -0
  27. package/dist/client.d.ts +5 -3
  28. package/dist/client.js +2 -1
  29. package/dist/client.js.map +1 -1
  30. package/dist/consumer.d.ts +5 -4
  31. package/dist/consumer.js +4 -4
  32. package/dist/credentials.d.ts +4 -4
  33. package/dist/credentials.js +3 -3
  34. package/dist/devServerSidecar.d.ts +1 -1
  35. package/dist/{index-Bs4F1IsC.d.ts → index-CkiptHb-.d.ts} +19 -20
  36. package/dist/index.d.ts +14 -19
  37. package/dist/index.js +12 -11
  38. package/dist/nextServer.d.ts +244 -9
  39. package/dist/nextServer.js +8 -8
  40. package/dist/persistenceServer-CaehMh3M.d.ts +9 -0
  41. package/dist/{persistenceServer-8tcM2S48.js → persistenceServer-DVeWUbc3.js} +2 -2
  42. package/dist/{persistenceServer-8tcM2S48.js.map → persistenceServer-DVeWUbc3.js.map} +1 -1
  43. package/dist/persistenceServer.d.ts +7 -6
  44. package/dist/persistenceServer.js +4 -4
  45. package/dist/{server-Dd65rNm6.js → server-C65z_kqm.js} +47 -17
  46. package/dist/server-C65z_kqm.js.map +1 -0
  47. package/dist/{server-BBdsATju.d.ts → server-Dyo8qh4k.d.ts} +23 -4
  48. package/dist/server.d.ts +12 -9
  49. package/dist/server.js +11 -10
  50. package/package.json +11 -6
  51. package/prisma/migrations/20260315063514_init/migration.sql +16 -16
  52. package/prisma/migrations/20260316090000_workflow_debugger_overlay/migration.sql +9 -9
  53. package/prisma/migrations/20260317120000_trigger_state_store/migration.sql +3 -3
  54. package/prisma/migrations/20260317153000_trigger_setup_state/migration.sql +8 -8
  55. package/prisma/migrations/20260318110000_credentials_v2/migration.sql +49 -49
  56. package/prisma/migrations/20260319110000_credential_oauth2_material/migration.sql +28 -28
  57. package/prisma/migrations/20260319200000_codemation_auth_tables/migration.sql +56 -56
  58. package/prisma/migrations/20260320140000_user_invites_account_status/migration.sql +20 -20
  59. package/prisma/migrations/20260325120000_workflow_activation/migration.sql +8 -8
  60. package/prisma/migrations/migration_lock.toml +3 -3
  61. package/prisma/schema.prisma +179 -179
  62. package/prisma.config.ts +15 -2
  63. package/src/application/commands/WorkflowCommandHandlers.ts +9 -0
  64. package/src/application/dev/BootRuntimeSnapshotHolder.ts +2 -2
  65. package/src/application/dev/BootRuntimeSummary.types.ts +2 -2
  66. package/src/application/queries/WorkflowQueryHandlers.ts +7 -0
  67. package/src/applicationTokens.ts +1 -1
  68. package/src/bootstrap/AppContainerFactory.ts +584 -0
  69. package/src/bootstrap/{PreparedCodemationRuntime.ts → AppContainerLifecycle.ts} +3 -8
  70. package/src/bootstrap/runtime/AppConfigFactory.ts +155 -30
  71. package/src/bootstrap/runtime/DatabaseMigrations.ts +18 -0
  72. package/src/bootstrap/runtime/FrontendRuntime.ts +44 -0
  73. package/src/bootstrap/runtime/WorkerRuntime.ts +55 -0
  74. package/src/client.ts +7 -0
  75. package/src/index.ts +15 -5
  76. package/src/infrastructure/persistence/PrismaMigrationDeployer.ts +2 -2
  77. package/src/infrastructure/persistence/SchedulerPersistenceCompatibilityValidator.ts +2 -2
  78. package/src/infrastructure/scheduler/WorkerRuntimeScheduler.ts +16 -0
  79. package/src/infrastructure/scheduler/bullmq/BullmqNodeExecutionScheduler.ts +47 -0
  80. package/src/infrastructure/scheduler/bullmq/BullmqScheduler.ts +33 -0
  81. package/src/infrastructure/scheduler/bullmq/BullmqWorker.ts +48 -0
  82. package/src/infrastructure/scheduler/bullmq/RedisConnectionOptionsFactory.ts +48 -0
  83. package/src/nextServer.ts +12 -3
  84. package/src/persistenceServer.ts +2 -2
  85. package/src/presentation/config/AppConfig.ts +25 -1
  86. package/src/presentation/frontend/CodemationFrontendAuthSnapshot.ts +14 -0
  87. package/src/presentation/frontend/CodemationFrontendAuthSnapshotFactory.ts +84 -0
  88. package/src/presentation/frontend/CodemationFrontendAuthSnapshotJsonCodec.ts +58 -0
  89. package/src/presentation/frontend/FrontendAppConfig.ts +10 -0
  90. package/src/presentation/frontend/FrontendAppConfigFactory.ts +26 -0
  91. package/src/presentation/frontend/FrontendAppConfigJsonCodec.ts +58 -0
  92. package/src/presentation/http/CodemationServerGatewayFactory.ts +22 -16
  93. package/src/presentation/server/AppConfigLoader.ts +39 -0
  94. package/src/presentation/server/CodemationConsumerAppResolver.ts +2 -2
  95. package/src/presentation/server/CodemationConsumerConfigLoader.ts +3 -2
  96. package/src/server.ts +7 -0
  97. package/vitest.shared.ts +0 -4
  98. package/dist/CodemationConsumerConfigLoader-scS_RQMy.js.map +0 -1
  99. package/dist/CodemationFrontendBootstrapRequest-CNEk-C4D.js.map +0 -1
  100. package/dist/CodemationPluginListMerger-BNmaoXQL.js.map +0 -1
  101. package/dist/CodemationPluginListMerger-BRYqEk0y.d.ts +0 -793
  102. package/dist/CredentialServices-BKBGe7l3.js.map +0 -1
  103. package/dist/PrismaMigrationDeployer-B7cHGrXP.js.map +0 -1
  104. package/dist/ServerLoggerFactory-BRHxIDS7.js.map +0 -1
  105. package/dist/persistenceServer-DPSj_-oU.d.ts +0 -37
  106. package/dist/server-Dd65rNm6.js.map +0 -1
  107. package/src/bootstrap/CodemationContainerFactory.ts +0 -310
  108. package/src/bootstrap/CodemationFrontendBootstrapRequest.ts +0 -16
  109. package/src/bootstrap/CodemationWorkerBootstrapRequest.ts +0 -19
  110. package/src/bootstrap/PreparedCodemationRuntimeFactory.ts +0 -308
  111. package/src/bootstrap/boot/CliRuntimeBootService.ts +0 -27
  112. package/src/bootstrap/boot/FrontendRuntimeBootService.ts +0 -86
  113. package/src/bootstrap/boot/WorkerRuntimeBootService.ts +0 -64
  114. package/src/bootstrap/runtime/ResolvedImplementationSelectionFactory.ts +0 -118
  115. package/src/codemationApplication.ts +0 -311
  116. package/src/infrastructure/credentials/FrameworkBuiltinCredentialTypesRegistrar.ts +0 -21
  117. package/src/infrastructure/persistence/DatabasePersistenceResolver.ts +0 -91
  118. package/src/infrastructure/persistence/generated/prisma/client.d.ts +0 -1
  119. package/src/infrastructure/persistence/generated/prisma/default.d.ts +0 -1
  120. package/src/infrastructure/persistence/generated/prisma/edge.d.ts +0 -1
  121. package/src/infrastructure/persistence/generated/prisma/index.d.ts +0 -4766
  122. package/src/infrastructure/persistence/generated/prisma/package.json +0 -144
  123. package/src/infrastructure/persistence/generated/prisma/query_compiler_fast_bg.wasm +0 -0
  124. package/src/infrastructure/persistence/generated/prisma/runtime/client.d.ts +0 -3358
  125. package/src/infrastructure/persistence/generated/prisma/runtime/index-browser.d.ts +0 -90
  126. package/src/infrastructure/persistence/generated/prisma/schema.prisma +0 -35
  127. package/src/infrastructure/persistence/generated/prisma/wasm-edge-light-loader.mjs +0 -5
  128. package/src/infrastructure/persistence/generated/prisma/wasm-worker-loader.mjs +0 -5
  129. package/src/infrastructure/runtime/WorkerRuntimeScheduler.ts +0 -35
  130. package/src/presentation/config/CodemationApplicationFacade.ts +0 -5
  131. /package/dist/{decorate-B-N_5S4p.js → decorate-B0PP651O.js} +0 -0
  132. /package/dist/{decorateParam-BTcc3KNk.js → decorateParam-DrsXNPuw.js} +0 -0
@@ -1,5 +1,7 @@
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-CNEk-C4D.js";
1
+ import { a as CodemationConfigNormalizer, t as CodemationConsumerConfigLoader } from "./CodemationConsumerConfigLoader-BBzAr6L_.js";
2
+ import { u as ApplicationTokens } from "./CredentialServices-DNb3CZwW.js";
3
+ import { a as AppContainerLifecycle, b as GetWorkflowSummariesQuery, f as CodemationHonoApiApp, r as FrontendRuntime, t as AppContainerFactory, v as WorkflowDefinitionMapper, x as GetWorkflowDetailQuery } from "./AppContainerFactory-B5eRpvAa.js";
4
+ import { t as AppConfigFactory } from "./AppConfigFactory-DWIz2hy-.js";
3
5
  import { readFile, readdir } from "node:fs/promises";
4
6
  import path from "node:path";
5
7
  import { pathToFileURL } from "node:url";
@@ -25,7 +27,7 @@ var CodemationServerGateway = class CodemationServerGateway {
25
27
  const cachedContext = CodemationServerGateway.contextsByConfig.get(this.config);
26
28
  if (!cachedContext) return;
27
29
  CodemationServerGateway.contextsByConfig.delete(this.config);
28
- await (await cachedContext).application.stop();
30
+ await (await cachedContext).container.resolve(AppContainerLifecycle).stop();
29
31
  }
30
32
  async loadWorkflowSummaries() {
31
33
  const context = await this.getContext();
@@ -45,22 +47,25 @@ var CodemationServerGateway = class CodemationServerGateway {
45
47
  return nextContext;
46
48
  }
47
49
  async createContext() {
48
- const bootstrapRequest = new CodemationBootstrapRequest({
49
- repoRoot: this.detectWorkspaceRoot(this.consumerRoot),
50
+ const repoRoot = this.detectWorkspaceRoot(this.consumerRoot);
51
+ const env = this.env ?? process.env;
52
+ const appConfig = new AppConfigFactory().create({
53
+ repoRoot,
50
54
  consumerRoot: this.consumerRoot,
51
- env: this.env,
55
+ env,
56
+ config: new CodemationConfigNormalizer().normalize(this.config),
52
57
  workflowSources: this.resolveWorkflowSources()
53
58
  });
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
+ const container = await new AppContainerFactory().create({
60
+ appConfig,
61
+ sharedWorkflowWebsocketServer: null
62
+ });
63
+ await container.resolve(FrontendRuntime).start();
59
64
  return {
60
- application,
61
- httpApi: application.getContainer().resolve(CodemationHonoApiApp),
62
- queryBus: application.getContainer().resolve(ApplicationTokens.QueryBus),
63
- workflowDefinitionMapper: application.getContainer().resolve(WorkflowDefinitionMapper)
65
+ container,
66
+ httpApi: container.resolve(CodemationHonoApiApp),
67
+ queryBus: container.resolve(ApplicationTokens.QueryBus),
68
+ workflowDefinitionMapper: container.resolve(WorkflowDefinitionMapper)
64
69
  };
65
70
  }
66
71
  resolveWorkflowSources() {
@@ -81,6 +86,31 @@ var CodemationServerGateway = class CodemationServerGateway {
81
86
  }
82
87
  };
83
88
 
89
+ //#endregion
90
+ //#region src/presentation/server/AppConfigLoader.ts
91
+ var AppConfigLoader = class {
92
+ constructor(consumerConfigLoader = new CodemationConsumerConfigLoader(), appConfigFactory = new AppConfigFactory()) {
93
+ this.consumerConfigLoader = consumerConfigLoader;
94
+ this.appConfigFactory = appConfigFactory;
95
+ }
96
+ async load(args) {
97
+ const resolution = await this.consumerConfigLoader.load({
98
+ consumerRoot: args.consumerRoot,
99
+ configPathOverride: args.configPathOverride
100
+ });
101
+ return {
102
+ appConfig: this.appConfigFactory.create({
103
+ repoRoot: args.repoRoot,
104
+ consumerRoot: args.consumerRoot,
105
+ env: args.env,
106
+ config: resolution.config,
107
+ workflowSources: resolution.workflowSources
108
+ }),
109
+ bootstrapSource: resolution.bootstrapSource
110
+ };
111
+ }
112
+ };
113
+
84
114
  //#endregion
85
115
  //#region src/presentation/server/CodemationPluginDiscovery.ts
86
116
  var CodemationPluginDiscovery = class {
@@ -171,5 +201,5 @@ var CodemationPluginDiscovery = class {
171
201
  };
172
202
 
173
203
  //#endregion
174
- export { CodemationServerGateway as n, CodemationPluginDiscovery as t };
175
- //# sourceMappingURL=server-Dd65rNm6.js.map
204
+ export { AppConfigLoader as n, CodemationServerGateway as r, CodemationPluginDiscovery as t };
205
+ //# sourceMappingURL=server-C65z_kqm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-C65z_kqm.js","names":["config: CodemationConfig","consumerRoot: string","configSource?: string","workflowSources: ReadonlyArray<string>","env?: Readonly<NodeJS.ProcessEnv>","consumerConfigLoader: CodemationConsumerConfigLoader","appConfigFactory: AppConfigFactory","discoveredPackages: CodemationDiscoveredPluginPackage[]","resolvedPackages: CodemationResolvedPluginPackage[]","packageRoots: string[]"],"sources":["../src/presentation/http/CodemationServerGatewayFactory.ts","../src/presentation/server/AppConfigLoader.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 { AppContainerFactory } from \"../../bootstrap/AppContainerFactory\";\nimport { AppContainerLifecycle } from \"../../bootstrap/AppContainerLifecycle\";\nimport { FrontendRuntime } from \"../../bootstrap/runtime/FrontendRuntime\";\nimport { AppConfigFactory } from \"../../bootstrap/runtime/AppConfigFactory\";\nimport type { CodemationConfig } from \"../config/CodemationConfig\";\nimport { CodemationConfigNormalizer } from \"../config/CodemationConfigNormalizer\";\nimport { CodemationHonoApiApp } from \"./hono/CodemationHonoApiAppFactory\";\n\ntype ServerGatewayContext = Readonly<{\n container: import(\"@codemation/core\").Container;\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).container.resolve(AppContainerLifecycle).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 // This gateway is the config/env boundary that materializes AppConfig from raw inputs.\n // eslint-disable-next-line no-restricted-properties\n const env = this.env ?? process.env;\n const appConfig = new AppConfigFactory().create({\n repoRoot,\n consumerRoot: this.consumerRoot,\n env,\n config: new CodemationConfigNormalizer().normalize(this.config),\n workflowSources: this.resolveWorkflowSources(),\n });\n const container = await new AppContainerFactory().create({\n appConfig,\n sharedWorkflowWebsocketServer: null,\n });\n await container.resolve(FrontendRuntime).start();\n return {\n container,\n httpApi: container.resolve(CodemationHonoApiApp),\n queryBus: container.resolve(ApplicationTokens.QueryBus),\n workflowDefinitionMapper: container.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 { AppConfig } from \"../config/AppConfig\";\nimport { CodemationConsumerConfigLoader } from \"./CodemationConsumerConfigLoader\";\nimport { AppConfigFactory } from \"../../bootstrap/runtime/AppConfigFactory\";\n\nexport type AppConfigLoadResult = Readonly<{\n appConfig: AppConfig;\n bootstrapSource: string | null;\n}>;\n\nexport class AppConfigLoader {\n constructor(\n private readonly consumerConfigLoader: CodemationConsumerConfigLoader = new CodemationConsumerConfigLoader(),\n private readonly appConfigFactory: AppConfigFactory = new AppConfigFactory(),\n ) {}\n\n async load(\n args: Readonly<{\n consumerRoot: string;\n repoRoot: string;\n env: NodeJS.ProcessEnv;\n configPathOverride?: string;\n }>,\n ): Promise<AppConfigLoadResult> {\n const resolution = await this.consumerConfigLoader.load({\n consumerRoot: args.consumerRoot,\n configPathOverride: args.configPathOverride,\n });\n return {\n appConfig: this.appConfigFactory.create({\n repoRoot: args.repoRoot,\n consumerRoot: args.consumerRoot,\n env: args.env,\n config: resolution.config,\n workflowSources: resolution.workflowSources,\n }),\n bootstrapSource: resolution.bootstrapSource,\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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"}
@@ -1,5 +1,7 @@
1
- import { a as CodemationConfig, m as CodemationPlugin } from "./CodemationConfig-XCkSV2dj.js";
2
- import { n as WorkflowSummary, t as WorkflowDto } from "./WorkflowViewContracts-DCLpTn25.js";
1
+ import { a as CodemationConfig, g as AppConfig, v as CodemationPlugin } from "./CodemationConfig-D2ULNkec.js";
2
+ import { t as CodemationConsumerConfigLoader } from "./CodemationConsumerConfigLoader-BLvzcfb7.js";
3
+ import { t as AppConfigFactory } from "./AppConfigFactory-DmHOpg8O.js";
4
+ import { i as WorkflowSummary, r as WorkflowDto } from "./FrontendAppConfigFactory-Bj-DZNlt.js";
3
5
 
4
6
  //#region src/presentation/config/CodemationPackageManifest.d.ts
5
7
  interface CodemationPluginPackageManifest {
@@ -82,6 +84,23 @@ declare class CodemationServerGateway {
82
84
  private detectWorkspaceRoot;
83
85
  }
84
86
  //#endregion
87
+ //#region src/presentation/server/AppConfigLoader.d.ts
88
+ type AppConfigLoadResult = Readonly<{
89
+ appConfig: AppConfig;
90
+ bootstrapSource: string | null;
91
+ }>;
92
+ declare class AppConfigLoader {
93
+ private readonly consumerConfigLoader;
94
+ private readonly appConfigFactory;
95
+ constructor(consumerConfigLoader?: CodemationConsumerConfigLoader, appConfigFactory?: AppConfigFactory);
96
+ load(args: Readonly<{
97
+ consumerRoot: string;
98
+ repoRoot: string;
99
+ env: NodeJS.ProcessEnv;
100
+ configPathOverride?: string;
101
+ }>): Promise<AppConfigLoadResult>;
102
+ }
103
+ //#endregion
85
104
  //#region src/presentation/server/CodemationPluginDiscovery.d.ts
86
105
  type CodemationDiscoveredPluginPackage = Readonly<{
87
106
  packageName: string;
@@ -128,5 +147,5 @@ declare class WorkflowDiscoveryPathSegmentsComputer {
128
147
  }>): readonly string[] | undefined;
129
148
  }
130
149
  //#endregion
131
- export { CodemationResolvedPluginPackage as a, CodemationPackageManifest as c, CodemationPluginDiscovery as i, CodemationPluginPackageManifest as l, WorkflowModulePathFinder as n, CodemationServerGateway as o, CodemationDiscoveredPluginPackage as r, ApiPaths as s, WorkflowDiscoveryPathSegmentsComputer as t };
132
- //# sourceMappingURL=server-BBdsATju.d.ts.map
150
+ export { CodemationResolvedPluginPackage as a, CodemationServerGateway as c, CodemationPluginPackageManifest as d, CodemationPluginDiscovery as i, ApiPaths as l, WorkflowModulePathFinder as n, AppConfigLoadResult as o, CodemationDiscoveredPluginPackage as r, AppConfigLoader as s, WorkflowDiscoveryPathSegmentsComputer as t, CodemationPackageManifest as u };
151
+ //# sourceMappingURL=server-Dyo8qh4k.d.ts.map
package/dist/server.d.ts CHANGED
@@ -1,9 +1,12 @@
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-DPSj_-oU.js";
9
- export { ApiPaths, CodemationConsumerApp, CodemationConsumerAppResolver, CodemationConsumerConfigLoader, CodemationConsumerConfigResolution, CodemationDiscoveredPluginPackage, CodemationPluginDiscovery, CodemationPostgresPrismaClientFactory, CodemationResolvedPluginPackage, CodemationServerGateway, PrismaClient, WorkflowDiscoveryPathSegmentsComputer, WorkflowModulePathFinder };
1
+ import "./CodemationAuthConfig-Bh2cCNCI.js";
2
+ import { t as FrontendAppConfig } from "./FrontendAppConfig-D50wjj_n.js";
3
+ import { n as CodemationFrontendAuthSnapshotJsonCodec, t as FrontendAppConfigJsonCodec } from "./FrontendAppConfigJsonCodec-1_L7H_Qo.js";
4
+ import "./index-CkiptHb-.js";
5
+ import "./CodemationConfig-D2ULNkec.js";
6
+ import "./CodemationConfigNormalizer-CBLxXaRV.js";
7
+ import { i as CodemationConsumerAppResolver, n as CodemationConsumerConfigResolution, r as CodemationConsumerApp, t as CodemationConsumerConfigLoader } from "./CodemationConsumerConfigLoader-BLvzcfb7.js";
8
+ import { r as PrismaClient } from "./AppConfigFactory-DmHOpg8O.js";
9
+ import { a as CodemationResolvedPluginPackage, c as CodemationServerGateway, i as CodemationPluginDiscovery, l as ApiPaths, n as WorkflowModulePathFinder, o as AppConfigLoadResult, r as CodemationDiscoveredPluginPackage, s as AppConfigLoader, t as WorkflowDiscoveryPathSegmentsComputer } from "./server-Dyo8qh4k.js";
10
+ import { t as CodemationPostgresPrismaClientFactory } from "./persistenceServer-CaehMh3M.js";
11
+ import { n as CodemationFrontendAuthSnapshotFactory, t as FrontendAppConfigFactory } from "./FrontendAppConfigFactory-Bj-DZNlt.js";
12
+ export { ApiPaths, AppConfigLoadResult, AppConfigLoader, CodemationConsumerApp, CodemationConsumerAppResolver, CodemationConsumerConfigLoader, CodemationConsumerConfigResolution, CodemationDiscoveredPluginPackage, CodemationFrontendAuthSnapshotFactory, CodemationFrontendAuthSnapshotJsonCodec, CodemationPluginDiscovery, CodemationPostgresPrismaClientFactory, CodemationResolvedPluginPackage, CodemationServerGateway, FrontendAppConfig, FrontendAppConfigFactory, FrontendAppConfigJsonCodec, PrismaClient, WorkflowDiscoveryPathSegmentsComputer, WorkflowModulePathFinder };
package/dist/server.js CHANGED
@@ -1,13 +1,14 @@
1
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-CNEk-C4D.js";
8
- import "./PrismaMigrationDeployer-B7cHGrXP.js";
9
- import { n as CodemationPostgresPrismaClientFactory, t as import_client } from "./persistenceServer-8tcM2S48.js";
10
- import { n as CodemationServerGateway, t as CodemationPluginDiscovery } from "./server-Dd65rNm6.js";
2
+ import { n as CodemationFrontendAuthSnapshotJsonCodec, t as FrontendAppConfigJsonCodec } from "./FrontendAppConfigJsonCodec-nOCQI0ag.js";
3
+ import { i as CodemationConsumerAppResolver, n as WorkflowDiscoveryPathSegmentsComputer, r as WorkflowModulePathFinder, t as CodemationConsumerConfigLoader } from "./CodemationConsumerConfigLoader-BBzAr6L_.js";
4
+ import "./ServerLoggerFactory-BltIIDfQ.js";
5
+ import "./decorateParam-DrsXNPuw.js";
6
+ import "./decorate-B0PP651O.js";
7
+ import "./CredentialServices-DNb3CZwW.js";
8
+ import { _ as ApiPaths, h as CodemationFrontendAuthSnapshotFactory, m as FrontendAppConfigFactory } from "./AppContainerFactory-B5eRpvAa.js";
9
+ import "./AppConfigFactory-DWIz2hy-.js";
10
+ import { n as CodemationPostgresPrismaClientFactory, t as import_client } from "./persistenceServer-DVeWUbc3.js";
11
+ import { n as AppConfigLoader, r as CodemationServerGateway, t as CodemationPluginDiscovery } from "./server-C65z_kqm.js";
11
12
 
12
13
  var PrismaClient = import_client.PrismaClient;
13
- export { ApiPaths, CodemationConsumerAppResolver, CodemationConsumerConfigLoader, CodemationPluginDiscovery, CodemationPostgresPrismaClientFactory, CodemationServerGateway, PrismaClient, WorkflowDiscoveryPathSegmentsComputer, WorkflowModulePathFinder };
14
+ export { ApiPaths, AppConfigLoader, CodemationConsumerAppResolver, CodemationConsumerConfigLoader, CodemationFrontendAuthSnapshotFactory, CodemationFrontendAuthSnapshotJsonCodec, CodemationPluginDiscovery, CodemationPostgresPrismaClientFactory, CodemationServerGateway, FrontendAppConfigFactory, FrontendAppConfigJsonCodec, PrismaClient, WorkflowDiscoveryPathSegmentsComputer, WorkflowModulePathFinder };
package/package.json CHANGED
@@ -1,11 +1,16 @@
1
1
  {
2
2
  "name": "@codemation/host",
3
- "version": "0.0.5",
3
+ "version": "0.0.11",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
7
  "author": "Made Relevant B.V.",
8
8
  "homepage": "https://www.maderelevant.com",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/MadeRelevant/codemation",
12
+ "directory": "packages/host"
13
+ },
9
14
  "type": "module",
10
15
  "main": "./dist/index.js",
11
16
  "module": "./dist/index.js",
@@ -81,6 +86,7 @@
81
86
  "@uiw/react-json-view": "2.0.0-alpha.41",
82
87
  "@xyflow/react": "^12.10.1",
83
88
  "bcryptjs": "^3.0.3",
89
+ "bullmq": "^5.58.3",
84
90
  "dagre": "^0.8.5",
85
91
  "date-fns": "^4.1.0",
86
92
  "hono": "^4.12.8",
@@ -103,10 +109,9 @@
103
109
  "tsx": "^4.21.0",
104
110
  "ws": "^8.19.0",
105
111
  "zxcvbn": "^4.4.2",
106
- "@codemation/core": "0.0.5",
107
- "@codemation/core-nodes": "0.0.5",
108
- "@codemation/eventbus-redis": "0.0.5",
109
- "@codemation/queue-bullmq": "0.0.5"
112
+ "@codemation/core": "0.0.11",
113
+ "@codemation/core-nodes": "0.0.11",
114
+ "@codemation/eventbus-redis": "0.0.11"
110
115
  },
111
116
  "devDependencies": {
112
117
  "@playwright/test": "^1.58.2",
@@ -131,7 +136,7 @@
131
136
  "tsdown": "^0.15.5",
132
137
  "typescript": "^5.9.3",
133
138
  "vitest": "^4.0.18",
134
- "@codemation/core-nodes-gmail": "0.0.5"
139
+ "@codemation/core-nodes-gmail": "0.0.11"
135
140
  },
136
141
  "scripts": {
137
142
  "prisma:generate": "prisma generate && node ./scripts/ensure-prisma-runtime-sourcemaps.mjs",
@@ -1,16 +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
- );
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
+ );
@@ -1,9 +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
- );
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
+ );
@@ -1,3 +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.
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.
@@ -1,8 +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
- );
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
+ );
@@ -1,49 +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");
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");
@@ -1,28 +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");
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");
@@ -1,56 +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;
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;