@codemation/host 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/{PrismaMigrationDeployer-B7cHGrXP.js → AppConfigFactory-DWIz2hy-.js} +104 -58
- package/dist/AppConfigFactory-DWIz2hy-.js.map +1 -0
- package/dist/{client-Yh7-CQud.d.ts → AppConfigFactory-DmHOpg8O.d.ts} +52 -31
- package/dist/{CodemationFrontendBootstrapRequest-CNEk-C4D.js → AppContainerFactory-B5eRpvAa.js} +3269 -3374
- package/dist/AppContainerFactory-B5eRpvAa.js.map +1 -0
- package/dist/{CodemationWhitelabelConfig-DgbjgtrR.d.ts → CodemationAuthConfig-Bh2cCNCI.d.ts} +32 -2
- package/dist/{CodemationConfig-XCkSV2dj.d.ts → CodemationConfig-D2ULNkec.d.ts} +53 -49
- package/dist/CodemationConfigNormalizer-CBLxXaRV.d.ts +9 -0
- package/dist/{CodemationConsumerConfigLoader-scS_RQMy.js → CodemationConsumerConfigLoader-BBzAr6L_.js} +128 -3
- package/dist/CodemationConsumerConfigLoader-BBzAr6L_.js.map +1 -0
- package/dist/{CodemationConsumerConfigLoader-Dmm2TzAA.d.ts → CodemationConsumerConfigLoader-BLvzcfb7.d.ts} +4 -4
- package/dist/CodemationPluginListMerger-B0-e4CJ6.d.ts +391 -0
- package/dist/{CodemationPluginListMerger-BNmaoXQL.js → CodemationPluginListMerger-DrVOw9KP.js} +18 -10
- package/dist/CodemationPluginListMerger-DrVOw9KP.js.map +1 -0
- package/dist/{CredentialServices-DpDpm8mL.d.ts → CredentialServices-BeuMtqYA.d.ts} +3 -3
- package/dist/{CredentialServices-BKBGe7l3.js → CredentialServices-DNb3CZwW.js} +3 -3
- package/dist/CredentialServices-DNb3CZwW.js.map +1 -0
- package/dist/FrontendAppConfig-D50wjj_n.d.ts +27 -0
- package/dist/{WorkflowViewContracts-DCLpTn25.d.ts → FrontendAppConfigFactory-Bj-DZNlt.d.ts} +29 -2
- package/dist/FrontendAppConfigJsonCodec-1_L7H_Qo.d.ts +20 -0
- package/dist/FrontendAppConfigJsonCodec-nOCQI0ag.js +84 -0
- package/dist/FrontendAppConfigJsonCodec-nOCQI0ag.js.map +1 -0
- package/dist/{LogLevelPolicy-4cq9z0TI.d.ts → LogLevelPolicy-BS_NlAOg.d.ts} +2 -2
- package/dist/{ServerLoggerFactory-BRHxIDS7.js → ServerLoggerFactory-BltIIDfQ.js} +4 -129
- package/dist/ServerLoggerFactory-BltIIDfQ.js.map +1 -0
- package/dist/client.d.ts +5 -3
- package/dist/client.js +2 -1
- package/dist/client.js.map +1 -1
- package/dist/consumer.d.ts +5 -4
- package/dist/consumer.js +4 -4
- package/dist/credentials.d.ts +4 -4
- package/dist/credentials.js +3 -3
- package/dist/devServerSidecar.d.ts +1 -1
- package/dist/{index-Bs4F1IsC.d.ts → index-CkiptHb-.d.ts} +19 -20
- package/dist/index.d.ts +14 -19
- package/dist/index.js +12 -11
- package/dist/nextServer.d.ts +244 -9
- package/dist/nextServer.js +8 -8
- package/dist/persistenceServer-CaehMh3M.d.ts +9 -0
- package/dist/{persistenceServer-8tcM2S48.js → persistenceServer-DVeWUbc3.js} +2 -2
- package/dist/{persistenceServer-8tcM2S48.js.map → persistenceServer-DVeWUbc3.js.map} +1 -1
- package/dist/persistenceServer.d.ts +7 -6
- package/dist/persistenceServer.js +4 -4
- package/dist/{server-Dd65rNm6.js → server-C65z_kqm.js} +47 -17
- package/dist/server-C65z_kqm.js.map +1 -0
- package/dist/{server-BBdsATju.d.ts → server-Dyo8qh4k.d.ts} +23 -4
- package/dist/server.d.ts +12 -9
- package/dist/server.js +11 -10
- package/package.json +6 -6
- package/src/application/commands/WorkflowCommandHandlers.ts +9 -0
- package/src/application/dev/BootRuntimeSnapshotHolder.ts +2 -2
- package/src/application/dev/BootRuntimeSummary.types.ts +2 -2
- package/src/application/queries/WorkflowQueryHandlers.ts +7 -0
- package/src/applicationTokens.ts +1 -1
- package/src/bootstrap/AppContainerFactory.ts +584 -0
- package/src/bootstrap/{PreparedCodemationRuntime.ts → AppContainerLifecycle.ts} +3 -8
- package/src/bootstrap/runtime/AppConfigFactory.ts +155 -30
- package/src/bootstrap/runtime/DatabaseMigrations.ts +18 -0
- package/src/bootstrap/runtime/FrontendRuntime.ts +44 -0
- package/src/bootstrap/runtime/WorkerRuntime.ts +55 -0
- package/src/client.ts +7 -0
- package/src/index.ts +15 -5
- package/src/infrastructure/persistence/PrismaMigrationDeployer.ts +2 -2
- package/src/infrastructure/persistence/SchedulerPersistenceCompatibilityValidator.ts +2 -2
- package/src/infrastructure/scheduler/WorkerRuntimeScheduler.ts +16 -0
- package/src/infrastructure/scheduler/bullmq/BullmqNodeExecutionScheduler.ts +47 -0
- package/src/infrastructure/scheduler/bullmq/BullmqScheduler.ts +33 -0
- package/src/infrastructure/scheduler/bullmq/BullmqWorker.ts +48 -0
- package/src/infrastructure/scheduler/bullmq/RedisConnectionOptionsFactory.ts +48 -0
- package/src/nextServer.ts +12 -3
- package/src/persistenceServer.ts +2 -2
- package/src/presentation/config/AppConfig.ts +25 -1
- package/src/presentation/frontend/CodemationFrontendAuthSnapshot.ts +14 -0
- package/src/presentation/frontend/CodemationFrontendAuthSnapshotFactory.ts +84 -0
- package/src/presentation/frontend/CodemationFrontendAuthSnapshotJsonCodec.ts +58 -0
- package/src/presentation/frontend/FrontendAppConfig.ts +10 -0
- package/src/presentation/frontend/FrontendAppConfigFactory.ts +26 -0
- package/src/presentation/frontend/FrontendAppConfigJsonCodec.ts +58 -0
- package/src/presentation/http/CodemationServerGatewayFactory.ts +22 -16
- package/src/presentation/server/AppConfigLoader.ts +39 -0
- package/src/presentation/server/CodemationConsumerAppResolver.ts +2 -2
- package/src/presentation/server/CodemationConsumerConfigLoader.ts +3 -2
- package/src/server.ts +7 -0
- package/vitest.shared.ts +0 -4
- package/dist/CodemationConsumerConfigLoader-scS_RQMy.js.map +0 -1
- package/dist/CodemationFrontendBootstrapRequest-CNEk-C4D.js.map +0 -1
- package/dist/CodemationPluginListMerger-BNmaoXQL.js.map +0 -1
- package/dist/CodemationPluginListMerger-BRYqEk0y.d.ts +0 -793
- package/dist/CredentialServices-BKBGe7l3.js.map +0 -1
- package/dist/PrismaMigrationDeployer-B7cHGrXP.js.map +0 -1
- package/dist/ServerLoggerFactory-BRHxIDS7.js.map +0 -1
- package/dist/persistenceServer-DPSj_-oU.d.ts +0 -37
- package/dist/server-Dd65rNm6.js.map +0 -1
- package/src/bootstrap/CodemationContainerFactory.ts +0 -310
- package/src/bootstrap/CodemationFrontendBootstrapRequest.ts +0 -16
- package/src/bootstrap/CodemationWorkerBootstrapRequest.ts +0 -19
- package/src/bootstrap/PreparedCodemationRuntimeFactory.ts +0 -308
- package/src/bootstrap/boot/CliRuntimeBootService.ts +0 -27
- package/src/bootstrap/boot/FrontendRuntimeBootService.ts +0 -86
- package/src/bootstrap/boot/WorkerRuntimeBootService.ts +0 -64
- package/src/bootstrap/runtime/ResolvedImplementationSelectionFactory.ts +0 -118
- package/src/codemationApplication.ts +0 -311
- package/src/infrastructure/credentials/FrameworkBuiltinCredentialTypesRegistrar.ts +0 -21
- package/src/infrastructure/persistence/DatabasePersistenceResolver.ts +0 -91
- package/src/infrastructure/runtime/WorkerRuntimeScheduler.ts +0 -35
- package/src/presentation/config/CodemationApplicationFacade.ts +0 -5
- /package/dist/{decorate-B-N_5S4p.js → decorate-B0PP651O.js} +0 -0
- /package/dist/{decorateParam-BTcc3KNk.js → decorateParam-DrsXNPuw.js} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ServerLoggerFactory-BRHxIDS7.js","names":["containerRegistrations: Array<CodemationContainerRegistration<unknown>>","credentialTypes: Array<AnyCredentialType>","workflows: Array<WorkflowDefinition>","workflowDirectories: Array<string>","levelRank: Record<Exclude<LogLevel, \"silent\">, number>","compiled: { matchers: ReadonlyArray<RegExp>; minLevel: LogLevel }[]","inner: Logger","scope: string","filter: LogFilter","ServerLoggerFactory","logLevelPolicyFactory: LogLevelPolicyFactory","ServerLogger"],"sources":["../src/presentation/config/CodemationConfigNormalizer.ts","../src/infrastructure/logging/LogLevelPolicy.ts","../src/infrastructure/logging/LogLevelPolicyFactory.ts","../src/infrastructure/logging/FilteringLogger.ts","../src/infrastructure/logging/PerformanceLogPolicy.ts","../src/infrastructure/logging/PerformanceLogPolicyFactory.ts","../src/infrastructure/logging/ServerLoggerFactory.ts"],"sourcesContent":["import type { AnyCredentialType, Container, TypeToken, WorkflowDefinition } from \"@codemation/core\";\nimport type { CodemationContainerRegistration } from \"../../bootstrap/CodemationContainerRegistration\";\nimport type { CodemationAppContext } from \"./CodemationAppContext\";\nimport type { CodemationClassToken } from \"./CodemationClassToken\";\nimport type {\n CodemationApplicationRuntimeConfig,\n CodemationConfig,\n CodemationDatabaseConfig,\n CodemationEventBusConfig,\n CodemationSchedulerConfig,\n} from \"./CodemationConfig\";\n\nexport type NormalizedCodemationConfig = CodemationConfig &\n Readonly<{\n containerRegistrations: ReadonlyArray<CodemationContainerRegistration<unknown>>;\n }>;\n\nexport class CodemationConfigNormalizer {\n normalize(config: CodemationConfig): NormalizedCodemationConfig {\n const collected = this.collectRegistration(config);\n const normalizedRuntime = this.normalizeRuntimeConfig(config);\n const normalizedWorkflowDiscoveryDirectories = [\n ...(config.workflowDiscovery?.directories ?? []),\n ...collected.workflowDirectories,\n ];\n\n return {\n ...config,\n auth: config.app?.auth ?? config.auth,\n containerRegistrations: collected.containerRegistrations,\n credentialTypes: [...(config.credentialTypes ?? []), ...collected.credentialTypes],\n log: config.app?.log ?? config.log,\n runtime: normalizedRuntime,\n whitelabel: config.app?.whitelabel ?? config.whitelabel,\n workflowDiscovery:\n normalizedWorkflowDiscoveryDirectories.length > 0\n ? { directories: normalizedWorkflowDiscoveryDirectories }\n : config.workflowDiscovery,\n workflows: this.mergeWorkflows(config.workflows ?? [], collected.workflows),\n };\n }\n\n private collectRegistration(config: CodemationConfig): Readonly<{\n containerRegistrations: ReadonlyArray<CodemationContainerRegistration<unknown>>;\n credentialTypes: ReadonlyArray<AnyCredentialType>;\n workflows: ReadonlyArray<WorkflowDefinition>;\n workflowDirectories: ReadonlyArray<string>;\n }> {\n if (!config.register) {\n return {\n containerRegistrations: [],\n credentialTypes: [],\n workflows: [],\n workflowDirectories: [],\n };\n }\n\n const containerRegistrations: Array<CodemationContainerRegistration<unknown>> = [];\n const credentialTypes: Array<AnyCredentialType> = [];\n const workflows: Array<WorkflowDefinition> = [];\n const workflowDirectories: Array<string> = [];\n\n const context: CodemationAppContext = {\n registerCredentialType(type) {\n credentialTypes.push(type);\n },\n registerNode<TValue>(token: TypeToken<TValue>, implementation?: CodemationClassToken<TValue>) {\n containerRegistrations.push({\n token,\n useClass: implementation ?? (token as CodemationClassToken<TValue>),\n });\n },\n registerValue<TValue>(token: TypeToken<TValue>, value: TValue) {\n containerRegistrations.push({ token, useValue: value });\n },\n registerClass<TValue>(token: TypeToken<TValue>, implementation: CodemationClassToken<TValue>) {\n containerRegistrations.push({ token, useClass: implementation });\n },\n registerFactory<TValue>(token: TypeToken<TValue>, factory: (container: Container) => TValue) {\n containerRegistrations.push({ token, useFactory: factory });\n },\n registerWorkflow(workflow: WorkflowDefinition) {\n workflows.push(workflow);\n },\n registerWorkflows(nextWorkflows: ReadonlyArray<WorkflowDefinition>) {\n workflows.push(...nextWorkflows);\n },\n discoverWorkflows(...directories: ReadonlyArray<string>) {\n workflowDirectories.push(...directories);\n },\n };\n\n config.register(context);\n\n return {\n containerRegistrations,\n credentialTypes,\n workflows,\n workflowDirectories,\n };\n }\n\n private normalizeRuntimeConfig(config: CodemationConfig): CodemationApplicationRuntimeConfig | undefined {\n if (!config.app) {\n return config.runtime;\n }\n const nextRuntime: CodemationApplicationRuntimeConfig = {\n ...(config.runtime ?? {}),\n frontendPort: config.app.frontendPort ?? config.runtime?.frontendPort,\n database: this.normalizeDatabaseConfig(config),\n eventBus: this.normalizeEventBusConfig(config),\n scheduler: this.normalizeSchedulerConfig(config),\n engineExecutionLimits: config.app.engineExecutionLimits ?? config.runtime?.engineExecutionLimits,\n };\n return nextRuntime;\n }\n\n private normalizeDatabaseConfig(config: CodemationConfig): CodemationDatabaseConfig | undefined {\n if (!config.app) {\n return config.runtime?.database;\n }\n if (config.app.database) {\n return config.app.database;\n }\n if (!config.app.databaseUrl) {\n return config.runtime?.database;\n }\n return {\n ...(config.runtime?.database ?? {}),\n url: config.app.databaseUrl,\n };\n }\n\n private normalizeSchedulerConfig(config: CodemationConfig): CodemationSchedulerConfig | undefined {\n if (!config.app?.scheduler) {\n return config.runtime?.scheduler;\n }\n const scheduler = config.app.scheduler;\n return {\n ...(config.runtime?.scheduler ?? {}),\n kind:\n scheduler.kind === \"queue\" ? \"bullmq\" : scheduler.kind === \"inline\" ? \"local\" : config.runtime?.scheduler?.kind,\n queuePrefix: scheduler.queuePrefix ?? config.runtime?.scheduler?.queuePrefix,\n workerQueues: scheduler.workerQueues ?? config.runtime?.scheduler?.workerQueues,\n };\n }\n\n private normalizeEventBusConfig(config: CodemationConfig): CodemationEventBusConfig | undefined {\n if (!config.app?.scheduler) {\n return config.runtime?.eventBus;\n }\n const scheduler = config.app.scheduler;\n const eventBusKind =\n scheduler.kind === \"queue\" ? \"redis\" : scheduler.kind === \"inline\" ? \"memory\" : config.runtime?.eventBus?.kind;\n return {\n ...(config.runtime?.eventBus ?? {}),\n kind: eventBusKind,\n queuePrefix: scheduler.queuePrefix ?? config.runtime?.eventBus?.queuePrefix,\n redisUrl: scheduler.redisUrl ?? config.runtime?.eventBus?.redisUrl,\n };\n }\n\n private mergeWorkflows(\n configuredWorkflows: ReadonlyArray<WorkflowDefinition>,\n registeredWorkflows: ReadonlyArray<WorkflowDefinition>,\n ): ReadonlyArray<WorkflowDefinition> | undefined {\n if (configuredWorkflows.length === 0 && registeredWorkflows.length === 0) {\n return undefined;\n }\n const workflowsById = new Map<string, WorkflowDefinition>();\n for (const workflow of registeredWorkflows) {\n workflowsById.set(workflow.id, workflow);\n }\n for (const workflow of configuredWorkflows) {\n workflowsById.set(workflow.id, workflow);\n }\n return [...workflowsById.values()];\n }\n}\n","import type { CodemationLogConfig, CodemationLogRule } from \"../../presentation/config/CodemationLogConfig\";\n\nexport type LogLevel = \"silent\" | \"debug\" | \"info\" | \"warn\" | \"error\";\n\nconst levelRank: Record<Exclude<LogLevel, \"silent\">, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\nconst globRegexMetaChars = new Set(\"\\\\^$+?()[]{}|.\");\n\n/**\n * Minimum log level for @codemation/host loggers.\n * - `CODEMATION_LOG_LEVEL` overrides when set to a known level (for namespaces not matched by `codemation.config` log rules).\n * - Under Vitest, defaults to **warn** so routine `info`/`debug` noise stays off the terminal; `warn`/`error` still print.\n * - Otherwise defaults to **info**.\n *\n * When {@link applyCodemationLogConfig} is set, the first matching rule wins per namespace; unmatched namespaces use env defaults.\n *\n * Resolve a shared instance via {@link LogLevelPolicyFactory} (DI or `logLevelPolicyFactory`).\n */\nexport class LogLevelPolicy {\n private cachedMin: LogLevel | undefined;\n\n private codemationRules: ReadonlyArray<{ matchers: ReadonlyArray<RegExp>; minLevel: LogLevel }> | null = null;\n\n resolveMin(): LogLevel {\n const raw = process.env.CODEMATION_LOG_LEVEL?.toLowerCase();\n if (raw === \"silent\" || raw === \"debug\" || raw === \"info\" || raw === \"warn\" || raw === \"error\") {\n return raw;\n }\n if (process.env.VITEST === \"true\") {\n return \"warn\";\n }\n return \"info\";\n }\n\n private minLevelCached(): LogLevel {\n if (this.cachedMin === undefined) {\n this.cachedMin = this.resolveMin();\n }\n return this.cachedMin;\n }\n\n resetForTests(): void {\n this.cachedMin = undefined;\n this.codemationRules = null;\n }\n\n /**\n * Applies `codemation.config` log rules. Pass `undefined` to clear rules and use env-only behavior.\n */\n applyCodemationLogConfig(config: CodemationLogConfig | undefined): void {\n this.codemationRules = null;\n if (!config) {\n return;\n }\n const rawRules = this.normalizeCodemationRules(config);\n if (rawRules.length === 0) {\n return;\n }\n const compiled: { matchers: ReadonlyArray<RegExp>; minLevel: LogLevel }[] = [];\n for (const rule of rawRules) {\n const minLevel = this.parseRuleLevel(rule.level);\n const patterns = this.normalizeFilterPatterns(rule.filter);\n if (patterns.length === 0) {\n throw new Error(\"codemation.config log rule filter must include at least one pattern\");\n }\n const matchers = patterns.map((pattern) => this.compileGlobPattern(pattern));\n compiled.push({\n matchers,\n minLevel,\n });\n }\n this.codemationRules = compiled;\n }\n\n shouldEmit(level: Exclude<LogLevel, \"silent\">, namespace: string): boolean {\n if (this.codemationRules && this.codemationRules.length > 0) {\n for (const rule of this.codemationRules) {\n if (rule.matchers.some((regex) => regex.test(namespace))) {\n return this.levelPassesAgainstMin(level, rule.minLevel);\n }\n }\n }\n return this.levelPassesAgainstMin(level, this.minLevelCached());\n }\n\n private normalizeCodemationRules(config: CodemationLogConfig): ReadonlyArray<CodemationLogRule> {\n if (\"rules\" in config && Array.isArray(config.rules)) {\n return [...config.rules];\n }\n return [config as CodemationLogRule];\n }\n\n private normalizeFilterPatterns(filter: string | ReadonlyArray<string>): ReadonlyArray<string> {\n if (typeof filter === \"string\") {\n return [filter];\n }\n return [...filter];\n }\n\n /**\n * Glob: only `*` is special (matches any substring). A lone `*` matches all namespaces.\n */\n private compileGlobPattern(pattern: string): RegExp {\n const trimmed = pattern.trim();\n if (trimmed === \"*\") {\n return /^.*$/;\n }\n let body = \"\";\n for (const ch of trimmed) {\n if (ch === \"*\") {\n body += \".*\";\n continue;\n }\n if (globRegexMetaChars.has(ch)) {\n body += \"\\\\\" + ch;\n continue;\n }\n body += ch;\n }\n return new RegExp(\"^\" + body + \"$\");\n }\n\n private parseRuleLevel(level: string): LogLevel {\n const normalized = level.toLowerCase();\n if (\n normalized === \"silent\" ||\n normalized === \"debug\" ||\n normalized === \"info\" ||\n normalized === \"warn\" ||\n normalized === \"error\"\n ) {\n return normalized;\n }\n throw new Error(`Invalid codemation.config log level: ${level}`);\n }\n\n private levelPassesAgainstMin(level: Exclude<LogLevel, \"silent\">, min: LogLevel): boolean {\n if (min === \"silent\") {\n return false;\n }\n return levelRank[level] >= levelRank[min];\n }\n}\n","import { LogLevelPolicy } from \"./LogLevelPolicy\";\n\n/**\n * Process-wide {@link LogLevelPolicy} singleton for server and browser loggers.\n * Plain class (no `@injectable` from `@codemation/core`): client components import this file; decorating would pull core into the browser bundle.\n */\nexport class LogLevelPolicyFactory {\n private readonly policy = new LogLevelPolicy();\n\n create(): LogLevelPolicy {\n return this.policy;\n }\n}\n\n/** Shared factory for call sites outside the DI container (e.g. next-host bootstrap). */\nexport const logLevelPolicyFactory = new LogLevelPolicyFactory();\n","import type { LogFilter } from \"../../application/logging/LogFilter\";\nimport type { Logger } from \"../../application/logging/Logger\";\n\nexport class FilteringLogger implements Logger {\n constructor(\n private readonly inner: Logger,\n private readonly scope: string,\n private readonly filter: LogFilter,\n ) {}\n\n info(message: string, exception?: Error): void {\n if (!this.filter({ scope: this.scope, level: \"info\", message })) {\n return;\n }\n this.inner.info(message, exception);\n }\n\n warn(message: string, exception?: Error): void {\n if (!this.filter({ scope: this.scope, level: \"warn\", message })) {\n return;\n }\n this.inner.warn(message, exception);\n }\n\n error(message: string, exception?: Error): void {\n if (!this.filter({ scope: this.scope, level: \"error\", message })) {\n return;\n }\n this.inner.error(message, exception);\n }\n\n debug(message: string, exception?: Error): void {\n if (!this.filter({ scope: this.scope, level: \"debug\", message })) {\n return;\n }\n this.inner.debug(message, exception);\n }\n}\n","/**\n * Opt-in detailed timing / diagnostics lines (used with `ServerLoggerFactory#createPerformanceDiagnostics`).\n *\n * Set `CODEMATION_PERFORMANCE_LOGGING=true` to enable. Otherwise those loggers are silent regardless of level.\n */\nexport class PerformanceLogPolicy {\n shouldEmitDetailedTiming(): boolean {\n return process.env.CODEMATION_PERFORMANCE_LOGGING === \"true\";\n }\n}\n","import { PerformanceLogPolicy } from \"./PerformanceLogPolicy\";\n\n/**\n * Process-wide {@link PerformanceLogPolicy} singleton (same pattern as {@link LogLevelPolicyFactory}).\n */\nexport class PerformanceLogPolicyFactory {\n private readonly policy = new PerformanceLogPolicy();\n\n create(): PerformanceLogPolicy {\n return this.policy;\n }\n}\n\nexport const performanceLogPolicyFactory = new PerformanceLogPolicyFactory();\n","import { inject, injectable } from \"@codemation/core\";\n\nimport type { LogFilter } from \"../../application/logging/LogFilter\";\nimport type { Logger, LoggerFactory } from \"../../application/logging/Logger\";\n\nimport { FilteringLogger } from \"./FilteringLogger\";\nimport { LogLevelPolicyFactory } from \"./LogLevelPolicyFactory\";\nimport { performanceLogPolicyFactory } from \"./PerformanceLogPolicyFactory\";\nimport { ServerLogger } from \"./ServerLogger\";\n\n@injectable()\nexport class ServerLoggerFactory implements LoggerFactory {\n constructor(@inject(LogLevelPolicyFactory) private readonly logLevelPolicyFactory: LogLevelPolicyFactory) {}\n\n create(scope: string): Logger {\n return new ServerLogger(scope, this.logLevelPolicyFactory.create());\n }\n\n createFiltered(scope: string, filter: LogFilter): Logger {\n return new FilteringLogger(this.create(scope), scope, filter);\n }\n\n createPerformanceDiagnostics(scope: string): Logger {\n return this.createFiltered(scope, (_entry) => performanceLogPolicyFactory.create().shouldEmitDetailedTiming());\n }\n}\n\nexport { ServerLogger } from \"./ServerLogger\";\n"],"mappings":"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"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { r as ResolvedDatabasePersistence, t as PrismaClient } from "./client-Yh7-CQud.js";
|
|
2
|
-
|
|
3
|
-
//#region src/infrastructure/persistence/CodemationPostgresPrismaClientFactory.d.ts
|
|
4
|
-
declare class CodemationPostgresPrismaClientFactory {
|
|
5
|
-
static create(databaseUrl: string): PrismaClient;
|
|
6
|
-
}
|
|
7
|
-
//#endregion
|
|
8
|
-
//#region src/infrastructure/persistence/PrismaMigrationDeployer.d.ts
|
|
9
|
-
/**
|
|
10
|
-
* Runs `prisma migrate deploy` against TCP PostgreSQL or against a PGlite data directory
|
|
11
|
-
* by temporarily exposing PGlite on a local Postgres protocol socket (see `@electric-sql/pglite-socket`).
|
|
12
|
-
*/
|
|
13
|
-
declare class PrismaMigrationDeployer {
|
|
14
|
-
private readonly require;
|
|
15
|
-
deployPersistence(persistence: ResolvedDatabasePersistence, env?: Readonly<NodeJS.ProcessEnv>): Promise<void>;
|
|
16
|
-
deploy(args: Readonly<{
|
|
17
|
-
databaseUrl: string;
|
|
18
|
-
env?: Readonly<NodeJS.ProcessEnv>;
|
|
19
|
-
}>): Promise<void>;
|
|
20
|
-
private deployPgliteViaPrismaCli;
|
|
21
|
-
private deployPostgres;
|
|
22
|
-
/**
|
|
23
|
-
* {@link PGLiteSocketServer.getServerConn} returns `host:port` or a unix socket path — Prisma requires a `postgresql://` URL.
|
|
24
|
-
* The query engine expects `sslmode=disable` on this loopback socket and a user (PGlite accepts `postgres`).
|
|
25
|
-
*/
|
|
26
|
-
private pgliteSocketConnectionToPostgresUrl;
|
|
27
|
-
private createProcessEnvironment;
|
|
28
|
-
private resolvePrismaCliPath;
|
|
29
|
-
private resolveAbsolutePrismaConfigPath;
|
|
30
|
-
resolvePackageRoot(): string;
|
|
31
|
-
private ensurePgliteParentDirectoryExists;
|
|
32
|
-
private createPgliteOpenFailureError;
|
|
33
|
-
private createDeployError;
|
|
34
|
-
}
|
|
35
|
-
//#endregion
|
|
36
|
-
export { CodemationPostgresPrismaClientFactory as n, PrismaMigrationDeployer as t };
|
|
37
|
-
//# sourceMappingURL=persistenceServer-DPSj_-oU.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server-Dd65rNm6.js","names":["config: CodemationConfig","consumerRoot: string","configSource?: string","workflowSources: ReadonlyArray<string>","env?: Readonly<NodeJS.ProcessEnv>","discoveredPackages: CodemationDiscoveredPluginPackage[]","resolvedPackages: CodemationResolvedPluginPackage[]","packageRoots: string[]"],"sources":["../src/presentation/http/CodemationServerGatewayFactory.ts","../src/presentation/server/CodemationPluginDiscovery.ts"],"sourcesContent":["import { accessSync } from \"node:fs\";\nimport path from \"node:path\";\nimport type { QueryBus } from \"../../application/bus/QueryBus\";\nimport type { WorkflowDto, WorkflowSummary } from \"../../application/contracts/WorkflowViewContracts\";\nimport { WorkflowDefinitionMapper } from \"../../application/mapping/WorkflowDefinitionMapper\";\nimport { GetWorkflowDetailQuery } from \"../../application/queries/GetWorkflowDetailQuery\";\nimport { GetWorkflowSummariesQuery } from \"../../application/queries/GetWorkflowSummariesQuery\";\nimport { ApplicationTokens } from \"../../applicationTokens\";\nimport { CodemationApplication } from \"../../codemationApplication\";\nimport { CodemationBootstrapRequest } from \"../../bootstrap/CodemationBootstrapRequest\";\nimport { CodemationFrontendBootstrapRequest } from \"../../bootstrap/CodemationFrontendBootstrapRequest\";\nimport type { CodemationConfig } from \"../config/CodemationConfig\";\nimport { CodemationHonoApiApp } from \"./hono/CodemationHonoApiAppFactory\";\n\ntype ServerGatewayContext = Readonly<{\n application: CodemationApplication;\n httpApi: CodemationHonoApiApp;\n queryBus: QueryBus;\n workflowDefinitionMapper: WorkflowDefinitionMapper;\n}>;\n\nexport class CodemationServerGateway {\n private static readonly contextsByConfig = new WeakMap<object, Promise<ServerGatewayContext>>();\n\n constructor(\n private readonly config: CodemationConfig,\n private readonly consumerRoot: string,\n private readonly configSource?: string,\n private readonly workflowSources: ReadonlyArray<string> = [],\n private readonly env?: Readonly<NodeJS.ProcessEnv>,\n ) {}\n\n async dispatch(request: Request): Promise<Response> {\n return await (await this.getContext()).httpApi.fetch(request);\n }\n\n async prepare(): Promise<void> {\n await this.getContext();\n }\n\n async close(): Promise<void> {\n const cachedContext = CodemationServerGateway.contextsByConfig.get(this.config as object);\n if (!cachedContext) {\n return;\n }\n CodemationServerGateway.contextsByConfig.delete(this.config as object);\n await (await cachedContext).application.stop();\n }\n\n async loadWorkflowSummaries(): Promise<ReadonlyArray<WorkflowSummary>> {\n const context = await this.getContext();\n const workflows = await context.queryBus.execute(new GetWorkflowSummariesQuery());\n return workflows.map((workflow) => context.workflowDefinitionMapper.toSummary(workflow));\n }\n\n async loadWorkflowDetail(workflowId: string): Promise<WorkflowDto> {\n const context = await this.getContext();\n const workflow = await context.queryBus.execute(new GetWorkflowDetailQuery(workflowId));\n if (!workflow) {\n throw new Error(`Unknown workflowId: ${workflowId}`);\n }\n return await context.workflowDefinitionMapper.map(workflow);\n }\n\n private getContext(): Promise<ServerGatewayContext> {\n const cachedContext = CodemationServerGateway.contextsByConfig.get(this.config as object);\n if (cachedContext) {\n return cachedContext;\n }\n const nextContext = this.createContext();\n CodemationServerGateway.contextsByConfig.set(this.config as object, nextContext);\n return nextContext;\n }\n\n private async createContext(): Promise<ServerGatewayContext> {\n const repoRoot = this.detectWorkspaceRoot(this.consumerRoot);\n const bootstrapRequest = new CodemationBootstrapRequest({\n repoRoot,\n consumerRoot: this.consumerRoot,\n env: this.env,\n workflowSources: this.resolveWorkflowSources(),\n });\n const application = new CodemationApplication();\n application.useConfig(this.config);\n await application.applyPlugins(bootstrapRequest);\n await application.prepareContainer(bootstrapRequest);\n await application.bootFrontend(new CodemationFrontendBootstrapRequest({ bootstrap: bootstrapRequest }));\n return {\n application,\n httpApi: application.getContainer().resolve(CodemationHonoApiApp),\n queryBus: application.getContainer().resolve(ApplicationTokens.QueryBus),\n workflowDefinitionMapper: application.getContainer().resolve(WorkflowDefinitionMapper),\n };\n }\n\n private resolveWorkflowSources(): ReadonlyArray<string> {\n if (this.workflowSources.length > 0) {\n return [...this.workflowSources];\n }\n if (!this.configSource || !this.config.workflows || this.config.workflows.length === 0) {\n return [];\n }\n return [this.configSource];\n }\n private detectWorkspaceRoot(startDirectory: string): string {\n let currentDirectory = path.resolve(startDirectory);\n while (true) {\n try {\n accessSync(path.resolve(currentDirectory, \"pnpm-workspace.yaml\"));\n return currentDirectory;\n } catch {\n const parentDirectory = path.dirname(currentDirectory);\n if (parentDirectory === currentDirectory) {\n return startDirectory;\n }\n currentDirectory = parentDirectory;\n }\n }\n }\n}\n","import type { CodemationPackageManifest } from \"../config/CodemationPackageManifest\";\nimport type { CodemationPlugin } from \"../config/CodemationPlugin\";\nimport { readFile, readdir } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nexport type CodemationDiscoveredPluginPackage = Readonly<{\n packageName: string;\n packageRoot: string;\n manifest: NonNullable<CodemationPackageManifest[\"plugin\"]>;\n developmentEntry?: string;\n}>;\n\nexport type CodemationResolvedPluginPackage = Readonly<\n CodemationDiscoveredPluginPackage & {\n plugin: CodemationPlugin;\n }\n>;\n\ntype PackageJsonShape = Readonly<{\n codemation?: CodemationPackageManifest;\n name?: string;\n exports?: Readonly<Record<string, unknown>>;\n}>;\n\nexport class CodemationPluginDiscovery {\n async discover(consumerRoot: string): Promise<ReadonlyArray<CodemationDiscoveredPluginPackage>> {\n const nodeModulesRoot = path.resolve(consumerRoot, \"node_modules\");\n const packageRoots = await this.collectPackageRoots(nodeModulesRoot);\n const discoveredPackages: CodemationDiscoveredPluginPackage[] = [];\n for (const packageRoot of packageRoots) {\n const packageJson = await this.readPackageJson(path.resolve(packageRoot, \"package.json\"));\n const pluginManifest = packageJson.codemation?.plugin;\n if (!packageJson.name || !pluginManifest || pluginManifest.kind !== \"plugin\") {\n continue;\n }\n discoveredPackages.push({\n packageName: packageJson.name,\n packageRoot,\n manifest: pluginManifest,\n developmentEntry: this.resolveDevelopmentPluginEntry(packageJson),\n });\n }\n return discoveredPackages.sort((left, right) => left.packageName.localeCompare(right.packageName));\n }\n\n async resolvePlugins(consumerRoot: string): Promise<ReadonlyArray<CodemationResolvedPluginPackage>> {\n const discoveredPackages = await this.discover(consumerRoot);\n return await this.resolveDiscoveredPackages(discoveredPackages);\n }\n\n async resolveDiscoveredPackages(\n discoveredPackages: ReadonlyArray<CodemationDiscoveredPluginPackage>,\n ): Promise<ReadonlyArray<CodemationResolvedPluginPackage>> {\n const resolvedPackages: CodemationResolvedPluginPackage[] = [];\n for (const discoveredPackage of discoveredPackages) {\n resolvedPackages.push({\n ...discoveredPackage,\n plugin: await this.loadPlugin(discoveredPackage),\n });\n }\n return resolvedPackages;\n }\n\n private async collectPackageRoots(nodeModulesRoot: string): Promise<ReadonlyArray<string>> {\n try {\n const entries = await readdir(nodeModulesRoot, { withFileTypes: true });\n const packageRoots: string[] = [];\n for (const entry of entries) {\n if (!entry.isDirectory() && !entry.isSymbolicLink()) {\n continue;\n }\n if (entry.name.startsWith(\"@\")) {\n const scopedEntries = await readdir(path.resolve(nodeModulesRoot, entry.name), { withFileTypes: true });\n for (const scopedEntry of scopedEntries) {\n if (scopedEntry.isDirectory() || scopedEntry.isSymbolicLink()) {\n packageRoots.push(path.resolve(nodeModulesRoot, entry.name, scopedEntry.name));\n }\n }\n continue;\n }\n packageRoots.push(path.resolve(nodeModulesRoot, entry.name));\n }\n return packageRoots;\n } catch {\n return [];\n }\n }\n\n private async readPackageJson(packageJsonPath: string): Promise<PackageJsonShape> {\n try {\n const rawPackageJson = await readFile(packageJsonPath, \"utf8\");\n return JSON.parse(rawPackageJson) as PackageJsonShape;\n } catch {\n return {};\n }\n }\n\n private async loadPlugin(discoveredPackage: CodemationDiscoveredPluginPackage): Promise<CodemationPlugin> {\n const pluginModulePath = path.resolve(discoveredPackage.packageRoot, this.resolvePluginEntry(discoveredPackage));\n const importedModule = (await import(pathToFileURL(pluginModulePath).href)) as Record<string, unknown>;\n const pluginExportName = discoveredPackage.manifest.exportName;\n const explicitExport = pluginExportName ? importedModule[pluginExportName] : undefined;\n const exportedValue = explicitExport ?? importedModule.default ?? importedModule.codemationPlugin;\n const plugin = this.resolvePluginValue(exportedValue);\n if (!plugin) {\n throw new Error(`Plugin package \"${discoveredPackage.packageName}\" did not export a Codemation plugin instance.`);\n }\n return plugin;\n }\n\n private resolvePluginValue(value: unknown): CodemationPlugin | null {\n if (this.isPlugin(value)) {\n return value;\n }\n if (this.isPluginConstructor(value)) {\n return new value();\n }\n return null;\n }\n\n private isPlugin(value: unknown): value is CodemationPlugin {\n return (\n Boolean(value) && typeof value === \"object\" && typeof (value as { register?: unknown }).register === \"function\"\n );\n }\n\n private isPluginConstructor(value: unknown): value is new () => CodemationPlugin {\n return typeof value === \"function\" && this.isPlugin(value.prototype);\n }\n\n private resolvePluginEntry(discoveredPackage: CodemationDiscoveredPluginPackage): string {\n if (\n process.env.CODEMATION_PREFER_PLUGIN_SOURCE_ENTRY === \"true\" &&\n typeof discoveredPackage.developmentEntry === \"string\" &&\n discoveredPackage.developmentEntry.trim().length > 0\n ) {\n return discoveredPackage.developmentEntry;\n }\n return discoveredPackage.manifest.entry;\n }\n\n private resolveDevelopmentPluginEntry(packageJson: PackageJsonShape): string | undefined {\n const exportRecord = packageJson.exports?.[\"./codemation-plugin\"];\n if (!exportRecord || typeof exportRecord !== \"object\") {\n return undefined;\n }\n const importPath = (exportRecord as { import?: unknown }).import;\n return typeof importPath === \"string\" && importPath.trim().length > 0 ? importPath : undefined;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,310 +0,0 @@
|
|
|
1
|
-
import "reflect-metadata";
|
|
2
|
-
|
|
3
|
-
import type { Container, WorkflowDefinition } from "@codemation/core";
|
|
4
|
-
import { CoreTokens, instanceCachingFactory, container as tsyringeContainer } from "@codemation/core";
|
|
5
|
-
import {
|
|
6
|
-
EngineRuntimeRegistrar,
|
|
7
|
-
PersistedWorkflowTokenRegistry,
|
|
8
|
-
WorkflowRepositoryWebhookTriggerMatcher,
|
|
9
|
-
} from "@codemation/core/bootstrap";
|
|
10
|
-
import { AIAgentConnectionWorkflowExpander, ConnectionCredentialNodeConfigFactory } from "@codemation/core-nodes";
|
|
11
|
-
import { WorkflowRunEventWebsocketRelay } from "../application/websocket/WorkflowRunEventWebsocketRelay";
|
|
12
|
-
import { ApplicationTokens } from "../applicationTokens";
|
|
13
|
-
import { CodemationApplication } from "../codemationApplication";
|
|
14
|
-
import type { CredentialType } from "../domain/credentials/CredentialServices";
|
|
15
|
-
import {
|
|
16
|
-
CredentialBindingService,
|
|
17
|
-
CredentialFieldEnvOverlayService,
|
|
18
|
-
CredentialInstanceService,
|
|
19
|
-
CredentialMaterialResolver,
|
|
20
|
-
CredentialRuntimeMaterialService,
|
|
21
|
-
CredentialSecretCipher,
|
|
22
|
-
CredentialSessionServiceImpl,
|
|
23
|
-
CredentialTestService,
|
|
24
|
-
CredentialTypeRegistryImpl,
|
|
25
|
-
} from "../domain/credentials/CredentialServices";
|
|
26
|
-
import { OAuth2ConnectService } from "../domain/credentials/OAuth2ConnectServiceFactory";
|
|
27
|
-
import { OAuth2ProviderRegistry } from "../domain/credentials/OAuth2ProviderRegistry";
|
|
28
|
-
import { WorkflowCredentialNodeResolver } from "../domain/credentials/WorkflowCredentialNodeResolver";
|
|
29
|
-
import { UserAccountService } from "../domain/users/UserAccountServiceRegistry";
|
|
30
|
-
import type { WorkflowDebuggerOverlayRepository } from "../domain/workflows/WorkflowDebuggerOverlayRepository";
|
|
31
|
-
import type { WorkflowDefinitionRepository } from "../domain/workflows/WorkflowDefinitionRepository";
|
|
32
|
-
import type { WorkflowRunRepository } from "../domain/runs/WorkflowRunRepository";
|
|
33
|
-
import { WorkflowActivationPreflight } from "../domain/workflows/WorkflowActivationPreflight";
|
|
34
|
-
import { WorkflowActivationPreflightRules } from "../domain/workflows/WorkflowActivationPreflightRules";
|
|
35
|
-
import { BootRuntimeSnapshotHolder } from "../application/dev/BootRuntimeSnapshotHolder";
|
|
36
|
-
import { DevBootstrapSummaryAssembler } from "../application/dev/DevBootstrapSummaryAssembler";
|
|
37
|
-
import { WorkflowDefinitionMapper } from "../application/mapping/WorkflowDefinitionMapper";
|
|
38
|
-
import { WorkflowPolicyUiPresentationFactory } from "../application/mapping/WorkflowPolicyUiPresentationFactory";
|
|
39
|
-
import { WorkflowWebsocketServer } from "../presentation/websocket/WorkflowWebsocketServer";
|
|
40
|
-
import { DevBootstrapSummaryHttpRouteHandler } from "../presentation/http/routeHandlers/DevBootstrapSummaryHttpRouteHandler";
|
|
41
|
-
import { WhitelabelLogoHttpRouteHandler } from "../presentation/http/routeHandlers/WhitelabelLogoHttpRouteHandler";
|
|
42
|
-
import { CodemationHonoApiApp } from "../presentation/http/hono/CodemationHonoApiAppFactory";
|
|
43
|
-
import { RequestToWebhookItemMapper } from "../infrastructure/webhooks/RequestToWebhookItemMapper";
|
|
44
|
-
import { WebhookEndpointPathValidator } from "../application/workflows/WebhookEndpointPathValidator";
|
|
45
|
-
import { CodemationIdFactory } from "../infrastructure/ids/CodemationIdFactory";
|
|
46
|
-
import { InMemoryCommandBus } from "../infrastructure/di/InMemoryCommandBus";
|
|
47
|
-
import { InMemoryDomainEventBus } from "../infrastructure/di/InMemoryDomainEventBus";
|
|
48
|
-
import { InMemoryQueryBus } from "../infrastructure/di/InMemoryQueryBus";
|
|
49
|
-
import { AuthJsSessionVerifier } from "../infrastructure/auth/AuthJsSessionVerifier";
|
|
50
|
-
import { DevelopmentSessionBypassVerifier } from "../infrastructure/auth/DevelopmentSessionBypassVerifier";
|
|
51
|
-
import {
|
|
52
|
-
InMemoryCredentialStore,
|
|
53
|
-
PrismaCredentialStore,
|
|
54
|
-
} from "../infrastructure/persistence/CredentialPersistenceStore";
|
|
55
|
-
import { InMemoryTriggerSetupStateRepository } from "../infrastructure/persistence/InMemoryTriggerSetupStateRepository";
|
|
56
|
-
import { InMemoryWorkflowActivationRepository } from "../infrastructure/persistence/InMemoryWorkflowActivationRepository";
|
|
57
|
-
import { InMemoryWorkflowDebuggerOverlayRepository } from "../infrastructure/persistence/InMemoryWorkflowDebuggerOverlayRepository";
|
|
58
|
-
import { InMemoryWorkflowRunRepository } from "../infrastructure/persistence/InMemoryWorkflowRunRepository";
|
|
59
|
-
import { PrismaClientFactory } from "../infrastructure/persistence/PrismaClientFactory";
|
|
60
|
-
import { PrismaMigrationDeployer } from "../infrastructure/persistence/PrismaMigrationDeployer";
|
|
61
|
-
import { PrismaTriggerSetupStateRepository } from "../infrastructure/persistence/PrismaTriggerSetupStateRepository";
|
|
62
|
-
import { PrismaWorkflowActivationRepository } from "../infrastructure/persistence/PrismaWorkflowActivationRepository";
|
|
63
|
-
import { PrismaWorkflowDebuggerOverlayRepository } from "../infrastructure/persistence/PrismaWorkflowDebuggerOverlayRepository";
|
|
64
|
-
import { RuntimeWorkflowActivationPolicy } from "../infrastructure/persistence/RuntimeWorkflowActivationPolicy";
|
|
65
|
-
import { WorkflowDefinitionRepositoryAdapter } from "../infrastructure/persistence/WorkflowDefinitionRepositoryAdapter";
|
|
66
|
-
import { WorkflowRunRepository as SqlWorkflowRunRepository } from "../infrastructure/persistence/WorkflowRunRepository";
|
|
67
|
-
import { LiveWorkflowRepository } from "../infrastructure/runtime/LiveWorkflowRepository";
|
|
68
|
-
import { LogLevelPolicyFactory, logLevelPolicyFactory } from "../infrastructure/logging/LogLevelPolicyFactory";
|
|
69
|
-
import { ServerLoggerFactory } from "../infrastructure/logging/ServerLoggerFactory";
|
|
70
|
-
import type { AppConfig } from "../presentation/config/AppConfig";
|
|
71
|
-
import type { CodemationApplicationRuntimeConfig } from "../presentation/config/CodemationConfig";
|
|
72
|
-
import type { CodemationContainerRegistration } from "./CodemationContainerRegistration";
|
|
73
|
-
import { CodemationContainerRegistrationRegistrar } from "./CodemationContainerRegistrationRegistrar";
|
|
74
|
-
|
|
75
|
-
type CodemationContainerState = Readonly<{
|
|
76
|
-
application: CodemationApplication;
|
|
77
|
-
registrations: ReadonlyArray<CodemationContainerRegistration<unknown>>;
|
|
78
|
-
runtimeConfig: CodemationApplicationRuntimeConfig;
|
|
79
|
-
workflows: ReadonlyArray<WorkflowDefinition>;
|
|
80
|
-
credentialTypes: ReadonlyArray<CredentialType<any, any, unknown>>;
|
|
81
|
-
sharedWorkflowWebsocketServer: WorkflowWebsocketServer | null;
|
|
82
|
-
}>;
|
|
83
|
-
|
|
84
|
-
export class CodemationContainerFactory {
|
|
85
|
-
constructor(
|
|
86
|
-
private readonly containerRegistrationRegistrar: CodemationContainerRegistrationRegistrar = new CodemationContainerRegistrationRegistrar(),
|
|
87
|
-
) {}
|
|
88
|
-
|
|
89
|
-
create(state: CodemationContainerState): Container {
|
|
90
|
-
const container = tsyringeContainer.createChildContainer();
|
|
91
|
-
this.registerCoreInfrastructure(container, state);
|
|
92
|
-
this.registerRepositoriesAndBuses(container);
|
|
93
|
-
this.registerApplicationServicesAndRoutes(container);
|
|
94
|
-
this.registerOperationalInfrastructure(container);
|
|
95
|
-
this.registerConfiguredRegistrations(container, state.registrations);
|
|
96
|
-
this.registerCredentialTypes(container, state.credentialTypes);
|
|
97
|
-
this.synchronizeLiveWorkflowRepository(container, state.workflows);
|
|
98
|
-
return container;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
private registerCredentialTypes(
|
|
102
|
-
container: Container,
|
|
103
|
-
credentialTypes: ReadonlyArray<CredentialType<any, any, unknown>>,
|
|
104
|
-
): void {
|
|
105
|
-
const registry = container.resolve(CredentialTypeRegistryImpl);
|
|
106
|
-
for (const credentialType of credentialTypes) {
|
|
107
|
-
registry.register(credentialType);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
private registerConfiguredRegistrations(
|
|
112
|
-
container: Container,
|
|
113
|
-
registrations: ReadonlyArray<CodemationContainerRegistration<unknown>>,
|
|
114
|
-
): void {
|
|
115
|
-
if (registrations.length === 0) {
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
this.containerRegistrationRegistrar.apply(container, registrations);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
private registerCoreInfrastructure(container: Container, state: CodemationContainerState): void {
|
|
122
|
-
container.registerInstance(BootRuntimeSnapshotHolder, new BootRuntimeSnapshotHolder());
|
|
123
|
-
container.registerInstance(CodemationApplication, state.application);
|
|
124
|
-
container.registerInstance(CoreTokens.PersistedWorkflowTokenRegistry, new PersistedWorkflowTokenRegistry());
|
|
125
|
-
container.register(CredentialTypeRegistryImpl, {
|
|
126
|
-
useFactory: instanceCachingFactory(() => new CredentialTypeRegistryImpl()),
|
|
127
|
-
});
|
|
128
|
-
container.register(CoreTokens.CredentialTypeRegistry, {
|
|
129
|
-
useFactory: instanceCachingFactory((dependencyContainer) =>
|
|
130
|
-
dependencyContainer.resolve(CredentialTypeRegistryImpl),
|
|
131
|
-
),
|
|
132
|
-
});
|
|
133
|
-
container.register(CodemationIdFactory, { useClass: CodemationIdFactory });
|
|
134
|
-
container.register(CoreTokens.RunIdFactory, {
|
|
135
|
-
useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(CodemationIdFactory)),
|
|
136
|
-
});
|
|
137
|
-
container.register(CoreTokens.ActivationIdFactory, {
|
|
138
|
-
useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(CodemationIdFactory)),
|
|
139
|
-
});
|
|
140
|
-
container.register(CoreTokens.LiveWorkflowRepository, {
|
|
141
|
-
useFactory: instanceCachingFactory(
|
|
142
|
-
() =>
|
|
143
|
-
new LiveWorkflowRepository(
|
|
144
|
-
new AIAgentConnectionWorkflowExpander(new ConnectionCredentialNodeConfigFactory()),
|
|
145
|
-
),
|
|
146
|
-
),
|
|
147
|
-
});
|
|
148
|
-
container.register(CoreTokens.WorkflowRepository, {
|
|
149
|
-
useFactory: instanceCachingFactory((dependencyContainer) =>
|
|
150
|
-
dependencyContainer.resolve(CoreTokens.LiveWorkflowRepository),
|
|
151
|
-
),
|
|
152
|
-
});
|
|
153
|
-
container.registerInstance(CoreTokens.NodeResolver, container);
|
|
154
|
-
const runtimeWorkflowActivationPolicy = new RuntimeWorkflowActivationPolicy();
|
|
155
|
-
container.registerInstance(RuntimeWorkflowActivationPolicy, runtimeWorkflowActivationPolicy);
|
|
156
|
-
container.registerInstance(CoreTokens.WorkflowActivationPolicy, runtimeWorkflowActivationPolicy);
|
|
157
|
-
new EngineRuntimeRegistrar().register(container, {
|
|
158
|
-
resolveEngineExecutionLimits: () => state.runtimeConfig.engineExecutionLimits,
|
|
159
|
-
webhookTriggerMatcherProvider: {
|
|
160
|
-
createMatcher: (dependencyContainer) => {
|
|
161
|
-
const serverLoggerFactory = dependencyContainer.resolve(ServerLoggerFactory);
|
|
162
|
-
const webhookRoutingLogger = serverLoggerFactory.create("codemation.webhooks.routing");
|
|
163
|
-
return new WorkflowRepositoryWebhookTriggerMatcher(
|
|
164
|
-
dependencyContainer.resolve(CoreTokens.WorkflowRepository),
|
|
165
|
-
dependencyContainer.resolve(CoreTokens.WorkflowActivationPolicy),
|
|
166
|
-
{
|
|
167
|
-
warn: (message) => webhookRoutingLogger.warn(message),
|
|
168
|
-
info: (message) => webhookRoutingLogger.debug(message),
|
|
169
|
-
},
|
|
170
|
-
);
|
|
171
|
-
},
|
|
172
|
-
},
|
|
173
|
-
triggerRuntimeDiagnosticsProvider: {
|
|
174
|
-
create: (dependencyContainer) => {
|
|
175
|
-
const triggerRuntimeLogger = dependencyContainer
|
|
176
|
-
.resolve(ServerLoggerFactory)
|
|
177
|
-
.create("codemation.engine.triggers");
|
|
178
|
-
return {
|
|
179
|
-
info: (message) => triggerRuntimeLogger.debug(message),
|
|
180
|
-
warn: (message) => triggerRuntimeLogger.warn(message),
|
|
181
|
-
};
|
|
182
|
-
},
|
|
183
|
-
},
|
|
184
|
-
});
|
|
185
|
-
container.registerInstance(LogLevelPolicyFactory, logLevelPolicyFactory);
|
|
186
|
-
container.register(ServerLoggerFactory, { useClass: ServerLoggerFactory });
|
|
187
|
-
container.register(ApplicationTokens.LoggerFactory, {
|
|
188
|
-
useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(ServerLoggerFactory)),
|
|
189
|
-
});
|
|
190
|
-
container.register(ApplicationTokens.PerformanceDiagnosticsLogger, {
|
|
191
|
-
useFactory: instanceCachingFactory((dependencyContainer) =>
|
|
192
|
-
dependencyContainer.resolve(ServerLoggerFactory).createPerformanceDiagnostics("codemation.performance"),
|
|
193
|
-
),
|
|
194
|
-
});
|
|
195
|
-
container.register(WorkflowWebsocketServer, {
|
|
196
|
-
useFactory: instanceCachingFactory((dependencyContainer) => {
|
|
197
|
-
if (state.sharedWorkflowWebsocketServer) {
|
|
198
|
-
return state.sharedWorkflowWebsocketServer;
|
|
199
|
-
}
|
|
200
|
-
return new WorkflowWebsocketServer(
|
|
201
|
-
dependencyContainer.resolve(ApplicationTokens.WebSocketPort),
|
|
202
|
-
dependencyContainer.resolve(ApplicationTokens.WebSocketBindHost),
|
|
203
|
-
dependencyContainer.resolve(ServerLoggerFactory).create("codemation-websocket.server"),
|
|
204
|
-
);
|
|
205
|
-
}),
|
|
206
|
-
});
|
|
207
|
-
container.register(PrismaClientFactory, { useClass: PrismaClientFactory });
|
|
208
|
-
container.register(PrismaMigrationDeployer, { useClass: PrismaMigrationDeployer });
|
|
209
|
-
container.register(WorkflowPolicyUiPresentationFactory, { useClass: WorkflowPolicyUiPresentationFactory });
|
|
210
|
-
container.register(WorkflowDefinitionMapper, { useClass: WorkflowDefinitionMapper });
|
|
211
|
-
container.register(RequestToWebhookItemMapper, { useClass: RequestToWebhookItemMapper });
|
|
212
|
-
container.register(WebhookEndpointPathValidator, { useClass: WebhookEndpointPathValidator });
|
|
213
|
-
container.register(CredentialSecretCipher, { useClass: CredentialSecretCipher });
|
|
214
|
-
container.register(CredentialMaterialResolver, { useClass: CredentialMaterialResolver });
|
|
215
|
-
container.register(CredentialFieldEnvOverlayService, { useClass: CredentialFieldEnvOverlayService });
|
|
216
|
-
container.register(CredentialRuntimeMaterialService, { useClass: CredentialRuntimeMaterialService });
|
|
217
|
-
container.register(WorkflowCredentialNodeResolver, { useClass: WorkflowCredentialNodeResolver });
|
|
218
|
-
container.register(CredentialInstanceService, { useClass: CredentialInstanceService });
|
|
219
|
-
container.register(CredentialBindingService, { useClass: CredentialBindingService });
|
|
220
|
-
container.register(WorkflowActivationPreflightRules, { useClass: WorkflowActivationPreflightRules });
|
|
221
|
-
container.register(WorkflowActivationPreflight, { useClass: WorkflowActivationPreflight });
|
|
222
|
-
container.register(CredentialTestService, { useClass: CredentialTestService });
|
|
223
|
-
container.register(CredentialSessionServiceImpl, { useClass: CredentialSessionServiceImpl });
|
|
224
|
-
container.register(OAuth2ProviderRegistry, { useClass: OAuth2ProviderRegistry });
|
|
225
|
-
container.register(OAuth2ConnectService, { useClass: OAuth2ConnectService });
|
|
226
|
-
container.register(DevelopmentSessionBypassVerifier, { useClass: DevelopmentSessionBypassVerifier });
|
|
227
|
-
container.register(AuthJsSessionVerifier, {
|
|
228
|
-
useFactory: instanceCachingFactory((dependencyContainer) => {
|
|
229
|
-
const appConfig = dependencyContainer.resolve<AppConfig>(ApplicationTokens.AppConfig);
|
|
230
|
-
return new AuthJsSessionVerifier(appConfig.env.AUTH_SECRET ?? "");
|
|
231
|
-
}),
|
|
232
|
-
});
|
|
233
|
-
container.register(UserAccountService, { useClass: UserAccountService });
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
private registerRepositoriesAndBuses(container: Container): void {
|
|
237
|
-
container.register(WorkflowDefinitionRepositoryAdapter, { useClass: WorkflowDefinitionRepositoryAdapter });
|
|
238
|
-
container.register(InMemoryWorkflowRunRepository, { useClass: InMemoryWorkflowRunRepository });
|
|
239
|
-
container.register(InMemoryTriggerSetupStateRepository, { useClass: InMemoryTriggerSetupStateRepository });
|
|
240
|
-
container.register(InMemoryCredentialStore, { useClass: InMemoryCredentialStore });
|
|
241
|
-
container.register(SqlWorkflowRunRepository, { useClass: SqlWorkflowRunRepository });
|
|
242
|
-
container.register(InMemoryWorkflowDebuggerOverlayRepository, {
|
|
243
|
-
useClass: InMemoryWorkflowDebuggerOverlayRepository,
|
|
244
|
-
});
|
|
245
|
-
container.register(PrismaTriggerSetupStateRepository, { useClass: PrismaTriggerSetupStateRepository });
|
|
246
|
-
container.register(PrismaWorkflowDebuggerOverlayRepository, {
|
|
247
|
-
useClass: PrismaWorkflowDebuggerOverlayRepository,
|
|
248
|
-
});
|
|
249
|
-
container.register(PrismaWorkflowActivationRepository, { useClass: PrismaWorkflowActivationRepository });
|
|
250
|
-
container.register(InMemoryWorkflowActivationRepository, { useClass: InMemoryWorkflowActivationRepository });
|
|
251
|
-
container.register(PrismaCredentialStore, { useClass: PrismaCredentialStore });
|
|
252
|
-
container.register(ApplicationTokens.WorkflowDefinitionRepository, {
|
|
253
|
-
useFactory: instanceCachingFactory(
|
|
254
|
-
(dependencyContainer) =>
|
|
255
|
-
dependencyContainer.resolve(WorkflowDefinitionRepositoryAdapter) as unknown as WorkflowDefinitionRepository,
|
|
256
|
-
),
|
|
257
|
-
});
|
|
258
|
-
container.register(ApplicationTokens.WorkflowRunRepository, {
|
|
259
|
-
useFactory: instanceCachingFactory(
|
|
260
|
-
(dependencyContainer) =>
|
|
261
|
-
dependencyContainer.resolve(SqlWorkflowRunRepository) as unknown as WorkflowRunRepository,
|
|
262
|
-
),
|
|
263
|
-
});
|
|
264
|
-
container.register(ApplicationTokens.WorkflowDebuggerOverlayRepository, {
|
|
265
|
-
useFactory: instanceCachingFactory(
|
|
266
|
-
(dependencyContainer) =>
|
|
267
|
-
dependencyContainer.resolve(
|
|
268
|
-
InMemoryWorkflowDebuggerOverlayRepository,
|
|
269
|
-
) as unknown as WorkflowDebuggerOverlayRepository,
|
|
270
|
-
),
|
|
271
|
-
});
|
|
272
|
-
container.register(ApplicationTokens.CredentialStore, {
|
|
273
|
-
useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(InMemoryCredentialStore)),
|
|
274
|
-
});
|
|
275
|
-
container.register(InMemoryQueryBus, { useClass: InMemoryQueryBus });
|
|
276
|
-
container.register(InMemoryCommandBus, { useClass: InMemoryCommandBus });
|
|
277
|
-
container.register(InMemoryDomainEventBus, { useClass: InMemoryDomainEventBus });
|
|
278
|
-
container.register(ApplicationTokens.QueryBus, {
|
|
279
|
-
useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(InMemoryQueryBus)),
|
|
280
|
-
});
|
|
281
|
-
container.register(ApplicationTokens.CommandBus, {
|
|
282
|
-
useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(InMemoryCommandBus)),
|
|
283
|
-
});
|
|
284
|
-
container.register(ApplicationTokens.DomainEventBus, {
|
|
285
|
-
useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(InMemoryDomainEventBus)),
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
private registerApplicationServicesAndRoutes(container: Container): void {
|
|
290
|
-
container.register(DevBootstrapSummaryAssembler, { useClass: DevBootstrapSummaryAssembler });
|
|
291
|
-
container.register(DevBootstrapSummaryHttpRouteHandler, { useClass: DevBootstrapSummaryHttpRouteHandler });
|
|
292
|
-
container.register(WhitelabelLogoHttpRouteHandler, { useClass: WhitelabelLogoHttpRouteHandler });
|
|
293
|
-
container.register(CodemationHonoApiApp, { useClass: CodemationHonoApiApp });
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
private registerOperationalInfrastructure(container: Container): void {
|
|
297
|
-
container.register(ApplicationTokens.WorkflowWebsocketPublisher, {
|
|
298
|
-
useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(WorkflowWebsocketServer)),
|
|
299
|
-
});
|
|
300
|
-
container.register(WorkflowRunEventWebsocketRelay, { useClass: WorkflowRunEventWebsocketRelay });
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
private synchronizeLiveWorkflowRepository(container: Container, workflows: ReadonlyArray<WorkflowDefinition>): void {
|
|
304
|
-
const liveWorkflowRepository = container.resolve(CoreTokens.LiveWorkflowRepository);
|
|
305
|
-
liveWorkflowRepository.setWorkflows(workflows);
|
|
306
|
-
if (container.isRegistered(WebhookEndpointPathValidator, true)) {
|
|
307
|
-
container.resolve(WebhookEndpointPathValidator).validateAndWarn(workflows);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { CodemationBootstrapRequest } from "./CodemationBootstrapRequest";
|
|
2
|
-
|
|
3
|
-
export class CodemationFrontendBootstrapRequest {
|
|
4
|
-
readonly bootstrap: CodemationBootstrapRequest;
|
|
5
|
-
readonly skipPresentationServers: boolean;
|
|
6
|
-
|
|
7
|
-
constructor(
|
|
8
|
-
args: Readonly<{
|
|
9
|
-
bootstrap: CodemationBootstrapRequest;
|
|
10
|
-
skipPresentationServers?: boolean;
|
|
11
|
-
}>,
|
|
12
|
-
) {
|
|
13
|
-
this.bootstrap = args.bootstrap;
|
|
14
|
-
this.skipPresentationServers = args.skipPresentationServers ?? false;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { CodemationBootstrapRequest } from "./CodemationBootstrapRequest";
|
|
2
|
-
|
|
3
|
-
export class CodemationWorkerBootstrapRequest {
|
|
4
|
-
readonly bootstrap: CodemationBootstrapRequest;
|
|
5
|
-
readonly queues: ReadonlyArray<string>;
|
|
6
|
-
readonly bootstrapSource?: string | null;
|
|
7
|
-
|
|
8
|
-
constructor(
|
|
9
|
-
args: Readonly<{
|
|
10
|
-
bootstrap: CodemationBootstrapRequest;
|
|
11
|
-
queues: ReadonlyArray<string>;
|
|
12
|
-
bootstrapSource?: string | null;
|
|
13
|
-
}>,
|
|
14
|
-
) {
|
|
15
|
-
this.bootstrap = args.bootstrap;
|
|
16
|
-
this.queues = [...args.queues];
|
|
17
|
-
this.bootstrapSource = args.bootstrapSource;
|
|
18
|
-
}
|
|
19
|
-
}
|