@codemation/host 0.0.15 → 0.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/{AppConfigFactory-DmHOpg8O.d.ts → AppConfigFactory-D_ReOKfV.d.ts} +5 -3
  2. package/dist/{AppConfigFactory-DWIz2hy-.js → AppConfigFactory-JjNqYnGg.js} +41 -3
  3. package/dist/AppConfigFactory-JjNqYnGg.js.map +1 -0
  4. package/dist/{AppContainerFactory-B5eRpvAa.js → AppContainerFactory-_dnF0VOf.js} +272 -105
  5. package/dist/AppContainerFactory-_dnF0VOf.js.map +1 -0
  6. package/dist/{CodemationConfig-D2ULNkec.d.ts → CodemationConfig-u80ZoIrc.d.ts} +18 -10
  7. package/dist/{CodemationConfigNormalizer-CBLxXaRV.d.ts → CodemationConfigNormalizer-DCt0mPPz.d.ts} +2 -2
  8. package/dist/{CodemationConsumerConfigLoader-BLvzcfb7.d.ts → CodemationConsumerConfigLoader-C8iscLBJ.d.ts} +4 -2
  9. package/dist/{CodemationConsumerConfigLoader-BBzAr6L_.js → CodemationConsumerConfigLoader-LGrCspIx.js} +18 -4
  10. package/dist/CodemationConsumerConfigLoader-LGrCspIx.js.map +1 -0
  11. package/dist/CodemationPluginListMerger-CGwOTdZ7.js +57 -0
  12. package/dist/CodemationPluginListMerger-CGwOTdZ7.js.map +1 -0
  13. package/dist/{CodemationPluginListMerger-B0-e4CJ6.d.ts → CodemationPluginListMerger-ZY3R_kTo.d.ts} +79 -117
  14. package/dist/{CredentialServices-BeuMtqYA.d.ts → CredentialServices-Uo1jxSYB.d.ts} +2 -2
  15. package/dist/PublicFrontendBootstrap-p7mS8aWG.d.ts +50 -0
  16. package/dist/{FrontendAppConfigFactory-Bj-DZNlt.d.ts → PublicFrontendBootstrapFactory-BA65IXL4.d.ts} +19 -4
  17. package/dist/{FrontendAppConfigJsonCodec-nOCQI0ag.js → PublicFrontendBootstrapJsonCodec-BdiVGG5R.js} +76 -2
  18. package/dist/PublicFrontendBootstrapJsonCodec-BdiVGG5R.js.map +1 -0
  19. package/dist/PublicFrontendBootstrapJsonCodec-DjkkKXcq.d.ts +35 -0
  20. package/dist/client.d.ts +3 -3
  21. package/dist/client.js +2 -2
  22. package/dist/consumer.d.ts +3 -3
  23. package/dist/consumer.js +1 -1
  24. package/dist/credentials.d.ts +2 -2
  25. package/dist/index.d.ts +44 -12
  26. package/dist/index.js +8 -8
  27. package/dist/nextServer.d.ts +30 -9
  28. package/dist/nextServer.js +4 -4
  29. package/dist/{persistenceServer-CaehMh3M.d.ts → persistenceServer-BKbOs-TQ.d.ts} +2 -2
  30. package/dist/{persistenceServer-DVeWUbc3.js → persistenceServer-J2teHIIg.js} +2 -2
  31. package/dist/{persistenceServer-DVeWUbc3.js.map → persistenceServer-J2teHIIg.js.map} +1 -1
  32. package/dist/persistenceServer.d.ts +4 -4
  33. package/dist/persistenceServer.js +2 -2
  34. package/dist/{server-C65z_kqm.js → server-CVC7QBwT.js} +42 -25
  35. package/dist/server-CVC7QBwT.js.map +1 -0
  36. package/dist/{server-Dyo8qh4k.d.ts → server-CbcnGZHm.d.ts} +14 -19
  37. package/dist/server.d.ts +10 -10
  38. package/dist/server.js +7 -7
  39. package/package.json +5 -5
  40. package/src/application/dev/BootRuntimeSummary.types.ts +2 -0
  41. package/src/application/dev/DevBootstrapSummaryAssembler.ts +1 -0
  42. package/src/application/dev/DevBootstrapSummaryJson.types.ts +6 -0
  43. package/src/bootstrap/AppContainerFactory.ts +101 -6
  44. package/src/bootstrap/runtime/AppConfigFactory.ts +22 -2
  45. package/src/client.ts +4 -0
  46. package/src/index.ts +13 -5
  47. package/src/infrastructure/config/CodemationPluginRegistrar.ts +6 -0
  48. package/src/infrastructure/di/HandlesCommandRegistry.ts +1 -10
  49. package/src/infrastructure/di/HandlesQueryRegistry.ts +1 -10
  50. package/src/nextServer.ts +4 -0
  51. package/src/presentation/config/AppConfig.ts +6 -0
  52. package/src/presentation/config/CodemationPackageManifest.ts +1 -7
  53. package/src/presentation/config/CodemationPlugin.ts +45 -9
  54. package/src/presentation/config/CodemationPluginListMerger.ts +30 -26
  55. package/src/presentation/frontend/InternalAuthBootstrap.ts +12 -0
  56. package/src/presentation/frontend/InternalAuthBootstrapFactory.ts +26 -0
  57. package/src/presentation/frontend/InternalAuthBootstrapJsonCodec.ts +49 -0
  58. package/src/presentation/frontend/PublicFrontendBootstrap.ts +12 -0
  59. package/src/presentation/frontend/PublicFrontendBootstrapFactory.ts +23 -0
  60. package/src/presentation/frontend/PublicFrontendBootstrapJsonCodec.ts +48 -0
  61. package/src/presentation/http/ApiPaths.ts +10 -0
  62. package/src/presentation/http/hono/HonoHttpAnonymousRoutePolicyRegistry.ts +3 -0
  63. package/src/presentation/http/hono/registrars/BootstrapHonoApiRouteRegistrar.ts +32 -0
  64. package/src/presentation/http/routeHandlers/InternalAuthBootstrapHttpRouteHandler.ts +18 -0
  65. package/src/presentation/http/routeHandlers/PublicFrontendBootstrapHttpRouteHandler.ts +18 -0
  66. package/src/presentation/server/CodemationConsumerConfigLoader.ts +16 -3
  67. package/src/presentation/server/CodemationPluginDiscovery.ts +59 -28
  68. package/src/server.ts +6 -0
  69. package/dist/AppConfigFactory-DWIz2hy-.js.map +0 -1
  70. package/dist/AppContainerFactory-B5eRpvAa.js.map +0 -1
  71. package/dist/CodemationConsumerConfigLoader-BBzAr6L_.js.map +0 -1
  72. package/dist/CodemationPluginListMerger-DrVOw9KP.js +0 -57
  73. package/dist/CodemationPluginListMerger-DrVOw9KP.js.map +0 -1
  74. package/dist/FrontendAppConfig-D50wjj_n.d.ts +0 -27
  75. package/dist/FrontendAppConfigJsonCodec-1_L7H_Qo.d.ts +0 -20
  76. package/dist/FrontendAppConfigJsonCodec-nOCQI0ag.js.map +0 -1
  77. package/dist/server-C65z_kqm.js.map +0 -1
@@ -25,14 +25,17 @@ interface CodemationPluginContext extends CodemationRegistrationContextBase {
25
25
  readonly appConfig: AppConfig;
26
26
  readonly loggerFactory: LoggerFactory;
27
27
  }
