feat(browser,mcp): resolve environment and credentials from DB in exec

- POST /exec now accepts environmentId (UUID) and credentials (alias → UUID)
  instead of raw payloads; resolves entities via EnvironmentService and
  CredentialService before passing data to browserService.exec
- exec_code MCP tool updated with same schema: environmentId + credentials map
- CredentialModule imported into BrowserModule and McpModule
- docs(scenario): rewrite script runtime section for single context argument
- docs(mcp): update exec_code description to reflect new parameter shapes
- style: reorder imports across server source (formatter)
This commit is contained in:
2026-04-14 18:09:28 +03:00
parent 90be5a5490
commit 0e47623a6b
48 changed files with 268 additions and 211 deletions
@@ -1,8 +1,8 @@
import {
Injectable,
OnModuleDestroy,
BadRequestException,
Injectable,
NotFoundException,
OnModuleDestroy,
} from "@nestjs/common";
import type { Browser, BrowserContext, Page } from "playwright";
import { TraceLogger } from "../common/trace-logger";
@@ -1,10 +1,10 @@
import { Injectable } from "@nestjs/common";
import { Interval } from "@nestjs/schedule";
import { ConfigService } from "@nestjs/config";
import { AppConfig } from "../config/app.config";
import { Interval } from "@nestjs/schedule";
import { TraceLogger } from "../common/trace-logger";
import { SessionService } from "./session.service";
import { AppConfig } from "../config/app.config";
import { SessionContextService } from "./session-context.service";
import { SessionService } from "./session.service";
/**
* Periodically:
+2 -3
View File
@@ -9,10 +9,9 @@ import {
Query,
} from "@nestjs/common";
import { ApiOperation, ApiResponse, ApiTags } from "@nestjs/swagger";
import { SessionService } from "./session.service";
import { SessionContextService } from "./session-context.service";
import { PaginationQueryDto } from "../common/dto/pagination.dto";
import { SessionOrderBy } from "./session.service";
import { SessionContextService } from "./session-context.service";
import { SessionOrderBy, SessionService } from "./session.service";
function maskToken(token: string, head = 6, tail = 4): string {
if (token.length <= head + tail + 1) return token;
+2 -2
View File
@@ -1,8 +1,8 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
Entity,
PrimaryGeneratedColumn,
UpdateDateColumn,
} from "typeorm";
+3 -3
View File
@@ -1,10 +1,10 @@
import { Module } from "@nestjs/common";
import { TypeOrmModule } from "@nestjs/typeorm";
import { SessionEntity } from "./session.entity";
import { SessionService } from "./session.service";
import { SessionController } from "./session.controller";
import { SessionContextService } from "./session-context.service";
import { SessionSchedulerService } from "./session-scheduler.service";
import { SessionController } from "./session.controller";
import { SessionEntity } from "./session.entity";
import { SessionService } from "./session.service";
@Module({
imports: [TypeOrmModule.forFeature([SessionEntity])],
+4 -4
View File
@@ -1,13 +1,13 @@
import { Injectable, OnApplicationBootstrap } from "@nestjs/common";
import { InjectRepository } from "@nestjs/typeorm";
import { LessThan, Repository } from "typeorm";
import { SessionEntity } from "./session.entity";
import { TraceLogger } from "../common/trace-logger";
import type { Cookie } from "playwright";
import { LessThan, Repository } from "typeorm";
import {
PaginationQueryDto,
PaginatedResult,
PaginationQueryDto,
} from "../common/dto/pagination.dto";
import { TraceLogger } from "../common/trace-logger";
import { SessionEntity } from "./session.entity";
export type SessionOrderBy =
| "id"