@codemation/host 0.0.5 → 0.0.7

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 (109) 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 +6 -6
  51. package/src/application/commands/WorkflowCommandHandlers.ts +9 -0
  52. package/src/application/dev/BootRuntimeSnapshotHolder.ts +2 -2
  53. package/src/application/dev/BootRuntimeSummary.types.ts +2 -2
  54. package/src/application/queries/WorkflowQueryHandlers.ts +7 -0
  55. package/src/applicationTokens.ts +1 -1
  56. package/src/bootstrap/AppContainerFactory.ts +584 -0
  57. package/src/bootstrap/{PreparedCodemationRuntime.ts → AppContainerLifecycle.ts} +3 -8
  58. package/src/bootstrap/runtime/AppConfigFactory.ts +155 -30
  59. package/src/bootstrap/runtime/DatabaseMigrations.ts +18 -0
  60. package/src/bootstrap/runtime/FrontendRuntime.ts +44 -0
  61. package/src/bootstrap/runtime/WorkerRuntime.ts +55 -0
  62. package/src/client.ts +7 -0
  63. package/src/index.ts +15 -5
  64. package/src/infrastructure/persistence/PrismaMigrationDeployer.ts +2 -2
  65. package/src/infrastructure/persistence/SchedulerPersistenceCompatibilityValidator.ts +2 -2
  66. package/src/infrastructure/scheduler/WorkerRuntimeScheduler.ts +16 -0
  67. package/src/infrastructure/scheduler/bullmq/BullmqNodeExecutionScheduler.ts +47 -0
  68. package/src/infrastructure/scheduler/bullmq/BullmqScheduler.ts +33 -0
  69. package/src/infrastructure/scheduler/bullmq/BullmqWorker.ts +48 -0
  70. package/src/infrastructure/scheduler/bullmq/RedisConnectionOptionsFactory.ts +48 -0
  71. package/src/nextServer.ts +12 -3
  72. package/src/persistenceServer.ts +2 -2
  73. package/src/presentation/config/AppConfig.ts +25 -1
  74. package/src/presentation/frontend/CodemationFrontendAuthSnapshot.ts +14 -0
  75. package/src/presentation/frontend/CodemationFrontendAuthSnapshotFactory.ts +84 -0
  76. package/src/presentation/frontend/CodemationFrontendAuthSnapshotJsonCodec.ts +58 -0
  77. package/src/presentation/frontend/FrontendAppConfig.ts +10 -0
  78. package/src/presentation/frontend/FrontendAppConfigFactory.ts +26 -0
  79. package/src/presentation/frontend/FrontendAppConfigJsonCodec.ts +58 -0
  80. package/src/presentation/http/CodemationServerGatewayFactory.ts +22 -16
  81. package/src/presentation/server/AppConfigLoader.ts +39 -0
  82. package/src/presentation/server/CodemationConsumerAppResolver.ts +2 -2
  83. package/src/presentation/server/CodemationConsumerConfigLoader.ts +3 -2
  84. package/src/server.ts +7 -0
  85. package/vitest.shared.ts +0 -4
  86. package/dist/CodemationConsumerConfigLoader-scS_RQMy.js.map +0 -1
  87. package/dist/CodemationFrontendBootstrapRequest-CNEk-C4D.js.map +0 -1
  88. package/dist/CodemationPluginListMerger-BNmaoXQL.js.map +0 -1
  89. package/dist/CodemationPluginListMerger-BRYqEk0y.d.ts +0 -793
  90. package/dist/CredentialServices-BKBGe7l3.js.map +0 -1
  91. package/dist/PrismaMigrationDeployer-B7cHGrXP.js.map +0 -1
  92. package/dist/ServerLoggerFactory-BRHxIDS7.js.map +0 -1
  93. package/dist/persistenceServer-DPSj_-oU.d.ts +0 -37
  94. package/dist/server-Dd65rNm6.js.map +0 -1
  95. package/src/bootstrap/CodemationContainerFactory.ts +0 -310
  96. package/src/bootstrap/CodemationFrontendBootstrapRequest.ts +0 -16
  97. package/src/bootstrap/CodemationWorkerBootstrapRequest.ts +0 -19
  98. package/src/bootstrap/PreparedCodemationRuntimeFactory.ts +0 -308
  99. package/src/bootstrap/boot/CliRuntimeBootService.ts +0 -27
  100. package/src/bootstrap/boot/FrontendRuntimeBootService.ts +0 -86
  101. package/src/bootstrap/boot/WorkerRuntimeBootService.ts +0 -64
  102. package/src/bootstrap/runtime/ResolvedImplementationSelectionFactory.ts +0 -118
  103. package/src/codemationApplication.ts +0 -311
  104. package/src/infrastructure/credentials/FrameworkBuiltinCredentialTypesRegistrar.ts +0 -21
  105. package/src/infrastructure/persistence/DatabasePersistenceResolver.ts +0 -91
  106. package/src/infrastructure/runtime/WorkerRuntimeScheduler.ts +0 -35
  107. package/src/presentation/config/CodemationApplicationFacade.ts +0 -5
  108. /package/dist/{decorate-B-N_5S4p.js → decorate-B0PP651O.js} +0 -0
  109. /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,6 +1,6 @@