28
- interface CodemationPlugin {
29
- /**
30
- * Optional npm package name for this plugin (e.g. `"@codemation/core-nodes-gmail"`).
31
- * When set, the host merges configured and discovered plugin lists by this id so the same package is not
32
- * registered twice when separate module graphs load duplicate class instances (different `constructor` values).
33
- */
34
- readonly pluginPackageId?: string;
35
- register(context: CodemationPluginContext): void | Promise<void>;
28
+ interface CodemationPluginConfig {
29
+ readonly credentialTypes?: ReadonlyArray<AnyCredentialType>;
30
+ readonly register?: (context: CodemationPluginContext) => void | Promise<void>;
31
+ readonly sandbox?: CodemationConfig;
32
+ }
33
+ type CodemationPlugin = CodemationPluginConfig;
34
+ declare const definePlugin: <TConfig extends CodemationPluginConfig>(config: TConfig) => TConfig;
35
+ declare class CodemationPluginPackageMetadata {
36
+ private static readonly packageNameSymbol;
37
+ attachPackageName(plugin: CodemationPlugin, packageName: string): CodemationPlugin;
38
+ readPackageName(plugin: CodemationPlugin): string | undefined;
36
39
  }
37
40
  //#endregion
38
41
  //#region src/presentation/config/AppConfig.d.ts
@@ -45,6 +48,10 @@ type AppPersistenceConfig = Readonly<{
45
48
  kind: "pglite";
46
49
  dataDir: string;
47
50
  }>;
51
+ type AppPluginLoadSummary = Readonly<{
52
+ packageName: string;
53
+ source: "configured" | "discovered";
54
+ }>;
48
55
  interface AppConfig {
49
56
  readonly consumerRoot: string;
50
57
  readonly repoRoot: string;
@@ -54,6 +61,7 @@ interface AppConfig {
54
61
  readonly containerRegistrations: ReadonlyArray<CodemationContainerRegistration<unknown>>;
55
62
  readonly credentialTypes: ReadonlyArray<AnyCredentialType>;
56
63
  readonly plugins: ReadonlyArray<CodemationPlugin>;
64
+ readonly pluginLoadSummary?: ReadonlyArray<AppPluginLoadSummary>;
57
65
  readonly hasConfiguredCredentialSessionServiceRegistration: boolean;
58
66
  readonly log?: CodemationLogConfig;
59
67
  readonly engineExecutionLimits?: CodemationEngineExecutionLimitsConfig;
@@ -168,5 +176,5 @@ interface CodemationConfig {
168
176
  readonly log?: CodemationLogConfig;
169
177
  }
170
178
  //#endregion
171
- export { AppPersistenceConfig as _, CodemationConfig as a, CodemationContainerRegistration as b, CodemationEngineExecutionLimitsConfig as c, CodemationSchedulerConfig as d, CodemationSchedulerKind as f, AppConfig as g, CodemationRegistrationContextBase as h, CodemationApplicationRuntimeConfig as i, CodemationEventBusConfig as l, CodemationAppContext as m, CodemationAppSchedulerConfig as n, CodemationDatabaseConfig as o, CodemationWorkflowDiscovery as p, CodemationAppSchedulerKind as r, CodemationDatabaseKind as s, CodemationAppDefinition as t, CodemationEventBusKind as u, CodemationPlugin as v, CodemationClassToken as x, CodemationPluginContext as y };
172
- //# sourceMappingURL=CodemationConfig-D2ULNkec.d.ts.map
179
+ export { definePlugin as C, CodemationPluginPackageMetadata as S, CodemationClassToken as T, AppPersistenceConfig as _, CodemationConfig as a, CodemationPluginConfig as b, CodemationEngineExecutionLimitsConfig as c, CodemationSchedulerConfig as d, CodemationSchedulerKind as f, AppConfig as g, CodemationRegistrationContextBase as h, CodemationApplicationRuntimeConfig as i, CodemationEventBusConfig as l, CodemationAppContext as m, CodemationAppSchedulerConfig as n, CodemationDatabaseConfig as o, CodemationWorkflowDiscovery as p, CodemationAppSchedulerKind as r, CodemationDatabaseKind as s, CodemationAppDefinition as t, CodemationEventBusKind as u, AppPluginLoadSummary as v, CodemationContainerRegistration as w, CodemationPluginContext as x, CodemationPlugin as y };
180
+ //# sourceMappingURL=CodemationConfig-u80ZoIrc.d.ts.map
@@ -1,4 +1,4 @@
1
- import { a as CodemationConfig, b as CodemationContainerRegistration } from "./CodemationConfig-D2ULNkec.js";
1
+ import { a as CodemationConfig, w as CodemationContainerRegistration } from "./CodemationConfig-u80ZoIrc.js";
2
2
 
3
3
  //#region src/presentation/config/CodemationConfigNormalizer.d.ts
4
4
  type NormalizedCodemationConfig = CodemationConfig & Readonly<{
@@ -6,4 +6,4 @@ type NormalizedCodemationConfig = CodemationConfig & Readonly<{
6
6
  }>;
7
7
  //#endregion
8
8
  export { NormalizedCodemationConfig as t };
9
- //# sourceMappingURL=CodemationConfigNormalizer-CBLxXaRV.d.ts.map
9
+ //# sourceMappingURL=CodemationConfigNormalizer-DCt0mPPz.d.ts.map
@@ -1,4 +1,4 @@
1
- import { t as NormalizedCodemationConfig } from "./CodemationConfigNormalizer-CBLxXaRV.js";
1
+ import { t as NormalizedCodemationConfig } from "./CodemationConfigNormalizer-DCt0mPPz.js";
2
2
 
3
3
  //#region src/presentation/server/CodemationConsumerAppResolver.d.ts
4
4
  type CodemationConsumerApp = Readonly<{
@@ -50,12 +50,14 @@ declare class CodemationConsumerConfigLoader {
50
50
  private getOrCreateImporter;
51
51
  private resetImporter;
52
52
  private toNamespace;
53
+ private resolveTsxImporterModuleSpecifier;
53
54
  private findNearestTsconfig;
54
55
  private createImportSpecifier;
55
56
  private shouldUseNativeRuntimeImport;
57
+ private shouldResetImporterBeforeImport;
56
58
  private isStoppedTransformServiceError;
57
59
  private exists;
58
60
  }
59
61
  //#endregion
60
62
  export { CodemationConsumerAppResolver as i, CodemationConsumerConfigResolution as n, CodemationConsumerApp as r, CodemationConsumerConfigLoader as t };
61
- //# sourceMappingURL=CodemationConsumerConfigLoader-BLvzcfb7.d.ts.map
63
+ //# sourceMappingURL=CodemationConsumerConfigLoader-C8iscLBJ.d.ts.map
@@ -2,7 +2,6 @@ import { s as logLevelPolicyFactory, t as ServerLoggerFactory } from "./ServerLo
2
2
  import { access, readdir, stat } from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { pathToFileURL } from "node:url";
5
- import { register } from "tsx/esm/api";
6
5
 
7
6
  //#region src/presentation/config/CodemationConfigNormalizer.ts
8
7
  var CodemationConfigNormalizer = class {
@@ -384,9 +383,10 @@ var CodemationConsumerConfigLoader = class CodemationConsumerConfigLoader {
384
383
  async importModule(modulePath) {
385
384
  if (this.shouldUseNativeRuntimeImport()) return await this.importModuleWithNativeRuntime(modulePath);
386
385
  const tsconfigPath = await this.resolveTsconfigPath(modulePath);
386
+ if (this.shouldResetImporterBeforeImport()) await this.resetImporter(tsconfigPath);
387
387
  const importSpecifier = await this.createImportSpecifier(modulePath);
388
388
  for (let attempt = 0; attempt < 3; attempt += 1) try {
389
- return await this.getOrCreateImporter(tsconfigPath).import(importSpecifier, import.meta.url);
389
+ return await (await this.getOrCreateImporter(tsconfigPath)).import(importSpecifier, import.meta.url);
390
390
  } catch (error) {
391
391
  if (!this.isStoppedTransformServiceError(error) || attempt === 2) throw error;
392
392
  await this.resetImporter(tsconfigPath);
@@ -401,10 +401,14 @@ var CodemationConsumerConfigLoader = class CodemationConsumerConfigLoader {
401
401
  if (overridePath && await this.exists(overridePath)) return overridePath;
402
402
  return await this.findNearestTsconfig(modulePath) ?? false;
403
403
  }
404
- getOrCreateImporter(tsconfigPath) {
404
+ async getOrCreateImporter(tsconfigPath) {
405
405
  const cacheKey = tsconfigPath || "default";
406
406
  const existingImporter = CodemationConsumerConfigLoader.importerRegistrationsByTsconfig.get(cacheKey);
407
407
  if (existingImporter) return existingImporter;
408
+ const { register } = await import(
409
+ /* webpackIgnore: true */
410
+ this.resolveTsxImporterModuleSpecifier()
411
+ );
408
412
  const nextImporter = register({
409
413
  namespace: this.toNamespace(cacheKey),
410
414
  tsconfig: tsconfigPath
@@ -422,6 +426,13 @@ var CodemationConsumerConfigLoader = class CodemationConsumerConfigLoader {
422
426
  toNamespace(cacheKey) {
423
427
  return `codemation_consumer_${cacheKey.replace(/[^a-zA-Z0-9_-]+/g, "_")}`;
424
428
  }
429
+ resolveTsxImporterModuleSpecifier() {
430
+ return [
431
+ "tsx",
432
+ "esm",
433
+ "api"
434
+ ].join("/");
435
+ }
425
436
  async findNearestTsconfig(modulePath) {
426
437
  let currentDirectory = path.dirname(modulePath);
427
438
  while (true) {
@@ -441,6 +452,9 @@ var CodemationConsumerConfigLoader = class CodemationConsumerConfigLoader {
441
452
  shouldUseNativeRuntimeImport() {
442
453
  return process.env.CODEMATION_TS_RUNTIME === "ts-node";
443
454
  }
455
+ shouldResetImporterBeforeImport() {
456
+ return (process.env.CODEMATION_DEV_SERVER_TOKEN?.trim().length ?? 0) > 0;
457
+ }
444
458
  isStoppedTransformServiceError(error) {
445
459
  return error instanceof Error && error.message.includes("The service is no longer running");
446
460
  }
@@ -456,4 +470,4 @@ var CodemationConsumerConfigLoader = class CodemationConsumerConfigLoader {
456
470
 
457
471
  //#endregion
458
472
  export { CodemationConfigNormalizer as a, CodemationConsumerAppResolver as i, WorkflowDiscoveryPathSegmentsComputer as n, WorkflowModulePathFinder as r, CodemationConsumerConfigLoader as t };
459
- //# sourceMappingURL=CodemationConsumerConfigLoader-BBzAr6L_.js.map
473
+ //# sourceMappingURL=CodemationConsumerConfigLoader-LGrCspIx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodemationConsumerConfigLoader-LGrCspIx.js","names":["containerRegistrations: Array<CodemationContainerRegistration<unknown>>","credentialTypes: Array<AnyCredentialType>","workflows: Array<WorkflowDefinition>","workflowDirectories: Array<string>","workflows: WorkflowDefinition[]","workflowModulePaths: string[]","bestRoot: string | null","resolvedConfig: NormalizedCodemationConfig"],"sources":["../src/presentation/config/CodemationConfigNormalizer.ts","../src/presentation/server/CodemationConsumerConfigExportsResolver.ts","../src/presentation/server/DiscoveredWorkflowsEmptyMessageFactory.ts","../src/presentation/server/WorkflowDefinitionExportsResolver.ts","../src/presentation/server/CodemationConsumerAppResolver.ts","../src/presentation/server/WorkflowModulePathFinder.ts","../src/presentation/server/WorkflowDiscoveryPathSegmentsComputer.ts","../src/presentation/server/CodemationConsumerConfigLoader.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 { CodemationConfig } from \"../config/CodemationConfig\";\n\nexport class CodemationConsumerConfigExportsResolver {\n resolveConfig(moduleExports: Readonly<Record<string, unknown>>): CodemationConfig | null {\n const defaultExport = moduleExports.default;\n if (this.isConfig(defaultExport)) {\n return defaultExport;\n }\n const namedConfig = moduleExports.codemationHost ?? moduleExports.config;\n if (this.isConfig(namedConfig)) {\n return namedConfig;\n }\n return null;\n }\n\n private isConfig(value: unknown): value is CodemationConfig {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n return (\n \"app\" in value ||\n \"register\" in value ||\n \"credentials\" in value ||\n \"runtime\" in value ||\n \"workflows\" in value ||\n \"workflowDiscovery\" in value ||\n \"plugins\" in value ||\n \"whitelabel\" in value ||\n \"auth\" in value ||\n \"log\" in value\n );\n }\n}\n","export class DiscoveredWorkflowsEmptyMessageFactory {\n create(discoveredPaths: ReadonlyArray<string>): string {\n const lines = discoveredPaths.map((p) => ` - ${p}`).join(\"\\n\");\n return [\n `Discovered ${discoveredPaths.length} file(s) under workflow discovery, but none export a WorkflowDefinition.`,\n lines,\n \"\",\n \"Move shared helpers outside the discovery directories (for example src/lib), or export at least one object with id, name, nodes, and edges from a workflow module.\",\n ].join(\"\\n\");\n }\n}\n","import type { WorkflowDefinition } from \"@codemation/core\";\n\n/**\n * Collects exported values that match the {@link WorkflowDefinition} shape.\n * Other exports (helpers, constants, type-only re-exports) are ignored.\n */\nexport class WorkflowDefinitionExportsResolver {\n resolve(moduleExports: Readonly<Record<string, unknown>>): ReadonlyArray<WorkflowDefinition> {\n const workflows: WorkflowDefinition[] = [];\n for (const exportedValue of Object.values(moduleExports)) {\n if (this.isWorkflowDefinition(exportedValue)) {\n workflows.push(exportedValue);\n }\n }\n return workflows;\n }\n\n private isWorkflowDefinition(value: unknown): value is WorkflowDefinition {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n return \"id\" in value && \"name\" in value && \"nodes\" in value && \"edges\" in value;\n }\n}\n","import type { WorkflowDefinition } from \"@codemation/core\";\nimport { CodemationConfigNormalizer } from \"../config/CodemationConfigNormalizer\";\nimport type { NormalizedCodemationConfig } from \"../config/CodemationConfigNormalizer\";\nimport { CodemationConsumerConfigExportsResolver } from \"./CodemationConsumerConfigExportsResolver\";\nimport { DiscoveredWorkflowsEmptyMessageFactory } from \"./DiscoveredWorkflowsEmptyMessageFactory\";\nimport { WorkflowDefinitionExportsResolver } from \"./WorkflowDefinitionExportsResolver\";\n\nexport type CodemationConsumerApp = Readonly<{\n config: NormalizedCodemationConfig;\n workflowSources: ReadonlyArray<string>;\n}>;\n\nexport class CodemationConsumerAppResolver {\n private readonly configExportsResolver = new CodemationConsumerConfigExportsResolver();\n private readonly configNormalizer = new CodemationConfigNormalizer();\n private readonly workflowDefinitionExportsResolver = new WorkflowDefinitionExportsResolver();\n private readonly discoveredWorkflowsEmptyMessageFactory = new DiscoveredWorkflowsEmptyMessageFactory();\n\n resolve(\n args: Readonly<{\n configModule: Readonly<Record<string, unknown>>;\n workflowModules: ReadonlyArray<Readonly<Record<string, unknown>>>;\n workflowSourcePaths: ReadonlyArray<string>;\n workflowDiscoveryPathSegmentsList?: ReadonlyArray<readonly string[]>;\n }>,\n ): CodemationConsumerApp {\n const rawConfig = this.configExportsResolver.resolveConfig(args.configModule);\n if (!rawConfig) {\n throw new Error(\"Consumer app module does not export a Codemation config object.\");\n }\n const config = this.configNormalizer.normalize(rawConfig);\n const discoveredWorkflows = this.resolveDiscoveredWorkflows(\n args.workflowModules,\n args.workflowSourcePaths,\n args.workflowDiscoveryPathSegmentsList,\n );\n return {\n config: {\n ...config,\n workflows: this.mergeWorkflows(config.workflows ?? [], discoveredWorkflows),\n },\n workflowSources: args.workflowSourcePaths,\n };\n }\n\n private resolveDiscoveredWorkflows(\n workflowModules: ReadonlyArray<Readonly<Record<string, unknown>>>,\n workflowSourcePaths: ReadonlyArray<string>,\n workflowDiscoveryPathSegmentsList: ReadonlyArray<readonly string[]> | undefined,\n ): ReadonlyArray<WorkflowDefinition> {\n const workflowsById = new Map<string, WorkflowDefinition>();\n workflowModules.forEach((workflowModule: Readonly<Record<string, unknown>>, index: number) => {\n const pathSegments = workflowDiscoveryPathSegmentsList?.[index];\n const workflows = this.workflowDefinitionExportsResolver.resolve(workflowModule);\n workflows.forEach((workflow: WorkflowDefinition) => {\n const enriched =\n pathSegments && pathSegments.length > 0\n ? ({ ...workflow, discoveryPathSegments: pathSegments } satisfies WorkflowDefinition)\n : workflow;\n workflowsById.set(workflow.id, enriched);\n });\n });\n if (workflowsById.size === 0 && workflowSourcePaths.length > 0) {\n throw new Error(this.discoveredWorkflowsEmptyMessageFactory.create(workflowSourcePaths));\n }\n return [...workflowsById.values()];\n }\n\n private mergeWorkflows(\n configuredWorkflows: ReadonlyArray<WorkflowDefinition>,\n discoveredWorkflows: ReadonlyArray<WorkflowDefinition>,\n ): ReadonlyArray<WorkflowDefinition> {\n const workflowsById = new Map<string, WorkflowDefinition>();\n for (const workflow of discoveredWorkflows) {\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 { readdir } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport class WorkflowModulePathFinder {\n static readonly defaultWorkflowDirectories = [\"src/workflows\", \"workflows\"] as const;\n private readonly workflowExtensions = new Set([\".ts\", \".js\", \".mts\", \".mjs\"]);\n\n async discoverModulePaths(\n args: Readonly<{\n consumerRoot: string;\n workflowDirectories: ReadonlyArray<string> | undefined;\n exists: (absolutePath: string) => Promise<boolean>;\n }>,\n ): Promise<ReadonlyArray<string>> {\n const directories = args.workflowDirectories ?? WorkflowModulePathFinder.defaultWorkflowDirectories;\n const workflowModulePaths: string[] = [];\n for (const directory of directories) {\n const absoluteDirectory = path.resolve(args.consumerRoot, directory);\n if (!(await args.exists(absoluteDirectory))) {\n continue;\n }\n workflowModulePaths.push(...(await this.collectWorkflowModulePaths(absoluteDirectory)));\n }\n return workflowModulePaths;\n }\n\n private async collectWorkflowModulePaths(directoryPath: string): Promise<ReadonlyArray<string>> {\n const entries = await readdir(directoryPath, { withFileTypes: true });\n const workflowModulePaths: string[] = [];\n for (const entry of entries) {\n const entryPath = path.resolve(directoryPath, entry.name);\n if (entry.isDirectory()) {\n workflowModulePaths.push(...(await this.collectWorkflowModulePaths(entryPath)));\n continue;\n }\n if (this.isWorkflowModulePath(entryPath)) {\n workflowModulePaths.push(entryPath);\n }\n }\n return workflowModulePaths;\n }\n\n private isWorkflowModulePath(modulePath: string): boolean {\n const extension = path.extname(modulePath);\n return this.workflowExtensions.has(extension) && !modulePath.endsWith(\".d.ts\");\n }\n}\n","import path from \"node:path\";\n\nimport { WorkflowModulePathFinder } from \"./WorkflowModulePathFinder\";\n\nexport class WorkflowDiscoveryPathSegmentsComputer {\n compute(\n args: Readonly<{\n consumerRoot: string;\n workflowDiscoveryDirectories: ReadonlyArray<string>;\n absoluteWorkflowModulePath: string;\n }>,\n ): readonly string[] | undefined {\n const normalizedConsumer = path.resolve(args.consumerRoot);\n const normalizedWorkflowPath = path.resolve(args.absoluteWorkflowModulePath);\n const directories =\n args.workflowDiscoveryDirectories.length > 0\n ? args.workflowDiscoveryDirectories\n : [...WorkflowModulePathFinder.defaultWorkflowDirectories];\n\n let bestRoot: string | null = null;\n for (const directory of directories) {\n const absoluteDirectory = path.resolve(normalizedConsumer, directory);\n const isPrefix =\n normalizedWorkflowPath === absoluteDirectory ||\n normalizedWorkflowPath.startsWith(`${absoluteDirectory}${path.sep}`);\n if (!isPrefix) {\n continue;\n }\n if (!bestRoot || absoluteDirectory.length > bestRoot.length) {\n bestRoot = absoluteDirectory;\n }\n }\n if (!bestRoot) {\n return undefined;\n }\n const relative = path.relative(bestRoot, normalizedWorkflowPath);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n return undefined;\n }\n if (relative.length === 0) {\n return undefined;\n }\n const parts = relative.split(path.sep).filter((segment) => segment.length > 0);\n if (parts.length === 0) {\n return undefined;\n }\n const lastIndex = parts.length - 1;\n const last = parts[lastIndex] ?? \"\";\n const ext = path.extname(last);\n parts[lastIndex] = ext ? last.slice(0, -ext.length) : last;\n return parts;\n }\n}\n","import type { WorkflowDefinition } from \"@codemation/core\";\nimport { access, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { NamespacedUnregister } from \"tsx/esm/api\";\nimport type { CodemationConfig } from \"../config/CodemationConfig\";\nimport { CodemationConfigNormalizer } from \"../config/CodemationConfigNormalizer\";\nimport type { NormalizedCodemationConfig } from \"../config/CodemationConfigNormalizer\";\nimport { logLevelPolicyFactory } from \"../../infrastructure/logging/LogLevelPolicyFactory\";\nimport { ServerLoggerFactory } from \"../../infrastructure/logging/ServerLoggerFactory\";\nimport { DiscoveredWorkflowsEmptyMessageFactory } from \"./DiscoveredWorkflowsEmptyMessageFactory\";\nimport { CodemationConsumerConfigExportsResolver } from \"./CodemationConsumerConfigExportsResolver\";\nimport { WorkflowDefinitionExportsResolver } from \"./WorkflowDefinitionExportsResolver\";\nimport { WorkflowDiscoveryPathSegmentsComputer } from \"./WorkflowDiscoveryPathSegmentsComputer\";\nimport { WorkflowModulePathFinder } from \"./WorkflowModulePathFinder\";\n\nexport type CodemationConsumerConfigResolution = Readonly<{\n config: NormalizedCodemationConfig;\n bootstrapSource: string | null;\n workflowSources: ReadonlyArray<string>;\n}>;\n\nexport class CodemationConsumerConfigLoader {\n private static readonly importerRegistrationsByTsconfig = new Map<string, NamespacedUnregister>();\n private readonly configExportsResolver = new CodemationConsumerConfigExportsResolver();\n private readonly configNormalizer = new CodemationConfigNormalizer();\n private readonly workflowModulePathFinder = new WorkflowModulePathFinder();\n private readonly workflowDefinitionExportsResolver = new WorkflowDefinitionExportsResolver();\n private readonly discoveredWorkflowsEmptyMessageFactory = new DiscoveredWorkflowsEmptyMessageFactory();\n private readonly pathSegmentsComputer = new WorkflowDiscoveryPathSegmentsComputer();\n private readonly performanceDiagnosticsLogger = new ServerLoggerFactory(\n logLevelPolicyFactory,\n ).createPerformanceDiagnostics(\"codemation-config-loader.timing\");\n\n async load(\n args: Readonly<{ consumerRoot: string; configPathOverride?: string }>,\n ): Promise<CodemationConsumerConfigResolution> {\n const loadStarted = performance.now();\n let mark = loadStarted;\n const phaseMs = (label: string): void => {\n const now = performance.now();\n const delta = now - mark;\n mark = now;\n this.performanceDiagnosticsLogger.info(\n `load.${label} +${delta.toFixed(1)}ms (cumulative ${(now - loadStarted).toFixed(1)}ms)`,\n );\n };\n const bootstrapSource = await this.resolveConfigPath(args.consumerRoot, args.configPathOverride);\n phaseMs(\"resolveConfigPath\");\n if (!bootstrapSource) {\n throw new Error(\n 'Codemation config not found. Expected \"codemation.config.ts\" in the consumer project root or \"src/\".',\n );\n }\n const moduleExports = await this.importModule(bootstrapSource);\n phaseMs(\"importConfigModule\");\n const rawConfig = this.configExportsResolver.resolveConfig(moduleExports);\n if (!rawConfig) {\n throw new Error(`Config file does not export a Codemation config object: ${bootstrapSource}`);\n }\n const config = this.configNormalizer.normalize(rawConfig);\n const workflowSources = await this.resolveWorkflowSources(args.consumerRoot, config);\n phaseMs(\"resolveWorkflowSources\");\n const workflows = this.mergeWorkflows(\n config.workflows ?? [],\n await this.loadDiscoveredWorkflows(args.consumerRoot, config, workflowSources),\n );\n phaseMs(\"loadDiscoveredWorkflows\");\n const resolvedConfig: NormalizedCodemationConfig = {\n ...config,\n workflows,\n };\n logLevelPolicyFactory.create().applyCodemationLogConfig(resolvedConfig.log);\n return {\n config: resolvedConfig,\n bootstrapSource,\n workflowSources,\n };\n }\n\n private async resolveConfigPath(\n consumerRoot: string,\n configPathOverride: string | undefined,\n ): Promise<string | null> {\n if (configPathOverride) {\n const explicitPath = path.isAbsolute(configPathOverride)\n ? configPathOverride\n : path.resolve(consumerRoot, configPathOverride);\n if (!(await this.exists(explicitPath))) {\n throw new Error(`Config file not found: ${explicitPath}`);\n }\n return explicitPath;\n }\n for (const candidate of this.getConventionCandidates(consumerRoot)) {\n if (await this.exists(candidate)) {\n return candidate;\n }\n }\n return null;\n }\n\n private getConventionCandidates(consumerRoot: string): ReadonlyArray<string> {\n return [\n path.resolve(consumerRoot, \"codemation.config.ts\"),\n path.resolve(consumerRoot, \"codemation.config.js\"),\n path.resolve(consumerRoot, \"src\", \"codemation.config.ts\"),\n path.resolve(consumerRoot, \"src\", \"codemation.config.js\"),\n ];\n }\n\n private async resolveWorkflowSources(consumerRoot: string, config: CodemationConfig): Promise<ReadonlyArray<string>> {\n if ((config.workflowDiscovery?.directories?.length ?? 0) === 0) {\n return [];\n }\n const discoveredPaths = await this.workflowModulePathFinder.discoverModulePaths({\n consumerRoot,\n workflowDirectories: config.workflowDiscovery?.directories,\n exists: (absolutePath) => this.exists(absolutePath),\n });\n return [...discoveredPaths].sort((left: string, right: string) => left.localeCompare(right));\n }\n\n private async loadDiscoveredWorkflows(\n consumerRoot: string,\n config: CodemationConfig,\n workflowSources: ReadonlyArray<string>,\n ): Promise<ReadonlyArray<WorkflowDefinition>> {\n const workflowDiscoveryDirectories = config.workflowDiscovery?.directories ?? [];\n const workflowsById = new Map<string, WorkflowDefinition>();\n const loadedWorkflowModules = await Promise.all(\n workflowSources.map(async (workflowSource: string) => ({\n workflowSource,\n segments: this.pathSegmentsComputer.compute({\n consumerRoot,\n workflowDiscoveryDirectories,\n absoluteWorkflowModulePath: workflowSource,\n }),\n moduleExports: await this.importModule(workflowSource),\n })),\n );\n for (const loadedWorkflowModule of loadedWorkflowModules) {\n for (const workflow of this.workflowDefinitionExportsResolver.resolve(loadedWorkflowModule.moduleExports)) {\n const enriched =\n loadedWorkflowModule.segments && loadedWorkflowModule.segments.length > 0\n ? ({ ...workflow, discoveryPathSegments: loadedWorkflowModule.segments } satisfies WorkflowDefinition)\n : workflow;\n workflowsById.set(workflow.id, enriched);\n }\n }\n if (workflowsById.size === 0 && workflowSources.length > 0) {\n throw new Error(this.discoveredWorkflowsEmptyMessageFactory.create(workflowSources));\n }\n return [...workflowsById.values()];\n }\n\n private mergeWorkflows(\n configuredWorkflows: ReadonlyArray<WorkflowDefinition>,\n discoveredWorkflows: ReadonlyArray<WorkflowDefinition>,\n ): ReadonlyArray<WorkflowDefinition> {\n const workflowsById = new Map<string, WorkflowDefinition>();\n for (const workflow of discoveredWorkflows) {\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 private async importModule(modulePath: string): Promise<Record<string, unknown>> {\n if (this.shouldUseNativeRuntimeImport()) {\n return await this.importModuleWithNativeRuntime(modulePath);\n }\n const tsconfigPath = await this.resolveTsconfigPath(modulePath);\n if (this.shouldResetImporterBeforeImport()) {\n await this.resetImporter(tsconfigPath);\n }\n const importSpecifier = await this.createImportSpecifier(modulePath);\n for (let attempt = 0; attempt < 3; attempt += 1) {\n try {\n const importedModule = await (\n await this.getOrCreateImporter(tsconfigPath)\n ).import(importSpecifier, import.meta.url);\n return importedModule as Record<string, unknown>;\n } catch (error) {\n if (!this.isStoppedTransformServiceError(error) || attempt === 2) {\n throw error;\n }\n await this.resetImporter(tsconfigPath);\n }\n }\n throw new Error(`Failed to import consumer module after retries: ${modulePath}`);\n }\n\n private async importModuleWithNativeRuntime(modulePath: string): Promise<Record<string, unknown>> {\n const importedModule = await import(await this.createImportSpecifier(modulePath));\n return importedModule as Record<string, unknown>;\n }\n\n private async resolveTsconfigPath(modulePath: string): Promise<string | false> {\n const overridePath = process.env.CODEMATION_TSCONFIG_PATH;\n if (overridePath && (await this.exists(overridePath))) {\n return overridePath;\n }\n const discoveredPath = await this.findNearestTsconfig(modulePath);\n return discoveredPath ?? false;\n }\n\n private async getOrCreateImporter(tsconfigPath: string | false): Promise<NamespacedUnregister> {\n const cacheKey = tsconfigPath || \"default\";\n const existingImporter = CodemationConsumerConfigLoader.importerRegistrationsByTsconfig.get(cacheKey);\n if (existingImporter) {\n return existingImporter;\n }\n const { register } = await import(/* webpackIgnore: true */ this.resolveTsxImporterModuleSpecifier());\n const nextImporter = register({\n namespace: this.toNamespace(cacheKey),\n tsconfig: tsconfigPath,\n });\n CodemationConsumerConfigLoader.importerRegistrationsByTsconfig.set(cacheKey, nextImporter);\n return nextImporter;\n }\n\n private async resetImporter(tsconfigPath: string | false): Promise<void> {\n const cacheKey = tsconfigPath || \"default\";\n const existingImporter = CodemationConsumerConfigLoader.importerRegistrationsByTsconfig.get(cacheKey);\n if (!existingImporter) {\n return;\n }\n CodemationConsumerConfigLoader.importerRegistrationsByTsconfig.delete(cacheKey);\n await existingImporter.unregister().catch(() => null);\n }\n\n private toNamespace(cacheKey: string): string {\n return `codemation_consumer_${cacheKey.replace(/[^a-zA-Z0-9_-]+/g, \"_\")}`;\n }\n\n private resolveTsxImporterModuleSpecifier(): string {\n return [\"tsx\", \"esm\", \"api\"].join(\"/\");\n }\n\n private async findNearestTsconfig(modulePath: string): Promise<string | null> {\n let currentDirectory = path.dirname(modulePath);\n while (true) {\n const candidate = path.resolve(currentDirectory, \"tsconfig.json\");\n if (await this.exists(candidate)) {\n return candidate;\n }\n const parentDirectory = path.dirname(currentDirectory);\n if (parentDirectory === currentDirectory) {\n return null;\n }\n currentDirectory = parentDirectory;\n }\n }\n\n private async createImportSpecifier(modulePath: string): Promise<string> {\n const moduleUrl = pathToFileURL(modulePath);\n const moduleStats = await stat(modulePath);\n moduleUrl.searchParams.set(\"t\", String(moduleStats.mtimeMs));\n return moduleUrl.href;\n }\n\n private shouldUseNativeRuntimeImport(): boolean {\n return process.env.CODEMATION_TS_RUNTIME === \"ts-node\";\n }\n\n private shouldResetImporterBeforeImport(): boolean {\n return (process.env.CODEMATION_DEV_SERVER_TOKEN?.trim().length ?? 0) > 0;\n }\n\n private isStoppedTransformServiceError(error: unknown): boolean {\n return error instanceof Error && error.message.includes(\"The service is no longer running\");\n }\n\n private async exists(filePath: string): Promise<boolean> {\n try {\n await access(filePath);\n return true;\n } catch {\n return false;\n }\n }\n}\n"],"mappings":";;;;;;AAiBA,IAAa,6BAAb,MAAwC;CACtC,UAAU,QAAsD;EAC9D,MAAM,YAAY,KAAK,oBAAoB,OAAO;EAClD,MAAM,oBAAoB,KAAK,uBAAuB,OAAO;EAC7D,MAAM,yCAAyC,CAC7C,GAAI,OAAO,mBAAmB,eAAe,EAAE,EAC/C,GAAG,UAAU,oBACd;AAED,SAAO;GACL,GAAG;GACH,MAAM,OAAO,KAAK,QAAQ,OAAO;GACjC,wBAAwB,UAAU;GAClC,iBAAiB,CAAC,GAAI,OAAO,mBAAmB,EAAE,EAAG,GAAG,UAAU,gBAAgB;GAClF,KAAK,OAAO,KAAK,OAAO,OAAO;GAC/B,SAAS;GACT,YAAY,OAAO,KAAK,cAAc,OAAO;GAC7C,mBACE,uCAAuC,SAAS,IAC5C,EAAE,aAAa,wCAAwC,GACvD,OAAO;GACb,WAAW,KAAK,eAAe,OAAO,aAAa,EAAE,EAAE,UAAU,UAAU;GAC5E;;CAGH,AAAQ,oBAAoB,QAKzB;AACD,MAAI,CAAC,OAAO,SACV,QAAO;GACL,wBAAwB,EAAE;GAC1B,iBAAiB,EAAE;GACnB,WAAW,EAAE;GACb,qBAAqB,EAAE;GACxB;EAGH,MAAMA,yBAA0E,EAAE;EAClF,MAAMC,kBAA4C,EAAE;EACpD,MAAMC,YAAuC,EAAE;EAC/C,MAAMC,sBAAqC,EAAE;AAgC7C,SAAO,SA9B+B;GACpC,uBAAuB,MAAM;AAC3B,oBAAgB,KAAK,KAAK;;GAE5B,aAAqB,OAA0B,gBAA+C;AAC5F,2BAAuB,KAAK;KAC1B;KACA,UAAU,kBAAmB;KAC9B,CAAC;;GAEJ,cAAsB,OAA0B,OAAe;AAC7D,2BAAuB,KAAK;KAAE;KAAO,UAAU;KAAO,CAAC;;GAEzD,cAAsB,OAA0B,gBAA8C;AAC5F,2BAAuB,KAAK;KAAE;KAAO,UAAU;KAAgB,CAAC;;GAElE,gBAAwB,OAA0B,SAA2C;AAC3F,2BAAuB,KAAK;KAAE;KAAO,YAAY;KAAS,CAAC;;GAE7D,iBAAiB,UAA8B;AAC7C,cAAU,KAAK,SAAS;;GAE1B,kBAAkB,eAAkD;AAClE,cAAU,KAAK,GAAG,cAAc;;GAElC,kBAAkB,GAAG,aAAoC;AACvD,wBAAoB,KAAK,GAAG,YAAY;;GAE3C,CAEuB;AAExB,SAAO;GACL;GACA;GACA;GACA;GACD;;CAGH,AAAQ,uBAAuB,QAA0E;AACvG,MAAI,CAAC,OAAO,IACV,QAAO,OAAO;AAUhB,SARwD;GACtD,GAAI,OAAO,WAAW,EAAE;GACxB,cAAc,OAAO,IAAI,gBAAgB,OAAO,SAAS;GACzD,UAAU,KAAK,wBAAwB,OAAO;GAC9C,UAAU,KAAK,wBAAwB,OAAO;GAC9C,WAAW,KAAK,yBAAyB,OAAO;GAChD,uBAAuB,OAAO,IAAI,yBAAyB,OAAO,SAAS;GAC5E;;CAIH,AAAQ,wBAAwB,QAAgE;AAC9F,MAAI,CAAC,OAAO,IACV,QAAO,OAAO,SAAS;AAEzB,MAAI,OAAO,IAAI,SACb,QAAO,OAAO,IAAI;AAEpB,MAAI,CAAC,OAAO,IAAI,YACd,QAAO,OAAO,SAAS;AAEzB,SAAO;GACL,GAAI,OAAO,SAAS,YAAY,EAAE;GAClC,KAAK,OAAO,IAAI;GACjB;;CAGH,AAAQ,yBAAyB,QAAiE;AAChG,MAAI,CAAC,OAAO,KAAK,UACf,QAAO,OAAO,SAAS;EAEzB,MAAM,YAAY,OAAO,IAAI;AAC7B,SAAO;GACL,GAAI,OAAO,SAAS,aAAa,EAAE;GACnC,MACE,UAAU,SAAS,UAAU,WAAW,UAAU,SAAS,WAAW,UAAU,OAAO,SAAS,WAAW;GAC7G,aAAa,UAAU,eAAe,OAAO,SAAS,WAAW;GACjE,cAAc,UAAU,gBAAgB,OAAO,SAAS,WAAW;GACpE;;CAGH,AAAQ,wBAAwB,QAAgE;AAC9F,MAAI,CAAC,OAAO,KAAK,UACf,QAAO,OAAO,SAAS;EAEzB,MAAM,YAAY,OAAO,IAAI;EAC7B,MAAM,eACJ,UAAU,SAAS,UAAU,UAAU,UAAU,SAAS,WAAW,WAAW,OAAO,SAAS,UAAU;AAC5G,SAAO;GACL,GAAI,OAAO,SAAS,YAAY,EAAE;GAClC,MAAM;GACN,aAAa,UAAU,eAAe,OAAO,SAAS,UAAU;GAChE,UAAU,UAAU,YAAY,OAAO,SAAS,UAAU;GAC3D;;CAGH,AAAQ,eACN,qBACA,qBAC+C;AAC/C,MAAI,oBAAoB,WAAW,KAAK,oBAAoB,WAAW,EACrE;EAEF,MAAM,gCAAgB,IAAI,KAAiC;AAC3D,OAAK,MAAM,YAAY,oBACrB,eAAc,IAAI,SAAS,IAAI,SAAS;AAE1C,OAAK,MAAM,YAAY,oBACrB,eAAc,IAAI,SAAS,IAAI,SAAS;AAE1C,SAAO,CAAC,GAAG,cAAc,QAAQ,CAAC;;;;;;AC9KtC,IAAa,0CAAb,MAAqD;CACnD,cAAc,eAA2E;EACvF,MAAM,gBAAgB,cAAc;AACpC,MAAI,KAAK,SAAS,cAAc,CAC9B,QAAO;EAET,MAAM,cAAc,cAAc,kBAAkB,cAAc;AAClE,MAAI,KAAK,SAAS,YAAY,CAC5B,QAAO;AAET,SAAO;;CAGT,AAAQ,SAAS,OAA2C;AAC1D,MAAI,CAAC,SAAS,OAAO,UAAU,SAC7B,QAAO;AAET,SACE,SAAS,SACT,cAAc,SACd,iBAAiB,SACjB,aAAa,SACb,eAAe,SACf,uBAAuB,SACvB,aAAa,SACb,gBAAgB,SAChB,UAAU,SACV,SAAS;;;;;;AC7Bf,IAAa,yCAAb,MAAoD;CAClD,OAAO,iBAAgD;EACrD,MAAM,QAAQ,gBAAgB,KAAK,MAAM,OAAO,IAAI,CAAC,KAAK,KAAK;AAC/D,SAAO;GACL,cAAc,gBAAgB,OAAO;GACrC;GACA;GACA;GACD,CAAC,KAAK,KAAK;;;;;;;;;;ACFhB,IAAa,oCAAb,MAA+C;CAC7C,QAAQ,eAAqF;EAC3F,MAAMC,YAAkC,EAAE;AAC1C,OAAK,MAAM,iBAAiB,OAAO,OAAO,cAAc,CACtD,KAAI,KAAK,qBAAqB,cAAc,CAC1C,WAAU,KAAK,cAAc;AAGjC,SAAO;;CAGT,AAAQ,qBAAqB,OAA6C;AACxE,MAAI,CAAC,SAAS,OAAO,UAAU,SAC7B,QAAO;AAET,SAAO,QAAQ,SAAS,UAAU,SAAS,WAAW,SAAS,WAAW;;;;;;ACT9E,IAAa,gCAAb,MAA2C;CACzC,AAAiB,wBAAwB,IAAI,yCAAyC;CACtF,AAAiB,mBAAmB,IAAI,4BAA4B;CACpE,AAAiB,oCAAoC,IAAI,mCAAmC;CAC5F,AAAiB,yCAAyC,IAAI,wCAAwC;CAEtG,QACE,MAMuB;EACvB,MAAM,YAAY,KAAK,sBAAsB,cAAc,KAAK,aAAa;AAC7E,MAAI,CAAC,UACH,OAAM,IAAI,MAAM,kEAAkE;EAEpF,MAAM,SAAS,KAAK,iBAAiB,UAAU,UAAU;EACzD,MAAM,sBAAsB,KAAK,2BAC/B,KAAK,iBACL,KAAK,qBACL,KAAK,kCACN;AACD,SAAO;GACL,QAAQ;IACN,GAAG;IACH,WAAW,KAAK,eAAe,OAAO,aAAa,EAAE,EAAE,oBAAoB;IAC5E;GACD,iBAAiB,KAAK;GACvB;;CAGH,AAAQ,2BACN,iBACA,qBACA,mCACmC;EACnC,MAAM,gCAAgB,IAAI,KAAiC;AAC3D,kBAAgB,SAAS,gBAAmD,UAAkB;GAC5F,MAAM,eAAe,oCAAoC;AAEzD,GADkB,KAAK,kCAAkC,QAAQ,eAAe,CACtE,SAAS,aAAiC;IAClD,MAAM,WACJ,gBAAgB,aAAa,SAAS,IACjC;KAAE,GAAG;KAAU,uBAAuB;KAAc,GACrD;AACN,kBAAc,IAAI,SAAS,IAAI,SAAS;KACxC;IACF;AACF,MAAI,cAAc,SAAS,KAAK,oBAAoB,SAAS,EAC3D,OAAM,IAAI,MAAM,KAAK,uCAAuC,OAAO,oBAAoB,CAAC;AAE1F,SAAO,CAAC,GAAG,cAAc,QAAQ,CAAC;;CAGpC,AAAQ,eACN,qBACA,qBACmC;EACnC,MAAM,gCAAgB,IAAI,KAAiC;AAC3D,OAAK,MAAM,YAAY,oBACrB,eAAc,IAAI,SAAS,IAAI,SAAS;AAE1C,OAAK,MAAM,YAAY,oBACrB,eAAc,IAAI,SAAS,IAAI,SAAS;AAE1C,SAAO,CAAC,GAAG,cAAc,QAAQ,CAAC;;;;;;AC5EtC,IAAa,2BAAb,MAAa,yBAAyB;CACpC,OAAgB,6BAA6B,CAAC,iBAAiB,YAAY;CAC3E,AAAiB,qBAAqB,IAAI,IAAI;EAAC;EAAO;EAAO;EAAQ;EAAO,CAAC;CAE7E,MAAM,oBACJ,MAKgC;EAChC,MAAM,cAAc,KAAK,uBAAuB,yBAAyB;EACzE,MAAMC,sBAAgC,EAAE;AACxC,OAAK,MAAM,aAAa,aAAa;GACnC,MAAM,oBAAoB,KAAK,QAAQ,KAAK,cAAc,UAAU;AACpE,OAAI,CAAE,MAAM,KAAK,OAAO,kBAAkB,CACxC;AAEF,uBAAoB,KAAK,GAAI,MAAM,KAAK,2BAA2B,kBAAkB,CAAE;;AAEzF,SAAO;;CAGT,MAAc,2BAA2B,eAAuD;EAC9F,MAAM,UAAU,MAAM,QAAQ,eAAe,EAAE,eAAe,MAAM,CAAC;EACrE,MAAMA,sBAAgC,EAAE;AACxC,OAAK,MAAM,SAAS,SAAS;GAC3B,MAAM,YAAY,KAAK,QAAQ,eAAe,MAAM,KAAK;AACzD,OAAI,MAAM,aAAa,EAAE;AACvB,wBAAoB,KAAK,GAAI,MAAM,KAAK,2BAA2B,UAAU,CAAE;AAC/E;;AAEF,OAAI,KAAK,qBAAqB,UAAU,CACtC,qBAAoB,KAAK,UAAU;;AAGvC,SAAO;;CAGT,AAAQ,qBAAqB,YAA6B;EACxD,MAAM,YAAY,KAAK,QAAQ,WAAW;AAC1C,SAAO,KAAK,mBAAmB,IAAI,UAAU,IAAI,CAAC,WAAW,SAAS,QAAQ;;;;;;ACxClF,IAAa,wCAAb,MAAmD;CACjD,QACE,MAK+B;EAC/B,MAAM,qBAAqB,KAAK,QAAQ,KAAK,aAAa;EAC1D,MAAM,yBAAyB,KAAK,QAAQ,KAAK,2BAA2B;EAC5E,MAAM,cACJ,KAAK,6BAA6B,SAAS,IACvC,KAAK,+BACL,CAAC,GAAG,yBAAyB,2BAA2B;EAE9D,IAAIC,WAA0B;AAC9B,OAAK,MAAM,aAAa,aAAa;GACnC,MAAM,oBAAoB,KAAK,QAAQ,oBAAoB,UAAU;AAIrE,OAAI,EAFF,2BAA2B,qBAC3B,uBAAuB,WAAW,GAAG,oBAAoB,KAAK,MAAM,EAEpE;AAEF,OAAI,CAAC,YAAY,kBAAkB,SAAS,SAAS,OACnD,YAAW;;AAGf,MAAI,CAAC,SACH;EAEF,MAAM,WAAW,KAAK,SAAS,UAAU,uBAAuB;AAChE,MAAI,SAAS,WAAW,KAAK,IAAI,KAAK,WAAW,SAAS,CACxD;AAEF,MAAI,SAAS,WAAW,EACtB;EAEF,MAAM,QAAQ,SAAS,MAAM,KAAK,IAAI,CAAC,QAAQ,YAAY,QAAQ,SAAS,EAAE;AAC9E,MAAI,MAAM,WAAW,EACnB;EAEF,MAAM,YAAY,MAAM,SAAS;EACjC,MAAM,OAAO,MAAM,cAAc;EACjC,MAAM,MAAM,KAAK,QAAQ,KAAK;AAC9B,QAAM,aAAa,MAAM,KAAK,MAAM,GAAG,CAAC,IAAI,OAAO,GAAG;AACtD,SAAO;;;;;;AC5BX,IAAa,iCAAb,MAAa,+BAA+B;CAC1C,OAAwB,kDAAkC,IAAI,KAAmC;CACjG,AAAiB,wBAAwB,IAAI,yCAAyC;CACtF,AAAiB,mBAAmB,IAAI,4BAA4B;CACpE,AAAiB,2BAA2B,IAAI,0BAA0B;CAC1E,AAAiB,oCAAoC,IAAI,mCAAmC;CAC5F,AAAiB,yCAAyC,IAAI,wCAAwC;CACtG,AAAiB,uBAAuB,IAAI,uCAAuC;CACnF,AAAiB,+BAA+B,IAAI,oBAClD,sBACD,CAAC,6BAA6B,kCAAkC;CAEjE,MAAM,KACJ,MAC6C;EAC7C,MAAM,cAAc,YAAY,KAAK;EACrC,IAAI,OAAO;EACX,MAAM,WAAW,UAAwB;GACvC,MAAM,MAAM,YAAY,KAAK;GAC7B,MAAM,QAAQ,MAAM;AACpB,UAAO;AACP,QAAK,6BAA6B,KAChC,QAAQ,MAAM,IAAI,MAAM,QAAQ,EAAE,CAAC,kBAAkB,MAAM,aAAa,QAAQ,EAAE,CAAC,KACpF;;EAEH,MAAM,kBAAkB,MAAM,KAAK,kBAAkB,KAAK,cAAc,KAAK,mBAAmB;AAChG,UAAQ,oBAAoB;AAC5B,MAAI,CAAC,gBACH,OAAM,IAAI,MACR,2GACD;EAEH,MAAM,gBAAgB,MAAM,KAAK,aAAa,gBAAgB;AAC9D,UAAQ,qBAAqB;EAC7B,MAAM,YAAY,KAAK,sBAAsB,cAAc,cAAc;AACzE,MAAI,CAAC,UACH,OAAM,IAAI,MAAM,2DAA2D,kBAAkB;EAE/F,MAAM,SAAS,KAAK,iBAAiB,UAAU,UAAU;EACzD,MAAM,kBAAkB,MAAM,KAAK,uBAAuB,KAAK,cAAc,OAAO;AACpF,UAAQ,yBAAyB;EACjC,MAAM,YAAY,KAAK,eACrB,OAAO,aAAa,EAAE,EACtB,MAAM,KAAK,wBAAwB,KAAK,cAAc,QAAQ,gBAAgB,CAC/E;AACD,UAAQ,0BAA0B;EAClC,MAAMC,iBAA6C;GACjD,GAAG;GACH;GACD;AACD,wBAAsB,QAAQ,CAAC,yBAAyB,eAAe,IAAI;AAC3E,SAAO;GACL,QAAQ;GACR;GACA;GACD;;CAGH,MAAc,kBACZ,cACA,oBACwB;AACxB,MAAI,oBAAoB;GACtB,MAAM,eAAe,KAAK,WAAW,mBAAmB,GACpD,qBACA,KAAK,QAAQ,cAAc,mBAAmB;AAClD,OAAI,CAAE,MAAM,KAAK,OAAO,aAAa,CACnC,OAAM,IAAI,MAAM,0BAA0B,eAAe;AAE3D,UAAO;;AAET,OAAK,MAAM,aAAa,KAAK,wBAAwB,aAAa,CAChE,KAAI,MAAM,KAAK,OAAO,UAAU,CAC9B,QAAO;AAGX,SAAO;;CAGT,AAAQ,wBAAwB,cAA6C;AAC3E,SAAO;GACL,KAAK,QAAQ,cAAc,uBAAuB;GAClD,KAAK,QAAQ,cAAc,uBAAuB;GAClD,KAAK,QAAQ,cAAc,OAAO,uBAAuB;GACzD,KAAK,QAAQ,cAAc,OAAO,uBAAuB;GAC1D;;CAGH,MAAc,uBAAuB,cAAsB,QAA0D;AACnH,OAAK,OAAO,mBAAmB,aAAa,UAAU,OAAO,EAC3D,QAAO,EAAE;AAOX,SAAO,CAAC,GALgB,MAAM,KAAK,yBAAyB,oBAAoB;GAC9E;GACA,qBAAqB,OAAO,mBAAmB;GAC/C,SAAS,iBAAiB,KAAK,OAAO,aAAa;GACpD,CAAC,CACyB,CAAC,MAAM,MAAc,UAAkB,KAAK,cAAc,MAAM,CAAC;;CAG9F,MAAc,wBACZ,cACA,QACA,iBAC4C;EAC5C,MAAM,+BAA+B,OAAO,mBAAmB,eAAe,EAAE;EAChF,MAAM,gCAAgB,IAAI,KAAiC;EAC3D,MAAM,wBAAwB,MAAM,QAAQ,IAC1C,gBAAgB,IAAI,OAAO,oBAA4B;GACrD;GACA,UAAU,KAAK,qBAAqB,QAAQ;IAC1C;IACA;IACA,4BAA4B;IAC7B,CAAC;GACF,eAAe,MAAM,KAAK,aAAa,eAAe;GACvD,EAAE,CACJ;AACD,OAAK,MAAM,wBAAwB,sBACjC,MAAK,MAAM,YAAY,KAAK,kCAAkC,QAAQ,qBAAqB,cAAc,EAAE;GACzG,MAAM,WACJ,qBAAqB,YAAY,qBAAqB,SAAS,SAAS,IACnE;IAAE,GAAG;IAAU,uBAAuB,qBAAqB;IAAU,GACtE;AACN,iBAAc,IAAI,SAAS,IAAI,SAAS;;AAG5C,MAAI,cAAc,SAAS,KAAK,gBAAgB,SAAS,EACvD,OAAM,IAAI,MAAM,KAAK,uCAAuC,OAAO,gBAAgB,CAAC;AAEtF,SAAO,CAAC,GAAG,cAAc,QAAQ,CAAC;;CAGpC,AAAQ,eACN,qBACA,qBACmC;EACnC,MAAM,gCAAgB,IAAI,KAAiC;AAC3D,OAAK,MAAM,YAAY,oBACrB,eAAc,IAAI,SAAS,IAAI,SAAS;AAE1C,OAAK,MAAM,YAAY,oBACrB,eAAc,IAAI,SAAS,IAAI,SAAS;AAE1C,SAAO,CAAC,GAAG,cAAc,QAAQ,CAAC;;CAGpC,MAAc,aAAa,YAAsD;AAC/E,MAAI,KAAK,8BAA8B,CACrC,QAAO,MAAM,KAAK,8BAA8B,WAAW;EAE7D,MAAM,eAAe,MAAM,KAAK,oBAAoB,WAAW;AAC/D,MAAI,KAAK,iCAAiC,CACxC,OAAM,KAAK,cAAc,aAAa;EAExC,MAAM,kBAAkB,MAAM,KAAK,sBAAsB,WAAW;AACpE,OAAK,IAAI,UAAU,GAAG,UAAU,GAAG,WAAW,EAC5C,KAAI;AAIF,UAHuB,OACrB,MAAM,KAAK,oBAAoB,aAAa,EAC5C,OAAO,iBAAiB,OAAO,KAAK,IAAI;WAEnC,OAAO;AACd,OAAI,CAAC,KAAK,+BAA+B,MAAM,IAAI,YAAY,EAC7D,OAAM;AAER,SAAM,KAAK,cAAc,aAAa;;AAG1C,QAAM,IAAI,MAAM,mDAAmD,aAAa;;CAGlF,MAAc,8BAA8B,YAAsD;AAEhG,SADuB,MAAM,OAAO,MAAM,KAAK,sBAAsB,WAAW;;CAIlF,MAAc,oBAAoB,YAA6C;EAC7E,MAAM,eAAe,QAAQ,IAAI;AACjC,MAAI,gBAAiB,MAAM,KAAK,OAAO,aAAa,CAClD,QAAO;AAGT,SADuB,MAAM,KAAK,oBAAoB,WAAW,IACxC;;CAG3B,MAAc,oBAAoB,cAA6D;EAC7F,MAAM,WAAW,gBAAgB;EACjC,MAAM,mBAAmB,+BAA+B,gCAAgC,IAAI,SAAS;AACrG,MAAI,iBACF,QAAO;EAET,MAAM,EAAE,aAAa,MAAM;;GAAiC,KAAK,mCAAmC;;EACpG,MAAM,eAAe,SAAS;GAC5B,WAAW,KAAK,YAAY,SAAS;GACrC,UAAU;GACX,CAAC;AACF,iCAA+B,gCAAgC,IAAI,UAAU,aAAa;AAC1F,SAAO;;CAGT,MAAc,cAAc,cAA6C;EACvE,MAAM,WAAW,gBAAgB;EACjC,MAAM,mBAAmB,+BAA+B,gCAAgC,IAAI,SAAS;AACrG,MAAI,CAAC,iBACH;AAEF,iCAA+B,gCAAgC,OAAO,SAAS;AAC/E,QAAM,iBAAiB,YAAY,CAAC,YAAY,KAAK;;CAGvD,AAAQ,YAAY,UAA0B;AAC5C,SAAO,uBAAuB,SAAS,QAAQ,oBAAoB,IAAI;;CAGzE,AAAQ,oCAA4C;AAClD,SAAO;GAAC;GAAO;GAAO;GAAM,CAAC,KAAK,IAAI;;CAGxC,MAAc,oBAAoB,YAA4C;EAC5E,IAAI,mBAAmB,KAAK,QAAQ,WAAW;AAC/C,SAAO,MAAM;GACX,MAAM,YAAY,KAAK,QAAQ,kBAAkB,gBAAgB;AACjE,OAAI,MAAM,KAAK,OAAO,UAAU,CAC9B,QAAO;GAET,MAAM,kBAAkB,KAAK,QAAQ,iBAAiB;AACtD,OAAI,oBAAoB,iBACtB,QAAO;AAET,sBAAmB;;;CAIvB,MAAc,sBAAsB,YAAqC;EACvE,MAAM,YAAY,cAAc,WAAW;EAC3C,MAAM,cAAc,MAAM,KAAK,WAAW;AAC1C,YAAU,aAAa,IAAI,KAAK,OAAO,YAAY,QAAQ,CAAC;AAC5D,SAAO,UAAU;;CAGnB,AAAQ,+BAAwC;AAC9C,SAAO,QAAQ,IAAI,0BAA0B;;CAG/C,AAAQ,kCAA2C;AACjD,UAAQ,QAAQ,IAAI,6BAA6B,MAAM,CAAC,UAAU,KAAK;;CAGzE,AAAQ,+BAA+B,OAAyB;AAC9D,SAAO,iBAAiB,SAAS,MAAM,QAAQ,SAAS,mCAAmC;;CAG7F,MAAc,OAAO,UAAoC;AACvD,MAAI;AACF,SAAM,OAAO,SAAS;AACtB,UAAO;UACD;AACN,UAAO"}
@@ -0,0 +1,57 @@
1
+ //#region src/bootstrap/CodemationBootstrapRequest.ts
2
+ var CodemationBootstrapRequest = class {
3
+ consumerRoot;
4
+ repoRoot;
5
+ workflowSources;
6
+ env;
7
+ constructor(args) {
8
+ this.consumerRoot = args.consumerRoot;
9
+ this.repoRoot = args.repoRoot;
10
+ this.workflowSources = [...args.workflowSources ?? []];
11
+ this.env = args.env;
12
+ }
13
+ resolveEnvironment() {
14
+ return {
15
+ ...process.env,
16
+ ...this.env ?? {}
17
+ };
18
+ }
19
+ };
20
+
21
+ //#endregion
22
+ //#region src/presentation/config/CodemationPluginListMerger.ts
23
+ /**
24
+ * Merges explicitly configured plugins with auto-discovered plugins.
25
+ * Configured plugins are applied first; discovered plugins fill in gaps.
26
+ * Plugins discovered from package.json manifests are deduped by npm package name so the same package is not
27
+ * registered twice when the consumer config lists a discovered plugin explicitly and auto-discovery also finds it.
28
+ */
29
+ var CodemationPluginListMerger = class {
30
+ constructor(packageMetadata) {
31
+ this.packageMetadata = packageMetadata;
32
+ }
33
+ merge(configuredPlugins, discoveredPlugins) {
34
+ const pluginsByPackageId = /* @__PURE__ */ new Map();
35
+ const pluginsByReference = /* @__PURE__ */ new Set();
36
+ const result = [];
37
+ for (const plugin of configuredPlugins) this.tryAdd(plugin, pluginsByPackageId, pluginsByReference, result);
38
+ for (const plugin of discoveredPlugins) this.tryAdd(plugin, pluginsByPackageId, pluginsByReference, result);
39
+ return result;
40
+ }
41
+ tryAdd(plugin, pluginsByPackageId, pluginsByReference, result) {
42
+ const packageId = this.packageMetadata.readPackageName(plugin);
43
+ if (packageId) {
44
+ if (pluginsByPackageId.has(packageId)) return;
45
+ pluginsByPackageId.set(packageId, plugin);
46
+ result.push(plugin);
47
+ return;
48
+ }
49
+ if (pluginsByReference.has(plugin)) return;
50
+ pluginsByReference.add(plugin);
51
+ result.push(plugin);
52
+ }
53
+ };
54
+
55
+ //#endregion
56
+ export { CodemationBootstrapRequest as n, CodemationPluginListMerger as t };
57
+ //# sourceMappingURL=CodemationPluginListMerger-CGwOTdZ7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodemationPluginListMerger-CGwOTdZ7.js","names":["packageMetadata: CodemationPluginPackageMetadata","result: CodemationPlugin[]"],"sources":["../src/bootstrap/CodemationBootstrapRequest.ts","../src/presentation/config/CodemationPluginListMerger.ts"],"sourcesContent":["export class CodemationBootstrapRequest {\n readonly consumerRoot: string;\n readonly repoRoot: string;\n readonly workflowSources: ReadonlyArray<string>;\n readonly env?: Readonly<NodeJS.ProcessEnv>;\n\n constructor(\n args: Readonly<{\n consumerRoot: string;\n repoRoot: string;\n workflowSources?: ReadonlyArray<string>;\n env?: Readonly<NodeJS.ProcessEnv>;\n }>,\n ) {\n this.consumerRoot = args.consumerRoot;\n this.repoRoot = args.repoRoot;\n this.workflowSources = [...(args.workflowSources ?? [])];\n this.env = args.env;\n }\n\n resolveEnvironment(): NodeJS.ProcessEnv {\n return {\n ...process.env,\n ...(this.env ?? {}),\n };\n }\n}\n","import { CodemationPluginPackageMetadata, type CodemationPlugin } from \"./CodemationPlugin\";\n\n/**\n * Merges explicitly configured plugins with auto-discovered plugins.\n * Configured plugins are applied first; discovered plugins fill in gaps.\n * Plugins discovered from package.json manifests are deduped by npm package name so the same package is not\n * registered twice when the consumer config lists a discovered plugin explicitly and auto-discovery also finds it.\n */\nexport class CodemationPluginListMerger {\n constructor(private readonly packageMetadata: CodemationPluginPackageMetadata) {}\n\n merge(\n configuredPlugins: ReadonlyArray<CodemationPlugin>,\n discoveredPlugins: ReadonlyArray<CodemationPlugin>,\n ): ReadonlyArray<CodemationPlugin> {\n const pluginsByPackageId = new Map<string, CodemationPlugin>();\n const pluginsByReference = new Set<CodemationPlugin>();\n const result: CodemationPlugin[] = [];\n\n for (const plugin of configuredPlugins) {\n this.tryAdd(plugin, pluginsByPackageId, pluginsByReference, result);\n }\n for (const plugin of discoveredPlugins) {\n this.tryAdd(plugin, pluginsByPackageId, pluginsByReference, result);\n }\n return result;\n }\n\n private tryAdd(\n plugin: CodemationPlugin,\n pluginsByPackageId: Map<string, CodemationPlugin>,\n pluginsByReference: Set<CodemationPlugin>,\n result: CodemationPlugin[],\n ): void {\n const packageId = this.packageMetadata.readPackageName(plugin);\n if (packageId) {\n if (pluginsByPackageId.has(packageId)) {\n return;\n }\n pluginsByPackageId.set(packageId, plugin);\n result.push(plugin);\n return;\n }\n if (pluginsByReference.has(plugin)) {\n return;\n }\n pluginsByReference.add(plugin);\n result.push(plugin);\n }\n}\n"],"mappings":";AAAA,IAAa,6BAAb,MAAwC;CACtC,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CAET,YACE,MAMA;AACA,OAAK,eAAe,KAAK;AACzB,OAAK,WAAW,KAAK;AACrB,OAAK,kBAAkB,CAAC,GAAI,KAAK,mBAAmB,EAAE,CAAE;AACxD,OAAK,MAAM,KAAK;;CAGlB,qBAAwC;AACtC,SAAO;GACL,GAAG,QAAQ;GACX,GAAI,KAAK,OAAO,EAAE;GACnB;;;;;;;;;;;;AChBL,IAAa,6BAAb,MAAwC;CACtC,YAAY,AAAiBA,iBAAkD;EAAlD;;CAE7B,MACE,mBACA,mBACiC;EACjC,MAAM,qCAAqB,IAAI,KAA+B;EAC9D,MAAM,qCAAqB,IAAI,KAAuB;EACtD,MAAMC,SAA6B,EAAE;AAErC,OAAK,MAAM,UAAU,kBACnB,MAAK,OAAO,QAAQ,oBAAoB,oBAAoB,OAAO;AAErE,OAAK,MAAM,UAAU,kBACnB,MAAK,OAAO,QAAQ,oBAAoB,oBAAoB,OAAO;AAErE,SAAO;;CAGT,AAAQ,OACN,QACA,oBACA,oBACA,QACM;EACN,MAAM,YAAY,KAAK,gBAAgB,gBAAgB,OAAO;AAC9D,MAAI,WAAW;AACb,OAAI,mBAAmB,IAAI,UAAU,CACnC;AAEF,sBAAmB,IAAI,WAAW,OAAO;AACzC,UAAO,KAAK,OAAO;AACnB;;AAEF,MAAI,mBAAmB,IAAI,OAAO,CAChC;AAEF,qBAAmB,IAAI,OAAO;AAC9B,SAAO,KAAK,OAAO"}
@@ -1,8 +1,8 @@
1
1
  import { a as CodemationWhitelabelConfig, l as Logger, t as CodemationAuthConfig, u as LoggerFactory } from "./CodemationAuthConfig-Bh2cCNCI.js";
2
- import { A as RunId, B as PersistedRunState, D as BinaryAttachment, F as NodeExecutionRequestHandler, H as RunSummary, I as NodeExecutionScheduler, L as WorkflowRepository, M as WorkflowDefinition, N as WorkflowId, U as Clock, V as RunCurrentState, c as AnyCredentialType, i as TypeToken, n as Engine, o as RunEvent, r as Container, s as RunEventBus, z as WorkflowActivationPolicy } from "./index-CkiptHb-.js";
3
- import { b as CodemationContainerRegistration, g as AppConfig, v as CodemationPlugin } from "./CodemationConfig-D2ULNkec.js";
4
- import { t as CredentialStore } from "./CredentialServices-BeuMtqYA.js";
5
- import { n as PrismaMigrationDeployer, r as PrismaClient } from "./AppConfigFactory-DmHOpg8O.js";
2
+ import { A as RunId, B as PersistedRunState, F as NodeExecutionRequestHandler, H as RunSummary, I as NodeExecutionScheduler, L as WorkflowRepository, M as WorkflowDefinition, N as WorkflowId, U as Clock, V as RunCurrentState, c as AnyCredentialType, i as TypeToken, n as Engine, o as RunEvent, r as Container, s as RunEventBus, z as WorkflowActivationPolicy } from "./index-CkiptHb-.js";
3
+ import { S as CodemationPluginPackageMetadata, g as AppConfig, w as CodemationContainerRegistration, y as CodemationPlugin } from "./CodemationConfig-u80ZoIrc.js";
4
+ import { t as CredentialStore } from "./CredentialServices-Uo1jxSYB.js";
5
+ import { n as PrismaMigrationDeployer, r as PrismaClient } from "./AppConfigFactory-D_ReOKfV.js";
6
6
  import "reflect-metadata";
7
7
  import { Hono } from "hono";
8
8
  import { PGlite } from "@electric-sql/pglite";
@@ -27,114 +27,6 @@ interface QueryBus {
27
27
  execute<TResult>(query: Query<TResult>): Promise<TResult>;
28
28
  }
29
29
  //#endregion
30
- //#region src/application/contracts/userDirectoryContracts.types.d.ts
31
- type UserAccountStatus = "invited" | "active" | "inactive";
32
- type UserAccountDto = Readonly<{
33
- id: string;
34
- email: string;
35
- status: UserAccountStatus;
36
- inviteExpiresAt: string | null;
37
- /** Ways the user can sign in (password + linked OAuth / OIDC / email-link accounts). */
38
- loginMethods: ReadonlyArray<string>;
39
- }>;
40
- /** Result of CLI/bootstrap `upsert` for a local password user (distinct from invite-based onboarding). */
41
- type UpsertLocalBootstrapUserResultDto = Readonly<{
42
- outcome: "created" | "updated";
43
- }>;
44
- //#endregion
45
- //#region src/application/queries/ListUserAccountsQuery.d.ts
46
- declare class ListUserAccountsQuery extends Query<ReadonlyArray<UserAccountDto>> {}
47
- //#endregion
48
- //#region src/application/commands/UpsertLocalBootstrapUserCommand.d.ts
49
- declare class UpsertLocalBootstrapUserCommand extends Command<UpsertLocalBootstrapUserResultDto> {
50
- readonly email: string;
51
- readonly password: string;
52
- constructor(email: string, password: string);
53
- }
54
- //#endregion
55
- //#region src/application/bus/CommandHandler.d.ts
56
- declare abstract class CommandHandler<TCommand extends Command<TResult>, TResult> {
57
- abstract execute(command: TCommand): Promise<TResult>;
58
- }
59
- //#endregion
60
- //#region src/domain/runs/WorkflowRunRepository.d.ts
61
- interface WorkflowRunRepository {
62
- load(runId: string): Promise<PersistedRunState | undefined>;
63
- save(state: PersistedRunState): Promise<void>;
64
- listRuns(args: Readonly<{
65
- workflowId?: string;
66
- limit?: number;
67
- }>): Promise<ReadonlyArray<RunSummary>>;
68
- deleteRun(runId: RunId): Promise<void>;
69
- }
70
- //#endregion
71
- //#region src/domain/workflows/WorkflowDebuggerOverlayState.d.ts
72
- type WorkflowDebuggerOverlayState = Readonly<{
73
- workflowId: string;
74
- updatedAt: string;
75
- copiedFromRunId?: string;
76
- currentState: RunCurrentState;
77
- }>;
78
- //#endregion
79
- //#region src/domain/workflows/WorkflowDebuggerOverlayRepository.d.ts
80
- interface WorkflowDebuggerOverlayRepository {
81
- load(workflowId: string): Promise<WorkflowDebuggerOverlayState | undefined>;
82
- save(state: WorkflowDebuggerOverlayState): Promise<void>;
83
- }
84
- //#endregion
85
- //#region src/domain/workflows/WorkflowDefinitionRepository.d.ts
86
- interface WorkflowDefinitionRepository {
87
- listDefinitions(): Promise<ReadonlyArray<WorkflowDefinition>>;
88
- getDefinition(workflowId: string): Promise<WorkflowDefinition | undefined>;
89
- resolveSnapshot(args: Readonly<{
90
- workflowId: string;
91
- workflowSnapshot?: unknown;
92
- }>): Promise<WorkflowDefinition | undefined>;
93
- }
94
- //#endregion
95
- //#region src/domain/workflows/WorkflowActivationRepository.d.ts
96
- type WorkflowActivationRow = Readonly<{
97
- workflowId: string;
98
- isActive: boolean;
99
- }>;
100
- interface WorkflowActivationRepository {
101
- loadAll(): Promise<ReadonlyArray<WorkflowActivationRow>>;
102
- upsert(workflowId: string, active: boolean): Promise<void>;
103
- }
104
- //#endregion
105
- //#region src/infrastructure/persistence/RuntimeWorkflowActivationPolicy.d.ts
106
- /**
107
- * In-memory activation map: missing workflow id ⇒ inactive. Hydrated from persistence at startup and updated on command.
108
- */
109
- declare class RuntimeWorkflowActivationPolicy implements WorkflowActivationPolicy {
110
- private readonly activeByWorkflowId;
111
- hydrateFromRepository(repository: WorkflowActivationRepository): Promise<void>;
112
- set(workflowId: string, active: boolean): void;
113
- isActive(workflowId: WorkflowId): boolean;
114
- }
115
- //#endregion
116
- //#region src/application/bus/QueryHandler.d.ts
117
- declare abstract class QueryHandler<TQuery extends Query<TResult>, TResult> {
118
- abstract execute(query: TQuery): Promise<TResult>;
119
- }
120
- //#endregion
121
- //#region src/application/binary/RunBinaryAttachmentLookupService.d.ts
122
- declare class RunBinaryAttachmentLookupService {
123
- private readonly workflowRunRepository;
124
- private readonly workflowDebuggerOverlayRepository;
125
- constructor(workflowRunRepository: WorkflowRunRepository, workflowDebuggerOverlayRepository: WorkflowDebuggerOverlayRepository);
126
- findForRun(runId: string, binaryId: string): Promise<BinaryAttachment | undefined>;
127
- findForWorkflowOverlay(workflowId: string, binaryId: string): Promise<BinaryAttachment | undefined>;
128
- private findInRunState;
129
- private findInCurrentState;
130
- private findInOutputsByNode;
131
- private findInNodeSnapshots;
132
- private findInCurrentStateSnapshots;
133
- private findInMutableState;
134
- private findInPortItemMap;
135
- private findInItems;
136
- }
137
- //#endregion
138
30
  //#region src/infrastructure/config/CodemationPluginRegistrar.d.ts
139
31
  declare class CodemationPluginRegistrar {
140
32
  apply(args: Readonly<{
@@ -208,6 +100,8 @@ type AppContainerInputs = Readonly<{
208
100
  declare class AppContainerFactory {
209
101
  private readonly containerRegistrationRegistrar;
210
102
  private readonly pluginRegistrar;
103
+ private static readonly queryHandlers;
104
+ private static readonly commandHandlers;
211
105
  private static readonly honoRouteRegistrars;
212
106
  constructor(containerRegistrationRegistrar?: CodemationContainerRegistrationRegistrar, pluginRegistrar?: CodemationPluginRegistrar);
213
107
  create(inputs: AppContainerInputs): Promise<Container>;
@@ -247,6 +141,27 @@ declare class DatabaseMigrations {
247
141
  migrate(): Promise<void>;
248
142
  }
249
143
  //#endregion
144
+ //#region src/domain/workflows/WorkflowActivationRepository.d.ts
145
+ type WorkflowActivationRow = Readonly<{
146
+ workflowId: string;
147
+ isActive: boolean;
148
+ }>;
149
+ interface WorkflowActivationRepository {
150
+ loadAll(): Promise<ReadonlyArray<WorkflowActivationRow>>;
151
+ upsert(workflowId: string, active: boolean): Promise<void>;
152
+ }
153
+ //#endregion
154
+ //#region src/infrastructure/persistence/RuntimeWorkflowActivationPolicy.d.ts
155
+ /**
156
+ * In-memory activation map: missing workflow id ⇒ inactive. Hydrated from persistence at startup and updated on command.
157
+ */
158
+ declare class RuntimeWorkflowActivationPolicy implements WorkflowActivationPolicy {
159
+ private readonly activeByWorkflowId;
160
+ hydrateFromRepository(repository: WorkflowActivationRepository): Promise<void>;
161
+ set(workflowId: string, active: boolean): void;
162
+ isActive(workflowId: WorkflowId): boolean;
163
+ }
164
+ //#endregion
250
165
  //#region src/application/websocket/WorkflowRunEventWebsocketRelay.d.ts
251
166
  declare class WorkflowRunEventWebsocketRelay {
252
167
  private readonly workflowWebsocketPublisher;
@@ -311,6 +226,11 @@ interface SessionVerifier {
311
226
  verify(request: Request): Promise<AuthenticatedPrincipal | null>;
312
227
  }
313
228
  //#endregion
229
+ //#region src/application/bus/CommandHandler.d.ts
230
+ declare abstract class CommandHandler<TCommand extends Command<TResult>, TResult> {
231
+ abstract execute(command: TCommand): Promise<TResult>;
232
+ }
233
+ //#endregion
314
234
  //#region src/application/bus/DomainEvent.d.ts
315
235
  declare abstract class DomainEvent {}
316
236
  //#endregion
@@ -324,6 +244,46 @@ declare abstract class DomainEventHandler<TEvent extends DomainEvent> {
324
244
  abstract handle(event: TEvent): Promise<void>;
325
245
  }
326
246
  //#endregion
247
+ //#region src/application/bus/QueryHandler.d.ts
248
+ declare abstract class QueryHandler<TQuery extends Query<TResult>, TResult> {
249
+ abstract execute(query: TQuery): Promise<TResult>;
250
+ }
251
+ //#endregion
252
+ //#region src/domain/runs/WorkflowRunRepository.d.ts
253
+ interface WorkflowRunRepository {
254
+ load(runId: string): Promise<PersistedRunState | undefined>;
255
+ save(state: PersistedRunState): Promise<void>;
256
+ listRuns(args: Readonly<{
257
+ workflowId?: string;
258
+ limit?: number;
259
+ }>): Promise<ReadonlyArray<RunSummary>>;
260
+ deleteRun(runId: RunId): Promise<void>;
261
+ }
262
+ //#endregion
263
+ //#region src/domain/workflows/WorkflowDebuggerOverlayState.d.ts
264
+ type WorkflowDebuggerOverlayState = Readonly<{
265
+ workflowId: string;
266
+ updatedAt: string;
267
+ copiedFromRunId?: string;
268
+ currentState: RunCurrentState;
269
+ }>;
270
+ //#endregion
271
+ //#region src/domain/workflows/WorkflowDebuggerOverlayRepository.d.ts
272
+ interface WorkflowDebuggerOverlayRepository {
273
+ load(workflowId: string): Promise<WorkflowDebuggerOverlayState | undefined>;
274
+ save(state: WorkflowDebuggerOverlayState): Promise<void>;
275
+ }
276
+ //#endregion
277
+ //#region src/domain/workflows/WorkflowDefinitionRepository.d.ts
278
+ interface WorkflowDefinitionRepository {
279
+ listDefinitions(): Promise<ReadonlyArray<WorkflowDefinition>>;
280
+ getDefinition(workflowId: string): Promise<WorkflowDefinition | undefined>;
281
+ resolveSnapshot(args: Readonly<{
282
+ workflowId: string;
283
+ workflowSnapshot?: unknown;
284
+ }>): Promise<WorkflowDefinition | undefined>;
285
+ }
286
+ //#endregion
327
287
  //#region src/presentation/http/hono/HonoApiRouteRegistrar.d.ts
328
288
  interface HonoApiRouteRegistrar {
329
289
  register(app: Hono): void;
@@ -379,13 +339,15 @@ declare class CodemationBootstrapRequest {
379
339
  /**
380
340
  * Merges explicitly configured plugins with auto-discovered plugins.
381
341
  * Configured plugins are applied first; discovered plugins fill in gaps.
382
- * Plugins that declare `pluginPackageId` are deduped by that string so the same npm package is not
383
- * registered twice when the consumer config lists a plugin and discovery also finds it, or when two
384
- * module evaluations produce different `constructor` identities for the same logical plugin.
342
+ * Plugins discovered from package.json manifests are deduped by npm package name so the same package is not
343
+ * registered twice when the consumer config lists a discovered plugin explicitly and auto-discovery also finds it.
385
344
  */
386
345
  declare class CodemationPluginListMerger {
346
+ private readonly packageMetadata;
347
+ constructor(packageMetadata: CodemationPluginPackageMetadata);
387
348
  merge(configuredPlugins: ReadonlyArray<CodemationPlugin>, discoveredPlugins: ReadonlyArray<CodemationPlugin>): ReadonlyArray<CodemationPlugin>;
349
+ private tryAdd;
388
350
  }
389
351
  //#endregion
390
- export { QueryBus as _, SessionVerifier as a, DatabaseMigrations as c, WorkflowWebsocketServer as d, RunBinaryAttachmentLookupService as f, UpsertLocalBootstrapUserResultDto as g, ListUserAccountsQuery as h, HonoApiRouteRegistrar as i, AppContainerLifecycle as l, UpsertLocalBootstrapUserCommand as m, CodemationBootstrapRequest as n, WorkerRuntime as o, WorkflowRunRepository as p, ApplicationTokens as r, FrontendRuntime as s, CodemationPluginListMerger as t, AppContainerFactory as u, CommandBus as v };
391
- //# sourceMappingURL=CodemationPluginListMerger-B0-e4CJ6.d.ts.map
352
+ export { Command as _, WorkflowDebuggerOverlayRepository as a, WorkerRuntime as c, AppContainerLifecycle as d, AppContainerFactory as f, CommandBus as g, Query as h, HonoApiRouteRegistrar as i, FrontendRuntime as l, QueryBus as m, CodemationBootstrapRequest as n, WorkflowRunRepository as o, WorkflowWebsocketServer as p, ApplicationTokens as r, SessionVerifier as s, CodemationPluginListMerger as t, DatabaseMigrations as u };
353
+ //# sourceMappingURL=CodemationPluginListMerger-ZY3R_kTo.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { C as CredentialTypeDefinition, L as WorkflowRepository, M as WorkflowDefinition, S as CredentialType, T as CredentialTypeRegistry, b as CredentialSessionService, c as AnyCredentialType, d as CredentialFieldSchema, f as CredentialHealth, g as CredentialMaterialSourceKind, h as CredentialJsonRecord, l as CredentialBinding, m as CredentialInstanceRecord, p as CredentialInstanceId, u as CredentialBindingKey, v as CredentialRequirement, w as CredentialTypeId, x as CredentialSetupStatus } from "./index-CkiptHb-.js";
2
- import { g as AppConfig } from "./CodemationConfig-D2ULNkec.js";
2
+ import { g as AppConfig } from "./CodemationConfig-u80ZoIrc.js";
3
3
 
4
4
  //#region src/domain/credentials/CredentialTypeRegistryImpl.d.ts
5
5
  declare class CredentialTypeRegistryImpl implements CredentialTypeRegistry {
@@ -288,4 +288,4 @@ type MutableCredentialSessionService = CredentialSessionService & Readonly<{
288
288
  }>;
289
289
  //#endregion
290
290
  export { CredentialInstanceService as a, CredentialFieldEnvOverlayService as c, CredentialBindingService as i, CredentialTypeRegistryImpl as l, CredentialType$1 as n, CredentialMaterialResolver as o, CredentialRuntimeMaterialService as r, CredentialSecretCipher as s, CredentialStore as t };
291
- //# sourceMappingURL=CredentialServices-BeuMtqYA.d.ts.map
291
+ //# sourceMappingURL=CredentialServices-Uo1jxSYB.d.ts.map
@@ -0,0 +1,50 @@
1
+ import { t as CodemationAuthConfig } from "./CodemationAuthConfig-Bh2cCNCI.js";
2
+
3
+ //#region src/presentation/frontend/CodemationFrontendAuthSnapshot.d.ts
4
+ type CodemationFrontendAuthProviderSnapshot = Readonly<{
5
+ id: string;
6
+ name: string;
7
+ }>;
8
+ type CodemationFrontendAuthSnapshot = Readonly<{
9
+ config: CodemationAuthConfig | undefined;
10
+ credentialsEnabled: boolean;
11
+ oauthProviders: ReadonlyArray<CodemationFrontendAuthProviderSnapshot>;
12
+ secret: string | null;
13
+ uiAuthEnabled: boolean;
14
+ }>;
15
+ //#endregion
16
+ //#region src/presentation/frontend/FrontendAppConfig.d.ts
17
+ /**
18
+ * Frontend-safe projection of host app configuration for packaged Next UI and SSR.
19
+ */
20
+ type FrontendAppConfig = Readonly<{
21
+ auth: CodemationFrontendAuthSnapshot;
22
+ productName: string;
23
+ logoUrl: string | null;
24
+ }>;
25
+ //#endregion
26
+ //#region src/presentation/frontend/InternalAuthBootstrap.d.ts
27
+ /**
28
+ * Node-side runtime bootstrap for NextAuth provider wiring.
29
+ */
30
+ type InternalAuthBootstrap = Readonly<{
31
+ authConfig: CodemationAuthConfig | undefined;
32
+ credentialsEnabled: boolean;
33
+ oauthProviders: ReadonlyArray<CodemationFrontendAuthProviderSnapshot>;
34
+ uiAuthEnabled: boolean;
35
+ }>;
36
+ //#endregion
37
+ //#region src/presentation/frontend/PublicFrontendBootstrap.d.ts
38
+ /**
39
+ * Frontend-safe runtime bootstrap consumed by the Next.js shell.
40
+ */
41
+ type PublicFrontendBootstrap = Readonly<{
42
+ credentialsEnabled: boolean;
43
+ logoUrl: string | null;
44
+ oauthProviders: ReadonlyArray<CodemationFrontendAuthProviderSnapshot>;
45
+ productName: string;
46
+ uiAuthEnabled: boolean;
47
+ }>;
48
+ //#endregion
49
+ export { CodemationFrontendAuthSnapshot as a, CodemationFrontendAuthProviderSnapshot as i, InternalAuthBootstrap as n, FrontendAppConfig as r, PublicFrontendBootstrap as t };
50
+ //# sourceMappingURL=PublicFrontendBootstrap-p7mS8aWG.d.ts.map