@codemation/host 0.0.5 → 0.0.11
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 +11 -6
- package/prisma/migrations/20260315063514_init/migration.sql +16 -16
- package/prisma/migrations/20260316090000_workflow_debugger_overlay/migration.sql +9 -9
- package/prisma/migrations/20260317120000_trigger_state_store/migration.sql +3 -3
- package/prisma/migrations/20260317153000_trigger_setup_state/migration.sql +8 -8
- package/prisma/migrations/20260318110000_credentials_v2/migration.sql +49 -49
- package/prisma/migrations/20260319110000_credential_oauth2_material/migration.sql +28 -28
- package/prisma/migrations/20260319200000_codemation_auth_tables/migration.sql +56 -56
- package/prisma/migrations/20260320140000_user_invites_account_status/migration.sql +20 -20
- package/prisma/migrations/20260325120000_workflow_activation/migration.sql +8 -8
- package/prisma/migrations/migration_lock.toml +3 -3
- package/prisma/schema.prisma +179 -179
- package/prisma.config.ts +15 -2
- 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/persistence/generated/prisma/client.d.ts +0 -1
- package/src/infrastructure/persistence/generated/prisma/default.d.ts +0 -1
- package/src/infrastructure/persistence/generated/prisma/edge.d.ts +0 -1
- package/src/infrastructure/persistence/generated/prisma/index.d.ts +0 -4766
- package/src/infrastructure/persistence/generated/prisma/package.json +0 -144
- package/src/infrastructure/persistence/generated/prisma/query_compiler_fast_bg.wasm +0 -0
- package/src/infrastructure/persistence/generated/prisma/runtime/client.d.ts +0 -3358
- package/src/infrastructure/persistence/generated/prisma/runtime/index-browser.d.ts +0 -90
- package/src/infrastructure/persistence/generated/prisma/schema.prisma +0 -35
- package/src/infrastructure/persistence/generated/prisma/wasm-edge-light-loader.mjs +0 -5
- package/src/infrastructure/persistence/generated/prisma/wasm-worker-loader.mjs +0 -5
- 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,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { a as CodemationConfigNormalizer, t as CodemationConsumerConfigLoader } from "./CodemationConsumerConfigLoader-BBzAr6L_.js";
|
|
2
|
+
import { u as ApplicationTokens } from "./CredentialServices-DNb3CZwW.js";
|
|
3
|
+
import { a as AppContainerLifecycle, b as GetWorkflowSummariesQuery, f as CodemationHonoApiApp, r as FrontendRuntime, t as AppContainerFactory, v as WorkflowDefinitionMapper, x as GetWorkflowDetailQuery } from "./AppContainerFactory-B5eRpvAa.js";
|
|
4
|
+
import { t as AppConfigFactory } from "./AppConfigFactory-DWIz2hy-.js";
|
|
3
5
|
import { readFile, readdir } from "node:fs/promises";
|
|
4
6
|
import path from "node:path";
|
|
5
7
|
import { pathToFileURL } from "node:url";
|
|
@@ -25,7 +27,7 @@ var CodemationServerGateway = class CodemationServerGateway {
|
|
|
25
27
|
const cachedContext = CodemationServerGateway.contextsByConfig.get(this.config);
|
|
26
28
|
if (!cachedContext) return;
|
|
27
29
|
CodemationServerGateway.contextsByConfig.delete(this.config);
|
|
28
|
-
await (await cachedContext).
|
|
30
|
+
await (await cachedContext).container.resolve(AppContainerLifecycle).stop();
|
|
29
31
|
}
|
|
30
32
|
async loadWorkflowSummaries() {
|
|
31
33
|
const context = await this.getContext();
|
|
@@ -45,22 +47,25 @@ var CodemationServerGateway = class CodemationServerGateway {
|
|
|
45
47
|
return nextContext;
|
|
46
48
|
}
|
|
47
49
|
async createContext() {
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
+
const repoRoot = this.detectWorkspaceRoot(this.consumerRoot);
|
|
51
|
+
const env = this.env ?? process.env;
|
|
52
|
+
const appConfig = new AppConfigFactory().create({
|
|
53
|
+
repoRoot,
|
|
50
54
|
consumerRoot: this.consumerRoot,
|
|
51
|
-
env
|
|
55
|
+
env,
|
|
56
|
+
config: new CodemationConfigNormalizer().normalize(this.config),
|
|
52
57
|
workflowSources: this.resolveWorkflowSources()
|
|
53
58
|
});
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
await
|
|
59
|
+
const container = await new AppContainerFactory().create({
|
|
60
|
+
appConfig,
|
|
61
|
+
sharedWorkflowWebsocketServer: null
|
|
62
|
+
});
|
|
63
|
+
await container.resolve(FrontendRuntime).start();
|
|
59
64
|
return {
|
|
60
|
-
|
|
61
|
-
httpApi:
|
|
62
|
-
queryBus:
|
|
63
|
-
workflowDefinitionMapper:
|
|
65
|
+
container,
|
|
66
|
+
httpApi: container.resolve(CodemationHonoApiApp),
|
|
67
|
+
queryBus: container.resolve(ApplicationTokens.QueryBus),
|
|
68
|
+
workflowDefinitionMapper: container.resolve(WorkflowDefinitionMapper)
|
|
64
69
|
};
|
|
65
70
|
}
|
|
66
71
|
resolveWorkflowSources() {
|
|
@@ -81,6 +86,31 @@ var CodemationServerGateway = class CodemationServerGateway {
|
|
|
81
86
|
}
|
|
82
87
|
};
|
|
83
88
|
|
|
89
|
+
//#endregion
|
|
90
|
+
//#region src/presentation/server/AppConfigLoader.ts
|
|
91
|
+
var AppConfigLoader = class {
|
|
92
|
+
constructor(consumerConfigLoader = new CodemationConsumerConfigLoader(), appConfigFactory = new AppConfigFactory()) {
|
|
93
|
+
this.consumerConfigLoader = consumerConfigLoader;
|
|
94
|
+
this.appConfigFactory = appConfigFactory;
|
|
95
|
+
}
|
|
96
|
+
async load(args) {
|
|
97
|
+
const resolution = await this.consumerConfigLoader.load({
|
|
98
|
+
consumerRoot: args.consumerRoot,
|
|
99
|
+
configPathOverride: args.configPathOverride
|
|
100
|
+
});
|
|
101
|
+
return {
|
|
102
|
+
appConfig: this.appConfigFactory.create({
|
|
103
|
+
repoRoot: args.repoRoot,
|
|
104
|
+
consumerRoot: args.consumerRoot,
|
|
105
|
+
env: args.env,
|
|
106
|
+
config: resolution.config,
|
|
107
|
+
workflowSources: resolution.workflowSources
|
|
108
|
+
}),
|
|
109
|
+
bootstrapSource: resolution.bootstrapSource
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
|
|
84
114
|
//#endregion
|
|
85
115
|
//#region src/presentation/server/CodemationPluginDiscovery.ts
|
|
86
116
|
var CodemationPluginDiscovery = class {
|
|
@@ -171,5 +201,5 @@ var CodemationPluginDiscovery = class {
|
|
|
171
201
|
};
|
|
172
202
|
|
|
173
203
|
//#endregion
|
|
174
|
-
export {
|
|
175
|
-
//# sourceMappingURL=server-
|
|
204
|
+
export { AppConfigLoader as n, CodemationServerGateway as r, CodemationPluginDiscovery as t };
|
|
205
|
+
//# sourceMappingURL=server-C65z_kqm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-C65z_kqm.js","names":["config: CodemationConfig","consumerRoot: string","configSource?: string","workflowSources: ReadonlyArray<string>","env?: Readonly<NodeJS.ProcessEnv>","consumerConfigLoader: CodemationConsumerConfigLoader","appConfigFactory: AppConfigFactory","discoveredPackages: CodemationDiscoveredPluginPackage[]","resolvedPackages: CodemationResolvedPluginPackage[]","packageRoots: string[]"],"sources":["../src/presentation/http/CodemationServerGatewayFactory.ts","../src/presentation/server/AppConfigLoader.ts","../src/presentation/server/CodemationPluginDiscovery.ts"],"sourcesContent":["import { accessSync } from \"node:fs\";\nimport path from \"node:path\";\nimport type { QueryBus } from \"../../application/bus/QueryBus\";\nimport type { WorkflowDto, WorkflowSummary } from \"../../application/contracts/WorkflowViewContracts\";\nimport { WorkflowDefinitionMapper } from \"../../application/mapping/WorkflowDefinitionMapper\";\nimport { GetWorkflowDetailQuery } from \"../../application/queries/GetWorkflowDetailQuery\";\nimport { GetWorkflowSummariesQuery } from \"../../application/queries/GetWorkflowSummariesQuery\";\nimport { ApplicationTokens } from \"../../applicationTokens\";\nimport { AppContainerFactory } from \"../../bootstrap/AppContainerFactory\";\nimport { AppContainerLifecycle } from \"../../bootstrap/AppContainerLifecycle\";\nimport { FrontendRuntime } from \"../../bootstrap/runtime/FrontendRuntime\";\nimport { AppConfigFactory } from \"../../bootstrap/runtime/AppConfigFactory\";\nimport type { CodemationConfig } from \"../config/CodemationConfig\";\nimport { CodemationConfigNormalizer } from \"../config/CodemationConfigNormalizer\";\nimport { CodemationHonoApiApp } from \"./hono/CodemationHonoApiAppFactory\";\n\ntype ServerGatewayContext = Readonly<{\n container: import(\"@codemation/core\").Container;\n httpApi: CodemationHonoApiApp;\n queryBus: QueryBus;\n workflowDefinitionMapper: WorkflowDefinitionMapper;\n}>;\n\nexport class CodemationServerGateway {\n private static readonly contextsByConfig = new WeakMap<object, Promise<ServerGatewayContext>>();\n\n constructor(\n private readonly config: CodemationConfig,\n private readonly consumerRoot: string,\n private readonly configSource?: string,\n private readonly workflowSources: ReadonlyArray<string> = [],\n private readonly env?: Readonly<NodeJS.ProcessEnv>,\n ) {}\n\n async dispatch(request: Request): Promise<Response> {\n return await (await this.getContext()).httpApi.fetch(request);\n }\n\n async prepare(): Promise<void> {\n await this.getContext();\n }\n\n async close(): Promise<void> {\n const cachedContext = CodemationServerGateway.contextsByConfig.get(this.config as object);\n if (!cachedContext) {\n return;\n }\n CodemationServerGateway.contextsByConfig.delete(this.config as object);\n await (await cachedContext).container.resolve(AppContainerLifecycle).stop();\n }\n\n async loadWorkflowSummaries(): Promise<ReadonlyArray<WorkflowSummary>> {\n const context = await this.getContext();\n const workflows = await context.queryBus.execute(new GetWorkflowSummariesQuery());\n return workflows.map((workflow) => context.workflowDefinitionMapper.toSummary(workflow));\n }\n\n async loadWorkflowDetail(workflowId: string): Promise<WorkflowDto> {\n const context = await this.getContext();\n const workflow = await context.queryBus.execute(new GetWorkflowDetailQuery(workflowId));\n if (!workflow) {\n throw new Error(`Unknown workflowId: ${workflowId}`);\n }\n return await context.workflowDefinitionMapper.map(workflow);\n }\n\n private getContext(): Promise<ServerGatewayContext> {\n const cachedContext = CodemationServerGateway.contextsByConfig.get(this.config as object);\n if (cachedContext) {\n return cachedContext;\n }\n const nextContext = this.createContext();\n CodemationServerGateway.contextsByConfig.set(this.config as object, nextContext);\n return nextContext;\n }\n\n private async createContext(): Promise<ServerGatewayContext> {\n const repoRoot = this.detectWorkspaceRoot(this.consumerRoot);\n // This gateway is the config/env boundary that materializes AppConfig from raw inputs.\n // eslint-disable-next-line no-restricted-properties\n const env = this.env ?? process.env;\n const appConfig = new AppConfigFactory().create({\n repoRoot,\n consumerRoot: this.consumerRoot,\n env,\n config: new CodemationConfigNormalizer().normalize(this.config),\n workflowSources: this.resolveWorkflowSources(),\n });\n const container = await new AppContainerFactory().create({\n appConfig,\n sharedWorkflowWebsocketServer: null,\n });\n await container.resolve(FrontendRuntime).start();\n return {\n container,\n httpApi: container.resolve(CodemationHonoApiApp),\n queryBus: container.resolve(ApplicationTokens.QueryBus),\n workflowDefinitionMapper: container.resolve(WorkflowDefinitionMapper),\n };\n }\n\n private resolveWorkflowSources(): ReadonlyArray<string> {\n if (this.workflowSources.length > 0) {\n return [...this.workflowSources];\n }\n if (!this.configSource || !this.config.workflows || this.config.workflows.length === 0) {\n return [];\n }\n return [this.configSource];\n }\n private detectWorkspaceRoot(startDirectory: string): string {\n let currentDirectory = path.resolve(startDirectory);\n while (true) {\n try {\n accessSync(path.resolve(currentDirectory, \"pnpm-workspace.yaml\"));\n return currentDirectory;\n } catch {\n const parentDirectory = path.dirname(currentDirectory);\n if (parentDirectory === currentDirectory) {\n return startDirectory;\n }\n currentDirectory = parentDirectory;\n }\n }\n }\n}\n","import type { AppConfig } from \"../config/AppConfig\";\nimport { CodemationConsumerConfigLoader } from \"./CodemationConsumerConfigLoader\";\nimport { AppConfigFactory } from \"../../bootstrap/runtime/AppConfigFactory\";\n\nexport type AppConfigLoadResult = Readonly<{\n appConfig: AppConfig;\n bootstrapSource: string | null;\n}>;\n\nexport class AppConfigLoader {\n constructor(\n private readonly consumerConfigLoader: CodemationConsumerConfigLoader = new CodemationConsumerConfigLoader(),\n private readonly appConfigFactory: AppConfigFactory = new AppConfigFactory(),\n ) {}\n\n async load(\n args: Readonly<{\n consumerRoot: string;\n repoRoot: string;\n env: NodeJS.ProcessEnv;\n configPathOverride?: string;\n }>,\n ): Promise<AppConfigLoadResult> {\n const resolution = await this.consumerConfigLoader.load({\n consumerRoot: args.consumerRoot,\n configPathOverride: args.configPathOverride,\n });\n return {\n appConfig: this.appConfigFactory.create({\n repoRoot: args.repoRoot,\n consumerRoot: args.consumerRoot,\n env: args.env,\n config: resolution.config,\n workflowSources: resolution.workflowSources,\n }),\n bootstrapSource: resolution.bootstrapSource,\n };\n }\n}\n","import type { CodemationPackageManifest } from \"../config/CodemationPackageManifest\";\nimport type { CodemationPlugin } from \"../config/CodemationPlugin\";\nimport { readFile, readdir } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nexport type CodemationDiscoveredPluginPackage = Readonly<{\n packageName: string;\n packageRoot: string;\n manifest: NonNullable<CodemationPackageManifest[\"plugin\"]>;\n developmentEntry?: string;\n}>;\n\nexport type CodemationResolvedPluginPackage = Readonly<\n CodemationDiscoveredPluginPackage & {\n plugin: CodemationPlugin;\n }\n>;\n\ntype PackageJsonShape = Readonly<{\n codemation?: CodemationPackageManifest;\n name?: string;\n exports?: Readonly<Record<string, unknown>>;\n}>;\n\nexport class CodemationPluginDiscovery {\n async discover(consumerRoot: string): Promise<ReadonlyArray<CodemationDiscoveredPluginPackage>> {\n const nodeModulesRoot = path.resolve(consumerRoot, \"node_modules\");\n const packageRoots = await this.collectPackageRoots(nodeModulesRoot);\n const discoveredPackages: CodemationDiscoveredPluginPackage[] = [];\n for (const packageRoot of packageRoots) {\n const packageJson = await this.readPackageJson(path.resolve(packageRoot, \"package.json\"));\n const pluginManifest = packageJson.codemation?.plugin;\n if (!packageJson.name || !pluginManifest || pluginManifest.kind !== \"plugin\") {\n continue;\n }\n discoveredPackages.push({\n packageName: packageJson.name,\n packageRoot,\n manifest: pluginManifest,\n developmentEntry: this.resolveDevelopmentPluginEntry(packageJson),\n });\n }\n return discoveredPackages.sort((left, right) => left.packageName.localeCompare(right.packageName));\n }\n\n async resolvePlugins(consumerRoot: string): Promise<ReadonlyArray<CodemationResolvedPluginPackage>> {\n const discoveredPackages = await this.discover(consumerRoot);\n return await this.resolveDiscoveredPackages(discoveredPackages);\n }\n\n async resolveDiscoveredPackages(\n discoveredPackages: ReadonlyArray<CodemationDiscoveredPluginPackage>,\n ): Promise<ReadonlyArray<CodemationResolvedPluginPackage>> {\n const resolvedPackages: CodemationResolvedPluginPackage[] = [];\n for (const discoveredPackage of discoveredPackages) {\n resolvedPackages.push({\n ...discoveredPackage,\n plugin: await this.loadPlugin(discoveredPackage),\n });\n }\n return resolvedPackages;\n }\n\n private async collectPackageRoots(nodeModulesRoot: string): Promise<ReadonlyArray<string>> {\n try {\n const entries = await readdir(nodeModulesRoot, { withFileTypes: true });\n const packageRoots: string[] = [];\n for (const entry of entries) {\n if (!entry.isDirectory() && !entry.isSymbolicLink()) {\n continue;\n }\n if (entry.name.startsWith(\"@\")) {\n const scopedEntries = await readdir(path.resolve(nodeModulesRoot, entry.name), { withFileTypes: true });\n for (const scopedEntry of scopedEntries) {\n if (scopedEntry.isDirectory() || scopedEntry.isSymbolicLink()) {\n packageRoots.push(path.resolve(nodeModulesRoot, entry.name, scopedEntry.name));\n }\n }\n continue;\n }\n packageRoots.push(path.resolve(nodeModulesRoot, entry.name));\n }\n return packageRoots;\n } catch {\n return [];\n }\n }\n\n private async readPackageJson(packageJsonPath: string): Promise<PackageJsonShape> {\n try {\n const rawPackageJson = await readFile(packageJsonPath, \"utf8\");\n return JSON.parse(rawPackageJson) as PackageJsonShape;\n } catch {\n return {};\n }\n }\n\n private async loadPlugin(discoveredPackage: CodemationDiscoveredPluginPackage): Promise<CodemationPlugin> {\n const pluginModulePath = path.resolve(discoveredPackage.packageRoot, this.resolvePluginEntry(discoveredPackage));\n const importedModule = (await import(pathToFileURL(pluginModulePath).href)) as Record<string, unknown>;\n const pluginExportName = discoveredPackage.manifest.exportName;\n const explicitExport = pluginExportName ? importedModule[pluginExportName] : undefined;\n const exportedValue = explicitExport ?? importedModule.default ?? importedModule.codemationPlugin;\n const plugin = this.resolvePluginValue(exportedValue);\n if (!plugin) {\n throw new Error(`Plugin package \"${discoveredPackage.packageName}\" did not export a Codemation plugin instance.`);\n }\n return plugin;\n }\n\n private resolvePluginValue(value: unknown): CodemationPlugin | null {\n if (this.isPlugin(value)) {\n return value;\n }\n if (this.isPluginConstructor(value)) {\n return new value();\n }\n return null;\n }\n\n private isPlugin(value: unknown): value is CodemationPlugin {\n return (\n Boolean(value) && typeof value === \"object\" && typeof (value as { register?: unknown }).register === \"function\"\n );\n }\n\n private isPluginConstructor(value: unknown): value is new () => CodemationPlugin {\n return typeof value === \"function\" && this.isPlugin(value.prototype);\n }\n\n private resolvePluginEntry(discoveredPackage: CodemationDiscoveredPluginPackage): string {\n if (\n process.env.CODEMATION_PREFER_PLUGIN_SOURCE_ENTRY === \"true\" &&\n typeof discoveredPackage.developmentEntry === \"string\" &&\n discoveredPackage.developmentEntry.trim().length > 0\n ) {\n return discoveredPackage.developmentEntry;\n }\n return discoveredPackage.manifest.entry;\n }\n\n private resolveDevelopmentPluginEntry(packageJson: PackageJsonShape): string | undefined {\n const exportRecord = packageJson.exports?.[\"./codemation-plugin\"];\n if (!exportRecord || typeof exportRecord !== \"object\") {\n return undefined;\n }\n const importPath = (exportRecord as { import?: unknown }).import;\n return typeof importPath === \"string\" && importPath.trim().length > 0 ? importPath : undefined;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { a as CodemationConfig,
|
|
2
|
-
import {
|
|
1
|
+
import { a as CodemationConfig, g as AppConfig, v as CodemationPlugin } from "./CodemationConfig-D2ULNkec.js";
|
|
2
|
+
import { t as CodemationConsumerConfigLoader } from "./CodemationConsumerConfigLoader-BLvzcfb7.js";
|
|
3
|
+
import { t as AppConfigFactory } from "./AppConfigFactory-DmHOpg8O.js";
|
|
4
|
+
import { i as WorkflowSummary, r as WorkflowDto } from "./FrontendAppConfigFactory-Bj-DZNlt.js";
|
|
3
5
|
|
|
4
6
|
//#region src/presentation/config/CodemationPackageManifest.d.ts
|
|
5
7
|
interface CodemationPluginPackageManifest {
|
|
@@ -82,6 +84,23 @@ declare class CodemationServerGateway {
|
|
|
82
84
|
private detectWorkspaceRoot;
|
|
83
85
|
}
|
|
84
86
|
//#endregion
|
|
87
|
+
//#region src/presentation/server/AppConfigLoader.d.ts
|
|
88
|
+
type AppConfigLoadResult = Readonly<{
|
|
89
|
+
appConfig: AppConfig;
|
|
90
|
+
bootstrapSource: string | null;
|
|
91
|
+
}>;
|
|
92
|
+
declare class AppConfigLoader {
|
|
93
|
+
private readonly consumerConfigLoader;
|
|
94
|
+
private readonly appConfigFactory;
|
|
95
|
+
constructor(consumerConfigLoader?: CodemationConsumerConfigLoader, appConfigFactory?: AppConfigFactory);
|
|
96
|
+
load(args: Readonly<{
|
|
97
|
+
consumerRoot: string;
|
|
98
|
+
repoRoot: string;
|
|
99
|
+
env: NodeJS.ProcessEnv;
|
|
100
|
+
configPathOverride?: string;
|
|
101
|
+
}>): Promise<AppConfigLoadResult>;
|
|
102
|
+
}
|
|
103
|
+
//#endregion
|
|
85
104
|
//#region src/presentation/server/CodemationPluginDiscovery.d.ts
|
|
86
105
|
type CodemationDiscoveredPluginPackage = Readonly<{
|
|
87
106
|
packageName: string;
|
|
@@ -128,5 +147,5 @@ declare class WorkflowDiscoveryPathSegmentsComputer {
|
|
|
128
147
|
}>): readonly string[] | undefined;
|
|
129
148
|
}
|
|
130
149
|
//#endregion
|
|
131
|
-
export { CodemationResolvedPluginPackage as a,
|
|
132
|
-
//# sourceMappingURL=server-
|
|
150
|
+
export { CodemationResolvedPluginPackage as a, CodemationServerGateway as c, CodemationPluginPackageManifest as d, CodemationPluginDiscovery as i, ApiPaths as l, WorkflowModulePathFinder as n, AppConfigLoadResult as o, CodemationDiscoveredPluginPackage as r, AppConfigLoader as s, WorkflowDiscoveryPathSegmentsComputer as t, CodemationPackageManifest as u };
|
|
151
|
+
//# sourceMappingURL=server-Dyo8qh4k.d.ts.map
|
package/dist/server.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
import "./
|
|
3
|
-
import "./
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import "./
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
1
|
+
import "./CodemationAuthConfig-Bh2cCNCI.js";
|
|
2
|
+
import { t as FrontendAppConfig } from "./FrontendAppConfig-D50wjj_n.js";
|
|
3
|
+
import { n as CodemationFrontendAuthSnapshotJsonCodec, t as FrontendAppConfigJsonCodec } from "./FrontendAppConfigJsonCodec-1_L7H_Qo.js";
|
|
4
|
+
import "./index-CkiptHb-.js";
|
|
5
|
+
import "./CodemationConfig-D2ULNkec.js";
|
|
6
|
+
import "./CodemationConfigNormalizer-CBLxXaRV.js";
|
|
7
|
+
import { i as CodemationConsumerAppResolver, n as CodemationConsumerConfigResolution, r as CodemationConsumerApp, t as CodemationConsumerConfigLoader } from "./CodemationConsumerConfigLoader-BLvzcfb7.js";
|
|
8
|
+
import { r as PrismaClient } from "./AppConfigFactory-DmHOpg8O.js";
|
|
9
|
+
import { a as CodemationResolvedPluginPackage, c as CodemationServerGateway, i as CodemationPluginDiscovery, l as ApiPaths, n as WorkflowModulePathFinder, o as AppConfigLoadResult, r as CodemationDiscoveredPluginPackage, s as AppConfigLoader, t as WorkflowDiscoveryPathSegmentsComputer } from "./server-Dyo8qh4k.js";
|
|
10
|
+
import { t as CodemationPostgresPrismaClientFactory } from "./persistenceServer-CaehMh3M.js";
|
|
11
|
+
import { n as CodemationFrontendAuthSnapshotFactory, t as FrontendAppConfigFactory } from "./FrontendAppConfigFactory-Bj-DZNlt.js";
|
|
12
|
+
export { ApiPaths, AppConfigLoadResult, AppConfigLoader, CodemationConsumerApp, CodemationConsumerAppResolver, CodemationConsumerConfigLoader, CodemationConsumerConfigResolution, CodemationDiscoveredPluginPackage, CodemationFrontendAuthSnapshotFactory, CodemationFrontendAuthSnapshotJsonCodec, CodemationPluginDiscovery, CodemationPostgresPrismaClientFactory, CodemationResolvedPluginPackage, CodemationServerGateway, FrontendAppConfig, FrontendAppConfigFactory, FrontendAppConfigJsonCodec, PrismaClient, WorkflowDiscoveryPathSegmentsComputer, WorkflowModulePathFinder };
|
package/dist/server.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import "./ConsoleLogger-ClPU7jtc.js";
|
|
2
|
-
import "./
|
|
3
|
-
import { i as CodemationConsumerAppResolver, n as WorkflowDiscoveryPathSegmentsComputer, r as WorkflowModulePathFinder, t as CodemationConsumerConfigLoader } from "./CodemationConsumerConfigLoader-
|
|
4
|
-
import "./
|
|
5
|
-
import "./
|
|
6
|
-
import "./
|
|
7
|
-
import
|
|
8
|
-
import "./
|
|
9
|
-
import
|
|
10
|
-
import { n as
|
|
2
|
+
import { n as CodemationFrontendAuthSnapshotJsonCodec, t as FrontendAppConfigJsonCodec } from "./FrontendAppConfigJsonCodec-nOCQI0ag.js";
|
|
3
|
+
import { i as CodemationConsumerAppResolver, n as WorkflowDiscoveryPathSegmentsComputer, r as WorkflowModulePathFinder, t as CodemationConsumerConfigLoader } from "./CodemationConsumerConfigLoader-BBzAr6L_.js";
|
|
4
|
+
import "./ServerLoggerFactory-BltIIDfQ.js";
|
|
5
|
+
import "./decorateParam-DrsXNPuw.js";
|
|
6
|
+
import "./decorate-B0PP651O.js";
|
|
7
|
+
import "./CredentialServices-DNb3CZwW.js";
|
|
8
|
+
import { _ as ApiPaths, h as CodemationFrontendAuthSnapshotFactory, m as FrontendAppConfigFactory } from "./AppContainerFactory-B5eRpvAa.js";
|
|
9
|
+
import "./AppConfigFactory-DWIz2hy-.js";
|
|
10
|
+
import { n as CodemationPostgresPrismaClientFactory, t as import_client } from "./persistenceServer-DVeWUbc3.js";
|
|
11
|
+
import { n as AppConfigLoader, r as CodemationServerGateway, t as CodemationPluginDiscovery } from "./server-C65z_kqm.js";
|
|
11
12
|
|
|
12
13
|
var PrismaClient = import_client.PrismaClient;
|
|
13
|
-
export { ApiPaths, CodemationConsumerAppResolver, CodemationConsumerConfigLoader, CodemationPluginDiscovery, CodemationPostgresPrismaClientFactory, CodemationServerGateway, PrismaClient, WorkflowDiscoveryPathSegmentsComputer, WorkflowModulePathFinder };
|
|
14
|
+
export { ApiPaths, AppConfigLoader, CodemationConsumerAppResolver, CodemationConsumerConfigLoader, CodemationFrontendAuthSnapshotFactory, CodemationFrontendAuthSnapshotJsonCodec, CodemationPluginDiscovery, CodemationPostgresPrismaClientFactory, CodemationServerGateway, FrontendAppConfigFactory, FrontendAppConfigJsonCodec, PrismaClient, WorkflowDiscoveryPathSegmentsComputer, WorkflowModulePathFinder };
|
package/package.json
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codemation/host",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.11",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
7
|
"author": "Made Relevant B.V.",
|
|
8
8
|
"homepage": "https://www.maderelevant.com",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/MadeRelevant/codemation",
|
|
12
|
+
"directory": "packages/host"
|
|
13
|
+
},
|
|
9
14
|
"type": "module",
|
|
10
15
|
"main": "./dist/index.js",
|
|
11
16
|
"module": "./dist/index.js",
|
|
@@ -81,6 +86,7 @@
|
|
|
81
86
|
"@uiw/react-json-view": "2.0.0-alpha.41",
|
|
82
87
|
"@xyflow/react": "^12.10.1",
|
|
83
88
|
"bcryptjs": "^3.0.3",
|
|
89
|
+
"bullmq": "^5.58.3",
|
|
84
90
|
"dagre": "^0.8.5",
|
|
85
91
|
"date-fns": "^4.1.0",
|
|
86
92
|
"hono": "^4.12.8",
|
|
@@ -103,10 +109,9 @@
|
|
|
103
109
|
"tsx": "^4.21.0",
|
|
104
110
|
"ws": "^8.19.0",
|
|
105
111
|
"zxcvbn": "^4.4.2",
|
|
106
|
-
"@codemation/core": "0.0.
|
|
107
|
-
"@codemation/core-nodes": "0.0.
|
|
108
|
-
"@codemation/eventbus-redis": "0.0.
|
|
109
|
-
"@codemation/queue-bullmq": "0.0.5"
|
|
112
|
+
"@codemation/core": "0.0.11",
|
|
113
|
+
"@codemation/core-nodes": "0.0.11",
|
|
114
|
+
"@codemation/eventbus-redis": "0.0.11"
|
|
110
115
|
},
|
|
111
116
|
"devDependencies": {
|
|
112
117
|
"@playwright/test": "^1.58.2",
|
|
@@ -131,7 +136,7 @@
|
|
|
131
136
|
"tsdown": "^0.15.5",
|
|
132
137
|
"typescript": "^5.9.3",
|
|
133
138
|
"vitest": "^4.0.18",
|
|
134
|
-
"@codemation/core-nodes-gmail": "0.0.
|
|
139
|
+
"@codemation/core-nodes-gmail": "0.0.11"
|
|
135
140
|
},
|
|
136
141
|
"scripts": {
|
|
137
142
|
"prisma:generate": "prisma generate && node ./scripts/ensure-prisma-runtime-sourcemaps.mjs",
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
-- CreateSchema
|
|
2
|
-
CREATE SCHEMA IF NOT EXISTS "public";
|
|
3
|
-
|
|
4
|
-
-- CreateTable
|
|
5
|
-
CREATE TABLE "Run" (
|
|
6
|
-
"run_id" TEXT NOT NULL,
|
|
7
|
-
"workflow_id" TEXT NOT NULL,
|
|
8
|
-
"started_at" TEXT NOT NULL,
|
|
9
|
-
"status" TEXT NOT NULL,
|
|
10
|
-
"parent_json" TEXT,
|
|
11
|
-
"execution_options_json" TEXT,
|
|
12
|
-
"updated_at" TEXT NOT NULL,
|
|
13
|
-
"state_json" TEXT NOT NULL,
|
|
14
|
-
|
|
15
|
-
CONSTRAINT "Run_pkey" PRIMARY KEY ("run_id")
|
|
16
|
-
);
|
|
1
|
+
-- CreateSchema
|
|
2
|
+
CREATE SCHEMA IF NOT EXISTS "public";
|
|
3
|
+
|
|
4
|
+
-- CreateTable
|
|
5
|
+
CREATE TABLE "Run" (
|
|
6
|
+
"run_id" TEXT NOT NULL,
|
|
7
|
+
"workflow_id" TEXT NOT NULL,
|
|
8
|
+
"started_at" TEXT NOT NULL,
|
|
9
|
+
"status" TEXT NOT NULL,
|
|
10
|
+
"parent_json" TEXT,
|
|
11
|
+
"execution_options_json" TEXT,
|
|
12
|
+
"updated_at" TEXT NOT NULL,
|
|
13
|
+
"state_json" TEXT NOT NULL,
|
|
14
|
+
|
|
15
|
+
CONSTRAINT "Run_pkey" PRIMARY KEY ("run_id")
|
|
16
|
+
);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
-- CreateTable
|
|
2
|
-
CREATE TABLE "WorkflowDebuggerOverlay" (
|
|
3
|
-
"workflow_id" TEXT NOT NULL,
|
|
4
|
-
"updated_at" TEXT NOT NULL,
|
|
5
|
-
"copied_from_run_id" TEXT,
|
|
6
|
-
"state_json" TEXT NOT NULL,
|
|
7
|
-
|
|
8
|
-
CONSTRAINT "WorkflowDebuggerOverlay_pkey" PRIMARY KEY ("workflow_id")
|
|
9
|
-
);
|
|
1
|
+
-- CreateTable
|
|
2
|
+
CREATE TABLE "WorkflowDebuggerOverlay" (
|
|
3
|
+
"workflow_id" TEXT NOT NULL,
|
|
4
|
+
"updated_at" TEXT NOT NULL,
|
|
5
|
+
"copied_from_run_id" TEXT,
|
|
6
|
+
"state_json" TEXT NOT NULL,
|
|
7
|
+
|
|
8
|
+
CONSTRAINT "WorkflowDebuggerOverlay_pkey" PRIMARY KEY ("workflow_id")
|
|
9
|
+
);
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
-- Superseded by 20260317153000_trigger_setup_state.
|
|
2
|
-
-- This migration folder is kept intentionally as a no-op so Prisma migrate
|
|
3
|
-
-- deploy can traverse the historical migration chain without failing.
|
|
1
|
+
-- Superseded by 20260317153000_trigger_setup_state.
|
|
2
|
+
-- This migration folder is kept intentionally as a no-op so Prisma migrate
|
|
3
|
+
-- deploy can traverse the historical migration chain without failing.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
CREATE TABLE "TriggerSetupState" (
|
|
2
|
-
"workflow_id" TEXT NOT NULL,
|
|
3
|
-
"node_id" TEXT NOT NULL,
|
|
4
|
-
"updated_at" TEXT NOT NULL,
|
|
5
|
-
"state_json" TEXT NOT NULL,
|
|
6
|
-
|
|
7
|
-
CONSTRAINT "TriggerSetupState_pkey" PRIMARY KEY ("workflow_id","node_id")
|
|
8
|
-
);
|
|
1
|
+
CREATE TABLE "TriggerSetupState" (
|
|
2
|
+
"workflow_id" TEXT NOT NULL,
|
|
3
|
+
"node_id" TEXT NOT NULL,
|
|
4
|
+
"updated_at" TEXT NOT NULL,
|
|
5
|
+
"state_json" TEXT NOT NULL,
|
|
6
|
+
|
|
7
|
+
CONSTRAINT "TriggerSetupState_pkey" PRIMARY KEY ("workflow_id","node_id")
|
|
8
|
+
);
|
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
CREATE TABLE "CredentialInstance" (
|
|
2
|
-
"instance_id" TEXT NOT NULL,
|
|
3
|
-
"type_id" TEXT NOT NULL,
|
|
4
|
-
"display_name" TEXT NOT NULL,
|
|
5
|
-
"source_kind" TEXT NOT NULL,
|
|
6
|
-
"public_config_json" TEXT NOT NULL,
|
|
7
|
-
"secret_ref_json" TEXT NOT NULL,
|
|
8
|
-
"tags_json" TEXT NOT NULL,
|
|
9
|
-
"setup_status" TEXT NOT NULL,
|
|
10
|
-
"created_at" TEXT NOT NULL,
|
|
11
|
-
"updated_at" TEXT NOT NULL,
|
|
12
|
-
|
|
13
|
-
CONSTRAINT "CredentialInstance_pkey" PRIMARY KEY ("instance_id")
|
|
14
|
-
);
|
|
15
|
-
|
|
16
|
-
CREATE TABLE "CredentialSecretMaterial" (
|
|
17
|
-
"instance_id" TEXT NOT NULL,
|
|
18
|
-
"encrypted_json" TEXT NOT NULL,
|
|
19
|
-
"encryption_key_id" TEXT NOT NULL,
|
|
20
|
-
"schema_version" INTEGER NOT NULL,
|
|
21
|
-
"updated_at" TEXT NOT NULL,
|
|
22
|
-
|
|
23
|
-
CONSTRAINT "CredentialSecretMaterial_pkey" PRIMARY KEY ("instance_id")
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
CREATE TABLE "CredentialBinding" (
|
|
27
|
-
"workflow_id" TEXT NOT NULL,
|
|
28
|
-
"node_id" TEXT NOT NULL,
|
|
29
|
-
"slot_key" TEXT NOT NULL,
|
|
30
|
-
"instance_id" TEXT NOT NULL,
|
|
31
|
-
"updated_at" TEXT NOT NULL,
|
|
32
|
-
|
|
33
|
-
CONSTRAINT "CredentialBinding_pkey" PRIMARY KEY ("workflow_id", "node_id", "slot_key")
|
|
34
|
-
);
|
|
35
|
-
|
|
36
|
-
CREATE TABLE "CredentialTestResult" (
|
|
37
|
-
"test_id" TEXT NOT NULL,
|
|
38
|
-
"instance_id" TEXT NOT NULL,
|
|
39
|
-
"status" TEXT NOT NULL,
|
|
40
|
-
"message" TEXT,
|
|
41
|
-
"details_json" TEXT NOT NULL,
|
|
42
|
-
"tested_at" TEXT NOT NULL,
|
|
43
|
-
"expires_at" TEXT,
|
|
44
|
-
|
|
45
|
-
CONSTRAINT "CredentialTestResult_pkey" PRIMARY KEY ("test_id")
|
|
46
|
-
);
|
|
47
|
-
|
|
48
|
-
CREATE INDEX "CredentialBinding_instance_id_idx" ON "CredentialBinding"("instance_id");
|
|
49
|
-
CREATE INDEX "CredentialTestResult_instance_id_tested_at_idx" ON "CredentialTestResult"("instance_id", "tested_at");
|
|
1
|
+
CREATE TABLE "CredentialInstance" (
|
|
2
|
+
"instance_id" TEXT NOT NULL,
|
|
3
|
+
"type_id" TEXT NOT NULL,
|
|
4
|
+
"display_name" TEXT NOT NULL,
|
|
5
|
+
"source_kind" TEXT NOT NULL,
|
|
6
|
+
"public_config_json" TEXT NOT NULL,
|
|
7
|
+
"secret_ref_json" TEXT NOT NULL,
|
|
8
|
+
"tags_json" TEXT NOT NULL,
|
|
9
|
+
"setup_status" TEXT NOT NULL,
|
|
10
|
+
"created_at" TEXT NOT NULL,
|
|
11
|
+
"updated_at" TEXT NOT NULL,
|
|
12
|
+
|
|
13
|
+
CONSTRAINT "CredentialInstance_pkey" PRIMARY KEY ("instance_id")
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
CREATE TABLE "CredentialSecretMaterial" (
|
|
17
|
+
"instance_id" TEXT NOT NULL,
|
|
18
|
+
"encrypted_json" TEXT NOT NULL,
|
|
19
|
+
"encryption_key_id" TEXT NOT NULL,
|
|
20
|
+
"schema_version" INTEGER NOT NULL,
|
|
21
|
+
"updated_at" TEXT NOT NULL,
|
|
22
|
+
|
|
23
|
+
CONSTRAINT "CredentialSecretMaterial_pkey" PRIMARY KEY ("instance_id")
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
CREATE TABLE "CredentialBinding" (
|
|
27
|
+
"workflow_id" TEXT NOT NULL,
|
|
28
|
+
"node_id" TEXT NOT NULL,
|
|
29
|
+
"slot_key" TEXT NOT NULL,
|
|
30
|
+
"instance_id" TEXT NOT NULL,
|
|
31
|
+
"updated_at" TEXT NOT NULL,
|
|
32
|
+
|
|
33
|
+
CONSTRAINT "CredentialBinding_pkey" PRIMARY KEY ("workflow_id", "node_id", "slot_key")
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
CREATE TABLE "CredentialTestResult" (
|
|
37
|
+
"test_id" TEXT NOT NULL,
|
|
38
|
+
"instance_id" TEXT NOT NULL,
|
|
39
|
+
"status" TEXT NOT NULL,
|
|
40
|
+
"message" TEXT,
|
|
41
|
+
"details_json" TEXT NOT NULL,
|
|
42
|
+
"tested_at" TEXT NOT NULL,
|
|
43
|
+
"expires_at" TEXT,
|
|
44
|
+
|
|
45
|
+
CONSTRAINT "CredentialTestResult_pkey" PRIMARY KEY ("test_id")
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
CREATE INDEX "CredentialBinding_instance_id_idx" ON "CredentialBinding"("instance_id");
|
|
49
|
+
CREATE INDEX "CredentialTestResult_instance_id_tested_at_idx" ON "CredentialTestResult"("instance_id", "tested_at");
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
CREATE TABLE "CredentialOAuth2Material" (
|
|
2
|
-
"instance_id" TEXT NOT NULL,
|
|
3
|
-
"encrypted_json" TEXT NOT NULL,
|
|
4
|
-
"encryption_key_id" TEXT NOT NULL,
|
|
5
|
-
"schema_version" INTEGER NOT NULL,
|
|
6
|
-
"provider_id" TEXT NOT NULL,
|
|
7
|
-
"connected_email" TEXT,
|
|
8
|
-
"connected_at" TEXT,
|
|
9
|
-
"scopes_json" TEXT NOT NULL,
|
|
10
|
-
"updated_at" TEXT NOT NULL,
|
|
11
|
-
|
|
12
|
-
CONSTRAINT "CredentialOAuth2Material_pkey" PRIMARY KEY ("instance_id")
|
|
13
|
-
);
|
|
14
|
-
|
|
15
|
-
CREATE TABLE "CredentialOAuth2State" (
|
|
16
|
-
"state" TEXT NOT NULL,
|
|
17
|
-
"instance_id" TEXT NOT NULL,
|
|
18
|
-
"code_verifier" TEXT,
|
|
19
|
-
"provider_id" TEXT,
|
|
20
|
-
"requested_scopes_json" TEXT NOT NULL,
|
|
21
|
-
"created_at" TEXT NOT NULL,
|
|
22
|
-
"expires_at" TEXT NOT NULL,
|
|
23
|
-
|
|
24
|
-
CONSTRAINT "CredentialOAuth2State_pkey" PRIMARY KEY ("state")
|
|
25
|
-
);
|
|
26
|
-
|
|
27
|
-
CREATE INDEX "CredentialOAuth2State_instance_id_idx" ON "CredentialOAuth2State"("instance_id");
|
|
28
|
-
CREATE INDEX "CredentialOAuth2State_expires_at_idx" ON "CredentialOAuth2State"("expires_at");
|
|
1
|
+
CREATE TABLE "CredentialOAuth2Material" (
|
|
2
|
+
"instance_id" TEXT NOT NULL,
|
|
3
|
+
"encrypted_json" TEXT NOT NULL,
|
|
4
|
+
"encryption_key_id" TEXT NOT NULL,
|
|
5
|
+
"schema_version" INTEGER NOT NULL,
|
|
6
|
+
"provider_id" TEXT NOT NULL,
|
|
7
|
+
"connected_email" TEXT,
|
|
8
|
+
"connected_at" TEXT,
|
|
9
|
+
"scopes_json" TEXT NOT NULL,
|
|
10
|
+
"updated_at" TEXT NOT NULL,
|
|
11
|
+
|
|
12
|
+
CONSTRAINT "CredentialOAuth2Material_pkey" PRIMARY KEY ("instance_id")
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
CREATE TABLE "CredentialOAuth2State" (
|
|
16
|
+
"state" TEXT NOT NULL,
|
|
17
|
+
"instance_id" TEXT NOT NULL,
|
|
18
|
+
"code_verifier" TEXT,
|
|
19
|
+
"provider_id" TEXT,
|
|
20
|
+
"requested_scopes_json" TEXT NOT NULL,
|
|
21
|
+
"created_at" TEXT NOT NULL,
|
|
22
|
+
"expires_at" TEXT NOT NULL,
|
|
23
|
+
|
|
24
|
+
CONSTRAINT "CredentialOAuth2State_pkey" PRIMARY KEY ("state")
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
CREATE INDEX "CredentialOAuth2State_instance_id_idx" ON "CredentialOAuth2State"("instance_id");
|
|
28
|
+
CREATE INDEX "CredentialOAuth2State_expires_at_idx" ON "CredentialOAuth2State"("expires_at");
|
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
-- Auth.js directory tables (JWT session strategy; optional DB sessions for adapter)
|
|
2
|
-
|
|
3
|
-
CREATE TABLE "codemation_auth_user" (
|
|
4
|
-
"id" TEXT NOT NULL,
|
|
5
|
-
"name" TEXT,
|
|
6
|
-
"email" TEXT,
|
|
7
|
-
"email_verified" TIMESTAMP(3),
|
|
8
|
-
"image" TEXT,
|
|
9
|
-
"password_hash" TEXT,
|
|
10
|
-
|
|
11
|
-
CONSTRAINT "codemation_auth_user_pkey" PRIMARY KEY ("id")
|
|
12
|
-
);
|
|
13
|
-
|
|
14
|
-
CREATE UNIQUE INDEX "codemation_auth_user_email_key" ON "codemation_auth_user"("email");
|
|
15
|
-
|
|
16
|
-
CREATE TABLE "codemation_auth_account" (
|
|
17
|
-
"id" TEXT NOT NULL,
|
|
18
|
-
"user_id" TEXT NOT NULL,
|
|
19
|
-
"type" TEXT NOT NULL,
|
|
20
|
-
"provider" TEXT NOT NULL,
|
|
21
|
-
"provider_account_id" TEXT NOT NULL,
|
|
22
|
-
"refresh_token" TEXT,
|
|
23
|
-
"access_token" TEXT,
|
|
24
|
-
"expires_at" INTEGER,
|
|
25
|
-
"token_type" TEXT,
|
|
26
|
-
"scope" TEXT,
|
|
27
|
-
"id_token" TEXT,
|
|
28
|
-
"session_state" TEXT,
|
|
29
|
-
|
|
30
|
-
CONSTRAINT "codemation_auth_account_pkey" PRIMARY KEY ("id")
|
|
31
|
-
);
|
|
32
|
-
|
|
33
|
-
CREATE UNIQUE INDEX "codemation_auth_account_provider_provider_account_id_key" ON "codemation_auth_account"("provider", "provider_account_id");
|
|
34
|
-
|
|
35
|
-
CREATE TABLE "codemation_auth_session" (
|
|
36
|
-
"id" TEXT NOT NULL,
|
|
37
|
-
"session_token" TEXT NOT NULL,
|
|
38
|
-
"user_id" TEXT NOT NULL,
|
|
39
|
-
"expires" TIMESTAMP(3) NOT NULL,
|
|
40
|
-
|
|
41
|
-
CONSTRAINT "codemation_auth_session_pkey" PRIMARY KEY ("id")
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
CREATE UNIQUE INDEX "codemation_auth_session_session_token_key" ON "codemation_auth_session"("session_token");
|
|
45
|
-
|
|
46
|
-
CREATE TABLE "codemation_auth_verification_token" (
|
|
47
|
-
"identifier" TEXT NOT NULL,
|
|
48
|
-
"token" TEXT NOT NULL,
|
|
49
|
-
"expires" TIMESTAMP(3) NOT NULL,
|
|
50
|
-
|
|
51
|
-
CONSTRAINT "codemation_auth_verification_token_identifier_token_key" UNIQUE ("identifier", "token")
|
|
52
|
-
);
|
|
53
|
-
|
|
54
|
-
ALTER TABLE "codemation_auth_account" ADD CONSTRAINT "codemation_auth_account_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "codemation_auth_user"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
55
|
-
|
|
56
|
-
ALTER TABLE "codemation_auth_session" ADD CONSTRAINT "codemation_auth_session_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "codemation_auth_user"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
1
|
+
-- Auth.js directory tables (JWT session strategy; optional DB sessions for adapter)
|
|
2
|
+
|
|
3
|
+
CREATE TABLE "codemation_auth_user" (
|
|
4
|
+
"id" TEXT NOT NULL,
|
|
5
|
+
"name" TEXT,
|
|
6
|
+
"email" TEXT,
|
|
7
|
+
"email_verified" TIMESTAMP(3),
|
|
8
|
+
"image" TEXT,
|
|
9
|
+
"password_hash" TEXT,
|
|
10
|
+
|
|
11
|
+
CONSTRAINT "codemation_auth_user_pkey" PRIMARY KEY ("id")
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
CREATE UNIQUE INDEX "codemation_auth_user_email_key" ON "codemation_auth_user"("email");
|
|
15
|
+
|
|
16
|
+
CREATE TABLE "codemation_auth_account" (
|
|
17
|
+
"id" TEXT NOT NULL,
|
|
18
|
+
"user_id" TEXT NOT NULL,
|
|
19
|
+
"type" TEXT NOT NULL,
|
|
20
|
+
"provider" TEXT NOT NULL,
|
|
21
|
+
"provider_account_id" TEXT NOT NULL,
|
|
22
|
+
"refresh_token" TEXT,
|
|
23
|
+
"access_token" TEXT,
|
|
24
|
+
"expires_at" INTEGER,
|
|
25
|
+
"token_type" TEXT,
|
|
26
|
+
"scope" TEXT,
|
|
27
|
+
"id_token" TEXT,
|
|
28
|
+
"session_state" TEXT,
|
|
29
|
+
|
|
30
|
+
CONSTRAINT "codemation_auth_account_pkey" PRIMARY KEY ("id")
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
CREATE UNIQUE INDEX "codemation_auth_account_provider_provider_account_id_key" ON "codemation_auth_account"("provider", "provider_account_id");
|
|
34
|
+
|
|
35
|
+
CREATE TABLE "codemation_auth_session" (
|
|
36
|
+
"id" TEXT NOT NULL,
|
|
37
|
+
"session_token" TEXT NOT NULL,
|
|
38
|
+
"user_id" TEXT NOT NULL,
|
|
39
|
+
"expires" TIMESTAMP(3) NOT NULL,
|
|
40
|
+
|
|
41
|
+
CONSTRAINT "codemation_auth_session_pkey" PRIMARY KEY ("id")
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
CREATE UNIQUE INDEX "codemation_auth_session_session_token_key" ON "codemation_auth_session"("session_token");
|
|
45
|
+
|
|
46
|
+
CREATE TABLE "codemation_auth_verification_token" (
|
|
47
|
+
"identifier" TEXT NOT NULL,
|
|
48
|
+
"token" TEXT NOT NULL,
|
|
49
|
+
"expires" TIMESTAMP(3) NOT NULL,
|
|
50
|
+
|
|
51
|
+
CONSTRAINT "codemation_auth_verification_token_identifier_token_key" UNIQUE ("identifier", "token")
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
ALTER TABLE "codemation_auth_account" ADD CONSTRAINT "codemation_auth_account_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "codemation_auth_user"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
55
|
+
|
|
56
|
+
ALTER TABLE "codemation_auth_session" ADD CONSTRAINT "codemation_auth_session_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "codemation_auth_user"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|