veryfront 0.1.96 → 0.1.97

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/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.96",
3
+ "version": "0.1.97",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "exclude": [
@@ -0,0 +1,5 @@
1
+ export declare const INJECTED_TASK_ENV_JSON = "VERYFRONT_TASK_ENV_JSON";
2
+ export declare function readInjectedProjectEnv(allEnv: Record<string, string>): Record<string, string>;
3
+ export declare function buildTaskContextEnv(allEnv: Record<string, string>, envAllowlist?: string[]): Record<string, string>;
4
+ export declare function mergeInjectedWorkflowEnv(existingEnv: Record<string, string> | undefined, allEnv: Record<string, string>): Record<string, string> | undefined;
5
+ //# sourceMappingURL=runtime-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-env.d.ts","sourceRoot":"","sources":["../../../src/src/jobs/runtime-env.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,sBAAsB,4BAA4B,CAAC;AAyDhE,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BxB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsBxB;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAOpC"}
@@ -0,0 +1,101 @@
1
+ import { logger as baseLogger } from "../utils/index.js";
2
+ const logger = baseLogger.component("job-runtime-env");
3
+ export const INJECTED_TASK_ENV_JSON = "VERYFRONT_TASK_ENV_JSON";
4
+ const UNSAFE_INJECTED_ENV_KEYS = new Set(["__proto__", "constructor", "prototype"]);
5
+ const HIDDEN_TASK_CONTEXT_ENV_KEYS = new Set([
6
+ "VERYFRONT_API_TOKEN",
7
+ "VERYFRONT_API_URL",
8
+ "VERYFRONT_PROJECT_API_URL",
9
+ "VERYFRONT_API_BASE_URL",
10
+ "VERYFRONT_PROJECT_ID",
11
+ "VERYFRONT_PROJECT_SLUG",
12
+ "VERYFRONT_BRANCH_REF",
13
+ "VERYFRONT_API_USER",
14
+ "VERYFRONT_API_PASS",
15
+ "VERYFRONT_JOB_RESULT_PATH",
16
+ INJECTED_TASK_ENV_JSON,
17
+ ]);
18
+ const DISALLOWED_INJECTED_ENV_KEYS = new Set([
19
+ "VERYFRONT_API_TOKEN",
20
+ "VERYFRONT_API_URL",
21
+ "VERYFRONT_PROJECT_API_URL",
22
+ "VERYFRONT_API_BASE_URL",
23
+ "VERYFRONT_PROJECT_ID",
24
+ "VERYFRONT_PROJECT_SLUG",
25
+ "VERYFRONT_BRANCH_REF",
26
+ "VERYFRONT_API_USER",
27
+ "VERYFRONT_API_PASS",
28
+ "VERYFRONT_JOB_RESULT_PATH",
29
+ INJECTED_TASK_ENV_JSON,
30
+ ]);
31
+ function isHiddenTaskContextEnvKey(key) {
32
+ return key.startsWith("TENANT_") || HIDDEN_TASK_CONTEXT_ENV_KEYS.has(key);
33
+ }
34
+ function isDisallowedInjectedEnvKey(key) {
35
+ return key.startsWith("TENANT_") || DISALLOWED_INJECTED_ENV_KEYS.has(key);
36
+ }
37
+ function filterExistingProjectEnv(env) {
38
+ const filtered = {};
39
+ for (const [key, value] of Object.entries(env ?? {})) {
40
+ if (UNSAFE_INJECTED_ENV_KEYS.has(key) ||
41
+ isDisallowedInjectedEnvKey(key) ||
42
+ typeof value !== "string") {
43
+ continue;
44
+ }
45
+ filtered[key] = value;
46
+ }
47
+ return filtered;
48
+ }
49
+ export function readInjectedProjectEnv(allEnv) {
50
+ const raw = allEnv[INJECTED_TASK_ENV_JSON];
51
+ if (!raw) {
52
+ return {};
53
+ }
54
+ try {
55
+ const parsed = JSON.parse(raw);
56
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
57
+ return {};
58
+ }
59
+ const injectedEnv = Object.create(null);
60
+ for (const [key, value] of Object.entries(parsed)) {
61
+ if (UNSAFE_INJECTED_ENV_KEYS.has(key) ||
62
+ isDisallowedInjectedEnvKey(key) ||
63
+ typeof value !== "string") {
64
+ continue;
65
+ }
66
+ injectedEnv[key] = value;
67
+ }
68
+ return injectedEnv;
69
+ }
70
+ catch {
71
+ logger.warn(`Ignoring invalid ${INJECTED_TASK_ENV_JSON}`);
72
+ return {};
73
+ }
74
+ }
75
+ export function buildTaskContextEnv(allEnv, envAllowlist) {
76
+ const allowlistedEnvKeys = envAllowlist ? new Set(envAllowlist) : null;
77
+ const env = {};
78
+ for (const [key, value] of Object.entries(allEnv)) {
79
+ if (isHiddenTaskContextEnvKey(key)) {
80
+ continue;
81
+ }
82
+ if (allowlistedEnvKeys && !allowlistedEnvKeys.has(key)) {
83
+ continue;
84
+ }
85
+ env[key] = value;
86
+ }
87
+ for (const [key, value] of Object.entries(readInjectedProjectEnv(allEnv))) {
88
+ if (allowlistedEnvKeys && !allowlistedEnvKeys.has(key)) {
89
+ continue;
90
+ }
91
+ env[key] = value;
92
+ }
93
+ return env;
94
+ }
95
+ export function mergeInjectedWorkflowEnv(existingEnv, allEnv) {
96
+ const mergedEnv = {
97
+ ...filterExistingProjectEnv(existingEnv),
98
+ ...readInjectedProjectEnv(allEnv),
99
+ };
100
+ return Object.keys(mergedEnv).length > 0 ? mergedEnv : undefined;
101
+ }
@@ -6,6 +6,14 @@ interface MDXPageResult {
6
6
  pageBundle: PageBundle;
7
7
  collectedMetadata: Record<string, unknown>;
8
8
  }
