@codemation/host 0.0.14 → 0.0.16
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.
- package/dist/{AppConfigFactory-DmHOpg8O.d.ts → AppConfigFactory-D_ReOKfV.d.ts} +5 -3
- package/dist/{AppConfigFactory-DWIz2hy-.js → AppConfigFactory-JjNqYnGg.js} +41 -3
- package/dist/AppConfigFactory-JjNqYnGg.js.map +1 -0
- package/dist/{AppContainerFactory-B5eRpvAa.js → AppContainerFactory-_dnF0VOf.js} +272 -105
- package/dist/AppContainerFactory-_dnF0VOf.js.map +1 -0
- package/dist/{CodemationConfig-D2ULNkec.d.ts → CodemationConfig-u80ZoIrc.d.ts} +18 -10
- package/dist/{CodemationConfigNormalizer-CBLxXaRV.d.ts → CodemationConfigNormalizer-DCt0mPPz.d.ts} +2 -2
- package/dist/{CodemationConsumerConfigLoader-BLvzcfb7.d.ts → CodemationConsumerConfigLoader-C8iscLBJ.d.ts} +4 -2
- package/dist/{CodemationConsumerConfigLoader-BBzAr6L_.js → CodemationConsumerConfigLoader-LGrCspIx.js} +18 -4
- package/dist/CodemationConsumerConfigLoader-LGrCspIx.js.map +1 -0
- package/dist/CodemationPluginListMerger-CGwOTdZ7.js +57 -0
- package/dist/CodemationPluginListMerger-CGwOTdZ7.js.map +1 -0
- package/dist/{CodemationPluginListMerger-B0-e4CJ6.d.ts → CodemationPluginListMerger-ZY3R_kTo.d.ts} +79 -117
- package/dist/{CredentialServices-BeuMtqYA.d.ts → CredentialServices-Uo1jxSYB.d.ts} +2 -2
- package/dist/PublicFrontendBootstrap-p7mS8aWG.d.ts +50 -0
- package/dist/{FrontendAppConfigFactory-Bj-DZNlt.d.ts → PublicFrontendBootstrapFactory-BA65IXL4.d.ts} +19 -4
- package/dist/{FrontendAppConfigJsonCodec-nOCQI0ag.js → PublicFrontendBootstrapJsonCodec-BdiVGG5R.js} +76 -2
- package/dist/PublicFrontendBootstrapJsonCodec-BdiVGG5R.js.map +1 -0
- package/dist/PublicFrontendBootstrapJsonCodec-DjkkKXcq.d.ts +35 -0
- package/dist/client.d.ts +3 -3
- package/dist/client.js +2 -2
- package/dist/consumer.d.ts +3 -3
- package/dist/consumer.js +1 -1
- package/dist/credentials.d.ts +2 -2
- package/dist/index.d.ts +44 -12
- package/dist/index.js +8 -8
- package/dist/nextServer.d.ts +30 -9
- package/dist/nextServer.js +4 -4
- package/dist/{persistenceServer-CaehMh3M.d.ts → persistenceServer-BKbOs-TQ.d.ts} +2 -2
- package/dist/{persistenceServer-DVeWUbc3.js → persistenceServer-J2teHIIg.js} +2 -2
- package/dist/{persistenceServer-DVeWUbc3.js.map → persistenceServer-J2teHIIg.js.map} +1 -1
- package/dist/persistenceServer.d.ts +4 -4
- package/dist/persistenceServer.js +2 -2
- package/dist/{server-C65z_kqm.js → server-CVC7QBwT.js} +42 -25
- package/dist/server-CVC7QBwT.js.map +1 -0
- package/dist/{server-Dyo8qh4k.d.ts → server-CbcnGZHm.d.ts} +14 -19
- package/dist/server.d.ts +10 -10
- package/dist/server.js +7 -7
- package/package.json +5 -5
- package/src/application/dev/BootRuntimeSummary.types.ts +2 -0
- package/src/application/dev/DevBootstrapSummaryAssembler.ts +1 -0
- package/src/application/dev/DevBootstrapSummaryJson.types.ts +6 -0
- package/src/bootstrap/AppContainerFactory.ts +101 -6
- package/src/bootstrap/runtime/AppConfigFactory.ts +22 -2
- package/src/client.ts +4 -0
- package/src/index.ts +13 -5
- package/src/infrastructure/config/CodemationPluginRegistrar.ts +6 -0
- package/src/infrastructure/di/HandlesCommandRegistry.ts +1 -10
- package/src/infrastructure/di/HandlesQueryRegistry.ts +1 -10
- package/src/nextServer.ts +4 -0
- package/src/presentation/config/AppConfig.ts +6 -0
- package/src/presentation/config/CodemationPackageManifest.ts +1 -7
- package/src/presentation/config/CodemationPlugin.ts +45 -9
- package/src/presentation/config/CodemationPluginListMerger.ts +30 -26
- package/src/presentation/frontend/InternalAuthBootstrap.ts +12 -0
- package/src/presentation/frontend/InternalAuthBootstrapFactory.ts +26 -0
- package/src/presentation/frontend/InternalAuthBootstrapJsonCodec.ts +49 -0
- package/src/presentation/frontend/PublicFrontendBootstrap.ts +12 -0
- package/src/presentation/frontend/PublicFrontendBootstrapFactory.ts +23 -0
- package/src/presentation/frontend/PublicFrontendBootstrapJsonCodec.ts +48 -0
- package/src/presentation/http/ApiPaths.ts +10 -0
- package/src/presentation/http/hono/HonoHttpAnonymousRoutePolicyRegistry.ts +3 -0
- package/src/presentation/http/hono/registrars/BootstrapHonoApiRouteRegistrar.ts +32 -0
- package/src/presentation/http/routeHandlers/InternalAuthBootstrapHttpRouteHandler.ts +18 -0
- package/src/presentation/http/routeHandlers/PublicFrontendBootstrapHttpRouteHandler.ts +18 -0
- package/src/presentation/server/CodemationConsumerConfigLoader.ts +16 -3
- package/src/presentation/server/CodemationPluginDiscovery.ts +59 -28
- package/src/server.ts +6 -0
- package/dist/AppConfigFactory-DWIz2hy-.js.map +0 -1
- package/dist/AppContainerFactory-B5eRpvAa.js.map +0 -1
- package/dist/CodemationConsumerConfigLoader-BBzAr6L_.js.map +0 -1
- package/dist/CodemationPluginListMerger-DrVOw9KP.js +0 -57
- package/dist/CodemationPluginListMerger-DrVOw9KP.js.map +0 -1
- package/dist/FrontendAppConfig-D50wjj_n.d.ts +0 -27
- package/dist/FrontendAppConfigJsonCodec-1_L7H_Qo.d.ts +0 -20
- package/dist/FrontendAppConfigJsonCodec-nOCQI0ag.js.map +0 -1
- package/dist/server-C65z_kqm.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-CVC7QBwT.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 { CodemationPluginPackageMetadata, 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 pluginEntry: string;\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 private readonly pluginPackageMetadata = new CodemationPluginPackageMetadata();\n\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 || typeof pluginManifest !== \"string\" || pluginManifest.trim().length === 0) {\n continue;\n }\n discoveredPackages.push({\n packageName: packageJson.name,\n packageRoot,\n pluginEntry: pluginManifest,\n developmentEntry: await this.resolveDevelopmentPluginEntry(packageRoot),\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(\n /* webpackIgnore: true */ this.resolvePluginModuleSpecifier(pluginModulePath)\n )) as Record<string, unknown>;\n const exportedValue = importedModule.default;\n const plugin = this.resolvePluginValue(exportedValue);\n if (!plugin) {\n throw new Error(`Plugin package \"${discoveredPackage.packageName}\" did not default-export a Codemation plugin.`);\n }\n return this.pluginPackageMetadata.attachPackageName(plugin, discoveredPackage.packageName);\n }\n\n private resolvePluginValue(value: unknown): CodemationPlugin | null {\n if (this.isPluginConfig(value)) {\n return value;\n }\n return null;\n }\n\n private isPluginConfig(value: unknown): value is CodemationPlugin {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return false;\n }\n const pluginValue = value as {\n credentialTypes?: unknown;\n register?: unknown;\n sandbox?: unknown;\n };\n if (pluginValue.register !== undefined && typeof pluginValue.register !== \"function\") {\n return false;\n }\n if (pluginValue.credentialTypes !== undefined && !Array.isArray(pluginValue.credentialTypes)) {\n return false;\n }\n return (\n pluginValue.register !== undefined ||\n pluginValue.credentialTypes !== undefined ||\n pluginValue.sandbox !== undefined ||\n Object.keys(pluginValue).length === 0\n );\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.pluginEntry;\n }\n\n private async resolveDevelopmentPluginEntry(packageRoot: string): Promise<string | undefined> {\n const candidates = [\n path.resolve(packageRoot, \"codemation.plugin.ts\"),\n path.resolve(packageRoot, \"codemation.plugin.js\"),\n path.resolve(packageRoot, \"src\", \"codemation.plugin.ts\"),\n path.resolve(packageRoot, \"src\", \"codemation.plugin.js\"),\n ];\n for (const candidate of candidates) {\n if (await this.exists(candidate)) {\n return path.relative(packageRoot, candidate);\n }\n }\n return undefined;\n }\n\n private async exists(filePath: string): Promise<boolean> {\n try {\n await readFile(filePath, \"utf8\");\n return true;\n } catch {\n return false;\n }\n }\n\n private resolvePluginModuleSpecifier(pluginModulePath: string): string {\n return pathToFileURL(pluginModulePath).href;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,18 +1,8 @@
|
|
|
1
|
-
import { a as CodemationConfig, g as AppConfig,
|
|
2
|
-
import { t as CodemationConsumerConfigLoader } from "./CodemationConsumerConfigLoader-
|
|
3
|
-
import { t as AppConfigFactory } from "./AppConfigFactory-
|
|
4
|
-
import {
|
|
1
|
+
import { a as CodemationConfig, g as AppConfig, y as CodemationPlugin } from "./CodemationConfig-u80ZoIrc.js";
|
|
2
|
+
import { t as CodemationConsumerConfigLoader } from "./CodemationConsumerConfigLoader-C8iscLBJ.js";
|
|
3
|
+
import { t as AppConfigFactory } from "./AppConfigFactory-D_ReOKfV.js";
|
|
4
|
+
import { a as WorkflowDto, o as WorkflowSummary } from "./PublicFrontendBootstrapFactory-BA65IXL4.js";
|
|
5
5
|
|
|
6
|
-
//#region src/presentation/config/CodemationPackageManifest.d.ts
|
|
7
|
-
interface CodemationPluginPackageManifest {
|
|
8
|
-
readonly kind: "plugin";
|
|
9
|
-
readonly entry: string;
|
|
10
|
-
readonly exportName?: string;
|
|
11
|
-
}
|
|
12
|
-
interface CodemationPackageManifest {
|
|
13
|
-
readonly plugin?: CodemationPluginPackageManifest;
|
|
14
|
-
}
|
|
15
|
-
//#endregion
|
|
16
6
|
//#region src/presentation/http/ApiPaths.d.ts
|
|
17
7
|
declare class ApiPaths {
|
|
18
8
|
private static readonly apiBasePath;
|
|
@@ -23,6 +13,7 @@ declare class ApiPaths {
|
|
|
23
13
|
private static readonly webhooksBasePath;
|
|
24
14
|
private static readonly usersBasePath;
|
|
25
15
|
private static readonly whitelabelBasePath;
|
|
16
|
+
private static readonly bootstrapBasePath;
|
|
26
17
|
static workflows(): string;
|
|
27
18
|
static workflow(workflowId: string): string;
|
|
28
19
|
static workflowActivation(workflowId: string): string;
|
|
@@ -62,6 +53,8 @@ declare class ApiPaths {
|
|
|
62
53
|
static runBinaryContent(runId: string, binaryId: string): string;
|
|
63
54
|
/** Anonymous: consumer logo from `codemation.config.ts` whitelabel.logoPath. */
|
|
64
55
|
static whitelabelLogo(): string;
|
|
56
|
+
static frontendBootstrap(): string;
|
|
57
|
+
static internalAuthBootstrap(): string;
|
|
65
58
|
}
|
|
66
59
|
//#endregion
|
|
67
60
|
//#region src/presentation/http/CodemationServerGatewayFactory.d.ts
|
|
@@ -105,13 +98,14 @@ declare class AppConfigLoader {
|
|
|
105
98
|
type CodemationDiscoveredPluginPackage = Readonly<{
|
|
106
99
|
packageName: string;
|
|
107
100
|
packageRoot: string;
|
|
108
|
-
|
|
101
|
+
pluginEntry: string;
|
|
109
102
|
developmentEntry?: string;
|
|
110
103
|
}>;
|
|
111
104
|
type CodemationResolvedPluginPackage = Readonly<CodemationDiscoveredPluginPackage & {
|
|
112
105
|
plugin: CodemationPlugin;
|
|
113
106
|
}>;
|
|
114
107
|
declare class CodemationPluginDiscovery {
|
|
108
|
+
private readonly pluginPackageMetadata;
|
|
115
109
|
discover(consumerRoot: string): Promise<ReadonlyArray<CodemationDiscoveredPluginPackage>>;
|
|
116
110
|
resolvePlugins(consumerRoot: string): Promise<ReadonlyArray<CodemationResolvedPluginPackage>>;
|
|
117
111
|
resolveDiscoveredPackages(discoveredPackages: ReadonlyArray<CodemationDiscoveredPluginPackage>): Promise<ReadonlyArray<CodemationResolvedPluginPackage>>;
|
|
@@ -119,10 +113,11 @@ declare class CodemationPluginDiscovery {
|
|
|
119
113
|
private readPackageJson;
|
|
120
114
|
private loadPlugin;
|
|
121
115
|
private resolvePluginValue;
|
|
122
|
-
private
|
|
123
|
-
private isPluginConstructor;
|
|
116
|
+
private isPluginConfig;
|
|
124
117
|
private resolvePluginEntry;
|
|
125
118
|
private resolveDevelopmentPluginEntry;
|
|
119
|
+
private exists;
|
|
120
|
+
private resolvePluginModuleSpecifier;
|
|
126
121
|
}
|
|
127
122
|
//#endregion
|
|
128
123
|
//#region src/presentation/server/WorkflowModulePathFinder.d.ts
|
|
@@ -147,5 +142,5 @@ declare class WorkflowDiscoveryPathSegmentsComputer {
|
|
|
147
142
|
}>): readonly string[] | undefined;
|
|
148
143
|
}
|
|
149
144
|
//#endregion
|
|
150
|
-
export { CodemationResolvedPluginPackage as a, CodemationServerGateway as c,
|
|
151
|
-
//# sourceMappingURL=server-
|
|
145
|
+
export { CodemationResolvedPluginPackage as a, CodemationServerGateway as c, CodemationPluginDiscovery as i, ApiPaths as l, WorkflowModulePathFinder as n, AppConfigLoadResult as o, CodemationDiscoveredPluginPackage as r, AppConfigLoader as s, WorkflowDiscoveryPathSegmentsComputer as t };
|
|
146
|
+
//# sourceMappingURL=server-CbcnGZHm.d.ts.map
|
package/dist/server.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import "./CodemationAuthConfig-Bh2cCNCI.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { n as InternalAuthBootstrap, r as FrontendAppConfig, t as PublicFrontendBootstrap } from "./PublicFrontendBootstrap-p7mS8aWG.js";
|
|
3
|
+
import { i as CodemationFrontendAuthSnapshotJsonCodec, n as InternalAuthBootstrapJsonCodec, r as FrontendAppConfigJsonCodec, t as PublicFrontendBootstrapJsonCodec } from "./PublicFrontendBootstrapJsonCodec-DjkkKXcq.js";
|
|
4
4
|
import "./index-CkiptHb-.js";
|
|
5
|
-
import "./CodemationConfig-
|
|
6
|
-
import "./CodemationConfigNormalizer-
|
|
7
|
-
import { i as CodemationConsumerAppResolver, n as CodemationConsumerConfigResolution, r as CodemationConsumerApp, t as CodemationConsumerConfigLoader } from "./CodemationConsumerConfigLoader-
|
|
8
|
-
import { r as PrismaClient } from "./AppConfigFactory-
|
|
9
|
-
import {
|
|
10
|
-
import { t as
|
|
11
|
-
import {
|
|
12
|
-
export { ApiPaths, AppConfigLoadResult, AppConfigLoader, CodemationConsumerApp, CodemationConsumerAppResolver, CodemationConsumerConfigLoader, CodemationConsumerConfigResolution, CodemationDiscoveredPluginPackage, CodemationFrontendAuthSnapshotFactory, CodemationFrontendAuthSnapshotJsonCodec, CodemationPluginDiscovery, CodemationPostgresPrismaClientFactory, CodemationResolvedPluginPackage, CodemationServerGateway, FrontendAppConfig, FrontendAppConfigFactory, FrontendAppConfigJsonCodec, PrismaClient, WorkflowDiscoveryPathSegmentsComputer, WorkflowModulePathFinder };
|
|
5
|
+
import "./CodemationConfig-u80ZoIrc.js";
|
|
6
|
+
import "./CodemationConfigNormalizer-DCt0mPPz.js";
|
|
7
|
+
import { i as CodemationConsumerAppResolver, n as CodemationConsumerConfigResolution, r as CodemationConsumerApp, t as CodemationConsumerConfigLoader } from "./CodemationConsumerConfigLoader-C8iscLBJ.js";
|
|
8
|
+
import { r as PrismaClient } from "./AppConfigFactory-D_ReOKfV.js";
|
|
9
|
+
import { t as CodemationPostgresPrismaClientFactory } from "./persistenceServer-BKbOs-TQ.js";
|
|
10
|
+
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-CbcnGZHm.js";
|
|
11
|
+
import { i as CodemationFrontendAuthSnapshotFactory, n as InternalAuthBootstrapFactory, r as FrontendAppConfigFactory, t as PublicFrontendBootstrapFactory } from "./PublicFrontendBootstrapFactory-BA65IXL4.js";
|
|
12
|
+
export { ApiPaths, AppConfigLoadResult, AppConfigLoader, CodemationConsumerApp, CodemationConsumerAppResolver, CodemationConsumerConfigLoader, CodemationConsumerConfigResolution, CodemationDiscoveredPluginPackage, CodemationFrontendAuthSnapshotFactory, CodemationFrontendAuthSnapshotJsonCodec, CodemationPluginDiscovery, CodemationPostgresPrismaClientFactory, CodemationResolvedPluginPackage, CodemationServerGateway, FrontendAppConfig, FrontendAppConfigFactory, FrontendAppConfigJsonCodec, InternalAuthBootstrap, InternalAuthBootstrapFactory, InternalAuthBootstrapJsonCodec, PrismaClient, PublicFrontendBootstrap, PublicFrontendBootstrapFactory, PublicFrontendBootstrapJsonCodec, WorkflowDiscoveryPathSegmentsComputer, WorkflowModulePathFinder };
|
package/dist/server.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import "./ConsoleLogger-ClPU7jtc.js";
|
|
2
|
-
import {
|
|
3
|
-
import { i as CodemationConsumerAppResolver, n as WorkflowDiscoveryPathSegmentsComputer, r as WorkflowModulePathFinder, t as CodemationConsumerConfigLoader } from "./CodemationConsumerConfigLoader-
|
|
2
|
+
import { i as CodemationFrontendAuthSnapshotJsonCodec, n as InternalAuthBootstrapJsonCodec, r as FrontendAppConfigJsonCodec, t as PublicFrontendBootstrapJsonCodec } from "./PublicFrontendBootstrapJsonCodec-BdiVGG5R.js";
|
|
3
|
+
import { i as CodemationConsumerAppResolver, n as WorkflowDiscoveryPathSegmentsComputer, r as WorkflowModulePathFinder, t as CodemationConsumerConfigLoader } from "./CodemationConsumerConfigLoader-LGrCspIx.js";
|
|
4
4
|
import "./ServerLoggerFactory-BltIIDfQ.js";
|
|
5
5
|
import "./decorateParam-DrsXNPuw.js";
|
|
6
6
|
import "./decorate-B0PP651O.js";
|
|
7
7
|
import "./CredentialServices-DNb3CZwW.js";
|
|
8
|
-
import { _ as
|
|
9
|
-
import "./AppConfigFactory-
|
|
10
|
-
import { n as CodemationPostgresPrismaClientFactory, t as import_client } from "./persistenceServer-
|
|
11
|
-
import { n as AppConfigLoader, r as CodemationServerGateway, t as CodemationPluginDiscovery } from "./server-
|
|
8
|
+
import { _ as CodemationFrontendAuthSnapshotFactory, g as FrontendAppConfigFactory, h as InternalAuthBootstrapFactory, m as PublicFrontendBootstrapFactory, y as ApiPaths } from "./AppContainerFactory-_dnF0VOf.js";
|
|
9
|
+
import "./AppConfigFactory-JjNqYnGg.js";
|
|
10
|
+
import { n as CodemationPostgresPrismaClientFactory, t as import_client } from "./persistenceServer-J2teHIIg.js";
|
|
11
|
+
import { n as AppConfigLoader, r as CodemationServerGateway, t as CodemationPluginDiscovery } from "./server-CVC7QBwT.js";
|
|
12
12
|
|
|
13
13
|
var PrismaClient = import_client.PrismaClient;
|
|
14
|
-
export { ApiPaths, AppConfigLoader, CodemationConsumerAppResolver, CodemationConsumerConfigLoader, CodemationFrontendAuthSnapshotFactory, CodemationFrontendAuthSnapshotJsonCodec, CodemationPluginDiscovery, CodemationPostgresPrismaClientFactory, CodemationServerGateway, FrontendAppConfigFactory, FrontendAppConfigJsonCodec, PrismaClient, WorkflowDiscoveryPathSegmentsComputer, WorkflowModulePathFinder };
|
|
14
|
+
export { ApiPaths, AppConfigLoader, CodemationConsumerAppResolver, CodemationConsumerConfigLoader, CodemationFrontendAuthSnapshotFactory, CodemationFrontendAuthSnapshotJsonCodec, CodemationPluginDiscovery, CodemationPostgresPrismaClientFactory, CodemationServerGateway, FrontendAppConfigFactory, FrontendAppConfigJsonCodec, InternalAuthBootstrapFactory, InternalAuthBootstrapJsonCodec, PrismaClient, PublicFrontendBootstrapFactory, PublicFrontendBootstrapJsonCodec, WorkflowDiscoveryPathSegmentsComputer, WorkflowModulePathFinder };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codemation/host",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.16",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -109,9 +109,9 @@
|
|
|
109
109
|
"tsx": "^4.21.0",
|
|
110
110
|
"ws": "^8.19.0",
|
|
111
111
|
"zxcvbn": "^4.4.2",
|
|
112
|
-
"@codemation/core": "0.0.
|
|
113
|
-
"@codemation/
|
|
114
|
-
"@codemation/
|
|
112
|
+
"@codemation/core": "0.0.16",
|
|
113
|
+
"@codemation/eventbus-redis": "0.0.16",
|
|
114
|
+
"@codemation/core-nodes": "0.0.16"
|
|
115
115
|
},
|
|
116
116
|
"devDependencies": {
|
|
117
117
|
"@playwright/test": "^1.58.2",
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
"tsdown": "^0.15.5",
|
|
137
137
|
"typescript": "^5.9.3",
|
|
138
138
|
"vitest": "^4.0.18",
|
|
139
|
-
"@codemation/core-nodes-gmail": "0.0.
|
|
139
|
+
"@codemation/core-nodes-gmail": "0.0.16"
|
|
140
140
|
},
|
|
141
141
|
"scripts": {
|
|
142
142
|
"prisma:generate": "prisma generate && node ./scripts/ensure-prisma-runtime-sourcemaps.mjs",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AppPersistenceConfig } from "../../presentation/config/AppConfig";
|
|
2
|
+
import type { AppPluginLoadSummary } from "../../presentation/config/AppConfig";
|
|
2
3
|
import type { CodemationEventBusKind, CodemationSchedulerKind } from "../../presentation/config/CodemationConfig";
|
|
3
4
|
|
|
4
5
|
/** Resolved persistence + scheduler wiring captured at host prepare time (dev banner / diagnostics). */
|
|
@@ -8,4 +9,5 @@ export type BootRuntimeSummary = Readonly<{
|
|
|
8
9
|
queuePrefix: string;
|
|
9
10
|
schedulerKind: CodemationSchedulerKind;
|
|
10
11
|
redisUrl?: string;
|
|
12
|
+
plugins: ReadonlyArray<AppPluginLoadSummary>;
|
|
11
13
|
}>;
|
|
@@ -35,6 +35,7 @@ export class DevBootstrapSummaryAssembler {
|
|
|
35
35
|
eventBusLabel: this.formatEventBus(summary),
|
|
36
36
|
redisUrlRedacted: this.formatRedis(summary),
|
|
37
37
|
activeWorkflows: active,
|
|
38
|
+
plugins: [...summary.plugins].sort((left, right) => left.packageName.localeCompare(right.packageName)),
|
|
38
39
|
};
|
|
39
40
|
}
|
|
40
41
|
|
|
@@ -6,4 +6,10 @@ export type DevBootstrapSummaryJson = Readonly<{
|
|
|
6
6
|
eventBusLabel: string;
|
|
7
7
|
redisUrlRedacted?: string;
|
|
8
8
|
activeWorkflows: ReadonlyArray<Readonly<{ id: string; name: string }>>;
|
|
9
|
+
plugins: ReadonlyArray<
|
|
10
|
+
Readonly<{
|
|
11
|
+
packageName: string;
|
|
12
|
+
source: "configured" | "discovered";
|
|
13
|
+
}>
|
|
14
|
+
>;
|
|
9
15
|
}>;
|
|
@@ -22,12 +22,52 @@ import {
|
|
|
22
22
|
WorkflowRepositoryWebhookTriggerMatcher,
|
|
23
23
|
} from "@codemation/core/bootstrap";
|
|
24
24
|
import { AIAgentConnectionWorkflowExpander, ConnectionCredentialNodeConfigFactory } from "@codemation/core-nodes";
|
|
25
|
-
import
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
import {
|
|
26
|
+
CreateCredentialInstanceCommandHandler,
|
|
27
|
+
DeleteCredentialInstanceCommandHandler,
|
|
28
|
+
TestCredentialInstanceCommandHandler,
|
|
29
|
+
UpdateCredentialInstanceCommandHandler,
|
|
30
|
+
UpsertCredentialBindingCommandHandler,
|
|
31
|
+
} from "../application/commands/CredentialCommandHandlers";
|
|
32
|
+
import {
|
|
33
|
+
AcceptUserInviteCommandHandler,
|
|
34
|
+
InviteUserCommandHandler,
|
|
35
|
+
RegenerateUserInviteCommandHandler,
|
|
36
|
+
UpdateUserAccountStatusCommandHandler,
|
|
37
|
+
UpsertLocalBootstrapUserCommandHandler,
|
|
38
|
+
} from "../application/commands/UserAccountCommandHandlers";
|
|
39
|
+
import {
|
|
40
|
+
CopyRunToWorkflowDebuggerCommandHandler,
|
|
41
|
+
HandleWebhookInvocationCommandHandler,
|
|
42
|
+
ReplaceMutableRunWorkflowSnapshotCommandHandler,
|
|
43
|
+
ReplaceWorkflowDebuggerOverlayCommandHandler,
|
|
44
|
+
ReplayWorkflowNodeCommandHandler,
|
|
45
|
+
SetPinnedNodeInputCommandHandler,
|
|
46
|
+
SetWorkflowActivationCommandHandler,
|
|
47
|
+
StartWorkflowRunCommandHandler,
|
|
48
|
+
UploadOverlayPinnedBinaryCommandHandler,
|
|
49
|
+
} from "../application/commands/WorkflowCommandHandlers";
|
|
50
|
+
import {
|
|
51
|
+
GetCredentialFieldEnvStatusQueryHandler,
|
|
52
|
+
GetCredentialInstanceQueryHandler,
|
|
53
|
+
GetCredentialInstanceWithSecretsQueryHandler,
|
|
54
|
+
GetWorkflowCredentialHealthQueryHandler,
|
|
55
|
+
ListCredentialInstancesQueryHandler,
|
|
56
|
+
ListCredentialTypesQueryHandler,
|
|
57
|
+
} from "../application/queries/CredentialQueryHandlers";
|
|
58
|
+
import {
|
|
59
|
+
ListUserAccountsQueryHandler,
|
|
60
|
+
VerifyUserInviteQueryHandler,
|
|
61
|
+
} from "../application/queries/UserAccountQueryHandlers";
|
|
62
|
+
import {
|
|
63
|
+
GetRunBinaryAttachmentQueryHandler,
|
|
64
|
+
GetRunStateQueryHandler,
|
|
65
|
+
GetWorkflowDebuggerOverlayQueryHandler,
|
|
66
|
+
GetWorkflowDetailQueryHandler,
|
|
67
|
+
GetWorkflowOverlayBinaryAttachmentQueryHandler,
|
|
68
|
+
GetWorkflowSummariesQueryHandler,
|
|
69
|
+
ListWorkflowRunsQueryHandler,
|
|
70
|
+
} from "../application/queries/WorkflowQueryHandlers";
|
|
31
71
|
import { OpenAiApiKeyCredentialHealthTester } from "../infrastructure/credentials/OpenAiApiKeyCredentialHealthTester";
|
|
32
72
|
import { OpenAiApiKeyCredentialTypeFactory } from "../infrastructure/credentials/OpenAiApiKeyCredentialTypeFactory";
|
|
33
73
|
import { CodemationPluginRegistrar } from "../infrastructure/config/CodemationPluginRegistrar";
|
|
@@ -61,10 +101,15 @@ import { WorkflowPolicyUiPresentationFactory } from "../application/mapping/Work
|
|
|
61
101
|
import { WorkflowWebsocketServer } from "../presentation/websocket/WorkflowWebsocketServer";
|
|
62
102
|
import { CodemationFrontendAuthSnapshotFactory } from "../presentation/frontend/CodemationFrontendAuthSnapshotFactory";
|
|
63
103
|
import { FrontendAppConfigFactory } from "../presentation/frontend/FrontendAppConfigFactory";
|
|
104
|
+
import { InternalAuthBootstrapFactory } from "../presentation/frontend/InternalAuthBootstrapFactory";
|
|
105
|
+
import { PublicFrontendBootstrapFactory } from "../presentation/frontend/PublicFrontendBootstrapFactory";
|
|
64
106
|
import { DevBootstrapSummaryHttpRouteHandler } from "../presentation/http/routeHandlers/DevBootstrapSummaryHttpRouteHandler";
|
|
107
|
+
import { InternalAuthBootstrapHttpRouteHandler } from "../presentation/http/routeHandlers/InternalAuthBootstrapHttpRouteHandler";
|
|
108
|
+
import { PublicFrontendBootstrapHttpRouteHandler } from "../presentation/http/routeHandlers/PublicFrontendBootstrapHttpRouteHandler";
|
|
65
109
|
import { WhitelabelLogoHttpRouteHandler } from "../presentation/http/routeHandlers/WhitelabelLogoHttpRouteHandler";
|
|
66
110
|
import { CodemationHonoApiApp } from "../presentation/http/hono/CodemationHonoApiAppFactory";
|
|
67
111
|
import { BinaryHonoApiRouteRegistrar } from "../presentation/http/hono/registrars/BinaryHonoApiRouteRegistrar";
|
|
112
|
+
import { BootstrapHonoApiRouteRegistrar } from "../presentation/http/hono/registrars/BootstrapHonoApiRouteRegistrar";
|
|
68
113
|
import { CredentialHonoApiRouteRegistrar } from "../presentation/http/hono/registrars/CredentialHonoApiRouteRegistrar";
|
|
69
114
|
import { DevHonoApiRouteRegistrar } from "../presentation/http/hono/registrars/DevHonoApiRouteRegistrar";
|
|
70
115
|
import { OAuth2HonoApiRouteRegistrar } from "../presentation/http/hono/registrars/OAuth2HonoApiRouteRegistrar";
|
|
@@ -124,8 +169,47 @@ type PrismaOwnership = Readonly<{
|
|
|
124
169
|
}>;
|
|
125
170
|
|
|
126
171
|
export class AppContainerFactory {
|
|
172
|
+
private static readonly queryHandlers = [
|
|
173
|
+
GetCredentialFieldEnvStatusQueryHandler,
|
|
174
|
+
GetCredentialInstanceQueryHandler,
|
|
175
|
+
GetCredentialInstanceWithSecretsQueryHandler,
|
|
176
|
+
GetWorkflowCredentialHealthQueryHandler,
|
|
177
|
+
ListCredentialInstancesQueryHandler,
|
|
178
|
+
ListCredentialTypesQueryHandler,
|
|
179
|
+
ListUserAccountsQueryHandler,
|
|
180
|
+
VerifyUserInviteQueryHandler,
|
|
181
|
+
GetRunBinaryAttachmentQueryHandler,
|
|
182
|
+
GetRunStateQueryHandler,
|
|
183
|
+
GetWorkflowDebuggerOverlayQueryHandler,
|
|
184
|
+
GetWorkflowDetailQueryHandler,
|
|
185
|
+
GetWorkflowOverlayBinaryAttachmentQueryHandler,
|
|
186
|
+
GetWorkflowSummariesQueryHandler,
|
|
187
|
+
ListWorkflowRunsQueryHandler,
|
|
188
|
+
] as const;
|
|
189
|
+
private static readonly commandHandlers = [
|
|
190
|
+
CreateCredentialInstanceCommandHandler,
|
|
191
|
+
DeleteCredentialInstanceCommandHandler,
|
|
192
|
+
TestCredentialInstanceCommandHandler,
|
|
193
|
+
UpdateCredentialInstanceCommandHandler,
|
|
194
|
+
UpsertCredentialBindingCommandHandler,
|
|
195
|
+
AcceptUserInviteCommandHandler,
|
|
196
|
+
InviteUserCommandHandler,
|
|
197
|
+
RegenerateUserInviteCommandHandler,
|
|
198
|
+
UpdateUserAccountStatusCommandHandler,
|
|
199
|
+
UpsertLocalBootstrapUserCommandHandler,
|
|
200
|
+
CopyRunToWorkflowDebuggerCommandHandler,
|
|
201
|
+
HandleWebhookInvocationCommandHandler,
|
|
202
|
+
ReplaceMutableRunWorkflowSnapshotCommandHandler,
|
|
203
|
+
ReplaceWorkflowDebuggerOverlayCommandHandler,
|
|
204
|
+
ReplayWorkflowNodeCommandHandler,
|
|
205
|
+
SetPinnedNodeInputCommandHandler,
|
|
206
|
+
SetWorkflowActivationCommandHandler,
|
|
207
|
+
StartWorkflowRunCommandHandler,
|
|
208
|
+
UploadOverlayPinnedBinaryCommandHandler,
|
|
209
|
+
] as const;
|
|
127
210
|
private static readonly honoRouteRegistrars = [
|
|
128
211
|
BinaryHonoApiRouteRegistrar,
|
|
212
|
+
BootstrapHonoApiRouteRegistrar,
|
|
129
213
|
CredentialHonoApiRouteRegistrar,
|
|
130
214
|
DevHonoApiRouteRegistrar,
|
|
131
215
|
OAuth2HonoApiRouteRegistrar,
|
|
@@ -327,6 +411,8 @@ export class AppContainerFactory {
|
|
|
327
411
|
container.register(OAuth2ConnectService, { useClass: OAuth2ConnectService });
|
|
328
412
|
container.register(CodemationFrontendAuthSnapshotFactory, { useClass: CodemationFrontendAuthSnapshotFactory });
|
|
329
413
|
container.register(FrontendAppConfigFactory, { useClass: FrontendAppConfigFactory });
|
|
414
|
+
container.register(PublicFrontendBootstrapFactory, { useClass: PublicFrontendBootstrapFactory });
|
|
415
|
+
container.register(InternalAuthBootstrapFactory, { useClass: InternalAuthBootstrapFactory });
|
|
330
416
|
container.register(DatabaseMigrations, { useClass: DatabaseMigrations });
|
|
331
417
|
container.register(FrontendRuntime, { useClass: FrontendRuntime });
|
|
332
418
|
container.register(WorkerRuntime, { useClass: WorkerRuntime });
|
|
@@ -397,6 +483,12 @@ export class AppContainerFactory {
|
|
|
397
483
|
container.register(InMemoryQueryBus, { useClass: InMemoryQueryBus });
|
|
398
484
|
container.register(InMemoryCommandBus, { useClass: InMemoryCommandBus });
|
|
399
485
|
container.register(InMemoryDomainEventBus, { useClass: InMemoryDomainEventBus });
|
|
486
|
+
for (const handler of AppContainerFactory.queryHandlers) {
|
|
487
|
+
container.register(ApplicationTokens.QueryHandler, { useClass: handler });
|
|
488
|
+
}
|
|
489
|
+
for (const handler of AppContainerFactory.commandHandlers) {
|
|
490
|
+
container.register(ApplicationTokens.CommandHandler, { useClass: handler });
|
|
491
|
+
}
|
|
400
492
|
container.register(ApplicationTokens.QueryBus, {
|
|
401
493
|
useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(InMemoryQueryBus)),
|
|
402
494
|
});
|
|
@@ -411,6 +503,8 @@ export class AppContainerFactory {
|
|
|
411
503
|
private registerApplicationServicesAndRoutes(container: Container): void {
|
|
412
504
|
container.register(DevBootstrapSummaryAssembler, { useClass: DevBootstrapSummaryAssembler });
|
|
413
505
|
container.register(DevBootstrapSummaryHttpRouteHandler, { useClass: DevBootstrapSummaryHttpRouteHandler });
|
|
506
|
+
container.register(PublicFrontendBootstrapHttpRouteHandler, { useClass: PublicFrontendBootstrapHttpRouteHandler });
|
|
507
|
+
container.register(InternalAuthBootstrapHttpRouteHandler, { useClass: InternalAuthBootstrapHttpRouteHandler });
|
|
414
508
|
container.register(WhitelabelLogoHttpRouteHandler, { useClass: WhitelabelLogoHttpRouteHandler });
|
|
415
509
|
for (const registrar of AppContainerFactory.honoRouteRegistrars) {
|
|
416
510
|
container.register(ApplicationTokens.HonoApiRouteRegistrar, { useClass: registrar });
|
|
@@ -561,6 +655,7 @@ export class AppContainerFactory {
|
|
|
561
655
|
return {
|
|
562
656
|
databasePersistence: appConfig.persistence,
|
|
563
657
|
eventBusKind: appConfig.eventing.kind,
|
|
658
|
+
plugins: appConfig.pluginLoadSummary ?? [],
|
|
564
659
|
queuePrefix: appConfig.scheduler.queuePrefix ?? appConfig.eventing.queuePrefix ?? "codemation",
|
|
565
660
|
schedulerKind: appConfig.scheduler.kind,
|
|
566
661
|
redisUrl: appConfig.scheduler.redisUrl ?? appConfig.eventing.redisUrl,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CoreTokens } from "@codemation/core";
|
|
2
|
-
import type { AppConfig } from "../../presentation/config/AppConfig";
|
|
2
|
+
import type { AppConfig, AppPluginLoadSummary } from "../../presentation/config/AppConfig";
|
|
3
|
+
import { CodemationPluginPackageMetadata } from "../../presentation/config/CodemationPlugin";
|
|
3
4
|
import type { NormalizedCodemationConfig } from "../../presentation/config/CodemationConfigNormalizer";
|
|
4
5
|
import type {
|
|
5
6
|
CodemationApplicationRuntimeConfig,
|
|
@@ -10,6 +11,8 @@ import type {
|
|
|
10
11
|
import path from "node:path";
|
|
11
12
|
|
|
12
13
|
export class AppConfigFactory {
|
|
14
|
+
private readonly pluginPackageMetadata = new CodemationPluginPackageMetadata();
|
|
15
|
+
|
|
13
16
|
create(
|
|
14
17
|
args: Readonly<{
|
|
15
18
|
repoRoot: string;
|
|
@@ -30,6 +33,7 @@ export class AppConfigFactory {
|
|
|
30
33
|
const hasConfiguredCredentialSessionServiceRegistration = args.config.containerRegistrations.some(
|
|
31
34
|
(entry) => entry.token === CoreTokens.CredentialSessionService,
|
|
32
35
|
);
|
|
36
|
+
const plugins = [...(args.config.plugins ?? [])];
|
|
33
37
|
|
|
34
38
|
return {
|
|
35
39
|
consumerRoot: args.consumerRoot,
|
|
@@ -39,7 +43,8 @@ export class AppConfigFactory {
|
|
|
39
43
|
workflows: [...(args.config.workflows ?? [])],
|
|
40
44
|
containerRegistrations: [...args.config.containerRegistrations],
|
|
41
45
|
credentialTypes: [...(args.config.credentialTypes ?? [])],
|
|
42
|
-
plugins
|
|
46
|
+
plugins,
|
|
47
|
+
pluginLoadSummary: this.createConfiguredPluginLoadSummary(plugins),
|
|
43
48
|
hasConfiguredCredentialSessionServiceRegistration,
|
|
44
49
|
log: args.config.log,
|
|
45
50
|
engineExecutionLimits: runtimeConfig.engineExecutionLimits,
|
|
@@ -65,6 +70,21 @@ export class AppConfigFactory {
|
|
|
65
70
|
};
|
|
66
71
|
}
|
|
67
72
|
|
|
73
|
+
private createConfiguredPluginLoadSummary(plugins: AppConfig["plugins"]): AppConfig["pluginLoadSummary"] {
|
|
74
|
+
const summaries: AppPluginLoadSummary[] = [];
|
|
75
|
+
for (const plugin of plugins) {
|
|
76
|
+
const packageName = this.pluginPackageMetadata.readPackageName(plugin);
|
|
77
|
+
if (!packageName) {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
summaries.push({
|
|
81
|
+
packageName,
|
|
82
|
+
source: "configured",
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return summaries;
|
|
86
|
+
}
|
|
87
|
+
|
|
68
88
|
private resolvePersistence(
|
|
69
89
|
runtimeConfig: CodemationApplicationRuntimeConfig,
|
|
70
90
|
env: NodeJS.ProcessEnv,
|
package/src/client.ts
CHANGED
|
@@ -6,5 +6,9 @@ export type {
|
|
|
6
6
|
CodemationFrontendAuthProviderSnapshot,
|
|
7
7
|
CodemationFrontendAuthSnapshot,
|
|
8
8
|
} from "./presentation/frontend/CodemationFrontendAuthSnapshot";
|
|
9
|
+
export type { InternalAuthBootstrap } from "./presentation/frontend/InternalAuthBootstrap";
|
|
10
|
+
export type { PublicFrontendBootstrap } from "./presentation/frontend/PublicFrontendBootstrap";
|
|
9
11
|
export { CodemationFrontendAuthSnapshotJsonCodec } from "./presentation/frontend/CodemationFrontendAuthSnapshotJsonCodec";
|
|
10
12
|
export { FrontendAppConfigJsonCodec } from "./presentation/frontend/FrontendAppConfigJsonCodec";
|
|
13
|
+
export { InternalAuthBootstrapJsonCodec } from "./presentation/frontend/InternalAuthBootstrapJsonCodec";
|
|
14
|
+
export { PublicFrontendBootstrapJsonCodec } from "./presentation/frontend/PublicFrontendBootstrapJsonCodec";
|
package/src/index.ts
CHANGED
|
@@ -12,7 +12,7 @@ export { AppConfigFactory } from "./bootstrap/runtime/AppConfigFactory";
|
|
|
12
12
|
export { ApplicationTokens } from "./applicationTokens";
|
|
13
13
|
export { CodemationBootstrapRequest } from "./bootstrap/CodemationBootstrapRequest";
|
|
14
14
|
export type { CodemationWhitelabelConfig } from "./presentation/config/CodemationWhitelabelConfig";
|
|
15
|
-
export type { AppConfig } from "./presentation/config/AppConfig";
|
|
15
|
+
export type { AppConfig, AppPluginLoadSummary } from "./presentation/config/AppConfig";
|
|
16
16
|
export type {
|
|
17
17
|
CodemationAuthConfig,
|
|
18
18
|
CodemationAuthKind,
|
|
@@ -48,19 +48,27 @@ export type {
|
|
|
48
48
|
CodemationLogLevelName,
|
|
49
49
|
CodemationLogRule,
|
|
50
50
|
} from "./presentation/config/CodemationLogConfig";
|
|
51
|
+
export type { CodemationPackageManifest } from "./presentation/config/CodemationPackageManifest";
|
|
51
52
|
export type {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
CodemationPlugin,
|
|
54
|
+
CodemationPluginConfig,
|
|
55
|
+
CodemationPluginContext,
|
|
56
|
+
} from "./presentation/config/CodemationPlugin";
|
|
57
|
+
export { CodemationPluginPackageMetadata, definePlugin } from "./presentation/config/CodemationPlugin";
|
|
56
58
|
export { CodemationPluginListMerger } from "./presentation/config/CodemationPluginListMerger";
|
|
57
59
|
export type { CodemationWorkflowDiscovery } from "./presentation/config/CodemationWorkflowDiscovery";
|
|
60
|
+
export type { InternalAuthBootstrap } from "./presentation/frontend/InternalAuthBootstrap";
|
|
61
|
+
export type { PublicFrontendBootstrap } from "./presentation/frontend/PublicFrontendBootstrap";
|
|
58
62
|
export {
|
|
59
63
|
ApiPaths,
|
|
60
64
|
CodemationFrontendAuthSnapshotFactory,
|
|
61
65
|
CodemationFrontendAuthSnapshotJsonCodec,
|
|
62
66
|
FrontendAppConfigFactory,
|
|
63
67
|
FrontendAppConfigJsonCodec,
|
|
68
|
+
InternalAuthBootstrapFactory,
|
|
69
|
+
InternalAuthBootstrapJsonCodec,
|
|
70
|
+
PublicFrontendBootstrapFactory,
|
|
71
|
+
PublicFrontendBootstrapJsonCodec,
|
|
64
72
|
CodemationConsumerConfigLoader,
|
|
65
73
|
CodemationPostgresPrismaClientFactory,
|
|
66
74
|
CodemationServerGateway,
|
|
@@ -15,6 +15,12 @@ export class CodemationPluginRegistrar {
|
|
|
15
15
|
}>,
|
|
16
16
|
): Promise<void> {
|
|
17
17
|
for (const plugin of args.plugins) {
|
|
18
|
+
for (const credentialType of plugin.credentialTypes ?? []) {
|
|
19
|
+
args.registerCredentialType(credentialType);
|
|
20
|
+
}
|
|
21
|
+
if (!plugin.register) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
18
24
|
await plugin.register({
|
|
19
25
|
container: args.container,
|
|
20
26
|
appConfig: args.appConfig,
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import { injectable
|
|
1
|
+
import { injectable } from "@codemation/core";
|
|
2
2
|
import type { Command } from "../../application/bus/Command";
|
|
3
|
-
import type { CommandHandler } from "../../application/bus/CommandHandler";
|
|
4
|
-
import { ApplicationTokens } from "../../applicationTokens";
|
|
5
3
|
|
|
6
4
|
type AbstractType<TInstance> = abstract new (...args: any[]) => TInstance;
|
|
7
|
-
type ConcreteType<TInstance> = new (...args: any[]) => TInstance;
|
|
8
5
|
|
|
9
6
|
export const commandHandlerMetadataKey = Symbol.for("codemation.infrastructure.di.CommandHandler");
|
|
10
7
|
|
|
@@ -13,12 +10,6 @@ export class HandlesCommand {
|
|
|
13
10
|
return (target) => {
|
|
14
11
|
Reflect.defineMetadata(commandHandlerMetadataKey, commandType, target);
|
|
15
12
|
injectable()(target as never);
|
|
16
|
-
registry([
|
|
17
|
-
{
|
|
18
|
-
token: ApplicationTokens.CommandHandler,
|
|
19
|
-
useClass: target as unknown as ConcreteType<CommandHandler<Command<unknown>, unknown>>,
|
|
20
|
-
},
|
|
21
|
-
])(target as never);
|
|
22
13
|
};
|
|
23
14
|
}
|
|
24
15
|
}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import { injectable
|
|
1
|
+
import { injectable } from "@codemation/core";
|
|
2
2
|
import type { Query } from "../../application/bus/Query";
|
|
3
|
-
import type { QueryHandler } from "../../application/bus/QueryHandler";
|
|
4
|
-
import { ApplicationTokens } from "../../applicationTokens";
|
|
5
3
|
|
|
6
4
|
type AbstractType<TInstance> = abstract new (...args: any[]) => TInstance;
|
|
7
|
-
type ConcreteType<TInstance> = new (...args: any[]) => TInstance;
|
|
8
5
|
|
|
9
6
|
export const queryHandlerMetadataKey = Symbol.for("codemation.infrastructure.di.QueryHandler");
|
|
10
7
|
|
|
@@ -13,12 +10,6 @@ export class HandlesQuery {
|
|
|
13
10
|
return (target) => {
|
|
14
11
|
Reflect.defineMetadata(queryHandlerMetadataKey, queryType, target);
|
|
15
12
|
injectable()(target as never);
|
|
16
|
-
registry([
|
|
17
|
-
{
|
|
18
|
-
token: ApplicationTokens.QueryHandler,
|
|
19
|
-
useClass: target as unknown as ConcreteType<QueryHandler<Query<unknown>, unknown>>,
|
|
20
|
-
},
|
|
21
|
-
])(target as never);
|
|
22
13
|
};
|
|
23
14
|
}
|
|
24
15
|
}
|
package/src/nextServer.ts
CHANGED
|
@@ -27,7 +27,11 @@ export type {
|
|
|
27
27
|
CodemationFrontendAuthSnapshot,
|
|
28
28
|
} from "./presentation/frontend/CodemationFrontendAuthSnapshot";
|
|
29
29
|
export type { FrontendAppConfig } from "./presentation/frontend/FrontendAppConfig";
|
|
30
|
+
export type { InternalAuthBootstrap } from "./presentation/frontend/InternalAuthBootstrap";
|
|
31
|
+
export type { PublicFrontendBootstrap } from "./presentation/frontend/PublicFrontendBootstrap";
|
|
30
32
|
export { FrontendAppConfigFactory } from "./presentation/frontend/FrontendAppConfigFactory";
|
|
33
|
+
export { InternalAuthBootstrapFactory } from "./presentation/frontend/InternalAuthBootstrapFactory";
|
|
34
|
+
export { PublicFrontendBootstrapFactory } from "./presentation/frontend/PublicFrontendBootstrapFactory";
|
|
31
35
|
export { CredentialBindingService, CredentialInstanceService } from "./domain/credentials/CredentialServices";
|
|
32
36
|
export { RequestToWebhookItemMapper } from "./infrastructure/webhooks/RequestToWebhookItemMapper";
|
|
33
37
|
export { CodemationHonoApiApp } from "./presentation/http/hono/CodemationHonoApiAppFactory";
|
|
@@ -16,6 +16,11 @@ export type AppPersistenceConfig =
|
|
|
16
16
|
| Readonly<{ kind: "postgresql"; databaseUrl: string }>
|
|
17
17
|
| Readonly<{ kind: "pglite"; dataDir: string }>;
|
|
18
18
|
|
|
19
|
+
export type AppPluginLoadSummary = Readonly<{
|
|
20
|
+
packageName: string;
|
|
21
|
+
source: "configured" | "discovered";
|
|
22
|
+
}>;
|
|
23
|
+
|
|
19
24
|
export interface AppConfig {
|
|
20
25
|
readonly consumerRoot: string;
|
|
21
26
|
readonly repoRoot: string;
|
|
@@ -25,6 +30,7 @@ export interface AppConfig {
|
|
|
25
30
|
readonly containerRegistrations: ReadonlyArray<CodemationContainerRegistration<unknown>>;
|
|
26
31
|
readonly credentialTypes: ReadonlyArray<AnyCredentialType>;
|
|
27
32
|
readonly plugins: ReadonlyArray<CodemationPlugin>;
|
|
33
|
+
readonly pluginLoadSummary?: ReadonlyArray<AppPluginLoadSummary>;
|
|
28
34
|
readonly hasConfiguredCredentialSessionServiceRegistration: boolean;
|
|
29
35
|
readonly log?: CodemationLogConfig;
|
|
30
36
|
readonly engineExecutionLimits?: CodemationEngineExecutionLimitsConfig;
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
export interface CodemationPluginPackageManifest {
|
|
2
|
-
readonly kind: "plugin";
|
|
3
|
-
readonly entry: string;
|
|
4
|
-
readonly exportName?: string;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
1
|
export interface CodemationPackageManifest {
|
|
8
|
-
readonly plugin?:
|
|
2
|
+
readonly plugin?: string;
|
|
9
3
|
}
|