feat(scenario): shared browser per run, sign step type, key loading helper

- all steps in a run share one browser/page instance so wizard state persists
- add 'sign' step type: execCode is {keyId} and signs via EDS widget on current page
- extract AuthService.loadKeyDescriptor() to deduplicate key file parsing
- extend StepType, DTOs, and MCP enums to include 'sign'
This commit is contained in:
2026-04-08 15:42:42 +03:00
parent eeece70866
commit e85acc8fb2
7 changed files with 376 additions and 61 deletions
+2 -2
View File
@@ -333,7 +333,7 @@ export class McpService {
inputSchema: {
scenarioId: z.number().int().describe('Parent scenario ID'),
order: z.number().int().min(0).describe('Execution order (ascending)'),
type: z.enum(['login', 'exec']).describe('Step type'),
type: z.enum(['login', 'exec', 'sign']).describe('Step type'),
sessionName: z.string().describe('Session name used by this step'),
execCode: z.string().optional().describe('Playwright JS code to execute (exec steps)'),
validateCode: z.string().optional().describe('Validation JS code returning { success, description }'),
@@ -376,7 +376,7 @@ export class McpService {
scenarioId: z.number().int().describe('Scenario ID'),
stepId: z.number().int().describe('Step ID'),
order: z.number().int().min(0).optional().describe('New execution order'),
type: z.enum(['login', 'exec']).optional().describe('New step type'),
type: z.enum(['login', 'exec', 'sign']).optional().describe('New step type'),
sessionName: z.string().optional().describe('New session name'),
execCode: z.string().optional().describe('New exec code'),
validateCode: z.string().optional().describe('New validation code'),