9
+ interface PreparedMDXPageBundles {
10
+ pageBundle: PageBundle;
11
+ serverModuleCode: string;
12
+ }
13
+ export declare function prepareMDXPageBundles(pageInfo: EntityInfo, projectDir: string, options?: {
14
+ precompiledModule?: string;
15
+ studioEmbed?: boolean;
16
+ }): Promise<PreparedMDXPageBundles>;
9
17
  export declare function handleMDXPage(pageInfo: EntityInfo, slug: string, projectDir: string, mergedComponents: MDXComponents, _compileMDX: (content: string, frontmatter?: Record<string, unknown>, filePath?: string) => Promise<MdxBundle>, adapter: RuntimeAdapter, options?: {
10
18
  params?: Record<string, string | string[]>;
11
19
  precompiledModule?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"page-rendering.d.ts","sourceRoot":"","sources":["../../../src/src/rendering/page-rendering.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,YAAY,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAa,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAOrG,UAAU,aAAa;IACrB,WAAW,EAAE,YAAY,CAAC,YAAY,CAAC;IACvC,UAAU,EAAE,UAAU,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,UAAU,EACpB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,aAAa,EAC/B,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,QAAQ,CAAC,EAAE,MAAM,KACd,OAAO,CAAC,SAAS,CAAC,EACvB,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC3C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gFAAgF;IAChF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,aAAa,CAAC,CAiHxB"}
1
+ {"version":3,"file":"page-rendering.d.ts","sourceRoot":"","sources":["../../../src/src/rendering/page-rendering.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,YAAY,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAa,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAOrG,UAAU,aAAa;IACrB,WAAW,EAAE,YAAY,CAAC,YAAY,CAAC;IACvC,UAAU,EAAE,UAAU,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,UAAU,sBAAsB;IAC9B,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,UAAU,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GACA,OAAO,CAAC,sBAAsB,CAAC,CA4CjC;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,UAAU,EACpB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,aAAa,EAC/B,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,QAAQ,CAAC,EAAE,MAAM,KACd,OAAO,CAAC,SAAS,CAAC,EACvB,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC3C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gFAAgF;IAChF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,aAAa,CAAC,CAgFxB"}
@@ -5,28 +5,39 @@ import { getProjectReact } from "../react/index.js";
5
5
  import { compileContent } from "../transforms/mdx/compiler/index.js";
6
6
  import { ensureError, getErrorMessage } from "../errors/veryfront-error.js";
7
7
  import { withSpan } from "../observability/tracing/otlp-setup.js";
8
+ export async function prepareMDXPageBundles(pageInfo, projectDir, options) {
9
+ const { frontmatter, content, path } = pageInfo.entity;
10
+ const fmArg = frontmatter && Object.keys(frontmatter).length > 0 ? frontmatter : undefined;
11
+ const ssrBundle = await compileContent("development", projectDir, content, fmArg, path, "server", undefined, options?.studioEmbed);
12
+ const pageBundle = ssrBundle;
13
+ if (options?.precompiledModule) {
14
+ pageBundle.clientModuleCode = options.precompiledModule;
15
+ }
16
+ else {
17
+ const browserBundle = await compileContent("development", projectDir, content, fmArg, path, "browser", undefined, options?.studioEmbed);
18
+ pageBundle.clientModuleCode = browserBundle.compiledCode;
19
+ }
20
+ const clientModuleCode = pageBundle.clientModuleCode;
21
+ if (!clientModuleCode) {
22
+ throw RENDER_ERROR.create({
23
+ detail: "MDX compilation produced no client module code",
24
+ });
25
+ }
26
+ return {
27
+ pageBundle,
28
+ serverModuleCode: ssrBundle.compiledCode,
29
+ };
30
+ }
8
31
  export function handleMDXPage(pageInfo, slug, projectDir, mergedComponents, _compileMDX, adapter, options) {
9
32
  return withSpan("rendering.handleMDXPage", async () => {
10
- const { frontmatter, content, path } = pageInfo.entity;
11
- const fmArg = frontmatter && Object.keys(frontmatter).length > 0 ? frontmatter : undefined;
12
- const ssrBundle = await compileContent("development", projectDir, content, fmArg, path, "server", undefined, options?.studioEmbed);
13
- const pageBundle = ssrBundle;
33
+ const { frontmatter, path } = pageInfo.entity;
34
+ const { pageBundle, serverModuleCode } = await prepareMDXPageBundles(pageInfo, projectDir, {
35
+ precompiledModule: options?.precompiledModule,
36
+ studioEmbed: options?.studioEmbed,
37
+ });
14
38
  let collectedMetadata = {};
15
39
  try {
16
- if (options?.precompiledModule) {
17
- pageBundle.clientModuleCode = options.precompiledModule;
18
- }
19
- else {
20
- const browserBundle = await compileContent("development", projectDir, content, fmArg, path, "browser", undefined, options?.studioEmbed);
21
- pageBundle.clientModuleCode = browserBundle.compiledCode;
22
- }
23
- const clientModuleCode = pageBundle.clientModuleCode;
24
- if (!clientModuleCode) {
25
- throw RENDER_ERROR.create({
26
- detail: "MDX compilation produced no client module code",
27
- });
28
- }
29
- const mod = (await mdxRenderer.loadModuleESM(clientModuleCode, adapter, options?.projectId, projectDir, options?.projectSlug, options?.contentSourceId));
40
+ const mod = (await mdxRenderer.loadModuleESM(serverModuleCode, adapter, options?.projectId, projectDir, options?.projectSlug, options?.contentSourceId));
30
41
  const MDXComp = mod.MDXContent || mod.default;
31
42
  if (!MDXComp) {
32
43
  throw RENDER_ERROR.create({
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/src/task/runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKrD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,IAAI,EAAE,cAAc,CAAC;IAErB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEjC,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IAEjB,yCAAyC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAyC7E"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/src/task/runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKrD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,IAAI,EAAE,cAAc,CAAC;IAErB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEjC,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IAEjB,yCAAyC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAkC7E"}
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import { logger as baseLogger } from "../utils/index.js";
8
8
  import { env as getProcessEnv } from "../platform/compat/process.js";
9
+ import { buildTaskContextEnv } from "../jobs/runtime-env.js";
9
10
  const logger = baseLogger.component("task-runner");
10
11
  /**
11
12
  * Run a task with the given options
@@ -17,12 +18,7 @@ export async function runTask(options) {
17
18
  logger.info(`Running task "${task.id}" (${task.name})`);
18
19
  }
19
20
  const allEnv = getProcessEnv();
20
- const env = envAllowlist
21
- ? Object.fromEntries(envAllowlist.flatMap((k) => {
22
- const value = allEnv[k];
23
- return value === undefined ? [] : [[k, value]];
24
- }))
25
- : { ...allEnv };
21
+ const env = buildTaskContextEnv(allEnv, envAllowlist);
26
22
  const ctx = {
27
23
  env,
28
24
  config,
@@ -1,4 +1,4 @@
1
- export declare const VERSION = "0.1.96";
1
+ export declare const VERSION = "0.1.97";
2
2
  export declare function normalizeVeryfrontVersion(version: string | undefined): string | undefined;
3
3
  export declare function resolveRuntimeVersion(options?: {
4
4
  veryfrontVersion?: string;
@@ -2,7 +2,7 @@ import denoConfig from "../../deno.js";
2
2
  import { getEnv } from "../platform/compat/process.js";
3
3
  // Keep in sync with deno.json version.
4
4
  // scripts/release.ts updates this constant during releases.
5
- export const VERSION = "0.1.96";
5
+ export const VERSION = "0.1.97";
6
6
  export function normalizeVeryfrontVersion(version) {
7
7
  if (!version)
8
8
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-executor.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/executor/workflow-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-executor.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/executor/workflow-executor.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,8 @@ import { INVALID_ARGUMENT, ORCHESTRATION_ERROR, RESOURCE_NOT_FOUND, TIMEOUT_ERRO
10
10
  import { generateId, parseDuration } from "../types.js";
11
11
  import { hasLockSupport } from "../backends/types.js";
12
12
  import { getCurrentRequestContext } from "../../platform/adapters/fs/veryfront/multi-project-adapter.js";
13
+ import { env as getProcessEnv } from "../../platform/compat/process.js";
14
+ import { mergeInjectedWorkflowEnv } from "../../jobs/runtime-env.js";
13
15
  import { DAGExecutor } from "./dag-executor.js";
14
16
  import { CheckpointManager } from "./checkpoint-manager.js";
15
17
  import { runWithWorkflowTenant, StepExecutor } from "./step-executor.js";
@@ -113,6 +115,7 @@ export class WorkflowExecutor {
113
115
  releaseId: requestCtx.releaseId ?? null,
114
116
  }
115
117
  : undefined;
118
+ const injectedProjectEnv = mergeInjectedWorkflowEnv(undefined, getProcessEnv());
116
119
  const run = {
117
120
  id: options?.runId ?? generateId("run"),
118
121
  workflowId,
@@ -121,7 +124,10 @@ export class WorkflowExecutor {
121
124
  input,
122
125
  nodeStates: {},
123
126
  currentNodes: [],
124
- context: { input },
127
+ context: {
128
+ input,
129
+ ...(injectedProjectEnv ? { env: injectedProjectEnv } : {}),
130
+ },
125
131
  checkpoints: [],
126
132
  pendingApprovals: [],
127
133
  createdAt: new Date(),
@@ -9,6 +9,7 @@ import type { LoopExecutionContext, NodeState, ParallelStrategy, PendingApproval
9
9
  */
10
10
  export interface WorkflowContext {
11
11
  input: unknown;
12
+ env?: Record<string, string>;
12
13
  _tenant?: CapturedTenantContext;
13
14
  [nodeId: string]: unknown;
14
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/workflow/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/workflow/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-job-entrypoint.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/worker/dynamic-job-entrypoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AASH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAM5D;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;CAMrB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,uCAAuC;IACvC,OAAO,EAAE,eAAe,CAAC;IAEzB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAsBD;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,MAAM,CAAC,CAiKjB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,iCAAiC;IAChD,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAchC"}
1
+ {"version":3,"file":"dynamic-job-entrypoint.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/worker/dynamic-job-entrypoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAWH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAM5D;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;CAMrB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,uCAAuC;IACvC,OAAO,EAAE,eAAe,CAAC;IAEzB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAsBD;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,MAAM,CAAC,CAiLjB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,iCAAiC;IAChD,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAchC"}
@@ -26,9 +26,11 @@
26
26
  */
27
27
  import { logger as baseLogger } from "../../utils/index.js";
28
28
  import { getEnv } from "../../platform/compat/process.js";
29
+ import { env as getProcessEnv } from "../../platform/compat/process.js";
29
30
  import { runWithRequestContext } from "../../platform/adapters/fs/veryfront/multi-project-adapter.js";
30
31
  import { enhanceAdapterWithFS } from "../../platform/adapters/fs/integration.js";
31
32
  import { denoAdapter } from "../../platform/adapters/runtime/deno/index.js";
33
+ import { mergeInjectedWorkflowEnv } from "../../jobs/runtime-env.js";
32
34
  import { discoverWorkflows } from "../discovery/index.js";
33
35
  import { WorkflowExecutor } from "../executor/workflow-executor.js";
34
36
  const logger = baseLogger.component("dynamic-job");
@@ -83,11 +85,26 @@ export async function runDynamicWorkflowJob(config) {
83
85
  }
84
86
  try {
85
87
  // Fetch the workflow run
86
- const run = await backend.getRun(runId);
88
+ let run = await backend.getRun(runId);
87
89
  if (!run) {
88
90
  logger.error(`Workflow run not found: ${runId}`);
89
91
  return DYNAMIC_EXIT_CODES.NOT_FOUND;
90
92
  }
93
+ const injectedEnv = mergeInjectedWorkflowEnv(run.context.env, getProcessEnv());
94
+ if (injectedEnv) {
95
+ const currentEnv = run.context.env;
96
+ const currentSerialized = currentEnv ? JSON.stringify(currentEnv) : "";
97
+ const nextSerialized = JSON.stringify(injectedEnv);
98
+ if (currentSerialized !== nextSerialized) {
99
+ await backend.updateRun(runId, {
100
+ context: {
101
+ ...run.context,
102
+ env: injectedEnv,
103
+ },
104
+ });
105
+ run = (await backend.getRun(runId)) ?? run;
106
+ }
107
+ }
91
108
  // Get tenant context (from env or from stored run)
92
109
  const tenant = getTenantFromEnv() ?? run._tenant;
93
110
  if (!tenant) {
@@ -1 +1 @@
1
- {"version":3,"file":"job-entrypoint.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/worker/job-entrypoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAyB,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAI7E;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,OAAO,EAAE,eAAe,CAAC;IAEzB,wBAAwB;IACxB,QAAQ,EAAE,gBAAgB,CAAC;IAE3B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAsBX;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmGjF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,0BAA0B;IACzC,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,4BAA4B;IAC5B,SAAS,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,kBAAkB,CAAA;KAAE,CAAC,CAAC;IAErD,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CA0BhC"}
1
+ {"version":3,"file":"job-entrypoint.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/worker/job-entrypoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAyB,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAI7E;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,OAAO,EAAE,eAAe,CAAC;IAEzB,wBAAwB;IACxB,QAAQ,EAAE,gBAAgB,CAAC;IAE3B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAsBX;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmHjF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,0BAA0B;IACzC,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,4BAA4B;IAC5B,SAAS,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,kBAAkB,CAAA;KAAE,CAAC,CAAC;IAErD,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CA0BhC"}
@@ -21,7 +21,9 @@
21
21
  */
22
22
  import { logger as baseLogger } from "../../utils/index.js";
23
23
  import { getEnv } from "../../platform/compat/process.js";
24
+ import { env as getProcessEnv } from "../../platform/compat/process.js";
24
25
  import { runWithRequestContext } from "../../platform/adapters/fs/veryfront/multi-project-adapter.js";
26
+ import { mergeInjectedWorkflowEnv } from "../../jobs/runtime-env.js";
25
27
  const logger = baseLogger.component("workflow-job");
26
28
  /**
27
29
  * Exit codes for the job
@@ -89,11 +91,26 @@ export async function runWorkflowJob(config) {
89
91
  }
90
92
  try {
91
93
  // Fetch the workflow run
92
- const run = await backend.getRun(runId);
94
+ let run = await backend.getRun(runId);
93
95
  if (!run) {
94
96
  logger.error(`Workflow run not found: ${runId}`);
95
97
  return EXIT_CODES.NOT_FOUND;
96
98
  }
99
+ const injectedEnv = mergeInjectedWorkflowEnv(run.context.env, getProcessEnv());
100
+ if (injectedEnv) {
101
+ const currentEnv = run.context.env;
102
+ const currentSerialized = currentEnv ? JSON.stringify(currentEnv) : "";
103
+ const nextSerialized = JSON.stringify(injectedEnv);
104
+ if (currentSerialized !== nextSerialized) {
105
+ await backend.updateRun(runId, {
106
+ context: {
107
+ ...run.context,
108
+ env: injectedEnv,
109
+ },
110
+ });
111
+ run = (await backend.getRun(runId)) ?? run;
112
+ }
113
+ }
97
114
  // Get tenant context (from env or from stored run)
98
115
  const tenant = getTenantFromEnv() ?? run._tenant;
99
116
  if (debug) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.96",
3
+ "version": "0.1.97",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",
package/src/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.96",
3
+ "version": "0.1.97",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "exclude": [
@@ -0,0 +1,132 @@
1
+ import { logger as baseLogger } from "../utils/index.js";
2
+
3
+ const logger = baseLogger.component("job-runtime-env");
4
+
5
+ export const INJECTED_TASK_ENV_JSON = "VERYFRONT_TASK_ENV_JSON";
6
+
7
+ const UNSAFE_INJECTED_ENV_KEYS = new Set(["__proto__", "constructor", "prototype"]);
8
+
9
+ const HIDDEN_TASK_CONTEXT_ENV_KEYS = new Set([
10
+ "VERYFRONT_API_TOKEN",
11
+ "VERYFRONT_API_URL",
12
+ "VERYFRONT_PROJECT_API_URL",
13
+ "VERYFRONT_API_BASE_URL",
14
+ "VERYFRONT_PROJECT_ID",
15
+ "VERYFRONT_PROJECT_SLUG",
16
+ "VERYFRONT_BRANCH_REF",
17
+ "VERYFRONT_API_USER",
18
+ "VERYFRONT_API_PASS",
19
+ "VERYFRONT_JOB_RESULT_PATH",
20
+ INJECTED_TASK_ENV_JSON,
21
+ ]);
22
+
23
+ const DISALLOWED_INJECTED_ENV_KEYS = new Set([
24
+ "VERYFRONT_API_TOKEN",
25
+ "VERYFRONT_API_URL",
26
+ "VERYFRONT_PROJECT_API_URL",
27
+ "VERYFRONT_API_BASE_URL",
28
+ "VERYFRONT_PROJECT_ID",
29
+ "VERYFRONT_PROJECT_SLUG",
30
+ "VERYFRONT_BRANCH_REF",
31
+ "VERYFRONT_API_USER",
32
+ "VERYFRONT_API_PASS",
33
+ "VERYFRONT_JOB_RESULT_PATH",
34
+ INJECTED_TASK_ENV_JSON,
35
+ ]);
36
+
37
+ function isHiddenTaskContextEnvKey(key: string): boolean {
38
+ return key.startsWith("TENANT_") || HIDDEN_TASK_CONTEXT_ENV_KEYS.has(key);
39
+ }
40
+
41
+ function isDisallowedInjectedEnvKey(key: string): boolean {
42
+ return key.startsWith("TENANT_") || DISALLOWED_INJECTED_ENV_KEYS.has(key);
43
+ }
44
+
45
+ function filterExistingProjectEnv(
46
+ env: Record<string, string> | undefined,
47
+ ): Record<string, string> {
48
+ const filtered: Record<string, string> = {};
49
+ for (const [key, value] of Object.entries(env ?? {})) {
50
+ if (
51
+ UNSAFE_INJECTED_ENV_KEYS.has(key) ||
52
+ isDisallowedInjectedEnvKey(key) ||
53
+ typeof value !== "string"
54
+ ) {
55
+ continue;
56
+ }
57
+ filtered[key] = value;
58
+ }
59
+ return filtered;
60
+ }
61
+
62
+ export function readInjectedProjectEnv(
63
+ allEnv: Record<string, string>,
64
+ ): Record<string, string> {
65
+ const raw = allEnv[INJECTED_TASK_ENV_JSON];
66
+ if (!raw) {
67
+ return {};
68
+ }
69
+
70
+ try {
71
+ const parsed = JSON.parse(raw);
72
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
73
+ return {};
74
+ }
75
+
76
+ const injectedEnv = Object.create(null) as Record<string, string>;
77
+ for (const [key, value] of Object.entries(parsed)) {
78
+ if (
79
+ UNSAFE_INJECTED_ENV_KEYS.has(key) ||
80
+ isDisallowedInjectedEnvKey(key) ||
81
+ typeof value !== "string"
82
+ ) {
83
+ continue;
84
+ }
85
+ injectedEnv[key] = value;
86
+ }
87
+
88
+ return injectedEnv;
89
+ } catch {
90
+ logger.warn(`Ignoring invalid ${INJECTED_TASK_ENV_JSON}`);
91
+ return {};
92
+ }
93
+ }
94
+
95
+ export function buildTaskContextEnv(
96
+ allEnv: Record<string, string>,
97
+ envAllowlist?: string[],
98
+ ): Record<string, string> {
99
+ const allowlistedEnvKeys = envAllowlist ? new Set(envAllowlist) : null;
100
+ const env: Record<string, string> = {};
101
+
102
+ for (const [key, value] of Object.entries(allEnv)) {
103
+ if (isHiddenTaskContextEnvKey(key)) {
104
+ continue;
105
+ }
106
+ if (allowlistedEnvKeys && !allowlistedEnvKeys.has(key)) {
107
+ continue;
108
+ }
109
+ env[key] = value;
110
+ }
111
+
112
+ for (const [key, value] of Object.entries(readInjectedProjectEnv(allEnv))) {
113
+ if (allowlistedEnvKeys && !allowlistedEnvKeys.has(key)) {
114
+ continue;
115
+ }
116
+ env[key] = value;
117
+ }
118
+
119
+ return env;
120
+ }
121
+
122
+ export function mergeInjectedWorkflowEnv(
123
+ existingEnv: Record<string, string> | undefined,
124
+ allEnv: Record<string, string>,
125
+ ): Record<string, string> | undefined {
126
+ const mergedEnv = {
127
+ ...filterExistingProjectEnv(existingEnv),
128
+ ...readInjectedProjectEnv(allEnv),
129
+ };
130
+
131
+ return Object.keys(mergedEnv).length > 0 ? mergedEnv : undefined;
132
+ }
@@ -15,6 +15,64 @@ interface MDXPageResult {
15
15
  collectedMetadata: Record<string, unknown>;
16
16
  }
17
17
 
18
+ interface PreparedMDXPageBundles {
19
+ pageBundle: PageBundle;
20
+ serverModuleCode: string;
21
+ }
22
+
23
+ export async function prepareMDXPageBundles(
24
+ pageInfo: EntityInfo,
25
+ projectDir: string,
26
+ options?: {
27
+ precompiledModule?: string;
28
+ studioEmbed?: boolean;
29
+ },
30
+ ): Promise<PreparedMDXPageBundles> {
31
+ const { frontmatter, content, path } = pageInfo.entity;
32
+ const fmArg = frontmatter && Object.keys(frontmatter).length > 0 ? frontmatter : undefined;
33
+
34
+ const ssrBundle = await compileContent(
35
+ "development",
36
+ projectDir,
37
+ content,
38
+ fmArg,
39
+ path,
40
+ "server",
41
+ undefined,
42
+ options?.studioEmbed,
43
+ );
44
+
45
+ const pageBundle = ssrBundle as PageBundle;
46
+
47
+ if (options?.precompiledModule) {
48
+ pageBundle.clientModuleCode = options.precompiledModule;
49
+ } else {
50
+ const browserBundle = await compileContent(
51
+ "development",
52
+ projectDir,
53
+ content,
54
+ fmArg,
55
+ path,
56
+ "browser",
57
+ undefined,
58
+ options?.studioEmbed,
59
+ );
60
+ pageBundle.clientModuleCode = browserBundle.compiledCode;
61
+ }
62
+
63
+ const clientModuleCode = pageBundle.clientModuleCode;
64
+ if (!clientModuleCode) {
65
+ throw RENDER_ERROR.create({
66
+ detail: "MDX compilation produced no client module code",
67
+ });
68
+ }
69
+
70
+ return {
71
+ pageBundle,
72
+ serverModuleCode: ssrBundle.compiledCode,
73
+ };
74
+ }
75
+
18
76
  export function handleMDXPage(
19
77
  pageInfo: EntityInfo,
20
78
  slug: string,
@@ -42,49 +100,16 @@ export function handleMDXPage(
42
100
  return withSpan(
43
101
  "rendering.handleMDXPage",
44
102
  async () => {
45
- const { frontmatter, content, path } = pageInfo.entity;
46
- const fmArg = frontmatter && Object.keys(frontmatter).length > 0 ? frontmatter : undefined;
47
-
48
- const ssrBundle = await compileContent(
49
- "development",
50
- projectDir,
51
- content,
52
- fmArg,
53
- path,
54
- "server",
55
- undefined,
56
- options?.studioEmbed,
57
- );
58
-
59
- const pageBundle = ssrBundle as PageBundle;
103
+ const { frontmatter, path } = pageInfo.entity;
104
+ const { pageBundle, serverModuleCode } = await prepareMDXPageBundles(pageInfo, projectDir, {
105
+ precompiledModule: options?.precompiledModule,
106
+ studioEmbed: options?.studioEmbed,
107
+ });
60
108
  let collectedMetadata: Record<string, unknown> = {};
61
109
 
62
110
  try {
63
- if (options?.precompiledModule) {
64
- pageBundle.clientModuleCode = options.precompiledModule;
65
- } else {
66
- const browserBundle = await compileContent(
67
- "development",
68
- projectDir,
69
- content,
70
- fmArg,
71
- path,
72
- "browser",
73
- undefined,
74
- options?.studioEmbed,
75
- );
76
- pageBundle.clientModuleCode = browserBundle.compiledCode;
77
- }
78
-
79
- const clientModuleCode = pageBundle.clientModuleCode;
80
- if (!clientModuleCode) {
81
- throw RENDER_ERROR.create({
82
- detail: "MDX compilation produced no client module code",
83
- });
84
- }
85
-
86
111
  const mod = (await mdxRenderer.loadModuleESM(
87
- clientModuleCode,
112
+ serverModuleCode,
88
113
  adapter,
89
114
  options?.projectId,
90
115
  projectDir,
@@ -7,6 +7,7 @@
7
7
 
8
8
  import { logger as baseLogger } from "../utils/index.js";
9
9
  import { env as getProcessEnv } from "../platform/compat/process.js";
10
+ import { buildTaskContextEnv } from "../jobs/runtime-env.js";
10
11
  import type { DiscoveredTask } from "./discovery.js";
11
12
  import type { TaskContext } from "./types.js";
12
13
 
@@ -61,14 +62,7 @@ export async function runTask(options: RunTaskOptions): Promise<TaskRunResult> {
61
62
  }
62
63
 
63
64
  const allEnv = getProcessEnv();
64
- const env: Record<string, string> = envAllowlist
65
- ? Object.fromEntries(
66
- envAllowlist.flatMap((k) => {
67
- const value = allEnv[k];
68
- return value === undefined ? [] : [[k, value] as const];
69
- }),
70
- )
71
- : { ...allEnv };
65
+ const env = buildTaskContextEnv(allEnv, envAllowlist);
72
66
 
73
67
  const ctx: TaskContext = {
74
68
  env,
@@ -3,7 +3,7 @@ import { getEnv } from "../platform/compat/process.js";
3
3
 
4
4
  // Keep in sync with deno.json version.
5
5
  // scripts/release.ts updates this constant during releases.
6
- export const VERSION = "0.1.96";
6
+ export const VERSION = "0.1.97";
7
7
 
8
8
  export function normalizeVeryfrontVersion(version: string | undefined): string | undefined {
9
9
  if (!version) return undefined;
@@ -27,6 +27,8 @@ import type {
27
27
  import { generateId, parseDuration } from "../types.js";
28
28
  import { hasLockSupport, type WorkflowBackend } from "../backends/types.js";
29
29
  import { getCurrentRequestContext } from "../../platform/adapters/fs/veryfront/multi-project-adapter.js";
30
+ import { env as getProcessEnv } from "../../platform/compat/process.js";
31
+ import { mergeInjectedWorkflowEnv } from "../../jobs/runtime-env.js";
30
32
  import { DAGExecutor } from "./dag-executor.js";
31
33
  import { CheckpointManager } from "./checkpoint-manager.js";
32
34
  import { runWithWorkflowTenant, StepExecutor, type StepExecutorConfig } from "./step-executor.js";
@@ -196,6 +198,7 @@ export class WorkflowExecutor {
196
198
  releaseId: requestCtx.releaseId ?? null,
197
199
  }
198
200
  : undefined;
201
+ const injectedProjectEnv = mergeInjectedWorkflowEnv(undefined, getProcessEnv());
199
202
 
200
203
  const run: WorkflowRun<TInput, TOutput> = {
201
204
  id: options?.runId ?? generateId("run"),
@@ -205,7 +208,10 @@ export class WorkflowExecutor {
205
208
  input,
206
209
  nodeStates: {},
207
210
  currentNodes: [],
208
- context: { input },
211
+ context: {
212
+ input,
213
+ ...(injectedProjectEnv ? { env: injectedProjectEnv } : {}),
214
+ },
209
215
  checkpoints: [],
210
216
  pendingApprovals: [],
211
217
  createdAt: new Date(),
@@ -50,6 +50,7 @@ type DurationString = string;
50
50
  */
51
51
  export interface WorkflowContext {
52
52
  input: unknown;
53
+ env?: Record<string, string>;
53
54
  _tenant?: CapturedTenantContext;
54
55
  [nodeId: string]: unknown;
55
56
  }
@@ -27,9 +27,11 @@
27
27
 
28
28
  import { logger as baseLogger } from "../../utils/index.js";
29
29
  import { getEnv } from "../../platform/compat/process.js";
30
+ import { env as getProcessEnv } from "../../platform/compat/process.js";
30
31
  import { runWithRequestContext } from "../../platform/adapters/fs/veryfront/multi-project-adapter.js";
31
32
  import { enhanceAdapterWithFS } from "../../platform/adapters/fs/integration.js";
32
33
  import { denoAdapter } from "../../platform/adapters/runtime/deno/index.js";
34
+ import { mergeInjectedWorkflowEnv } from "../../jobs/runtime-env.js";
33
35
  import { discoverWorkflows } from "../discovery/index.js";
34
36
  import type { VeryfrontConfig } from "../../config/index.js";
35
37
  import type { WorkflowBackend } from "../backends/types.js";
@@ -109,12 +111,28 @@ export async function runDynamicWorkflowJob(
109
111
 
110
112
  try {
111
113
  // Fetch the workflow run
112
- const run = await backend.getRun(runId);
114
+ let run = await backend.getRun(runId);
113
115
  if (!run) {
114
116
  logger.error(`Workflow run not found: ${runId}`);
115
117
  return DYNAMIC_EXIT_CODES.NOT_FOUND;
116
118
  }
117
119
 
120
+ const injectedEnv = mergeInjectedWorkflowEnv(run.context.env, getProcessEnv());
121
+ if (injectedEnv) {
122
+ const currentEnv = run.context.env;
123
+ const currentSerialized = currentEnv ? JSON.stringify(currentEnv) : "";
124
+ const nextSerialized = JSON.stringify(injectedEnv);
125
+ if (currentSerialized !== nextSerialized) {
126
+ await backend.updateRun(runId, {
127
+ context: {
128
+ ...run.context,
129
+ env: injectedEnv,
130
+ },
131
+ });
132
+ run = (await backend.getRun(runId)) ?? run;
133
+ }
134
+ }
135
+
118
136
  // Get tenant context (from env or from stored run)
119
137
  const tenant = getTenantFromEnv() ?? run._tenant;
120
138
 
@@ -22,7 +22,9 @@
22
22
 
23
23
  import { logger as baseLogger } from "../../utils/index.js";
24
24
  import { getEnv } from "../../platform/compat/process.js";
25
+ import { env as getProcessEnv } from "../../platform/compat/process.js";
25
26
  import { runWithRequestContext } from "../../platform/adapters/fs/veryfront/multi-project-adapter.js";
27
+ import { mergeInjectedWorkflowEnv } from "../../jobs/runtime-env.js";
26
28
  import type { WorkflowBackend } from "../backends/types.js";
27
29
  import type { WorkflowExecutor } from "../executor/workflow-executor.js";
28
30
  import type { CapturedTenantContext, WorkflowDefinition } from "../types.js";
@@ -116,12 +118,28 @@ export async function runWorkflowJob(config: JobEntrypointConfig): Promise<numbe
116
118
 
117
119
  try {
118
120
  // Fetch the workflow run
119
- const run = await backend.getRun(runId);
121
+ let run = await backend.getRun(runId);
120
122
  if (!run) {
121
123
  logger.error(`Workflow run not found: ${runId}`);
122
124
  return EXIT_CODES.NOT_FOUND;
123
125
  }
124
126
 
127
+ const injectedEnv = mergeInjectedWorkflowEnv(run.context.env, getProcessEnv());
128
+ if (injectedEnv) {
129
+ const currentEnv = run.context.env;
130
+ const currentSerialized = currentEnv ? JSON.stringify(currentEnv) : "";
131
+ const nextSerialized = JSON.stringify(injectedEnv);
132
+ if (currentSerialized !== nextSerialized) {
133
+ await backend.updateRun(runId, {
134
+ context: {
135
+ ...run.context,
136
+ env: injectedEnv,
137
+ },
138
+ });
139
+ run = (await backend.getRun(runId)) ?? run;
140
+ }
141
+ }
142
+
125
143
  // Get tenant context (from env or from stored run)
126
144
  const tenant = getTenantFromEnv() ?? run._tenant;
127
145