1
1
  {
2
2
  "name": "@codemation/host",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -81,6 +81,7 @@
81
81
  "@uiw/react-json-view": "2.0.0-alpha.41",
82
82
  "@xyflow/react": "^12.10.1",
83
83
  "bcryptjs": "^3.0.3",
84
+ "bullmq": "^5.58.3",
84
85
  "dagre": "^0.8.5",
85
86
  "date-fns": "^4.1.0",
86
87
  "hono": "^4.12.8",
@@ -103,10 +104,9 @@
103
104
  "tsx": "^4.21.0",
104
105
  "ws": "^8.19.0",
105
106
  "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"
107
+ "@codemation/core": "0.0.7",
108
+ "@codemation/core-nodes": "0.0.7",
109
+ "@codemation/eventbus-redis": "0.0.7"
110
110
  },
111
111
  "devDependencies": {
112
112
  "@playwright/test": "^1.58.2",
@@ -131,7 +131,7 @@
131
131
  "tsdown": "^0.15.5",
132
132
  "typescript": "^5.9.3",
133
133
  "vitest": "^4.0.18",
134
- "@codemation/core-nodes-gmail": "0.0.5"
134
+ "@codemation/core-nodes-gmail": "0.0.7"
135
135
  },
136
136
  "scripts": {
137
137
  "prisma:generate": "prisma generate && node ./scripts/ensure-prisma-runtime-sourcemaps.mjs",
@@ -0,0 +1,9 @@
1
+ export { CopyRunToWorkflowDebuggerCommandHandler } from "./CopyRunToWorkflowDebuggerCommandHandler";
2
+ export { HandleWebhookInvocationCommandHandler } from "./HandleWebhookInvocationCommandHandler";
3
+ export { ReplaceMutableRunWorkflowSnapshotCommandHandler } from "./ReplaceMutableRunWorkflowSnapshotCommandHandler";
4
+ export { ReplaceWorkflowDebuggerOverlayCommandHandler } from "./ReplaceWorkflowDebuggerOverlayCommandHandler";
5
+ export { ReplayWorkflowNodeCommandHandler } from "./ReplayWorkflowNodeCommandHandler";
6
+ export { SetPinnedNodeInputCommandHandler } from "./SetPinnedNodeInputCommandHandler";
7
+ export { SetWorkflowActivationCommandHandler } from "./SetWorkflowActivationCommandHandler";
8
+ export { StartWorkflowRunCommandHandler } from "./StartWorkflowRunCommandHandler";
9
+ export { UploadOverlayPinnedBinaryCommandHandler } from "./UploadOverlayPinnedBinaryCommandHandler";
@@ -2,8 +2,8 @@ import { injectable } from "@codemation/core";
2
2
  import type { BootRuntimeSummary } from "./BootRuntimeSummary.types";
3
3
 
4
4
  /**
5
- * Holds the latest {@link BootRuntimeSummary} after {@link CodemationApplication} prepare wiring.
6
- * Avoids injecting {@link CodemationApplication} into dev diagnostics (circular ESM graph with assembler).
5
+ * Holds the latest {@link BootRuntimeSummary} after app container creation.
6
+ * Avoids injecting container-building services into dev diagnostics.
7
7
  */
8
8
  @injectable()
9
9
  export class BootRuntimeSnapshotHolder {
@@ -1,9 +1,9 @@
1
- import type { ResolvedDatabasePersistence } from "../../infrastructure/persistence/DatabasePersistenceResolver";
1
+ import type { AppPersistenceConfig } from "../../presentation/config/AppConfig";
2
2
  import type { CodemationEventBusKind, CodemationSchedulerKind } from "../../presentation/config/CodemationConfig";
3
3
 
4
4
  /** Resolved persistence + scheduler wiring captured at host prepare time (dev banner / diagnostics). */
5
5
  export type BootRuntimeSummary = Readonly<{
6
- databasePersistence: ResolvedDatabasePersistence;
6
+ databasePersistence: AppPersistenceConfig;
7
7
  eventBusKind: CodemationEventBusKind;
8
8
  queuePrefix: string;
9
9
  schedulerKind: CodemationSchedulerKind;
@@ -0,0 +1,7 @@
1
+ export { GetRunBinaryAttachmentQueryHandler } from "./GetRunBinaryAttachmentQueryHandler";
2
+ export { GetRunStateQueryHandler } from "./GetRunStateQueryHandler";
3
+ export { GetWorkflowDebuggerOverlayQueryHandler } from "./GetWorkflowDebuggerOverlayQueryHandler";
4
+ export { GetWorkflowDetailQueryHandler } from "./GetWorkflowDetailQueryHandler";
5
+ export { GetWorkflowOverlayBinaryAttachmentQueryHandler } from "./GetWorkflowOverlayBinaryAttachmentQueryHandler";
6
+ export { GetWorkflowSummariesQueryHandler } from "./GetWorkflowSummariesQueryHandler";
7
+ export { ListWorkflowRunsQueryHandler } from "./ListWorkflowRunsQueryHandler";
@@ -16,7 +16,7 @@ import type { WorkflowRunRepository } from "./domain/runs/WorkflowRunRepository"
16
16
  import type { WorkflowDebuggerOverlayRepository } from "./domain/workflows/WorkflowDebuggerOverlayRepository";
17
17
  import type { WorkflowDefinitionRepository } from "./domain/workflows/WorkflowDefinitionRepository";
18
18
  import type { WorkflowActivationRepository } from "./domain/workflows/WorkflowActivationRepository";
19
- import type { WorkerRuntimeScheduler } from "./infrastructure/runtime/WorkerRuntimeScheduler";
19
+ import type { WorkerRuntimeScheduler } from "./infrastructure/scheduler/WorkerRuntimeScheduler";
20
20
  import type { PrismaClient } from "./infrastructure/persistence/generated/prisma-client/client.js";
21
21
  import type { AppConfig } from "./presentation/config/AppConfig";
22
22
  import type { CodemationAuthConfig } from "./presentation/config/CodemationAuthConfig";