feat(browser): add environment, credentials, and script logger to POST /exec

- ExecDto gains optional `environment` and `credentials` fields
- BrowserService.exec forwards both to CodeExecutorService.execute so
  helpers.env, helpers.getEnvUrl(), and helpers.getCredential() work
  identically to scenario-scheduler steps
- script console.log/warn/error now routed through TraceLogger with
  session label prefix
- integration tests cover env/creds injection and missing-alias error
This commit is contained in:
2026-04-14 16:57:06 +03:00
parent d34ea9e943
commit 1a2e786ca8
4 changed files with 104 additions and 9 deletions
+14 -7
View File
@@ -11,9 +11,10 @@ import { JSDOM } from "jsdom";
import { SessionContextService } from "../session/session-context.service";
import { SessionService } from "../session/session.service";
import { CodeExecutorService } from "../code-executor/code-executor.service";
import type { ExecResult } from "../code-executor/code-executor.service";
import type { ExecResult, ScriptLogger } from "../code-executor/code-executor.service";
import { SnippetService } from "../snippet/snippet.service";
import type { Cookie } from "playwright";
import type { EnvironmentData } from "../environment/environment.entity";
export type { ExecResult } from "../code-executor/code-executor.service";
@@ -166,6 +167,8 @@ export class BrowserService {
sessionName: string | undefined,
code: string,
url?: string,
environment?: EnvironmentData,
credentials?: Record<string, unknown>,
): Promise<ExecResult> {
const label = sessionName ?? "anonymous";
@@ -182,14 +185,16 @@ export class BrowserService {
await page.goto(url, { waitUntil: "networkidle" });
}
this.logger.log(`[${label}] exec: running user code`);
const scriptLogger: ScriptLogger = (level, msg) =>
this.logger[level](`[${label}] script: ${msg}`);
const result = await this.codeExecutor.execute(
page,
context,
code,
scriptLogger,
undefined,
undefined,
undefined,
undefined,
credentials,
environment,
snippets,
);
this.logger.log(`[${label}] exec: done`);
@@ -217,14 +222,16 @@ export class BrowserService {
}
this.logger.log(`[${label}] exec: running user code`);
const scriptLogger: ScriptLogger = (level, msg) =>
this.logger[level](`[${label}] script: ${msg}`);
const result = await this.codeExecutor.execute(
page,
context,
code,
scriptLogger,
undefined,
undefined,
undefined,
undefined,
credentials,
environment,
snippetMap,
);
this.logger.log(`[${label}] exec: done`);