@codemation/host 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/dist/{AppContainerFactory-D9je1sSV.js → AppContainerFactory-DL_qZ80U.js} +84 -132
- package/dist/AppContainerFactory-DL_qZ80U.js.map +1 -0
- package/dist/index.js +2 -2
- package/dist/nextServer.js +1 -1
- package/dist/{server-C_ZIEOTY.js → server-DteBORJX.js} +2 -2
- package/dist/{server-C_ZIEOTY.js.map → server-DteBORJX.js.map} +1 -1
- package/dist/server.js +2 -2
- package/package.json +5 -5
- package/src/bootstrap/AppContainerFactory.ts +77 -81
- package/src/bootstrap/CodemationContainerRegistrationRegistrar.ts +1 -3
- package/src/infrastructure/config/CodemationPluginRegistrar.ts +2 -6
- package/src/infrastructure/di/HandlesDomainEventRegistry.ts +5 -7
- package/src/presentation/http/hono/registrars/AuthHonoApiRouteRegistrar.ts +1 -3
- package/src/presentation/http/hono/registrars/BinaryHonoApiRouteRegistrar.ts +1 -3
- package/src/presentation/http/hono/registrars/BootstrapHonoApiRouteRegistrar.ts +1 -3
- package/src/presentation/http/hono/registrars/CredentialHonoApiRouteRegistrar.ts +1 -3
- package/src/presentation/http/hono/registrars/DevHonoApiRouteRegistrar.ts +1 -3
- package/src/presentation/http/hono/registrars/OAuth2HonoApiRouteRegistrar.ts +1 -3
- package/src/presentation/http/hono/registrars/RunHonoApiRouteRegistrar.ts +1 -3
- package/src/presentation/http/hono/registrars/TelemetryHonoApiRouteRegistrar.ts +1 -3
- package/src/presentation/http/hono/registrars/UserHonoApiRouteRegistrar.ts +1 -3
- package/src/presentation/http/hono/registrars/WebhookHonoApiRouteRegistrar.ts +1 -3
- package/src/presentation/http/hono/registrars/WhitelabelHonoApiRouteRegistrar.ts +1 -3
- package/src/presentation/http/hono/registrars/WorkflowHonoApiRouteRegistrar.ts +1 -3
- package/dist/AppContainerFactory-D9je1sSV.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -6,11 +6,11 @@ import "./ServerLoggerFactory-CsNW5qhz.js";
|
|
|
6
6
|
import "./decorateParam-D7WPDFAf.js";
|
|
7
7
|
import "./decorate-Dq0XLibd.js";
|
|
8
8
|
import { d as ApplicationTokens } from "./CredentialServices-BNBMFOPt.js";
|
|
9
|
-
import { D as ListUserAccountsQuery, E as UpsertLocalBootstrapUserCommand, _ as FrontendAppConfigFactory, a as AppContainerLifecycle, b as ApiPaths, g as InternalAuthBootstrapFactory, h as PublicFrontendBootstrapFactory, i as DatabaseMigrations, n as WorkerRuntime, r as FrontendRuntime, t as AppContainerFactory, v as CodemationFrontendAuthSnapshotFactory } from "./AppContainerFactory-
|
|
9
|
+
import { D as ListUserAccountsQuery, E as UpsertLocalBootstrapUserCommand, _ as FrontendAppConfigFactory, a as AppContainerLifecycle, b as ApiPaths, g as InternalAuthBootstrapFactory, h as PublicFrontendBootstrapFactory, i as DatabaseMigrations, n as WorkerRuntime, r as FrontendRuntime, t as AppContainerFactory, v as CodemationFrontendAuthSnapshotFactory } from "./AppContainerFactory-DL_qZ80U.js";
|
|
10
10
|
import { n as CodemationPluginPackageMetadata, t as AppConfigFactory } from "./AppConfigFactory-BPp02HMv.js";
|
|
11
11
|
import { n as CodemationBootstrapRequest, t as CodemationPluginListMerger } from "./CodemationPluginListMerger-_lZaa6gO.js";
|
|
12
12
|
import { t as CodemationPostgresPrismaClientFactory } from "./persistenceServer-CA0_q0D7.js";
|
|
13
|
-
import { r as CodemationServerGateway } from "./server-
|
|
13
|
+
import { r as CodemationServerGateway } from "./server-DteBORJX.js";
|
|
14
14
|
import { workflow } from "@codemation/core-nodes";
|
|
15
15
|
|
|
16
16
|
export { ApiPaths, AppConfigFactory, AppContainerFactory, AppContainerLifecycle, ApplicationTokens, CodemationBootstrapRequest, CodemationConsumerConfigLoader, CodemationFrontendAuthSnapshotFactory, CodemationFrontendAuthSnapshotJsonCodec, CodemationPluginListMerger, CodemationPluginPackageMetadata, CodemationPostgresPrismaClientFactory, CodemationServerGateway, DatabaseMigrations, FrontendAppConfigFactory, FrontendAppConfigJsonCodec, FrontendRuntime, InternalAuthBootstrapFactory, InternalAuthBootstrapJsonCodec, ListUserAccountsQuery, PublicFrontendBootstrapFactory, PublicFrontendBootstrapJsonCodec, UpsertLocalBootstrapUserCommand, WorkerRuntime, defineCodemationApp, definePlugin, workflow };
|
package/dist/nextServer.js
CHANGED
|
@@ -3,7 +3,7 @@ import { a as FilteringLogger, i as PerformanceLogPolicy, n as PerformanceLogPol
|
|
|
3
3
|
import "./decorateParam-D7WPDFAf.js";
|
|
4
4
|
import "./decorate-Dq0XLibd.js";
|
|
5
5
|
import { a as CredentialInstanceService, d as ApplicationTokens, i as CredentialBindingService } from "./CredentialServices-BNBMFOPt.js";
|
|
6
|
-
import { S as WorkflowPolicyUiPresentationFactory, T as RunBinaryAttachmentLookupService, _ as FrontendAppConfigFactory, a as AppContainerLifecycle, c as WebhookHttpRouteHandler, d as OAuth2HttpRouteHandler, f as CredentialHttpRouteHandler, g as InternalAuthBootstrapFactory, h as PublicFrontendBootstrapFactory, i as DatabaseMigrations, l as RequestToWebhookItemMapper, m as BinaryHttpRouteHandler, n as WorkerRuntime, o as WorkflowRunRetentionPruneScheduler, p as CodemationHonoApiApp, r as FrontendRuntime, s as WorkflowHttpRouteHandler, t as AppContainerFactory, u as RunHttpRouteHandler, x as WorkflowDefinitionMapper, y as WorkflowWebsocketServer } from "./AppContainerFactory-
|
|
6
|
+
import { S as WorkflowPolicyUiPresentationFactory, T as RunBinaryAttachmentLookupService, _ as FrontendAppConfigFactory, a as AppContainerLifecycle, c as WebhookHttpRouteHandler, d as OAuth2HttpRouteHandler, f as CredentialHttpRouteHandler, g as InternalAuthBootstrapFactory, h as PublicFrontendBootstrapFactory, i as DatabaseMigrations, l as RequestToWebhookItemMapper, m as BinaryHttpRouteHandler, n as WorkerRuntime, o as WorkflowRunRetentionPruneScheduler, p as CodemationHonoApiApp, r as FrontendRuntime, s as WorkflowHttpRouteHandler, t as AppContainerFactory, u as RunHttpRouteHandler, x as WorkflowDefinitionMapper, y as WorkflowWebsocketServer } from "./AppContainerFactory-DL_qZ80U.js";
|
|
7
7
|
import { t as AppConfigFactory } from "./AppConfigFactory-BPp02HMv.js";
|
|
8
8
|
import { n as CodemationBootstrapRequest, t as CodemationPluginListMerger } from "./CodemationPluginListMerger-_lZaa6gO.js";
|
|
9
9
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as CodemationConfigNormalizer, t as CodemationConsumerConfigLoader } from "./CodemationConsumerConfigLoader-DovlxZNb.js";
|
|
2
2
|
import { d as ApplicationTokens } from "./CredentialServices-BNBMFOPt.js";
|
|
3
|
-
import { C as GetWorkflowSummariesQuery, a as AppContainerLifecycle, p as CodemationHonoApiApp, r as FrontendRuntime, t as AppContainerFactory, w as GetWorkflowDetailQuery, x as WorkflowDefinitionMapper } from "./AppContainerFactory-
|
|
3
|
+
import { C as GetWorkflowSummariesQuery, a as AppContainerLifecycle, p as CodemationHonoApiApp, r as FrontendRuntime, t as AppContainerFactory, w as GetWorkflowDetailQuery, x as WorkflowDefinitionMapper } from "./AppContainerFactory-DL_qZ80U.js";
|
|
4
4
|
import { n as CodemationPluginPackageMetadata, t as AppConfigFactory } from "./AppConfigFactory-BPp02HMv.js";
|
|
5
5
|
import { readFile, readdir } from "node:fs/promises";
|
|
6
6
|
import path from "node:path";
|
|
@@ -218,4 +218,4 @@ var CodemationPluginDiscovery = class {
|
|
|
218
218
|
|
|
219
219
|
//#endregion
|
|
220
220
|
export { AppConfigLoader as n, CodemationServerGateway as r, CodemationPluginDiscovery as t };
|
|
221
|
-
//# sourceMappingURL=server-
|
|
221
|
+
//# sourceMappingURL=server-DteBORJX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-C_ZIEOTY.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 const preferSource =\n process.env.CODEMATION_PREFER_PLUGIN_SOURCE_ENTRY === \"true\" &&\n typeof discoveredPackage.developmentEntry === \"string\" &&\n discoveredPackage.developmentEntry.trim().length > 0;\n const selectedEntry = preferSource ? discoveredPackage.developmentEntry : discoveredPackage.pluginEntry;\n return selectedEntry;\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":";;;;;;;;;;AAuBA,IAAa,0BAAb,MAAa,wBAAwB;CACnC,OAAwB,mCAAmB,IAAI,SAAgD;CAE/F,YACE,AAAiBA,QACjB,AAAiBC,cACjB,AAAiBC,cACjB,AAAiBC,kBAAyC,EAAE,EAC5D,AAAiBC,KACjB;EALiB;EACA;EACA;EACA;EACA;;CAGnB,MAAM,SAAS,SAAqC;AAClD,SAAO,OAAO,MAAM,KAAK,YAAY,EAAE,QAAQ,MAAM,QAAQ;;CAG/D,MAAM,UAAyB;AAC7B,QAAM,KAAK,YAAY;;CAGzB,MAAM,QAAuB;EAC3B,MAAM,gBAAgB,wBAAwB,iBAAiB,IAAI,KAAK,OAAiB;AACzF,MAAI,CAAC,cACH;AAEF,0BAAwB,iBAAiB,OAAO,KAAK,OAAiB;AACtE,SAAO,MAAM,eAAe,UAAU,QAAQ,sBAAsB,CAAC,MAAM;;CAG7E,MAAM,wBAAiE;EACrE,MAAM,UAAU,MAAM,KAAK,YAAY;AAEvC,UADkB,MAAM,QAAQ,SAAS,QAAQ,IAAI,2BAA2B,CAAC,EAChE,KAAK,aAAa,QAAQ,yBAAyB,UAAU,SAAS,CAAC;;CAG1F,MAAM,mBAAmB,YAA0C;EACjE,MAAM,UAAU,MAAM,KAAK,YAAY;EACvC,MAAM,WAAW,MAAM,QAAQ,SAAS,QAAQ,IAAI,uBAAuB,WAAW,CAAC;AACvF,MAAI,CAAC,SACH,OAAM,IAAI,MAAM,uBAAuB,aAAa;AAEtD,SAAO,MAAM,QAAQ,yBAAyB,IAAI,SAAS;;CAG7D,AAAQ,aAA4C;EAClD,MAAM,gBAAgB,wBAAwB,iBAAiB,IAAI,KAAK,OAAiB;AACzF,MAAI,cACF,QAAO;EAET,MAAM,cAAc,KAAK,eAAe;AACxC,0BAAwB,iBAAiB,IAAI,KAAK,QAAkB,YAAY;AAChF,SAAO;;CAGT,MAAc,gBAA+C;EAC3D,MAAM,WAAW,KAAK,oBAAoB,KAAK,aAAa;EAG5D,MAAM,MAAM,KAAK,OAAO,QAAQ;EAChC,MAAM,YAAY,IAAI,kBAAkB,CAAC,OAAO;GAC9C;GACA,cAAc,KAAK;GACnB;GACA,QAAQ,IAAI,4BAA4B,CAAC,UAAU,KAAK,OAAO;GAC/D,iBAAiB,KAAK,wBAAwB;GAC/C,CAAC;EACF,MAAM,YAAY,MAAM,IAAI,qBAAqB,CAAC,OAAO;GACvD;GACA,+BAA+B;GAChC,CAAC;AACF,QAAM,UAAU,QAAQ,gBAAgB,CAAC,OAAO;AAChD,SAAO;GACL;GACA,SAAS,UAAU,QAAQ,qBAAqB;GAChD,UAAU,UAAU,QAAQ,kBAAkB,SAAS;GACvD,0BAA0B,UAAU,QAAQ,yBAAyB;GACtE;;CAGH,AAAQ,yBAAgD;AACtD,MAAI,KAAK,gBAAgB,SAAS,EAChC,QAAO,CAAC,GAAG,KAAK,gBAAgB;AAElC,MAAI,CAAC,KAAK,gBAAgB,CAAC,KAAK,OAAO,aAAa,KAAK,OAAO,UAAU,WAAW,EACnF,QAAO,EAAE;AAEX,SAAO,CAAC,KAAK,aAAa;;CAE5B,AAAQ,oBAAoB,gBAAgC;EAC1D,IAAI,mBAAmB,KAAK,QAAQ,eAAe;AACnD,SAAO,KACL,KAAI;AACF,cAAW,KAAK,QAAQ,kBAAkB,sBAAsB,CAAC;AACjE,UAAO;UACD;GACN,MAAM,kBAAkB,KAAK,QAAQ,iBAAiB;AACtD,OAAI,oBAAoB,iBACtB,QAAO;AAET,sBAAmB;;;;;;;AChH3B,IAAa,kBAAb,MAA6B;CAC3B,YACE,AAAiBC,uBAAuD,IAAI,gCAAgC,EAC5G,AAAiBC,mBAAqC,IAAI,kBAAkB,EAC5E;EAFiB;EACA;;CAGnB,MAAM,KACJ,MAM8B;EAC9B,MAAM,aAAa,MAAM,KAAK,qBAAqB,KAAK;GACtD,cAAc,KAAK;GACnB,oBAAoB,KAAK;GAC1B,CAAC;AACF,SAAO;GACL,WAAW,KAAK,iBAAiB,OAAO;IACtC,UAAU,KAAK;IACf,cAAc,KAAK;IACnB,KAAK,KAAK;IACV,QAAQ,WAAW;IACnB,iBAAiB,WAAW;IAC7B,CAAC;GACF,iBAAiB,WAAW;GAC7B;;;;;;ACXL,IAAa,4BAAb,MAAuC;CACrC,AAAiB,wBAAwB,IAAI,iCAAiC;CAE9E,MAAM,SAAS,cAAiF;EAC9F,MAAM,kBAAkB,KAAK,QAAQ,cAAc,eAAe;EAClE,MAAM,eAAe,MAAM,KAAK,oBAAoB,gBAAgB;EACpE,MAAMC,qBAA0D,EAAE;AAClE,OAAK,MAAM,eAAe,cAAc;GACtC,MAAM,cAAc,MAAM,KAAK,gBAAgB,KAAK,QAAQ,aAAa,eAAe,CAAC;GACzF,MAAM,iBAAiB,YAAY,YAAY;AAC/C,OAAI,CAAC,YAAY,QAAQ,OAAO,mBAAmB,YAAY,eAAe,MAAM,CAAC,WAAW,EAC9F;AAEF,sBAAmB,KAAK;IACtB,aAAa,YAAY;IACzB;IACA,aAAa;IACb,kBAAkB,MAAM,KAAK,8BAA8B,YAAY;IACxE,CAAC;;AAEJ,SAAO,mBAAmB,MAAM,MAAM,UAAU,KAAK,YAAY,cAAc,MAAM,YAAY,CAAC;;CAGpG,MAAM,eAAe,cAA+E;EAClG,MAAM,qBAAqB,MAAM,KAAK,SAAS,aAAa;AAC5D,SAAO,MAAM,KAAK,0BAA0B,mBAAmB;;CAGjE,MAAM,0BACJ,oBACyD;EACzD,MAAMC,mBAAsD,EAAE;AAC9D,OAAK,MAAM,qBAAqB,mBAC9B,kBAAiB,KAAK;GACpB,GAAG;GACH,QAAQ,MAAM,KAAK,WAAW,kBAAkB;GACjD,CAAC;AAEJ,SAAO;;CAGT,MAAc,oBAAoB,iBAAyD;AACzF,MAAI;GACF,MAAM,UAAU,MAAM,QAAQ,iBAAiB,EAAE,eAAe,MAAM,CAAC;GACvE,MAAMC,eAAyB,EAAE;AACjC,QAAK,MAAM,SAAS,SAAS;AAC3B,QAAI,CAAC,MAAM,aAAa,IAAI,CAAC,MAAM,gBAAgB,CACjD;AAEF,QAAI,MAAM,KAAK,WAAW,IAAI,EAAE;KAC9B,MAAM,gBAAgB,MAAM,QAAQ,KAAK,QAAQ,iBAAiB,MAAM,KAAK,EAAE,EAAE,eAAe,MAAM,CAAC;AACvG,UAAK,MAAM,eAAe,cACxB,KAAI,YAAY,aAAa,IAAI,YAAY,gBAAgB,CAC3D,cAAa,KAAK,KAAK,QAAQ,iBAAiB,MAAM,MAAM,YAAY,KAAK,CAAC;AAGlF;;AAEF,iBAAa,KAAK,KAAK,QAAQ,iBAAiB,MAAM,KAAK,CAAC;;AAE9D,UAAO;UACD;AACN,UAAO,EAAE;;;CAIb,MAAc,gBAAgB,iBAAoD;AAChF,MAAI;GACF,MAAM,iBAAiB,MAAM,SAAS,iBAAiB,OAAO;AAC9D,UAAO,KAAK,MAAM,eAAe;UAC3B;AACN,UAAO,EAAE;;;CAIb,MAAc,WAAW,mBAAiF;EACxG,MAAM,mBAAmB,KAAK,QAAQ,kBAAkB,aAAa,KAAK,mBAAmB,kBAAkB,CAAC;EAIhH,MAAM,iBAHkB,MAAM;;GACF,KAAK,6BAA6B,iBAAiB;GAE1C;EACrC,MAAM,SAAS,KAAK,mBAAmB,cAAc;AACrD,MAAI,CAAC,OACH,OAAM,IAAI,MAAM,mBAAmB,kBAAkB,YAAY,+CAA+C;AAElH,SAAO,KAAK,sBAAsB,kBAAkB,QAAQ,kBAAkB,YAAY;;CAG5F,AAAQ,mBAAmB,OAAyC;AAClE,MAAI,KAAK,eAAe,MAAM,CAC5B,QAAO;AAET,SAAO;;CAGT,AAAQ,eAAe,OAA2C;AAChE,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,MAAM,CAC7D,QAAO;EAET,MAAM,cAAc;AAKpB,MAAI,YAAY,aAAa,UAAa,OAAO,YAAY,aAAa,WACxE,QAAO;AAET,MAAI,YAAY,oBAAoB,UAAa,CAAC,MAAM,QAAQ,YAAY,gBAAgB,CAC1F,QAAO;AAET,SACE,YAAY,aAAa,UACzB,YAAY,oBAAoB,UAChC,YAAY,YAAY,UACxB,OAAO,KAAK,YAAY,CAAC,WAAW;;CAIxC,AAAQ,mBAAmB,mBAA8D;AAMvF,SAJE,QAAQ,IAAI,0CAA0C,UACtD,OAAO,kBAAkB,qBAAqB,YAC9C,kBAAkB,iBAAiB,MAAM,CAAC,SAAS,IAChB,kBAAkB,mBAAmB,kBAAkB;;CAI9F,MAAc,8BAA8B,aAAkD;EAC5F,MAAM,aAAa;GACjB,KAAK,QAAQ,aAAa,uBAAuB;GACjD,KAAK,QAAQ,aAAa,uBAAuB;GACjD,KAAK,QAAQ,aAAa,OAAO,uBAAuB;GACxD,KAAK,QAAQ,aAAa,OAAO,uBAAuB;GACzD;AACD,OAAK,MAAM,aAAa,WACtB,KAAI,MAAM,KAAK,OAAO,UAAU,CAC9B,QAAO,KAAK,SAAS,aAAa,UAAU;;CAMlD,MAAc,OAAO,UAAoC;AACvD,MAAI;AACF,SAAM,SAAS,UAAU,OAAO;AAChC,UAAO;UACD;AACN,UAAO;;;CAIX,AAAQ,6BAA6B,kBAAkC;AACrE,SAAO,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"server-DteBORJX.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 const preferSource =\n process.env.CODEMATION_PREFER_PLUGIN_SOURCE_ENTRY === \"true\" &&\n typeof discoveredPackage.developmentEntry === \"string\" &&\n discoveredPackage.developmentEntry.trim().length > 0;\n const selectedEntry = preferSource ? discoveredPackage.developmentEntry : discoveredPackage.pluginEntry;\n return selectedEntry;\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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"}
|
package/dist/server.js
CHANGED
|
@@ -5,9 +5,9 @@ import "./ServerLoggerFactory-CsNW5qhz.js";
|
|
|
5
5
|
import "./decorateParam-D7WPDFAf.js";
|
|
6
6
|
import "./decorate-Dq0XLibd.js";
|
|
7
7
|
import "./CredentialServices-BNBMFOPt.js";
|
|
8
|
-
import { _ as FrontendAppConfigFactory, b as ApiPaths, g as InternalAuthBootstrapFactory, h as PublicFrontendBootstrapFactory, v as CodemationFrontendAuthSnapshotFactory } from "./AppContainerFactory-
|
|
8
|
+
import { _ as FrontendAppConfigFactory, b as ApiPaths, g as InternalAuthBootstrapFactory, h as PublicFrontendBootstrapFactory, v as CodemationFrontendAuthSnapshotFactory } from "./AppContainerFactory-DL_qZ80U.js";
|
|
9
9
|
import "./AppConfigFactory-BPp02HMv.js";
|
|
10
10
|
import { t as CodemationPostgresPrismaClientFactory } from "./persistenceServer-CA0_q0D7.js";
|
|
11
|
-
import { n as AppConfigLoader, r as CodemationServerGateway, t as CodemationPluginDiscovery } from "./server-
|
|
11
|
+
import { n as AppConfigLoader, r as CodemationServerGateway, t as CodemationPluginDiscovery } from "./server-DteBORJX.js";
|
|
12
12
|
|
|
13
13
|
export { ApiPaths, AppConfigLoader, CodemationConsumerAppResolver, CodemationConsumerConfigLoader, CodemationFrontendAuthSnapshotFactory, CodemationFrontendAuthSnapshotJsonCodec, CodemationPluginDiscovery, CodemationPostgresPrismaClientFactory, CodemationServerGateway, FrontendAppConfigFactory, FrontendAppConfigJsonCodec, InternalAuthBootstrapFactory, InternalAuthBootstrapJsonCodec, PublicFrontendBootstrapFactory, PublicFrontendBootstrapJsonCodec, WorkflowDiscoveryPathSegmentsComputer, WorkflowModulePathFinder };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codemation/host",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -119,9 +119,9 @@
|
|
|
119
119
|
"tsx": "^4.21.0",
|
|
120
120
|
"ws": "^8.19.0",
|
|
121
121
|
"zxcvbn": "^4.4.2",
|
|
122
|
-
"@codemation/core": "0.8.
|
|
123
|
-
"@codemation/core-nodes": "0.4.
|
|
124
|
-
"@codemation/eventbus-redis": "0.0.
|
|
122
|
+
"@codemation/core": "0.8.1",
|
|
123
|
+
"@codemation/core-nodes": "0.4.3",
|
|
124
|
+
"@codemation/eventbus-redis": "0.0.31"
|
|
125
125
|
},
|
|
126
126
|
"devDependencies": {
|
|
127
127
|
"@playwright/test": "^1.58.2",
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
"typescript": "^5.9.3",
|
|
148
148
|
"vitest": "^4.0.18",
|
|
149
149
|
"zod": "^4.3.6",
|
|
150
|
-
"@codemation/core-nodes-gmail": "0.1.
|
|
150
|
+
"@codemation/core-nodes-gmail": "0.1.5"
|
|
151
151
|
},
|
|
152
152
|
"scripts": {
|
|
153
153
|
"changeset:verify": "pnpm --workspace-root run changeset:verify",
|
|
@@ -365,7 +365,7 @@ export class AppContainerFactory {
|
|
|
365
365
|
dependencyContainer.resolve(CredentialTypeRegistryImpl),
|
|
366
366
|
),
|
|
367
367
|
});
|
|
368
|
-
container.
|
|
368
|
+
container.registerSingleton(CodemationIdFactory, CodemationIdFactory);
|
|
369
369
|
container.register(CoreTokens.RunIdFactory, {
|
|
370
370
|
useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(CodemationIdFactory)),
|
|
371
371
|
});
|
|
@@ -420,7 +420,7 @@ export class AppContainerFactory {
|
|
|
420
420
|
},
|
|
421
421
|
});
|
|
422
422
|
container.registerInstance(LogLevelPolicyFactory, logLevelPolicyFactory);
|
|
423
|
-
container.
|
|
423
|
+
container.registerSingleton(ServerLoggerFactory, ServerLoggerFactory);
|
|
424
424
|
container.register(ApplicationTokens.LoggerFactory, {
|
|
425
425
|
useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(ServerLoggerFactory)),
|
|
426
426
|
});
|
|
@@ -441,43 +441,41 @@ export class AppContainerFactory {
|
|
|
441
441
|
);
|
|
442
442
|
}),
|
|
443
443
|
});
|
|
444
|
-
container.
|
|
445
|
-
container.
|
|
446
|
-
container.
|
|
447
|
-
container.
|
|
448
|
-
container.
|
|
449
|
-
container.
|
|
450
|
-
container.
|
|
451
|
-
container.
|
|
452
|
-
container.
|
|
453
|
-
container.
|
|
454
|
-
container.
|
|
455
|
-
container.
|
|
456
|
-
container.
|
|
457
|
-
container.
|
|
458
|
-
container.
|
|
459
|
-
container.
|
|
444
|
+
container.registerSingleton(PrismaClientFactory, PrismaClientFactory);
|
|
445
|
+
container.registerSingleton(WorkflowPolicyUiPresentationFactory, WorkflowPolicyUiPresentationFactory);
|
|
446
|
+
container.registerSingleton(WorkflowDefinitionMapper, WorkflowDefinitionMapper);
|
|
447
|
+
container.registerSingleton(RequestToWebhookItemMapper, RequestToWebhookItemMapper);
|
|
448
|
+
container.registerSingleton(WebhookEndpointPathValidator, WebhookEndpointPathValidator);
|
|
449
|
+
container.registerSingleton(CredentialSecretCipher, CredentialSecretCipher);
|
|
450
|
+
container.registerSingleton(CredentialMaterialResolver, CredentialMaterialResolver);
|
|
451
|
+
container.registerSingleton(CredentialFieldEnvOverlayService, CredentialFieldEnvOverlayService);
|
|
452
|
+
container.registerSingleton(CredentialRuntimeMaterialService, CredentialRuntimeMaterialService);
|
|
453
|
+
container.registerSingleton(WorkflowCredentialNodeResolver, WorkflowCredentialNodeResolver);
|
|
454
|
+
container.registerSingleton(CredentialInstanceService, CredentialInstanceService);
|
|
455
|
+
container.registerSingleton(CredentialBindingService, CredentialBindingService);
|
|
456
|
+
container.registerSingleton(WorkflowActivationPreflightRules, WorkflowActivationPreflightRules);
|
|
457
|
+
container.registerSingleton(WorkflowActivationPreflight, WorkflowActivationPreflight);
|
|
458
|
+
container.registerSingleton(CredentialTestService, CredentialTestService);
|
|
459
|
+
container.registerSingleton(CredentialSessionServiceImpl, CredentialSessionServiceImpl);
|
|
460
460
|
if (!inputs.appConfig.hasConfiguredCredentialSessionServiceRegistration) {
|
|
461
461
|
container.register(CoreTokens.CredentialSessionService, { useToken: CredentialSessionServiceImpl });
|
|
462
462
|
}
|
|
463
|
-
container.
|
|
464
|
-
container.
|
|
465
|
-
container.
|
|
466
|
-
container.
|
|
467
|
-
container.
|
|
468
|
-
container.
|
|
469
|
-
container.
|
|
470
|
-
container.
|
|
471
|
-
container.
|
|
472
|
-
container.
|
|
473
|
-
container.
|
|
474
|
-
container.
|
|
475
|
-
container.
|
|
476
|
-
container.
|
|
477
|
-
container.
|
|
478
|
-
|
|
479
|
-
});
|
|
480
|
-
container.register(UserAccountSessionPolicy, { useClass: UserAccountSessionPolicy });
|
|
463
|
+
container.registerSingleton(OAuth2ProviderRegistry, OAuth2ProviderRegistry);
|
|
464
|
+
container.registerSingleton(OAuth2ConnectService, OAuth2ConnectService);
|
|
465
|
+
container.registerSingleton(CodemationFrontendAuthSnapshotFactory, CodemationFrontendAuthSnapshotFactory);
|
|
466
|
+
container.registerSingleton(FrontendAppConfigFactory, FrontendAppConfigFactory);
|
|
467
|
+
container.registerSingleton(PublicFrontendBootstrapFactory, PublicFrontendBootstrapFactory);
|
|
468
|
+
container.registerSingleton(InternalAuthBootstrapFactory, InternalAuthBootstrapFactory);
|
|
469
|
+
container.registerSingleton(DatabaseMigrations, DatabaseMigrations);
|
|
470
|
+
container.registerSingleton(FrontendRuntime, FrontendRuntime);
|
|
471
|
+
container.registerSingleton(WorkerRuntime, WorkerRuntime);
|
|
472
|
+
container.registerSingleton(DevelopmentSessionBypassVerifier, DevelopmentSessionBypassVerifier);
|
|
473
|
+
container.registerSingleton(SecureRequestDetector, SecureRequestDetector);
|
|
474
|
+
container.registerSingleton(InAppCallbackUrlPolicy, InAppCallbackUrlPolicy);
|
|
475
|
+
container.registerSingleton(AuthSessionCookieFactory, AuthSessionCookieFactory);
|
|
476
|
+
container.registerSingleton(CodemationBetterAuthBcryptPasswordCodec, CodemationBetterAuthBcryptPasswordCodec);
|
|
477
|
+
container.registerSingleton(CodemationBetterAuthDatabaseOptionsFactory, CodemationBetterAuthDatabaseOptionsFactory);
|
|
478
|
+
container.registerSingleton(UserAccountSessionPolicy, UserAccountSessionPolicy);
|
|
481
479
|
container.register(CodemationBetterAuthBaseUrlPolicy, {
|
|
482
480
|
useFactory: instanceCachingFactory(
|
|
483
481
|
(dependencyContainer) =>
|
|
@@ -524,7 +522,7 @@ export class AppContainerFactory {
|
|
|
524
522
|
return new BetterAuthApiSessionVerifier(runtime, eligibility);
|
|
525
523
|
}),
|
|
526
524
|
});
|
|
527
|
-
container.
|
|
525
|
+
container.registerSingleton(CodemationSessionVerifier, CodemationSessionVerifier);
|
|
528
526
|
container.register(ApplicationTokens.SessionVerifier, {
|
|
529
527
|
useFactory: instanceCachingFactory((dependencyContainer) => {
|
|
530
528
|
const appConfig = dependencyContainer.resolve<AppConfig>(ApplicationTokens.AppConfig);
|
|
@@ -564,53 +562,51 @@ export class AppContainerFactory {
|
|
|
564
562
|
}
|
|
565
563
|
|
|
566
564
|
private registerRepositoriesAndBuses(container: Container): void {
|
|
567
|
-
container.
|
|
568
|
-
container.
|
|
569
|
-
container.
|
|
570
|
-
container.
|
|
571
|
-
container.
|
|
572
|
-
container.
|
|
565
|
+
container.registerSingleton(OtelIdentityFactory, OtelIdentityFactory);
|
|
566
|
+
container.registerSingleton(TelemetryPrivacyPolicy, TelemetryPrivacyPolicy);
|
|
567
|
+
container.registerSingleton(TelemetryEnricherChain, TelemetryEnricherChain);
|
|
568
|
+
container.registerSingleton(TelemetryRetentionTimestampFactory, TelemetryRetentionTimestampFactory);
|
|
569
|
+
container.registerSingleton(TelemetryQueryService, TelemetryQueryService);
|
|
570
|
+
container.registerSingleton(NoOpTelemetryExporter, NoOpTelemetryExporter);
|
|
573
571
|
container.register(CompositeTelemetryExporter, {
|
|
574
572
|
useFactory: instanceCachingFactory(
|
|
575
573
|
(dependencyContainer) => new CompositeTelemetryExporter([dependencyContainer.resolve(NoOpTelemetryExporter)]),
|
|
576
574
|
),
|
|
577
575
|
});
|
|
578
|
-
container.
|
|
579
|
-
container.
|
|
580
|
-
container.
|
|
581
|
-
container.
|
|
582
|
-
container.
|
|
583
|
-
container.
|
|
584
|
-
container.
|
|
585
|
-
container.
|
|
586
|
-
container.
|
|
587
|
-
container.
|
|
588
|
-
container.
|
|
589
|
-
container.
|
|
590
|
-
container.
|
|
591
|
-
container.
|
|
592
|
-
container.
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
container.
|
|
596
|
-
container.
|
|
597
|
-
container.
|
|
598
|
-
container.register(InMemoryWorkflowActivationRepository, { useClass: InMemoryWorkflowActivationRepository });
|
|
599
|
-
container.register(PrismaCredentialStore, { useClass: PrismaCredentialStore });
|
|
576
|
+
container.registerSingleton(OtelExecutionTelemetryFactory, OtelExecutionTelemetryFactory);
|
|
577
|
+
container.registerSingleton(InMemoryRunTraceContextRepository, InMemoryRunTraceContextRepository);
|
|
578
|
+
container.registerSingleton(InMemoryTelemetrySpanStore, InMemoryTelemetrySpanStore);
|
|
579
|
+
container.registerSingleton(InMemoryTelemetryArtifactStore, InMemoryTelemetryArtifactStore);
|
|
580
|
+
container.registerSingleton(InMemoryTelemetryMetricPointStore, InMemoryTelemetryMetricPointStore);
|
|
581
|
+
container.registerSingleton(PrismaRunTraceContextRepository, PrismaRunTraceContextRepository);
|
|
582
|
+
container.registerSingleton(PrismaTelemetrySpanStore, PrismaTelemetrySpanStore);
|
|
583
|
+
container.registerSingleton(PrismaTelemetryArtifactStore, PrismaTelemetryArtifactStore);
|
|
584
|
+
container.registerSingleton(PrismaTelemetryMetricPointStore, PrismaTelemetryMetricPointStore);
|
|
585
|
+
container.registerSingleton(WorkflowDefinitionRepositoryAdapter, WorkflowDefinitionRepositoryAdapter);
|
|
586
|
+
container.registerSingleton(InMemoryWorkflowRunRepository, InMemoryWorkflowRunRepository);
|
|
587
|
+
container.registerSingleton(InMemoryTriggerSetupStateRepository, InMemoryTriggerSetupStateRepository);
|
|
588
|
+
container.registerSingleton(InMemoryCredentialStore, InMemoryCredentialStore);
|
|
589
|
+
container.registerSingleton(SqlWorkflowRunRepository, SqlWorkflowRunRepository);
|
|
590
|
+
container.registerSingleton(InMemoryWorkflowDebuggerOverlayRepository, InMemoryWorkflowDebuggerOverlayRepository);
|
|
591
|
+
container.registerSingleton(PrismaTriggerSetupStateRepository, PrismaTriggerSetupStateRepository);
|
|
592
|
+
container.registerSingleton(PrismaWorkflowDebuggerOverlayRepository, PrismaWorkflowDebuggerOverlayRepository);
|
|
593
|
+
container.registerSingleton(PrismaWorkflowActivationRepository, PrismaWorkflowActivationRepository);
|
|
594
|
+
container.registerSingleton(InMemoryWorkflowActivationRepository, InMemoryWorkflowActivationRepository);
|
|
595
|
+
container.registerSingleton(PrismaCredentialStore, PrismaCredentialStore);
|
|
600
596
|
container.register(ApplicationTokens.WorkflowDefinitionRepository, {
|
|
601
597
|
useFactory: instanceCachingFactory(
|
|
602
598
|
(dependencyContainer) =>
|
|
603
599
|
dependencyContainer.resolve(WorkflowDefinitionRepositoryAdapter) as unknown as WorkflowDefinitionRepository,
|
|
604
600
|
),
|
|
605
601
|
});
|
|
606
|
-
container.
|
|
607
|
-
container.
|
|
608
|
-
container.
|
|
602
|
+
container.registerSingleton(InMemoryQueryBus, InMemoryQueryBus);
|
|
603
|
+
container.registerSingleton(InMemoryCommandBus, InMemoryCommandBus);
|
|
604
|
+
container.registerSingleton(InMemoryDomainEventBus, InMemoryDomainEventBus);
|
|
609
605
|
for (const handler of AppContainerFactory.queryHandlers) {
|
|
610
|
-
container.
|
|
606
|
+
container.registerSingleton(ApplicationTokens.QueryHandler, handler);
|
|
611
607
|
}
|
|
612
608
|
for (const handler of AppContainerFactory.commandHandlers) {
|
|
613
|
-
container.
|
|
609
|
+
container.registerSingleton(ApplicationTokens.CommandHandler, handler);
|
|
614
610
|
}
|
|
615
611
|
container.register(ApplicationTokens.QueryBus, {
|
|
616
612
|
useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(InMemoryQueryBus)),
|
|
@@ -629,25 +625,25 @@ export class AppContainerFactory {
|
|
|
629
625
|
}
|
|
630
626
|
|
|
631
627
|
private registerApplicationServicesAndRoutes(container: Container): void {
|
|
632
|
-
container.
|
|
633
|
-
container.
|
|
634
|
-
container.
|
|
635
|
-
container.
|
|
636
|
-
container.
|
|
637
|
-
container.
|
|
628
|
+
container.registerSingleton(DevBootstrapSummaryAssembler, DevBootstrapSummaryAssembler);
|
|
629
|
+
container.registerSingleton(DevBootstrapSummaryHttpRouteHandler, DevBootstrapSummaryHttpRouteHandler);
|
|
630
|
+
container.registerSingleton(AuthHttpRouteHandler, AuthHttpRouteHandler);
|
|
631
|
+
container.registerSingleton(PublicFrontendBootstrapHttpRouteHandler, PublicFrontendBootstrapHttpRouteHandler);
|
|
632
|
+
container.registerSingleton(InternalAuthBootstrapHttpRouteHandler, InternalAuthBootstrapHttpRouteHandler);
|
|
633
|
+
container.registerSingleton(WhitelabelLogoHttpRouteHandler, WhitelabelLogoHttpRouteHandler);
|
|
638
634
|
for (const registrar of AppContainerFactory.honoRouteRegistrars) {
|
|
639
|
-
container.
|
|
635
|
+
container.registerSingleton(ApplicationTokens.HonoApiRouteRegistrar, registrar);
|
|
640
636
|
}
|
|
641
|
-
container.
|
|
637
|
+
container.registerSingleton(CodemationHonoApiApp, CodemationHonoApiApp);
|
|
642
638
|
}
|
|
643
639
|
|
|
644
640
|
private registerOperationalInfrastructure(container: Container): void {
|
|
645
641
|
container.register(ApplicationTokens.WorkflowWebsocketPublisher, {
|
|
646
642
|
useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(WorkflowWebsocketServer)),
|
|
647
643
|
});
|
|
648
|
-
container.
|
|
649
|
-
container.
|
|
650
|
-
container.
|
|
644
|
+
container.registerSingleton(WorkflowRunEventWebsocketRelay, WorkflowRunEventWebsocketRelay);
|
|
645
|
+
container.registerSingleton(RunEventBusTelemetryReporter, RunEventBusTelemetryReporter);
|
|
646
|
+
container.registerSingleton(WorkflowRunRetentionPruneScheduler, WorkflowRunRetentionPruneScheduler);
|
|
651
647
|
}
|
|
652
648
|
|
|
653
649
|
private async registerRuntimeInfrastructure(container: Container, appConfig: AppConfig): Promise<PrismaOwnership> {
|
|
@@ -18,9 +18,7 @@ export class CodemationContainerRegistrationRegistrar {
|
|
|
18
18
|
return;
|
|
19
19
|
}
|
|
20
20
|
if (this.isClassRegistration(registration)) {
|
|
21
|
-
container.
|
|
22
|
-
useClass: registration.useClass as never,
|
|
23
|
-
});
|
|
21
|
+
container.registerSingleton(registration.token as never, registration.useClass as never);
|
|
24
22
|
return;
|
|
25
23
|
}
|
|
26
24
|
container.register(registration.token, {
|
|
@@ -27,17 +27,13 @@ export class CodemationPluginRegistrar {
|
|
|
27
27
|
loggerFactory: args.loggerFactory,
|
|
28
28
|
registerCredentialType: (type) => args.registerCredentialType(type),
|
|
29
29
|
registerNode: (token, implementation) => {
|
|
30
|
-
args.container.
|
|
31
|
-
useClass: (implementation ?? token) as never,
|
|
32
|
-
});
|
|
30
|
+
args.container.registerSingleton(token as never, (implementation ?? token) as never);
|
|
33
31
|
},
|
|
34
32
|
registerValue: (token, value) => {
|
|
35
33
|
args.container.registerInstance(token, value);
|
|
36
34
|
},
|
|
37
35
|
registerClass: (token, implementation) => {
|
|
38
|
-
args.container.
|
|
39
|
-
useClass: implementation as never,
|
|
40
|
-
});
|
|
36
|
+
args.container.registerSingleton(token as never, implementation as never);
|
|
41
37
|
},
|
|
42
38
|
registerFactory: (token, factory) => {
|
|
43
39
|
args.container.register(token, {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { container as tsyringeContainer, injectable } from "@codemation/core";
|
|
2
2
|
import type { DomainEvent } from "../../application/bus/DomainEvent";
|
|
3
3
|
import type { DomainEventHandler } from "../../application/bus/DomainEventHandler";
|
|
4
4
|
import { ApplicationTokens } from "../../applicationTokens";
|
|
@@ -13,12 +13,10 @@ export class HandlesDomainEvent {
|
|
|
13
13
|
return (target) => {
|
|
14
14
|
Reflect.defineMetadata(domainEventHandlerMetadataKey, eventType, target);
|
|
15
15
|
injectable()(target as never);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
},
|
|
21
|
-
])(target as never);
|
|
16
|
+
tsyringeContainer.registerSingleton(
|
|
17
|
+
ApplicationTokens.DomainEventHandler as never,
|
|
18
|
+
target as unknown as ConcreteType<DomainEventHandler<DomainEvent>>,
|
|
19
|
+
);
|
|
22
20
|
};
|
|
23
21
|
}
|
|
24
22
|
}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import { inject, injectable
|
|
1
|
+
import { inject, injectable } from "@codemation/core";
|
|
2
2
|
import { Hono } from "hono";
|
|
3
|
-
import { ApplicationTokens } from "../../../../applicationTokens";
|
|
4
3
|
import { CodemationBetterAuthRuntime } from "../../../../infrastructure/auth/CodemationBetterAuthRuntime";
|
|
5
4
|
import { AuthHttpRouteHandler } from "../../routeHandlers/AuthHttpRouteHandlerFactory";
|
|
6
5
|
import type { HonoApiRouteRegistrar } from "../HonoApiRouteRegistrar";
|
|
7
6
|
|
|
8
7
|
@injectable()
|
|
9
|
-
@registry([{ token: ApplicationTokens.HonoApiRouteRegistrar, useClass: AuthHonoApiRouteRegistrar }])
|
|
10
8
|
export class AuthHonoApiRouteRegistrar implements HonoApiRouteRegistrar {
|
|
11
9
|
constructor(
|
|
12
10
|
@inject(AuthHttpRouteHandler) private readonly handler: AuthHttpRouteHandler,
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import { inject, injectable
|
|
1
|
+
import { inject, injectable } from "@codemation/core";
|
|
2
2
|
import { Hono } from "hono";
|
|
3
|
-
import { ApplicationTokens } from "../../../../applicationTokens";
|
|
4
3
|
import { BinaryHttpRouteHandler } from "../../routeHandlers/BinaryHttpRouteHandlerFactory";
|
|
5
4
|
import type { HonoApiRouteRegistrar } from "../HonoApiRouteRegistrar";
|
|
6
5
|
|
|
7
6
|
/** Run-scoped binary content. Workflow overlay binary GET/POST are registered on {@link CodemationHonoApiApp} after route registrars. */
|
|
8
7
|
@injectable()
|
|
9
|
-
@registry([{ token: ApplicationTokens.HonoApiRouteRegistrar, useClass: BinaryHonoApiRouteRegistrar }])
|
|
10
8
|
export class BinaryHonoApiRouteRegistrar implements HonoApiRouteRegistrar {
|
|
11
9
|
constructor(@inject(BinaryHttpRouteHandler) private readonly handler: BinaryHttpRouteHandler) {}
|
|
12
10
|
|
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
import { inject, injectable
|
|
1
|
+
import { inject, injectable } from "@codemation/core";
|
|
2
2
|
import { Hono } from "hono";
|
|
3
3
|
|
|
4
|
-
import { ApplicationTokens } from "../../../../applicationTokens";
|
|
5
4
|
import { ApiPaths } from "../../ApiPaths";
|
|
6
5
|
import { InternalAuthBootstrapHttpRouteHandler } from "../../routeHandlers/InternalAuthBootstrapHttpRouteHandler";
|
|
7
6
|
import { PublicFrontendBootstrapHttpRouteHandler } from "../../routeHandlers/PublicFrontendBootstrapHttpRouteHandler";
|
|
8
7
|
import type { HonoApiRouteRegistrar } from "../HonoApiRouteRegistrar";
|
|
9
8
|
|
|
10
9
|
@injectable()
|
|
11
|
-
@registry([{ token: ApplicationTokens.HonoApiRouteRegistrar, useClass: BootstrapHonoApiRouteRegistrar }])
|
|
12
10
|
export class BootstrapHonoApiRouteRegistrar implements HonoApiRouteRegistrar {
|
|
13
11
|
constructor(
|
|
14
12
|
@inject(PublicFrontendBootstrapHttpRouteHandler)
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { inject, injectable
|
|
1
|
+
import { inject, injectable } from "@codemation/core";
|
|
2
2
|
import { Hono } from "hono";
|
|
3
|
-
import { ApplicationTokens } from "../../../../applicationTokens";
|
|
4
3
|
import { CredentialHttpRouteHandler } from "../../routeHandlers/CredentialHttpRouteHandler";
|
|
5
4
|
import type { HonoApiRouteRegistrar } from "../HonoApiRouteRegistrar";
|
|
6
5
|
|
|
7
6
|
@injectable()
|
|
8
|
-
@registry([{ token: ApplicationTokens.HonoApiRouteRegistrar, useClass: CredentialHonoApiRouteRegistrar }])
|
|
9
7
|
export class CredentialHonoApiRouteRegistrar implements HonoApiRouteRegistrar {
|
|
10
8
|
constructor(@inject(CredentialHttpRouteHandler) private readonly handler: CredentialHttpRouteHandler) {}
|
|
11
9
|
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { inject, injectable
|
|
1
|
+
import { inject, injectable } from "@codemation/core";
|
|
2
2
|
import { Hono } from "hono";
|
|
3
|
-
import { ApplicationTokens } from "../../../../applicationTokens";
|
|
4
3
|
import { DevBootstrapSummaryHttpRouteHandler } from "../../routeHandlers/DevBootstrapSummaryHttpRouteHandler";
|
|
5
4
|
import type { HonoApiRouteRegistrar } from "../HonoApiRouteRegistrar";
|
|
6
5
|
|
|
7
6
|
@injectable()
|
|
8
|
-
@registry([{ token: ApplicationTokens.HonoApiRouteRegistrar, useClass: DevHonoApiRouteRegistrar }])
|
|
9
7
|
export class DevHonoApiRouteRegistrar implements HonoApiRouteRegistrar {
|
|
10
8
|
constructor(
|
|
11
9
|
@inject(DevBootstrapSummaryHttpRouteHandler) private readonly handler: DevBootstrapSummaryHttpRouteHandler,
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { inject, injectable
|
|
1
|
+
import { inject, injectable } from "@codemation/core";
|
|
2
2
|
import { Hono } from "hono";
|
|
3
|
-
import { ApplicationTokens } from "../../../../applicationTokens";
|
|
4
3
|
import { OAuth2HttpRouteHandler } from "../../routeHandlers/OAuth2HttpRouteHandlerFactory";
|
|
5
4
|
import type { HonoApiRouteRegistrar } from "../HonoApiRouteRegistrar";
|
|
6
5
|
|
|
7
6
|
@injectable()
|
|
8
|
-
@registry([{ token: ApplicationTokens.HonoApiRouteRegistrar, useClass: OAuth2HonoApiRouteRegistrar }])
|
|
9
7
|
export class OAuth2HonoApiRouteRegistrar implements HonoApiRouteRegistrar {
|
|
10
8
|
constructor(@inject(OAuth2HttpRouteHandler) private readonly handler: OAuth2HttpRouteHandler) {}
|
|
11
9
|
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { inject, injectable
|
|
1
|
+
import { inject, injectable } from "@codemation/core";
|
|
2
2
|
import { Hono } from "hono";
|
|
3
|
-
import { ApplicationTokens } from "../../../../applicationTokens";
|
|
4
3
|
import { RunHttpRouteHandler } from "../../routeHandlers/RunHttpRouteHandler";
|
|
5
4
|
import type { HonoApiRouteRegistrar } from "../HonoApiRouteRegistrar";
|
|
6
5
|
|
|
7
6
|
@injectable()
|
|
8
|
-
@registry([{ token: ApplicationTokens.HonoApiRouteRegistrar, useClass: RunHonoApiRouteRegistrar }])
|
|
9
7
|
export class RunHonoApiRouteRegistrar implements HonoApiRouteRegistrar {
|
|
10
8
|
constructor(@inject(RunHttpRouteHandler) private readonly handler: RunHttpRouteHandler) {}
|
|
11
9
|
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { inject, injectable
|
|
1
|
+
import { inject, injectable } from "@codemation/core";
|
|
2
2
|
import { Hono } from "hono";
|
|
3
|
-
import { ApplicationTokens } from "../../../../applicationTokens";
|
|
4
3
|
import { TelemetryHttpRouteHandler } from "../../routeHandlers/TelemetryHttpRouteHandler";
|
|
5
4
|
import type { HonoApiRouteRegistrar } from "../HonoApiRouteRegistrar";
|
|
6
5
|
|
|
7
6
|
@injectable()
|
|
8
|
-
@registry([{ token: ApplicationTokens.HonoApiRouteRegistrar, useClass: TelemetryHonoApiRouteRegistrar }])
|
|
9
7
|
export class TelemetryHonoApiRouteRegistrar implements HonoApiRouteRegistrar {
|
|
10
8
|
constructor(@inject(TelemetryHttpRouteHandler) private readonly handler: TelemetryHttpRouteHandler) {}
|
|
11
9
|
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { inject, injectable
|
|
1
|
+
import { inject, injectable } from "@codemation/core";
|
|
2
2
|
import { Hono } from "hono";
|
|
3
|
-
import { ApplicationTokens } from "../../../../applicationTokens";
|
|
4
3
|
import { UserHttpRouteHandler } from "../../routeHandlers/UserHttpRouteHandlerFactory";
|
|
5
4
|
import type { HonoApiRouteRegistrar } from "../HonoApiRouteRegistrar";
|
|
6
5
|
|
|
7
6
|
@injectable()
|
|
8
|
-
@registry([{ token: ApplicationTokens.HonoApiRouteRegistrar, useClass: UserHonoApiRouteRegistrar }])
|
|
9
7
|
export class UserHonoApiRouteRegistrar implements HonoApiRouteRegistrar {
|
|
10
8
|
constructor(@inject(UserHttpRouteHandler) private readonly handler: UserHttpRouteHandler) {}
|
|
11
9
|
|