@codemation/host 0.1.6 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/dist/{AppConfigFactory-BiFHnorf.d.ts → AppConfigFactory-DHdAGOmC.d.ts} +3 -3
- package/dist/{AppContainerFactory-BRU02PTm.js → AppContainerFactory-BKaAUIi-.js} +91 -27
- package/dist/AppContainerFactory-BKaAUIi-.js.map +1 -0
- package/dist/{CodemationConfig-DuGk7uN5.d.ts → CodemationConfig-DBbMU3HB.d.ts} +2 -2
- package/dist/{CodemationConfigNormalizer-BP2-0ZDE.d.ts → CodemationConfigNormalizer-C8wC0skq.d.ts} +2 -2
- package/dist/{CodemationConsumerConfigLoader-D5CSz3TQ.d.ts → CodemationConsumerConfigLoader-Ceh6sB3X.d.ts} +3 -2
- package/dist/{CodemationConsumerConfigLoader-C_ISRrpI.js → CodemationConsumerConfigLoader-D6LFSlp5.js} +20 -7
- package/dist/CodemationConsumerConfigLoader-D6LFSlp5.js.map +1 -0
- package/dist/{CodemationPluginListMerger-DFzGgfyI.d.ts → CodemationPluginListMerger-Cx9DnyR-.d.ts} +5 -5
- package/dist/{CredentialServices-Bhejvys-.d.ts → CredentialServices-CYETzKyb.d.ts} +14 -5
- package/dist/{CredentialServices-xVxVA9Tq.js → CredentialServices-D8BBZH1i.js} +40 -6
- package/dist/CredentialServices-D8BBZH1i.js.map +1 -0
- package/dist/{PublicFrontendBootstrapFactory-CSgWyTra.d.ts → PublicFrontendBootstrapFactory-DeMjp3cs.d.ts} +5 -2
- package/dist/consumer.d.ts +4 -4
- package/dist/consumer.js +1 -1
- package/dist/credentials.d.ts +3 -3
- package/dist/credentials.js +1 -1
- package/dist/devServerSidecar.d.ts +1 -1
- package/dist/{index-BQaZZmOm.d.ts → index-dK05sTQ4.d.ts} +50 -60
- package/dist/index.d.ts +97 -12
- package/dist/index.js +4 -4
- package/dist/nextServer.d.ts +16 -8
- package/dist/nextServer.js +2 -2
- package/dist/{persistenceServer-fdldtXJH.d.ts → persistenceServer-D9vUTMqc.d.ts} +2 -2
- package/dist/persistenceServer.d.ts +5 -5
- package/dist/{server-ChTCEc6R.js → server-C-WZcsId.js} +5 -6
- package/dist/{server-ChTCEc6R.js.map → server-C-WZcsId.js.map} +1 -1
- package/dist/{server-Cpzpy1Ar.d.ts → server-fxqY2WEi.d.ts} +5 -5
- package/dist/server.d.ts +8 -8
- package/dist/server.js +4 -4
- package/package.json +6 -5
- package/playwright.config.ts +10 -6
- package/src/application/contracts/WorkflowViewContracts.ts +3 -0
- package/src/application/mapping/WorkflowDefinitionMapper.ts +117 -19
- package/src/bootstrap/AppContainerFactory.ts +2 -0
- package/src/domain/credentials/CredentialInstanceService.ts +8 -1
- package/src/domain/credentials/CredentialOAuth2ScopeResolver.ts +61 -0
- package/src/domain/credentials/CredentialServices.ts +1 -0
- package/src/domain/credentials/OAuth2ConnectServiceFactory.ts +9 -2
- package/src/presentation/http/routeHandlers/CredentialHttpRouteHandler.ts +2 -1
- package/src/presentation/http/routeHandlers/WorkflowHttpRouteHandler.ts +4 -2
- package/src/presentation/server/CodemationConsumerConfigLoader.ts +28 -5
- package/src/presentation/server/CodemationPluginDiscovery.ts +4 -6
- package/dist/AppContainerFactory-BRU02PTm.js.map +0 -1
- package/dist/CodemationConsumerConfigLoader-C_ISRrpI.js.map +0 -1
- package/dist/CredentialServices-xVxVA9Tq.js.map +0 -1
|
@@ -66,7 +66,8 @@ export class WorkflowHttpRouteHandler {
|
|
|
66
66
|
|
|
67
67
|
async getWorkflowRuns(_: Request, params: ServerHttpRouteParams): Promise<Response> {
|
|
68
68
|
try {
|
|
69
|
-
|
|
69
|
+
const runs = await this.queryBus.execute(new ListWorkflowRunsQuery(params.workflowId!));
|
|
70
|
+
return Response.json(runs);
|
|
70
71
|
} catch (error) {
|
|
71
72
|
return ServerHttpErrorResponseFactory.fromUnknown(error);
|
|
72
73
|
}
|
|
@@ -74,7 +75,8 @@ export class WorkflowHttpRouteHandler {
|
|
|
74
75
|
|
|
75
76
|
async getWorkflowDebuggerOverlay(_: Request, params: ServerHttpRouteParams): Promise<Response> {
|
|
76
77
|
try {
|
|
77
|
-
|
|
78
|
+
const overlay = await this.queryBus.execute(new GetWorkflowDebuggerOverlayQuery(params.workflowId!));
|
|
79
|
+
return Response.json(overlay);
|
|
78
80
|
} catch (error) {
|
|
79
81
|
return ServerHttpErrorResponseFactory.fromUnknown(error);
|
|
80
82
|
}
|
|
@@ -20,6 +20,11 @@ export type CodemationConsumerConfigResolution = Readonly<{
|
|
|
20
20
|
workflowSources: ReadonlyArray<string>;
|
|
21
21
|
}>;
|
|
22
22
|
|
|
23
|
+
type ConsumerImportSession = Readonly<{
|
|
24
|
+
shouldResetImporter: boolean;
|
|
25
|
+
resetCacheKeys: Set<string>;
|
|
26
|
+
}>;
|
|
27
|
+
|
|
23
28
|
export class CodemationConsumerConfigLoader {
|
|
24
29
|
private static readonly importerRegistrationsByTsconfig = new Map<string, NamespacedUnregister>();
|
|
25
30
|
private static readonly importerNamespaceVersionByTsconfig = new Map<string, number>();
|
|
@@ -38,10 +43,13 @@ export class CodemationConsumerConfigLoader {
|
|
|
38
43
|
): Promise<CodemationConsumerConfigResolution> {
|
|
39
44
|
const loadStarted = performance.now();
|
|
40
45
|
let mark = loadStarted;
|
|
46
|
+
const importSession = this.createImportSession();
|
|
47
|
+
const phaseDurations = new Map<string, number>();
|
|
41
48
|
const phaseMs = (label: string): void => {
|
|
42
49
|
const now = performance.now();
|
|
43
50
|
const delta = now - mark;
|
|
44
51
|
mark = now;
|
|
52
|
+
phaseDurations.set(label, delta);
|
|
45
53
|
this.performanceDiagnosticsLogger.info(
|
|
46
54
|
`load.${label} +${delta.toFixed(1)}ms (cumulative ${(now - loadStarted).toFixed(1)}ms)`,
|
|
47
55
|
);
|
|
@@ -53,7 +61,7 @@ export class CodemationConsumerConfigLoader {
|
|
|
53
61
|
'Codemation config not found. Expected "codemation.config.ts" in the consumer project root or "src/".',
|
|
54
62
|
);
|
|
55
63
|
}
|
|
56
|
-
const moduleExports = await this.importModule(bootstrapSource);
|
|
64
|
+
const moduleExports = await this.importModule(bootstrapSource, importSession);
|
|
57
65
|
phaseMs("importConfigModule");
|
|
58
66
|
const rawConfig = this.configExportsResolver.resolveConfig(moduleExports);
|
|
59
67
|
if (!rawConfig) {
|
|
@@ -64,7 +72,7 @@ export class CodemationConsumerConfigLoader {
|
|
|
64
72
|
phaseMs("resolveWorkflowSources");
|
|
65
73
|
const workflows = this.mergeWorkflows(
|
|
66
74
|
config.workflows ?? [],
|
|
67
|
-
await this.loadDiscoveredWorkflows(args.consumerRoot, config, workflowSources),
|
|
75
|
+
await this.loadDiscoveredWorkflows(args.consumerRoot, config, workflowSources, importSession),
|
|
68
76
|
);
|
|
69
77
|
phaseMs("loadDiscoveredWorkflows");
|
|
70
78
|
const resolvedConfig: NormalizedCodemationConfig = {
|
|
@@ -125,6 +133,7 @@ export class CodemationConsumerConfigLoader {
|
|
|
125
133
|
consumerRoot: string,
|
|
126
134
|
config: CodemationConfig,
|
|
127
135
|
workflowSources: ReadonlyArray<string>,
|
|
136
|
+
importSession: ConsumerImportSession,
|
|
128
137
|
): Promise<ReadonlyArray<WorkflowDefinition>> {
|
|
129
138
|
const workflowDiscoveryDirectories = config.workflowDiscovery?.directories ?? [];
|
|
130
139
|
const workflowsById = new Map<string, WorkflowDefinition>();
|
|
@@ -136,7 +145,7 @@ export class CodemationConsumerConfigLoader {
|
|
|
136
145
|
workflowDiscoveryDirectories,
|
|
137
146
|
absoluteWorkflowModulePath: workflowSource,
|
|
138
147
|
}),
|
|
139
|
-
moduleExports: await this.importModule(workflowSource),
|
|
148
|
+
moduleExports: await this.importModule(workflowSource, importSession),
|
|
140
149
|
})),
|
|
141
150
|
);
|
|
142
151
|
for (const loadedWorkflowModule of loadedWorkflowModules) {
|
|
@@ -168,13 +177,20 @@ export class CodemationConsumerConfigLoader {
|
|
|
168
177
|
return [...workflowsById.values()];
|
|
169
178
|
}
|
|
170
179
|
|
|
171
|
-
private async importModule(
|
|
180
|
+
private async importModule(
|
|
181
|
+
modulePath: string,
|
|
182
|
+
importSession: ConsumerImportSession,
|
|
183
|
+
): Promise<Record<string, unknown>> {
|
|
172
184
|
if (this.shouldUseNativeRuntimeImport()) {
|
|
173
185
|
return await this.importModuleWithNativeRuntime(modulePath);
|
|
174
186
|
}
|
|
175
187
|
const tsconfigPath = await this.resolveTsconfigPath(modulePath);
|
|
176
|
-
|
|
188
|
+
const cacheKey = tsconfigPath || "default";
|
|
189
|
+
const shouldResetImporter = importSession.shouldResetImporter;
|
|
190
|
+
const didResetImporterForThisImport = shouldResetImporter && !importSession.resetCacheKeys.has(cacheKey);
|
|
191
|
+
if (didResetImporterForThisImport) {
|
|
177
192
|
await this.resetImporter(tsconfigPath);
|
|
193
|
+
importSession.resetCacheKeys.add(cacheKey);
|
|
178
194
|
}
|
|
179
195
|
const importSpecifier = await this.createImportSpecifier(modulePath);
|
|
180
196
|
for (let attempt = 0; attempt < 3; attempt += 1) {
|
|
@@ -278,6 +294,13 @@ export class CodemationConsumerConfigLoader {
|
|
|
278
294
|
return (process.env.CODEMATION_DEV_SERVER_TOKEN?.trim().length ?? 0) > 0;
|
|
279
295
|
}
|
|
280
296
|
|
|
297
|
+
private createImportSession(): ConsumerImportSession {
|
|
298
|
+
return {
|
|
299
|
+
resetCacheKeys: new Set<string>(),
|
|
300
|
+
shouldResetImporter: this.shouldResetImporterBeforeImport(),
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
|
|
281
304
|
private isStoppedTransformServiceError(error: unknown): boolean {
|
|
282
305
|
return error instanceof Error && error.message.includes("The service is no longer running");
|
|
283
306
|
}
|
|
@@ -142,14 +142,12 @@ export class CodemationPluginDiscovery {
|
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
private resolvePluginEntry(discoveredPackage: CodemationDiscoveredPluginPackage): string {
|
|
145
|
-
|
|
145
|
+
const preferSource =
|
|
146
146
|
process.env.CODEMATION_PREFER_PLUGIN_SOURCE_ENTRY === "true" &&
|
|
147
147
|
typeof discoveredPackage.developmentEntry === "string" &&
|
|
148
|
-
discoveredPackage.developmentEntry.trim().length > 0
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
}
|
|
152
|
-
return discoveredPackage.pluginEntry;
|
|
148
|
+
discoveredPackage.developmentEntry.trim().length > 0;
|
|
149
|
+
const selectedEntry = preferSource ? discoveredPackage.developmentEntry : discoveredPackage.pluginEntry;
|
|
150
|
+
return selectedEntry;
|
|
153
151
|
}
|
|
154
152
|
|
|
155
153
|
private async resolveDevelopmentPluginEntry(packageRoot: string): Promise<string | undefined> {
|