intellitester 0.4.4 → 0.4.5

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.
@@ -226,6 +226,28 @@ var saveStorageStateActionSchema = zod.z.object({
226
226
  (action) => action.path || action.handler,
227
227
  { message: "saveStorageState requires either `path` or `handler`" }
228
228
  );
229
+ var assertCookiesActionSchema = zod.z.object({
230
+ type: zod.z.literal("assertCookies"),
231
+ has: zod.z.array(nonEmptyString).optional().describe("Cookie names that MUST be present in the context."),
232
+ not: zod.z.array(nonEmptyString).optional().describe("Cookie names that MUST NOT be present in the context."),
233
+ match: zod.z.record(zod.z.string(), zod.z.string()).optional().describe("Map of cookie name to value-matching pattern (substring by default; wrap in /.../ for regex)."),
234
+ url: nonEmptyString.optional().describe("Optional URL/origin filter passed to context.cookies(url).")
235
+ }).describe("Assert presence/absence (and optionally values) of cookies in the browser context. Sees HttpOnly cookies.").refine(
236
+ (a) => Boolean(a.has?.length) || Boolean(a.not?.length) || Boolean(a.match && Object.keys(a.match).length > 0),
237
+ { message: "assertCookies requires at least one of `has`, `not`, or `match`" }
238
+ );
239
+ var expectResponseActionSchema = zod.z.object({
240
+ type: zod.z.literal("expectResponse"),
241
+ url: nonEmptyString.describe("URL pattern: glob by default (** = any path, * = single segment), or /regex/ for regex."),
242
+ status: zod.z.number().int().min(100).max(599).optional().describe("Expected HTTP status code (exact match)."),
243
+ headers: zod.z.record(zod.z.string(), zod.z.string()).optional().describe("Headers that must all match. Header name is case-insensitive. Values: substring match by default, or /regex/ for regex."),
244
+ since: zod.z.union([
245
+ zod.z.literal("previousStep"),
246
+ zod.z.literal("testStart"),
247
+ zod.z.number()
248
+ ]).optional().describe("Time window lower bound. Default: previousStep."),
249
+ timeout: zod.z.number().int().positive().optional().describe("Max wait in ms for a matching response (default 5000).")
250
+ }).describe("Assert that a network response matching the given URL/status/headers was seen since `since`.");
229
251
  var BaseActionSchema = zod.z.discriminatedUnion("type", [
230
252
  navigateActionSchema,
231
253
  tapActionSchema,
@@ -243,6 +265,8 @@ var BaseActionSchema = zod.z.discriminatedUnion("type", [
243
265
  scrollActionSchema,
244
266
  screenshotActionSchema,
245
267
  saveStorageStateActionSchema,
268
+ assertCookiesActionSchema,
269
+ expectResponseActionSchema,
246
270
  setVarActionSchema,
247
271
  emailWaitForActionSchema,
248
272
  emailExtractCodeActionSchema,
@@ -692,5 +716,5 @@ exports.parsePipelineDefinition = parsePipelineDefinition;
692
716
  exports.parseTestDefinition = parseTestDefinition;
693
717
  exports.parseWorkflowDefinition = parseWorkflowDefinition;
694
718
  exports.previewConfigSchema = previewConfigSchema;
695
- //# sourceMappingURL=chunk-JX63IML5.cjs.map
696
- //# sourceMappingURL=chunk-JX63IML5.cjs.map
719
+ //# sourceMappingURL=chunk-7KERJPT3.cjs.map
720
+ //# sourceMappingURL=chunk-7KERJPT3.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/loader.ts","../src/core/schema.ts","../src/core/workflowSchema.ts","../src/core/pipelineSchema.ts"],"names":["init_cjs_shims","z","nonEmptyString","parse","fs"],"mappings":"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","file":"chunk-7KERJPT3.cjs","sourcesContent":["import fs from 'node:fs/promises';\n\nimport type { ZodIssue, ZodType } from 'zod';\nimport { parse } from 'yaml';\n\nimport { IntellitesterConfigSchema, TestDefinitionSchema } from './schema';\nimport type { IntellitesterConfig, TestDefinition } from './types';\nimport { WorkflowDefinitionSchema, type WorkflowDefinition } from './workflowSchema';\nimport { PipelineDefinitionSchema, type PipelineDefinition } from './pipelineSchema';\n\nconst formatIssues = (issues: ZodIssue[]): string =>\n issues\n .map((issue) => {\n const path = issue.path.join('.') || '<root>';\n return `${path}: ${issue.message}`;\n })\n .join('; ');\n\n/**\n * Interpolates environment variables in a parsed YAML object.\n * Recursively replaces ${VAR_NAME} patterns with environment variable values.\n */\nconst interpolateEnvVars = (obj: unknown): unknown => {\n if (typeof obj === 'string') {\n // Replace ${VAR_NAME} with environment variable value\n return obj.replace(/\\$\\{([^}]+)\\}/g, (_, varName) => {\n const value = process.env[varName];\n if (value === undefined) {\n throw new Error(`Environment variable ${varName} is not defined`);\n }\n return value;\n });\n }\n\n if (Array.isArray(obj)) {\n return obj.map(interpolateEnvVars);\n }\n\n if (obj !== null && typeof obj === 'object') {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = interpolateEnvVars(value);\n }\n return result;\n }\n\n return obj;\n};\n\nconst parseWithSchema = <T>(content: string, schema: ZodType<T>, subject: string): T => {\n let parsed: unknown;\n try {\n parsed = parse(content);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Invalid YAML for ${subject}: ${message}`);\n }\n\n // Interpolate environment variables in the parsed content\n const interpolated = interpolateEnvVars(parsed);\n\n const result = schema.safeParse(interpolated);\n if (!result.success) {\n throw new Error(`Invalid ${subject}: ${formatIssues(result.error.issues)}`);\n }\n\n return result.data;\n};\n\nexport const parseTestDefinition = (content: string): TestDefinition =>\n parseWithSchema(content, TestDefinitionSchema, 'test definition');\n\nexport const loadTestDefinition = async (filePath: string): Promise<TestDefinition> => {\n const fileContent = await fs.readFile(filePath, 'utf8');\n return parseTestDefinition(fileContent);\n};\n\nexport const parseIntellitesterConfig = (content: string): IntellitesterConfig =>\n parseWithSchema(content, IntellitesterConfigSchema, 'config');\n\nexport const loadIntellitesterConfig = async (filePath: string): Promise<IntellitesterConfig> => {\n const fileContent = await fs.readFile(filePath, 'utf8');\n return parseIntellitesterConfig(fileContent);\n};\n\nexport const parseWorkflowDefinition = (content: string): WorkflowDefinition =>\n parseWithSchema(content, WorkflowDefinitionSchema, 'workflow definition');\n\nexport const loadWorkflowDefinition = async (filePath: string): Promise<WorkflowDefinition> => {\n const fileContent = await fs.readFile(filePath, 'utf8');\n return parseWorkflowDefinition(fileContent);\n};\n\nexport const isWorkflowFile = (filePath: string): boolean => {\n return filePath.endsWith('.workflow.yaml') || filePath.endsWith('.workflow.yml');\n};\n\n/**\n * Check if a file is a pipeline file based on naming convention.\n * Pipeline files end with .pipeline.yaml or .pipeline.yml\n */\nexport const isPipelineFile = (filePath: string): boolean => {\n return filePath.endsWith('.pipeline.yaml') || filePath.endsWith('.pipeline.yml');\n};\n\n/**\n * Parse pipeline definition from string content.\n */\nexport const parsePipelineDefinition = (content: string): PipelineDefinition =>\n parseWithSchema(content, PipelineDefinitionSchema, 'pipeline definition');\n\n/**\n * Load and validate a pipeline definition from a YAML file.\n */\nexport const loadPipelineDefinition = async (filePath: string): Promise<PipelineDefinition> => {\n const fileContent = await fs.readFile(filePath, 'utf8');\n return parsePipelineDefinition(fileContent);\n};\n\n/**\n * Recursively collects all environment variable names that are referenced\n * but not defined in the process environment.\n */\nexport const collectMissingEnvVars = (obj: unknown): string[] => {\n const missing: string[] = [];\n\n const collect = (value: unknown): void => {\n if (typeof value === 'string') {\n const matches = value.matchAll(/\\$\\{([^}]+)\\}/g);\n for (const match of matches) {\n const varName = match[1];\n if (process.env[varName] === undefined && !missing.includes(varName)) {\n missing.push(varName);\n }\n }\n } else if (Array.isArray(value)) {\n value.forEach(collect);\n } else if (value !== null && typeof value === 'object') {\n Object.values(value).forEach(collect);\n }\n };\n\n collect(obj);\n return missing;\n};\n\n/**\n * Detect if YAML content is a workflow by checking for 'tests' array.\n */\nexport const isWorkflowContent = (content: string): boolean => {\n try {\n const parsed = parse(content);\n return parsed && Array.isArray(parsed.tests) && !parsed.steps && !parsed.workflows;\n } catch {\n return false;\n }\n};\n\n/**\n * Detect if YAML content is a pipeline by checking for 'workflows' array.\n */\nexport const isPipelineContent = (content: string): boolean => {\n try {\n const parsed = parse(content);\n return parsed && Array.isArray(parsed.workflows) && !parsed.steps;\n } catch {\n return false;\n }\n};\n","import { z } from 'zod';\n\nconst nonEmptyString = z.string().trim().min(1, 'Value cannot be empty');\n\n// Transform empty strings to undefined for optional fields\nconst _optionalString = z.preprocess(\n (val) => (typeof val === 'string' && val.trim() === '' ? undefined : val),\n z.string().trim().optional()\n);\n\n// Transform empty strings to undefined for optional URL fields\nconst optionalUrl = z.preprocess(\n (val) => (typeof val === 'string' && val.trim() === '' ? undefined : val),\n z.string().trim().url().optional()\n);\n\nconst trackSchema = z.object({\n type: nonEmptyString.describe('Tracked resource type (e.g., row, user, file)'),\n id: nonEmptyString.describe('Tracked resource ID'),\n includeStepContext: z.boolean().optional().describe('Include step context with tracked resource'),\n}).passthrough().describe('Optional tracking metadata for cleanup');\n\nconst trackableSchema = z.object({\n track: trackSchema.optional(),\n});\n\n// Error condition for immediate failure (no waiting)\nexport const errorIfSchema = z.enum(['not-found', 'not-visible', 'disabled', 'empty'])\n .describe('Fail immediately if this condition is met (no waiting)');\n\nexport const LocatorSchema = z\n .object({\n description: z.string().trim().optional().describe('AI-friendly description of the element to find'),\n testId: z.string().trim().optional().describe('data-testid attribute value'),\n text: z.string().trim().optional().describe('Visible text content'),\n css: z.string().trim().optional().describe('CSS selector'),\n xpath: z.string().trim().optional().describe('XPath selector'),\n role: z.string().trim().optional().describe('ARIA role'),\n name: z.string().trim().optional().describe('Accessible name'),\n })\n .describe('Defines how to locate an element on the page. At least one selector must be provided.')\n .refine(\n (locator) =>\n Boolean(\n locator.description ||\n locator.testId ||\n locator.text ||\n locator.css ||\n locator.xpath ||\n locator.role ||\n locator.name,\n ),\n { message: 'Locator requires at least one selector or description' },\n );\n\nexport const FrameLocatorSchema = z\n .object({\n css: z.string().trim().optional().describe('CSS selector for the iframe element'),\n name: z.string().trim().optional().describe('Name or id attribute of the iframe'),\n index: z.number().int().nonnegative().optional().describe('Zero-based index when multiple iframes match (default: 0)'),\n })\n .describe('Defines how to locate an iframe on the page. Either css or name must be provided.')\n .refine(\n (locator) => Boolean(locator.css || locator.name),\n { message: 'FrameLocator requires css or name' },\n );\n\nconst navigateActionSchema = z.object({\n type: z.literal('navigate'),\n value: nonEmptyString.describe('URL or path to navigate to'),\n}).describe('Navigate to a URL');\n\nconst tapActionSchema = z.object({\n type: z.literal('tap'),\n target: LocatorSchema,\n frame: FrameLocatorSchema.optional().describe('Iframe context for the target element'),\n errorIf: errorIfSchema.optional(),\n}).describe('Click or tap on an element');\n\nconst inputActionSchema = z.object({\n type: z.literal('input'),\n target: LocatorSchema,\n value: z.string().describe('Text to input (can reference variables with ${VAR_NAME})'),\n frame: FrameLocatorSchema.optional().describe('Iframe context for the target element'),\n errorIf: errorIfSchema.optional(),\n}).describe('Input text into a field (clears field first)');\n\nconst typeActionSchema = z.object({\n type: z.literal('type'),\n target: LocatorSchema.optional().describe('Element to type into (if omitted, types into the currently focused element)'),\n value: z.string().describe('Text to type character-by-character (appends to existing content)'),\n frame: FrameLocatorSchema.optional().describe('Iframe context for the target element'),\n delay: z.number().int().nonnegative().optional().describe('Delay between keystrokes in milliseconds (default: 50)'),\n errorIf: errorIfSchema.optional(),\n}).describe('Type text character-by-character without clearing (for Stripe, special inputs)');\n\nconst clearActionSchema = z.object({\n type: z.literal('clear'),\n target: LocatorSchema,\n frame: FrameLocatorSchema.optional().describe('Iframe context for the target element'),\n errorIf: errorIfSchema.optional(),\n}).describe('Clear the contents of an input field');\n\nconst hoverActionSchema = z.object({\n type: z.literal('hover'),\n target: LocatorSchema,\n frame: FrameLocatorSchema.optional().describe('Iframe context for the target element'),\n errorIf: errorIfSchema.optional(),\n}).describe('Hover over an element');\n\nconst selectActionSchema = z.object({\n type: z.literal('select'),\n target: LocatorSchema,\n value: z.string().describe('Option value, label, or index to select'),\n errorIf: errorIfSchema.optional(),\n}).describe('Select an option from a dropdown');\n\nconst checkActionSchema = z.object({\n type: z.literal('check'),\n target: LocatorSchema,\n errorIf: errorIfSchema.optional(),\n}).describe('Check a checkbox');\n\nconst uncheckActionSchema = z.object({\n type: z.literal('uncheck'),\n target: LocatorSchema,\n errorIf: errorIfSchema.optional(),\n}).describe('Uncheck a checkbox');\n\nconst pressActionSchema = z.object({\n type: z.literal('press'),\n key: nonEmptyString.describe('Key to press (e.g., Enter, Tab, Escape, ArrowDown)'),\n target: LocatorSchema.optional().describe('Element to focus before pressing key'),\n frame: FrameLocatorSchema.optional().describe('Iframe context for the target element or keyboard action'),\n errorIf: errorIfSchema.optional(),\n}).describe('Press a keyboard key');\n\nconst focusActionSchema = z.object({\n type: z.literal('focus'),\n target: LocatorSchema,\n frame: FrameLocatorSchema.optional().describe('Iframe context for the target element'),\n errorIf: errorIfSchema.optional(),\n}).describe('Focus an element');\n\nconst assertActionSchema = z.object({\n type: z.literal('assert'),\n target: LocatorSchema,\n value: z.string().optional().describe('Expected text content'),\n frame: FrameLocatorSchema.optional().describe('Iframe context for the target element'),\n errorIf: errorIfSchema.optional(),\n}).describe('Assert that an element exists or contains expected text');\n\nconst waitActionSchema = z\n .object({\n type: z.literal('wait'),\n target: LocatorSchema.optional().describe('Element to wait for'),\n timeout: z.number().int().positive().optional().describe('Time to wait in milliseconds'),\n frame: FrameLocatorSchema.optional().describe('Iframe context for the target element'),\n errorIf: errorIfSchema.optional(),\n })\n .describe('Wait for an element or timeout')\n .refine((action) => action.target || action.timeout, {\n message: 'wait requires a target or timeout',\n });\n\nconst scrollActionSchema = z.object({\n type: z.literal('scroll'),\n target: LocatorSchema.optional().describe('Element to scroll'),\n direction: z.enum(['up', 'down']).optional().describe('Direction to scroll'),\n amount: z.number().int().positive().optional().describe('Amount to scroll in pixels'),\n errorIf: errorIfSchema.optional(),\n}).describe('Scroll the page or an element');\n\nconst screenshotActionSchema = z.object({\n type: z.literal('screenshot'),\n name: z.string().optional().describe('Name for the screenshot file'),\n waitBefore: z.number().int().nonnegative().optional().describe('Milliseconds to wait before capturing for visual stability (default: 500)'),\n}).describe('Take a screenshot');\n\nconst setVarActionSchema = z.object({\n type: z.literal('setVar'),\n name: nonEmptyString.describe('Variable name to set'),\n value: z.string().optional().describe('Static value to set'),\n from: z.enum(['response', 'element', 'email']).optional().describe('Extract value from a source'),\n path: z.string().optional().describe('JSON path or selector for extraction'),\n pattern: z.string().optional().describe('Regular expression pattern for extraction'),\n}).describe('Set a variable for use in later steps');\n\nconst emailWaitForActionSchema = z.object({\n type: z.literal('email.waitFor'),\n mailbox: nonEmptyString.describe('Email address or mailbox to check'),\n timeout: z.number().int().positive().optional().describe('How long to wait for email in milliseconds'),\n subjectContains: z.string().optional().describe('Filter by email subject'),\n}).describe('Wait for an email to arrive');\n\nconst emailExtractCodeActionSchema = z.object({\n type: z.literal('email.extractCode'),\n saveTo: nonEmptyString.describe('Variable name to save the extracted code'),\n pattern: z.string().optional().describe('Regular expression to extract code'),\n}).describe('Extract a verification code from email');\n\nconst emailExtractLinkActionSchema = z.object({\n type: z.literal('email.extractLink'),\n saveTo: nonEmptyString.describe('Variable name to save the extracted link'),\n pattern: z.string().optional().describe('Regular expression to match specific links'),\n}).describe('Extract a link from email');\n\nconst emailClearActionSchema = z.object({\n type: z.literal('email.clear'),\n mailbox: nonEmptyString.describe('Email address or mailbox to clear'),\n}).describe('Clear emails from a mailbox');\n\nconst appwriteVerifyEmailActionSchema = z.object({\n type: z.literal('appwrite.verifyEmail'),\n}).describe('Verify email using Appwrite');\n\nconst debugActionSchema = z.object({\n type: z.literal('debug'),\n}).describe('Pause execution and open Playwright Inspector for debugging');\n\nconst waitForSelectorActionSchema = z.object({\n type: z.literal('waitForSelector'),\n target: LocatorSchema,\n state: z.enum(['enabled', 'disabled', 'visible', 'hidden', 'attached', 'detached'])\n .describe('Element state to wait for'),\n timeout: z.number().int().positive().optional()\n .describe('Time to wait in milliseconds'),\n frame: FrameLocatorSchema.optional().describe('Iframe context for the target element'),\n errorIf: errorIfSchema.optional(),\n}).describe('Wait for an element to reach a specific state');\n\nconst logActionSchema = z.object({\n type: z.literal('log'),\n message: z.string().optional().describe('Static message to log (supports ${VAR_NAME} interpolation)'),\n eval: z.string().optional().describe('JavaScript expression to evaluate in page context'),\n target: LocatorSchema.optional().describe('Element to extract content from'),\n frame: FrameLocatorSchema.optional().describe('Iframe context for the target element'),\n format: z.enum(['text', 'html', 'json']).optional().describe('Output format for element content (default: text)'),\n}).describe('Log a message, evaluate JS, or extract element content for debugging')\n .refine(\n (action) => action.message || action.eval || action.target,\n { message: 'log requires message, eval, or target' },\n );\n\nconst failActionSchema = z.object({\n type: z.literal('fail'),\n message: nonEmptyString.describe('Error message to display when test fails'),\n}).describe('Explicitly fail the test with a custom message');\n\nconst evaluateActionSchema = z.object({\n type: z.literal('evaluate'),\n expected: z.union([\n z.string(),\n z.array(z.string()),\n ]).describe('Text to find in screenshot (substring or regex)'),\n mode: z.enum(['ocr', 'ai', 'auto']).optional()\n .describe('ocr=OCR only, ai=LLM vision only, auto=OCR first then AI fallback (default: auto)'),\n regex: z.boolean().optional()\n .describe('Treat expected as regex patterns (default: false)'),\n prompt: z.string().optional()\n .describe('Custom prompt for AI mode'),\n waitBefore: z.number().int().nonnegative().optional()\n .describe('ms to wait before screenshot for visual stability (default: 500)'),\n fullPage: z.boolean().optional()\n .describe('Full page or viewport only (default: true)'),\n confidence: z.number().min(0).max(100).optional()\n .describe('Min OCR confidence threshold, below falls back to AI in auto mode (default: 60)'),\n}).describe('Evaluate page state via screenshot analysis (OCR and/or AI vision)');\n\nconst saveStorageStateActionSchema = z.object({\n type: z.literal('saveStorageState'),\n path: nonEmptyString.optional()\n .describe('File path (relative to cwd) to write Playwright storageState JSON. Calls page.context().storageState({ path }).'),\n handler: nonEmptyString.optional()\n .describe('Path (relative to cwd) to a TS/JS file exporting `default async ({ page, context, variables }) => void`. Called instead of the built-in writer for custom serialization (e.g., to Python pickle, SQLite, S3, ...).'),\n}).describe('Persist the current browser context state (cookies, localStorage) for reuse via config.web.storageState in subsequent runs.')\n .refine(\n (action) => action.path || action.handler,\n { message: 'saveStorageState requires either `path` or `handler`' },\n );\n\nconst assertCookiesActionSchema = z.object({\n type: z.literal('assertCookies'),\n has: z.array(nonEmptyString).optional()\n .describe('Cookie names that MUST be present in the context.'),\n not: z.array(nonEmptyString).optional()\n .describe('Cookie names that MUST NOT be present in the context.'),\n match: z.record(z.string(), z.string()).optional()\n .describe('Map of cookie name to value-matching pattern (substring by default; wrap in /.../ for regex).'),\n url: nonEmptyString.optional()\n .describe('Optional URL/origin filter passed to context.cookies(url).'),\n}).describe('Assert presence/absence (and optionally values) of cookies in the browser context. Sees HttpOnly cookies.')\n .refine(\n (a) => Boolean(a.has?.length) || Boolean(a.not?.length) || Boolean(a.match && Object.keys(a.match).length > 0),\n { message: 'assertCookies requires at least one of `has`, `not`, or `match`' },\n );\n\nconst expectResponseActionSchema = z.object({\n type: z.literal('expectResponse'),\n url: nonEmptyString.describe('URL pattern: glob by default (** = any path, * = single segment), or /regex/ for regex.'),\n status: z.number().int().min(100).max(599).optional()\n .describe('Expected HTTP status code (exact match).'),\n headers: z.record(z.string(), z.string()).optional()\n .describe('Headers that must all match. Header name is case-insensitive. Values: substring match by default, or /regex/ for regex.'),\n since: z.union([\n z.literal('previousStep'),\n z.literal('testStart'),\n z.number(),\n ]).optional().describe('Time window lower bound. Default: previousStep.'),\n timeout: z.number().int().positive().optional()\n .describe('Max wait in ms for a matching response (default 5000).'),\n}).describe('Assert that a network response matching the given URL/status/headers was seen since `since`.');\n\n// Base action schema without conditional (used for nested steps in conditional)\nconst BaseActionSchema = z.discriminatedUnion('type', [\n navigateActionSchema,\n tapActionSchema,\n inputActionSchema,\n typeActionSchema,\n clearActionSchema,\n hoverActionSchema,\n selectActionSchema,\n checkActionSchema,\n uncheckActionSchema,\n pressActionSchema,\n focusActionSchema,\n assertActionSchema,\n waitActionSchema,\n scrollActionSchema,\n screenshotActionSchema,\n saveStorageStateActionSchema,\n assertCookiesActionSchema,\n expectResponseActionSchema,\n setVarActionSchema,\n emailWaitForActionSchema,\n emailExtractCodeActionSchema,\n emailExtractLinkActionSchema,\n emailClearActionSchema,\n appwriteVerifyEmailActionSchema,\n debugActionSchema,\n waitForSelectorActionSchema,\n logActionSchema,\n failActionSchema,\n evaluateActionSchema,\n]);\n\nconst TrackableBaseActionSchema = z.intersection(BaseActionSchema, trackableSchema);\n\nconst conditionalActionSchema = z.intersection(z.object({\n type: z.literal('conditional'),\n condition: z.object({\n type: z.enum(['exists', 'notExists', 'visible', 'hidden']),\n target: LocatorSchema,\n }).describe('Condition to check'),\n then: z.array(TrackableBaseActionSchema).describe('Steps to execute if condition is true'),\n else: z.array(TrackableBaseActionSchema).optional().describe('Steps to execute if condition is false'),\n}).describe('Execute steps conditionally based on element state'), trackableSchema);\n\n// Branch definition - can be inline actions OR a workflow file reference\nconst branchSchema = z.union([\n z.array(TrackableBaseActionSchema), // Inline actions\n z.object({\n workflow: z.string().trim().min(1).describe('Path to workflow file relative to current file'),\n variables: z.record(z.string(), z.string()).optional().describe('Variables to pass to the workflow'),\n }),\n]).describe('Actions to execute - either inline steps or a workflow file reference');\n\nconst waitForBranchActionSchema = z.intersection(z.object({\n type: z.literal('waitForBranch'),\n target: LocatorSchema.describe('Element to wait for'),\n timeout: z.number().int().positive().optional().describe('Maximum time to wait for element in milliseconds (default: 30000)'),\n state: z.enum(['visible', 'attached', 'enabled']).optional().describe('Element state to wait for (default: visible)'),\n onAppear: branchSchema.describe('Actions to execute when element appears within timeout'),\n onTimeout: branchSchema.optional().describe('Actions to execute if timeout occurs (silent continue if omitted)'),\n pollInterval: z.number().int().positive().optional().describe('How often to check for element in milliseconds (default: 100)'),\n}).describe('Wait for an element and branch based on whether it appears or times out'), trackableSchema);\n\nexport const ActionSchema = z.union([TrackableBaseActionSchema, conditionalActionSchema, waitForBranchActionSchema]);\n\nconst defaultsSchema = z.object({\n timeout: z.number().int().positive().optional().describe('Default timeout in milliseconds for all actions'),\n screenshots: z.enum(['on-failure', 'always', 'never']).optional().describe('When to capture screenshots during test execution'),\n}).describe('Default settings that apply to all tests unless overridden');\n\nconst webConfigSchema = z.object({\n baseUrl: optionalUrl.describe('Base URL for the web application'),\n browser: z.string().trim().optional().describe('Browser to use for testing'),\n headless: z.boolean().optional().describe('Run browser in headless mode'),\n timeout: z.number().int().positive().optional().describe('Timeout in milliseconds for web actions'),\n storageState: z.union([\n z.string(),\n z.object({\n cookies: z.array(z.any()).optional(),\n origins: z.array(z.any()).optional(),\n }).passthrough(),\n ]).optional().describe('Playwright storageState: file path (string) or inline {cookies, origins} object. Maps to browser.newContext({ storageState }).'),\n}).describe('Web platform configuration');\n\nconst androidConfigSchema = z.object({\n appId: z.string().trim().optional().describe('Android application ID'),\n device: z.string().trim().optional().describe('Device name or ID to run tests on'),\n}).describe('Android platform configuration');\n\nconst iosConfigSchema = z.object({\n bundleId: z.string().trim().optional().describe('iOS bundle identifier'),\n simulator: z.string().trim().optional().describe('Simulator name to run tests on'),\n}).describe('iOS platform configuration');\n\nconst emailConfigSchema = z.object({\n provider: z.literal('inbucket').describe('Email testing provider'),\n endpoint: optionalUrl.describe('Email service endpoint URL'),\n}).describe('Email testing configuration');\n\nconst appwriteConfigSchema = z.object({\n endpoint: nonEmptyString.url().describe('Appwrite API endpoint'),\n projectId: nonEmptyString.describe('Appwrite project ID'),\n apiKey: nonEmptyString.describe('Appwrite API key with appropriate permissions'),\n cleanup: z.boolean().optional().describe('Enable automatic cleanup of created resources'),\n cleanupOnFailure: z.boolean().optional().describe('Clean up resources even when test fails'),\n}).describe('Appwrite backend configuration');\n\nconst healingSchema = z.object({\n enabled: z.boolean().optional().describe('Enable AI-assisted test healing on failures'),\n maxAttempts: z.number().int().min(1).max(10).default(3).describe('Maximum AI healing attempts per failure (default: 3)'),\n strategies: z.array(z.string().trim()).optional().describe('Healing strategies to use'),\n}).describe('AI-assisted test healing configuration');\n\nconst webServerSchema = z\n .object({\n command: nonEmptyString.optional().describe('Command to start the web server'),\n auto: z.boolean().optional().describe('Automatically detect and run the dev server from package.json'),\n static: z.string().optional().describe('Serve a static directory instead of running a command'),\n url: nonEmptyString.url().describe('URL to wait for before starting tests'),\n port: z.number().int().positive().optional().describe('Port number for the web server'),\n reuseExistingServer: z.boolean().default(true).describe('Use existing server if already running at the specified URL'),\n timeout: z.number().int().positive().default(30000).describe('Timeout in milliseconds to wait for server to become available'),\n workdir: z.string().optional().describe('Working directory for the server command'),\n cwd: z.string().optional().describe('Deprecated: use workdir instead'),\n })\n .describe('Configuration for starting a web server before running tests')\n .refine((config) => config.command || config.auto || config.static, {\n message: 'WebServerConfig requires command, auto: true, or static directory',\n });\n\nconst aiSourceSchema = z.object({\n pagesDir: z.string().optional().describe('Directory containing page components'),\n componentsDir: z.string().optional().describe('Directory containing reusable components'),\n extensions: z.array(z.string()).default(['.vue', '.astro', '.tsx', '.jsx', '.svelte']).describe('File extensions to include in source code analysis'),\n}).optional().describe('Source code directories for AI to analyze when generating tests');\n\nconst defaultModelForProvider = (provider: string): string => {\n switch (provider) {\n case 'anthropic': return 'claude-haiku-4-5-20251001';\n case 'openrouter': return 'anthropic/claude-haiku-4.5';\n case 'openai': return 'gpt-4o-mini';\n case 'groq': return 'llama-3.1-8b-instant';\n case 'ollama': return 'llama3.2:3b';\n default: return 'claude-haiku-4-5-20251001';\n }\n};\n\nconst aiConfigSchema = z.object({\n provider: z.enum(['anthropic', 'openai', 'ollama', 'groq', 'openrouter']).describe('AI provider to use for test generation'),\n model: z.string().trim().optional().describe('Model name to use (defaults based on provider if omitted)'),\n apiKey: z.string().trim().optional().describe('API key for the AI provider (supports ${ENV_VAR} syntax)'),\n baseUrl: optionalUrl.describe('Base URL for the AI API (required for Ollama, auto-set for groq/openrouter)'),\n temperature: z.number().min(0).max(2).default(0.2).describe('Temperature for AI generation (0 = deterministic, 2 = very creative)'),\n maxTokens: z.number().int().positive().default(4096).describe('Maximum tokens for AI responses'),\n source: aiSourceSchema,\n}).transform((val) => ({\n ...val,\n model: val.model || defaultModelForProvider(val.provider),\n})).describe('AI configuration for test generation and healing');\n\n// Cleanup discovery configuration\nexport const cleanupDiscoverSchema = z.object({\n enabled: z.boolean().default(true).describe('Enable auto-discovery of cleanup handlers in specified paths'),\n paths: z.array(z.string()).default(['./tests/cleanup']).describe('Directories to search for cleanup handler files'),\n pattern: z.string().default('**/*.ts').describe('Glob pattern to match handler files'),\n}).optional().describe('Auto-discovery configuration for cleanup handlers');\n\n// Main cleanup configuration\nexport const cleanupConfigSchema = z.object({\n provider: z.string().optional().describe('Primary cleanup provider to use'),\n parallel: z.boolean().default(false).describe('Execute cleanup operations in parallel'),\n retries: z.number().min(1).max(10).default(3).describe('Number of retry attempts for failed cleanup operations'),\n types: z.record(z.string(), z.string()).optional().describe('Map resource types to cleanup handler methods'),\n handlers: z.array(z.string()).optional().describe('Explicit paths to custom cleanup handler files'),\n discover: cleanupDiscoverSchema,\n scanUntracked: z.boolean().optional().describe('Scan for untracked resources using provider heuristics'),\n}).passthrough().describe('Comprehensive resource cleanup configuration'); // Allow provider-specific configs like appwrite: {...}\n\n// Export the inferred type\nexport type CleanupConfig = z.infer<typeof cleanupConfigSchema>;\n\nconst platformsSchema = z.object({\n web: webConfigSchema.optional(),\n android: androidConfigSchema.optional(),\n ios: iosConfigSchema.optional(),\n}).describe('Platform-specific configurations');\n\n// Preview configuration for --preview flag\nexport const previewConfigSchema = z.object({\n build: z.object({\n command: z.string().optional().describe('Command to build the project'),\n }).optional().describe('Build configuration'),\n preview: z.object({\n command: z.string().optional().describe('Command to start the preview server after build'),\n }).optional().describe('Preview server configuration'),\n url: optionalUrl.describe('URL to wait for before starting tests'),\n timeout: z.number().int().positive().optional().describe('Timeout in milliseconds to wait for preview server'),\n}).describe('Configuration for the --preview flag (build and serve production build)');\n\nexport const TestConfigSchema = z.object({\n defaults: defaultsSchema.optional(),\n web: webConfigSchema.optional(),\n android: androidConfigSchema.optional(),\n ios: iosConfigSchema.optional(),\n email: emailConfigSchema.optional(),\n appwrite: appwriteConfigSchema.optional(),\n healing: healingSchema.optional(),\n ai: aiConfigSchema.optional(),\n}).describe('Test-specific configuration that overrides global settings');\n\nexport const TestDefinitionSchema = z.object({\n name: nonEmptyString.describe('The name of the test'),\n platform: z.enum(['web', 'android', 'ios']).describe('The platform to run the test on'),\n variables: z.record(z.string(), z.string()).optional().describe('Variables that can be referenced in test steps using ${VARIABLE_NAME} syntax'),\n config: TestConfigSchema.optional(),\n steps: z.array(ActionSchema).min(1).describe('The sequence of actions to execute in this test'),\n}).describe('Schema for IntelliTester test definition files');\n\nexport const IntellitesterConfigSchema = z.object({\n defaults: defaultsSchema.optional(),\n ai: aiConfigSchema.optional(),\n platforms: platformsSchema.optional(),\n healing: healingSchema.optional(),\n email: emailConfigSchema.optional(),\n appwrite: appwriteConfigSchema.optional(),\n cleanup: cleanupConfigSchema.optional(),\n webServer: webServerSchema.optional(),\n preview: previewConfigSchema.optional(),\n secrets: z.record(z.string(), z.string().trim()).optional().describe('Secret values that can be referenced in tests'),\n}).describe('Global configuration file for IntelliTester');\n","import { z } from 'zod';\n\nconst nonEmptyString = z.string().trim().min(1, 'Value cannot be empty');\n\n// Reference to a test file in the workflow\nconst testReferenceSchema = z.object({\n file: nonEmptyString.describe('Path to the test file relative to the workflow file'),\n id: nonEmptyString.optional().describe('Optional ID for referencing this test in variables or dependencies'),\n variables: z.record(z.string(), z.string()).optional().describe('Variables to inject or override for this specific test'),\n}).describe('Reference to a test file');\n\n// Workflow-specific web config\nconst workflowWebConfigSchema = z.object({\n baseUrl: nonEmptyString.url().optional().describe('Base URL for all tests in this workflow'),\n browser: z.enum(['chromium', 'firefox', 'webkit']).optional().describe('Browser to use for all web tests'),\n headless: z.boolean().optional().describe('Run browser in headless mode'),\n testSizes: z.array(z.enum(['xs', 'sm', 'md', 'lg', 'xl'])).optional()\n .describe('Viewport sizes to test (Tailwind breakpoints). Tests run once per size.'),\n storageState: z.union([\n z.string(),\n z.object({\n cookies: z.array(z.any()).optional(),\n origins: z.array(z.any()).optional(),\n }).passthrough(),\n ]).optional().describe('Playwright storageState: file path (string) or inline {cookies, origins} object. Maps to browser.newContext({ storageState }).'),\n}).describe('Web platform configuration for the workflow');\n\n// Workflow-specific Appwrite config\nconst workflowAppwriteConfigSchema = z.object({\n endpoint: nonEmptyString.url().describe('Appwrite API endpoint'),\n projectId: nonEmptyString.describe('Appwrite project ID'),\n apiKey: nonEmptyString.describe('Appwrite API key'),\n cleanup: z.boolean().default(true).describe('Enable automatic cleanup of created resources'),\n cleanupOnFailure: z.boolean().default(true).describe('Clean up resources even when tests fail'),\n}).describe('Appwrite backend configuration for the workflow');\n\n// Cleanup discovery configuration for workflows\nconst workflowCleanupDiscoverSchema = z.object({\n enabled: z.boolean().default(true).describe('Enable auto-discovery of cleanup handlers'),\n paths: z.array(z.string()).default(['./tests/cleanup']).describe('Directories to search for cleanup handlers'),\n pattern: z.string().default('**/*.ts').describe('Glob pattern for handler files'),\n}).optional().describe('Auto-discovery configuration for cleanup handlers');\n\n// Workflow cleanup configuration\nconst workflowCleanupConfigSchema = z.object({\n provider: z.string().optional().describe('Cleanup provider to use'),\n parallel: z.boolean().default(false).describe('Run cleanup tasks in parallel'),\n retries: z.number().min(1).max(10).default(3).describe('Number of retry attempts for failed cleanup operations'),\n types: z.record(z.string(), z.string()).optional().describe('Map resource types to cleanup handler methods'),\n handlers: z.array(z.string()).optional().describe('Explicit paths to custom cleanup handler files'),\n discover: workflowCleanupDiscoverSchema,\n scanUntracked: z.boolean().optional().describe('Scan for untracked resources using provider heuristics'),\n}).passthrough().describe('Resource cleanup configuration'); // Allow provider-specific configs like appwrite: {...}\n\n// Workflow-specific web server config\nconst workflowWebServerSchema = z.object({\n command: nonEmptyString.optional().describe('Command to start the web server'),\n auto: z.boolean().optional().describe('Auto-detect server start command from package.json'),\n url: nonEmptyString.url().describe('URL to wait for before starting tests'),\n reuseExistingServer: z.boolean().default(true).describe('Use existing server if already running at the URL'),\n timeout: z.number().int().positive().default(30000).describe('Timeout in milliseconds to wait for server to start'),\n workdir: nonEmptyString.optional().describe('Working directory for the web server command'),\n cwd: nonEmptyString.optional().describe('Deprecated: use workdir instead'),\n}).describe('Configuration for starting a web server before tests');\n\n// Workflow configuration\nconst workflowConfigSchema = z.object({\n web: workflowWebConfigSchema.optional(),\n appwrite: workflowAppwriteConfigSchema.optional(),\n cleanup: workflowCleanupConfigSchema.optional(),\n webServer: workflowWebServerSchema.optional(),\n}).describe('Workflow-level configuration that applies to all tests');\n\n// Main workflow definition schema\nexport const WorkflowDefinitionSchema = z.object({\n name: nonEmptyString.describe('The name of the workflow'),\n platform: z.enum(['web', 'android', 'ios']).default('web').describe('The platform to run the workflow on'),\n variables: z.record(z.string(), z.string()).optional().describe('Workflow-level variables available to all tests'),\n config: workflowConfigSchema.optional(),\n continueOnFailure: z.boolean().default(false).describe('Continue running subsequent tests even if a test fails'),\n tests: z.array(testReferenceSchema).min(1, 'Workflow must contain at least one test').describe('List of test files to execute in this workflow'),\n}).describe('Schema for IntelliTester workflow files that orchestrate multiple tests');\n\n// Export inferred types\nexport type WorkflowDefinition = z.infer<typeof WorkflowDefinitionSchema>;\nexport type TestReference = z.infer<typeof testReferenceSchema>;\nexport type WorkflowConfig = z.infer<typeof workflowConfigSchema>;\nexport type WorkflowWebConfig = z.infer<typeof workflowWebConfigSchema>;\nexport type WorkflowAppwriteConfig = z.infer<typeof workflowAppwriteConfigSchema>;\nexport type WorkflowCleanupConfig = z.infer<typeof workflowCleanupConfigSchema>;\nexport type WorkflowWebServerConfig = z.infer<typeof workflowWebServerSchema>;\n","import { z } from 'zod';\n\nconst nonEmptyString = z.string().trim().min(1, 'Value cannot be empty');\n\n// Workflow reference within a pipeline\nconst workflowReferenceSchema = z.object({\n file: nonEmptyString.describe('Path to the workflow file'),\n id: nonEmptyString.optional().describe('Optional ID for referencing this workflow in dependencies'),\n depends_on: z.array(nonEmptyString).optional().describe('IDs of workflows that must complete before this one'),\n on_failure: z.enum(['skip', 'fail', 'ignore']).optional().describe('How to handle failure of this workflow'),\n variables: z.record(z.string(), z.string()).optional().describe('Variables to inject or override for this workflow'),\n}).describe('Reference to a workflow file');\n\n// Pipeline-specific web config (matches workflow web config pattern)\nconst pipelineWebConfigSchema = z.object({\n baseUrl: nonEmptyString.url().optional().describe('Base URL for all workflows in this pipeline'),\n browser: z.enum(['chromium', 'firefox', 'webkit']).optional().describe('Browser to use for all web tests'),\n headless: z.boolean().optional().describe('Run browser in headless mode'),\n testSizes: z.array(z.enum(['xs', 'sm', 'md', 'lg', 'xl'])).optional()\n .describe('Viewport sizes to test (Tailwind breakpoints). Tests run once per size.'),\n storageState: z.union([\n z.string(),\n z.object({\n cookies: z.array(z.any()).optional(),\n origins: z.array(z.any()).optional(),\n }).passthrough(),\n ]).optional().describe('Playwright storageState: file path (string) or inline {cookies, origins} object. Maps to browser.newContext({ storageState }).'),\n}).describe('Web platform configuration for the pipeline');\n\n// Pipeline-specific Appwrite config\nconst pipelineAppwriteConfigSchema = z.object({\n endpoint: nonEmptyString.url().describe('Appwrite API endpoint'),\n projectId: nonEmptyString.describe('Appwrite project ID'),\n apiKey: nonEmptyString.describe('Appwrite API key'),\n cleanup: z.boolean().default(true).describe('Enable automatic cleanup of created resources'),\n cleanupOnFailure: z.boolean().default(true).describe('Clean up resources even when workflows fail'),\n}).describe('Appwrite backend configuration for the pipeline');\n\n// Pipeline cleanup discovery configuration\nconst pipelineCleanupDiscoverSchema = z.object({\n enabled: z.boolean().default(true).describe('Enable auto-discovery of cleanup handlers'),\n paths: z.array(z.string()).default(['./tests/cleanup']).describe('Directories to search for cleanup handlers'),\n pattern: z.string().default('**/*.ts').describe('Glob pattern for handler files'),\n}).optional().describe('Auto-discovery configuration for cleanup handlers');\n\n// Pipeline cleanup configuration\nconst pipelineCleanupConfigSchema = z.object({\n provider: z.string().optional().describe('Cleanup provider to use'),\n parallel: z.boolean().default(false).describe('Run cleanup tasks in parallel'),\n retries: z.number().min(1).max(10).default(3).describe('Number of retry attempts for failed cleanup operations'),\n types: z.record(z.string(), z.string()).optional().describe('Map resource types to cleanup handler methods'),\n handlers: z.array(z.string()).optional().describe('Explicit paths to custom cleanup handler files'),\n discover: pipelineCleanupDiscoverSchema,\n scanUntracked: z.boolean().optional().describe('Scan for untracked resources using provider heuristics'),\n on_failure: z.boolean().default(true).describe('Run cleanup even if pipeline fails'),\n}).passthrough().describe('Resource cleanup configuration'); // Allow provider-specific configs like appwrite: {...}\n\n// Pipeline-specific web server config\nconst pipelineWebServerSchema = z.object({\n command: nonEmptyString.optional().describe('Command to start the web server'),\n auto: z.boolean().optional().describe('Auto-detect server start command from package.json'),\n url: nonEmptyString.url().describe('URL to wait for before starting workflows'),\n reuseExistingServer: z.boolean().default(true).describe('Use existing server if already running at the URL'),\n timeout: z.number().int().positive().default(30000).describe('Timeout in milliseconds to wait for server to start'),\n workdir: nonEmptyString.optional().describe('Working directory for the web server command'),\n cwd: nonEmptyString.optional().describe('Deprecated: use workdir instead'),\n}).describe('Configuration for starting a web server before workflows');\n\n// Pipeline configuration (similar to workflow config)\nconst pipelineConfigSchema = z.object({\n web: pipelineWebConfigSchema.optional(),\n appwrite: pipelineAppwriteConfigSchema.optional(),\n cleanup: pipelineCleanupConfigSchema.optional(),\n webServer: pipelineWebServerSchema.optional(),\n}).describe('Pipeline-level configuration that applies to all workflows');\n\n// Main pipeline definition schema\nexport const PipelineDefinitionSchema = z.object({\n name: nonEmptyString.describe('The name of the pipeline'),\n platform: z.enum(['web', 'android', 'ios']).default('web').describe('The platform to run the pipeline on'),\n config: pipelineConfigSchema.optional(),\n on_failure: z.enum(['skip', 'fail', 'ignore']).default('skip').describe('Default failure handling for workflows'),\n cleanup_on_failure: z.boolean().default(true).describe('Run cleanup even when pipeline fails'),\n workflows: z.array(workflowReferenceSchema).min(1, 'Pipeline must contain at least one workflow').describe('List of workflow files to execute in this pipeline'),\n}).describe('Schema for IntelliTester pipeline files that orchestrate multiple workflows');\n\n// Export inferred types\nexport type PipelineDefinition = z.infer<typeof PipelineDefinitionSchema>;\nexport type WorkflowReference = z.infer<typeof workflowReferenceSchema>;\nexport type PipelineConfig = z.infer<typeof pipelineConfigSchema>;\nexport type PipelineWebConfig = z.infer<typeof pipelineWebConfigSchema>;\nexport type PipelineAppwriteConfig = z.infer<typeof pipelineAppwriteConfigSchema>;\nexport type PipelineCleanupConfig = z.infer<typeof pipelineCleanupConfigSchema>;\nexport type PipelineWebServerConfig = z.infer<typeof pipelineWebServerSchema>;\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkJX63IML5_cjs = require('./chunk-JX63IML5.cjs');
3
+ var chunk7KERJPT3_cjs = require('./chunk-7KERJPT3.cjs');
4
4
  var chunk7KTXX6EF_cjs = require('./chunk-7KTXX6EF.cjs');
5
5
  var chunkJN4VROOX_cjs = require('./chunk-JN4VROOX.cjs');
6
6
  var chunkE7I5EAST_cjs = require('./chunk-E7I5EAST.cjs');
@@ -1000,6 +1000,56 @@ function getBrowserLaunchOptions(options) {
1000
1000
  return { headless };
1001
1001
  }
1002
1002
 
1003
+ // src/executors/web/matchers.ts
1004
+ chunkE7I5EAST_cjs.init_cjs_shims();
1005
+ function compileMatcher(pattern, mode) {
1006
+ if (pattern.length >= 2 && pattern.startsWith("/") && pattern.endsWith("/")) {
1007
+ const re = new RegExp(pattern.slice(1, -1));
1008
+ return (s) => re.test(s);
1009
+ }
1010
+ if (mode === "url") {
1011
+ const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&");
1012
+ const globbed = escaped.replace(/\*\*/g, " ").replace(/\*/g, "[^/]*").replace(/ /g, ".*");
1013
+ const re = new RegExp(`^${globbed}$`);
1014
+ return (s) => re.test(s);
1015
+ }
1016
+ return (s) => s.includes(pattern);
1017
+ }
1018
+
1019
+ // src/executors/web/responseLog.ts
1020
+ chunkE7I5EAST_cjs.init_cjs_shims();
1021
+ var RESPONSE_LOG_MAX_ENTRIES = 200;
1022
+ var ResponseLog = class {
1023
+ constructor(cap = RESPONSE_LOG_MAX_ENTRIES) {
1024
+ this.buf = [];
1025
+ this.cap = cap;
1026
+ }
1027
+ attach(page) {
1028
+ page.on("response", (res) => {
1029
+ void res.allHeaders().then((headers) => {
1030
+ const lowered = {};
1031
+ for (const [k, v] of Object.entries(headers)) {
1032
+ lowered[k.toLowerCase()] = v;
1033
+ }
1034
+ this.push({
1035
+ url: res.url(),
1036
+ status: res.status(),
1037
+ headers: lowered,
1038
+ ts: Date.now()
1039
+ });
1040
+ }).catch(() => {
1041
+ });
1042
+ });
1043
+ }
1044
+ push(entry) {
1045
+ if (this.buf.length >= this.cap) this.buf.shift();
1046
+ this.buf.push(entry);
1047
+ }
1048
+ snapshot() {
1049
+ return this.buf;
1050
+ }
1051
+ };
1052
+
1003
1053
  // src/ai/errorHelper.ts
1004
1054
  chunkE7I5EAST_cjs.init_cjs_shims();
1005
1055
 
@@ -3017,7 +3067,7 @@ async function executeActionWithRetry(page, action, index, options) {
3017
3067
  });
3018
3068
  }
3019
3069
  } else {
3020
- const { loadWorkflowDefinition, loadTestDefinition: loadTestDefinition2 } = await import('./loader-BNUKI7J3.cjs');
3070
+ const { loadWorkflowDefinition, loadTestDefinition: loadTestDefinition2 } = await import('./loader-5F4K7EDA.cjs');
3021
3071
  const workflowPath = path4__namespace.default.resolve(process.cwd(), branchToExecute.workflow);
3022
3072
  const workflowDir = path4__namespace.default.dirname(workflowPath);
3023
3073
  if (debugMode) {
@@ -3225,6 +3275,9 @@ var runWebTest = async (test, options = {}) => {
3225
3275
  });
3226
3276
  const page = await browserContext.newPage();
3227
3277
  page.setDefaultTimeout(defaultTimeout);
3278
+ const responseLog = new ResponseLog();
3279
+ responseLog.attach(page);
3280
+ let lastStepEndTs = Date.now();
3228
3281
  const executionContext = {
3229
3282
  variables: /* @__PURE__ */ new Map(),
3230
3283
  lastEmail: null,
@@ -3436,7 +3489,9 @@ var runWebTest = async (test, options = {}) => {
3436
3489
  };
3437
3490
  let _sizeTestFailed = false;
3438
3491
  try {
3439
- for (const [index, action] of test.steps.entries()) {
3492
+ for (let index = 0; index < test.steps.length; index++) {
3493
+ lastStepEndTs = Date.now();
3494
+ const action = test.steps[index];
3440
3495
  if (debugMode) {
3441
3496
  console.log(`[DEBUG] Executing step ${index + 1}: ${action.type}`);
3442
3497
  }
@@ -3585,6 +3640,118 @@ var runWebTest = async (test, options = {}) => {
3585
3640
  }
3586
3641
  continue;
3587
3642
  }
3643
+ if (action.type === "assertCookies") {
3644
+ const cookieAction = action;
3645
+ try {
3646
+ const filterUrl = cookieAction.url ? interpolateVariables(cookieAction.url, executionContext.variables) : void 0;
3647
+ const jar = await page.context().cookies(filterUrl);
3648
+ const names = new Set(jar.map((c) => c.name));
3649
+ const problems = [];
3650
+ if (cookieAction.has) {
3651
+ for (const name of cookieAction.has) {
3652
+ if (!names.has(name)) problems.push(`expected cookie "${name}" to be present`);
3653
+ }
3654
+ }
3655
+ if (cookieAction.not) {
3656
+ for (const name of cookieAction.not) {
3657
+ if (names.has(name)) problems.push(`expected cookie "${name}" to be absent`);
3658
+ }
3659
+ }
3660
+ if (cookieAction.match) {
3661
+ for (const [name, pattern] of Object.entries(cookieAction.match)) {
3662
+ const c = jar.find((entry) => entry.name === name);
3663
+ if (!c) {
3664
+ problems.push(`expected cookie "${name}" to be present (for value match)`);
3665
+ continue;
3666
+ }
3667
+ const matcher = compileMatcher(interpolateVariables(pattern, executionContext.variables), "substr");
3668
+ if (!matcher(c.value)) {
3669
+ problems.push(`cookie "${name}" value "${c.value}" did not match pattern "${pattern}"`);
3670
+ }
3671
+ }
3672
+ }
3673
+ if (problems.length > 0) {
3674
+ throw new Error(`assertCookies failed:
3675
+ - ${problems.join("\n - ")}
3676
+ (cookies seen: ${[...names].join(", ") || "<none>"})`);
3677
+ }
3678
+ sizeResults.push({ action, status: "passed" });
3679
+ options.onStepComplete?.(sizeResults[sizeResults.length - 1], index, test.steps.length);
3680
+ } catch (e) {
3681
+ const errMsg = e instanceof Error ? e.message : String(e);
3682
+ sizeResults.push({ action, status: "failed", error: errMsg });
3683
+ options.onStepComplete?.(sizeResults[sizeResults.length - 1], index, test.steps.length);
3684
+ throw e;
3685
+ }
3686
+ continue;
3687
+ }
3688
+ if (action.type === "expectResponse") {
3689
+ const respAction = action;
3690
+ try {
3691
+ const urlPattern = interpolateVariables(respAction.url, executionContext.variables);
3692
+ const urlMatch = compileMatcher(urlPattern, "url");
3693
+ const headerMatchers = respAction.headers ? Object.entries(respAction.headers).map(([name, pattern]) => ({
3694
+ name: name.toLowerCase(),
3695
+ test: compileMatcher(interpolateVariables(pattern, executionContext.variables), "substr"),
3696
+ pattern
3697
+ })) : [];
3698
+ const expectedStatus = respAction.status;
3699
+ let sinceTs;
3700
+ if (respAction.since === "testStart") {
3701
+ sinceTs = 0;
3702
+ } else if (typeof respAction.since === "number") {
3703
+ sinceTs = respAction.since;
3704
+ } else {
3705
+ sinceTs = lastStepEndTs;
3706
+ }
3707
+ const timeout = respAction.timeout ?? 5e3;
3708
+ const deadline = Date.now() + timeout;
3709
+ const findMatch = () => {
3710
+ for (const entry of responseLog.snapshot()) {
3711
+ if (entry.ts < sinceTs) continue;
3712
+ if (!urlMatch(entry.url)) continue;
3713
+ if (expectedStatus !== void 0 && entry.status !== expectedStatus) continue;
3714
+ let headersOk = true;
3715
+ for (const h of headerMatchers) {
3716
+ const value = entry.headers[h.name];
3717
+ if (value === void 0 || !h.test(value)) {
3718
+ headersOk = false;
3719
+ break;
3720
+ }
3721
+ }
3722
+ if (headersOk) return entry;
3723
+ }
3724
+ return null;
3725
+ };
3726
+ let match = findMatch();
3727
+ while (!match && Date.now() < deadline) {
3728
+ await new Promise((resolve) => setTimeout(resolve, 50));
3729
+ match = findMatch();
3730
+ }
3731
+ if (!match) {
3732
+ const recent = responseLog.snapshot().slice(-5).map((e) => `${e.status} ${e.url}`).join("\n ");
3733
+ throw new Error(
3734
+ `expectResponse timed out after ${timeout}ms.
3735
+ url pattern: ${urlPattern}
3736
+ ` + (expectedStatus !== void 0 ? ` expected status: ${expectedStatus}
3737
+ ` : "") + (headerMatchers.length > 0 ? ` expected headers: ${headerMatchers.map((h) => `${h.name}=${h.pattern}`).join(", ")}
3738
+ ` : "") + ` recent responses:
3739
+ ${recent || "<none>"}`
3740
+ );
3741
+ }
3742
+ if (debugMode) {
3743
+ console.log(`[DEBUG] expectResponse matched: ${match.status} ${match.url}`);
3744
+ }
3745
+ sizeResults.push({ action, status: "passed" });
3746
+ options.onStepComplete?.(sizeResults[sizeResults.length - 1], index, test.steps.length);
3747
+ } catch (e) {
3748
+ const errMsg = e instanceof Error ? e.message : String(e);
3749
+ sizeResults.push({ action, status: "failed", error: errMsg });
3750
+ options.onStepComplete?.(sizeResults[sizeResults.length - 1], index, test.steps.length);
3751
+ throw e;
3752
+ }
3753
+ continue;
3754
+ }
3588
3755
  const actionExtras = await executeActionWithRetry(page, action, index, {
3589
3756
  baseUrl: options.baseUrl ?? test.config?.web?.baseUrl,
3590
3757
  context: executionContext,
@@ -3726,6 +3893,9 @@ async function runTestInWorkflow(test, page, context, options, workflowDir, test
3726
3893
  const interpolate = (value) => {
3727
3894
  return interpolateVariables(value, context.variables);
3728
3895
  };
3896
+ const responseLog = new ResponseLog();
3897
+ responseLog.attach(page);
3898
+ let lastStepEndTs = Date.now();
3729
3899
  const resolveLocator2 = (locator) => {
3730
3900
  if (locator.testId) return page.getByTestId(locator.testId);
3731
3901
  if (locator.text) return page.getByText(locator.text);
@@ -3758,6 +3928,7 @@ async function runTestInWorkflow(test, page, context, options, workflowDir, test
3758
3928
  };
3759
3929
  try {
3760
3930
  for (const [index, action] of test.steps.entries()) {
3931
+ lastStepEndTs = Date.now();
3761
3932
  if (debugMode) {
3762
3933
  console.log(` [DEBUG] Step ${index + 1}: ${action.type}`);
3763
3934
  }
@@ -3945,6 +4116,102 @@ async function runTestInWorkflow(test, page, context, options, workflowDir, test
3945
4116
  }
3946
4117
  break;
3947
4118
  }
4119
+ case "assertCookies": {
4120
+ const cookieAction = action;
4121
+ const filterUrl = cookieAction.url ? interpolate(cookieAction.url) : void 0;
4122
+ const jar = await page.context().cookies(filterUrl);
4123
+ const names = new Set(jar.map((c) => c.name));
4124
+ const problems = [];
4125
+ if (cookieAction.has) {
4126
+ for (const name of cookieAction.has) {
4127
+ if (!names.has(name)) problems.push(`expected cookie "${name}" to be present`);
4128
+ }
4129
+ }
4130
+ if (cookieAction.not) {
4131
+ for (const name of cookieAction.not) {
4132
+ if (names.has(name)) problems.push(`expected cookie "${name}" to be absent`);
4133
+ }
4134
+ }
4135
+ if (cookieAction.match) {
4136
+ for (const [name, pattern] of Object.entries(cookieAction.match)) {
4137
+ const c = jar.find((entry) => entry.name === name);
4138
+ if (!c) {
4139
+ problems.push(`expected cookie "${name}" to be present (for value match)`);
4140
+ continue;
4141
+ }
4142
+ const matcher = compileMatcher(interpolate(pattern), "substr");
4143
+ if (!matcher(c.value)) {
4144
+ problems.push(`cookie "${name}" value "${c.value}" did not match pattern "${pattern}"`);
4145
+ }
4146
+ }
4147
+ }
4148
+ if (problems.length > 0) {
4149
+ throw new Error(`assertCookies failed:
4150
+ - ${problems.join("\n - ")}
4151
+ (cookies seen: ${[...names].join(", ") || "<none>"})`);
4152
+ }
4153
+ results.push({ action, status: "passed" });
4154
+ break;
4155
+ }
4156
+ case "expectResponse": {
4157
+ const respAction = action;
4158
+ const urlPattern = interpolate(respAction.url);
4159
+ const urlMatch = compileMatcher(urlPattern, "url");
4160
+ const headerMatchers = respAction.headers ? Object.entries(respAction.headers).map(([name, pattern]) => ({
4161
+ name: name.toLowerCase(),
4162
+ test: compileMatcher(interpolate(pattern), "substr"),
4163
+ pattern
4164
+ })) : [];
4165
+ const expectedStatus = respAction.status;
4166
+ let sinceTs;
4167
+ if (respAction.since === "testStart") {
4168
+ sinceTs = 0;
4169
+ } else if (typeof respAction.since === "number") {
4170
+ sinceTs = respAction.since;
4171
+ } else {
4172
+ sinceTs = lastStepEndTs;
4173
+ }
4174
+ const timeout = respAction.timeout ?? 5e3;
4175
+ const deadline = Date.now() + timeout;
4176
+ const findMatch = () => {
4177
+ for (const entry of responseLog.snapshot()) {
4178
+ if (entry.ts < sinceTs) continue;
4179
+ if (!urlMatch(entry.url)) continue;
4180
+ if (expectedStatus !== void 0 && entry.status !== expectedStatus) continue;
4181
+ let headersOk = true;
4182
+ for (const h of headerMatchers) {
4183
+ const value = entry.headers[h.name];
4184
+ if (value === void 0 || !h.test(value)) {
4185
+ headersOk = false;
4186
+ break;
4187
+ }
4188
+ }
4189
+ if (headersOk) return entry;
4190
+ }
4191
+ return null;
4192
+ };
4193
+ let match = findMatch();
4194
+ while (!match && Date.now() < deadline) {
4195
+ await new Promise((resolve) => setTimeout(resolve, 50));
4196
+ match = findMatch();
4197
+ }
4198
+ if (!match) {
4199
+ const recent = responseLog.snapshot().slice(-5).map((e) => `${e.status} ${e.url}`).join("\n ");
4200
+ throw new Error(
4201
+ `expectResponse timed out after ${timeout}ms.
4202
+ url pattern: ${urlPattern}
4203
+ ` + (expectedStatus !== void 0 ? ` expected status: ${expectedStatus}
4204
+ ` : "") + (headerMatchers.length > 0 ? ` expected headers: ${headerMatchers.map((h) => `${h.name}=${h.pattern}`).join(", ")}
4205
+ ` : "") + ` recent responses:
4206
+ ${recent || "<none>"}`
4207
+ );
4208
+ }
4209
+ if (debugMode) {
4210
+ console.log(` [DEBUG] expectResponse matched: ${match.status} ${match.url}`);
4211
+ }
4212
+ results.push({ action, status: "passed" });
4213
+ break;
4214
+ }
3948
4215
  case "setVar": {
3949
4216
  let value;
3950
4217
  if (action.value) {
@@ -4320,7 +4587,7 @@ async function runTestInWorkflow(test, page, context, options, workflowDir, test
4320
4587
  if (debugMode) {
4321
4588
  console.log(` [DEBUG] waitForBranch: loading workflow from ${workflowPath}`);
4322
4589
  }
4323
- const { loadWorkflowDefinition } = await import('./loader-BNUKI7J3.cjs');
4590
+ const { loadWorkflowDefinition } = await import('./loader-5F4K7EDA.cjs');
4324
4591
  const nestedWorkflow = await loadWorkflowDefinition(workflowPath);
4325
4592
  if (branch.variables) {
4326
4593
  for (const [key, value] of Object.entries(branch.variables)) {
@@ -4330,7 +4597,7 @@ async function runTestInWorkflow(test, page, context, options, workflowDir, test
4330
4597
  }
4331
4598
  for (const testRef of nestedWorkflow.tests) {
4332
4599
  const testFilePath2 = path4__namespace.default.resolve(path4__namespace.default.dirname(workflowPath), testRef.file);
4333
- const nestedTest = await chunkJX63IML5_cjs.loadTestDefinition(testFilePath2);
4600
+ const nestedTest = await chunk7KERJPT3_cjs.loadTestDefinition(testFilePath2);
4334
4601
  if (nestedTest.variables) {
4335
4602
  for (const [key, value] of Object.entries(nestedTest.variables)) {
4336
4603
  const interpolated = interpolateVariables(value, context.variables);
@@ -4602,7 +4869,7 @@ Starting workflow: ${workflow.name}`);
4602
4869
  console.log(` Test ID: ${testRef.id}`);
4603
4870
  }
4604
4871
  try {
4605
- const test = await chunkJX63IML5_cjs.loadTestDefinition(testFilePath);
4872
+ const test = await chunk7KERJPT3_cjs.loadTestDefinition(testFilePath);
4606
4873
  if (testRef.variables) {
4607
4874
  for (const [key, value] of Object.entries(testRef.variables)) {
4608
4875
  const interpolated = interpolateWorkflowVariables(
@@ -5066,5 +5333,5 @@ exports.runWorkflowWithContext = runWorkflowWithContext;
5066
5333
  exports.setupAppwriteTracking = setupAppwriteTracking;
5067
5334
  exports.startTrackingServer = startTrackingServer;
5068
5335
  exports.webServerManager = webServerManager;
5069
- //# sourceMappingURL=chunk-QHIU4JKR.cjs.map
5070
- //# sourceMappingURL=chunk-QHIU4JKR.cjs.map
5336
+ //# sourceMappingURL=chunk-GNCJLEBY.cjs.map
5337
+ //# sourceMappingURL=chunk-GNCJLEBY.cjs.map