@stablyai/playwright-test 2.1.2 → 2.1.3-rc.0
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/README.md +19 -0
- package/dist/{index-FxXA-kJ_.mjs → index-B3E10pom.mjs} +1048 -1039
- package/dist/index-B3E10pom.mjs.map +1 -0
- package/dist/{index-NMVIqC6_.cjs → index-Cjfxwz2m.cjs} +1047 -1038
- package/dist/index-Cjfxwz2m.cjs.map +1 -0
- package/dist/index.cjs +950 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d-BjGuH5NO.d.cts.map +1 -1
- package/dist/index.d-BjGuH5NO.d.mts.map +1 -1
- package/dist/index.d-BjGuH5NO.d.ts.map +1 -1
- package/dist/index.d.cts +92 -3
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +92 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.d.ts +92 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +948 -4
- package/dist/index.mjs.map +1 -1
- package/dist/reporter.cjs +1 -1
- package/dist/reporter.mjs +1 -1
- package/package.json +5 -4
- package/dist/index-FxXA-kJ_.mjs.map +0 -1
- package/dist/index-NMVIqC6_.cjs.map +0 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import { dirname } from \"path\";\nimport { fileURLToPath } from \"url\";\n\nimport type { BrowserContext } from \"@playwright/test\";\nimport {\n defineConfig as playwrightDefineConfig,\n expect as playwrightExpect,\n test as playwrightTest,\n} from \"@playwright/test\";\nimport \"@stablyai/playwright-base\";\n\nimport type { Agent } from \"@stablyai/playwright-base\";\nimport {\n augmentBrowser,\n augmentBrowserContext,\n augmentPage,\n stablyPlaywrightMatchers,\n} from \"@stablyai/playwright-base\";\n\nimport type { StablyNotificationConfig } from \"@stablyai/playwright-reporter\";\n\nexport { stablyReporter } from \"@stablyai/playwright-reporter\";\nexport type {\n StablyReporterOptions,\n ProjectNotificationConfig,\n NotificationResultPolicy,\n StablyEmailNotificationConfig,\n StablySlackNotificationConfig,\n StablyNotificationConfig,\n} from \"@stablyai/playwright-reporter\";\nexport { Agent, setApiKey } from \"@stablyai/playwright-base\";\nexport type {\n AIModel,\n GetLocatorsByAIOptions,\n GetLocatorsByAIResult,\n ScreenshotPromptOptions,\n} from \"@stablyai/playwright-base\";\n\n/**\n * Get the directory name from an import.meta.url.\n * This is the ESM equivalent of __dirname.\n *\n * @example\n * ```ts\n * import { getDirname } from '@stablyai/playwright-test';\n * const __dirname = getDirname(import.meta.url);\n *\n * // Use in tests for file paths\n * await page.setInputFiles('input', path.join(__dirname, 'fixtures', 'file.pdf'));\n * ```\n */\nexport function getDirname(importMetaUrl: string): string {\n return dirname(fileURLToPath(importMetaUrl));\n}\n\n/**\n * Get the filename from an import.meta.url.\n * This is the ESM equivalent of __filename.\n *\n * @example\n * ```ts\n * import { getFilename } from '@stablyai/playwright-test';\n * const __filename = getFilename(import.meta.url);\n * ```\n */\nexport function getFilename(importMetaUrl: string): string {\n return fileURLToPath(importMetaUrl);\n}\n\nexport const test: typeof playwrightTest = playwrightTest.extend<{\n agent: Agent;\n}>({\n agent: async (\n { context }: { context: BrowserContext },\n use: (agent: Agent) => Promise<void>,\n ) => {\n // Create a default agent from the default context\n const agent = context.newAgent();\n await use(agent);\n },\n browser: async ({ browser }, use) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await use(augmentBrowser(browser as any) as any);\n },\n context: async ({ context }, use) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await use(augmentBrowserContext(context as any) as any);\n },\n page: async ({ page }, use) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await use(augmentPage(page as any) as any);\n },\n});\n\nexport const expect = playwrightExpect.extend(stablyPlaywrightMatchers);\n\nexport * from \"@playwright/test\";\n\nexport type StablyProjectConfig = {\n notifications?: StablyNotificationConfig;\n};\n\n/**\n * Stably-enhanced defineConfig with typed support for stably notification configuration in projects.\n * The `stably` property on projects is available via module augmentation of `@playwright/test`.\n *\n * @example\n * ```ts\n * import { defineConfig, stablyReporter } from \"@stablyai/playwright-test\";\n *\n * export default defineConfig({\n * reporter: [stablyReporter({ apiKey: \"...\" })],\n * projects: [\n * {\n * name: \"smoke\",\n * stably: {\n * notifications: {\n * slack: { channelName: \"#alerts\", notifyOnResult: \"failures-only\" },\n * },\n * },\n * },\n * ],\n * });\n * ```\n */\nexport const defineConfig = playwrightDefineConfig;\n\ndeclare module \"@playwright/test\" {\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n interface LocatorAssertions {\n /**\n * Asserts that the locator satisfies a natural language condition using AI vision.\n *\n * Takes a screenshot of the locator and uses AI to verify whether the specified condition is met.\n *\n * @param condition - A natural language description of what should be true about the locator\n * @param options - Optional screenshot options (e.g., timeout)\n *\n * @example\n * ```typescript\n * await expect(page.locator('.button')).aiAssert('The button is disabled and grayed out');\n * ```\n */\n aiAssert(\n condition: string,\n // eslint-disable-next-line @typescript-eslint/consistent-type-imports\n options?: import(\"@stablyai/playwright-base\").ScreenshotPromptOptions,\n ): Promise<void>;\n\n /**\n * @deprecated Use `aiAssert` instead. This method will be removed in a future version.\n */\n toMatchScreenshotPrompt(\n condition: string,\n // eslint-disable-next-line @typescript-eslint/consistent-type-imports\n options?: import(\"@stablyai/playwright-base\").ScreenshotPromptOptions,\n ): Promise<void>;\n }\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n interface PageAssertions {\n /**\n * Asserts that the page satisfies a natural language condition using AI vision.\n *\n * Takes a screenshot of the page and uses AI to verify whether the specified condition is met.\n *\n * @param condition - A natural language description of what should be true about the page\n * @param options - Optional screenshot options (e.g., fullPage, timeout)\n *\n * @example\n * ```typescript\n * await expect(page).aiAssert('The page shows a success message after form submission');\n * ```\n */\n aiAssert(\n condition: string,\n // eslint-disable-next-line @typescript-eslint/consistent-type-imports\n options?: import(\"@stablyai/playwright-base\").ScreenshotPromptOptions,\n ): Promise<void>;\n\n /**\n * @deprecated Use `aiAssert` instead. This method will be removed in a future version.\n */\n toMatchScreenshotPrompt(\n condition: string,\n // eslint-disable-next-line @typescript-eslint/consistent-type-imports\n options?: import(\"@stablyai/playwright-base\").ScreenshotPromptOptions,\n ): Promise<void>;\n }\n\n // Add agent fixture to test args\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n interface PlaywrightTestArgs {\n agent: Agent;\n }\n\n // Add stably config to project configuration\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n interface Project {\n stably?: StablyProjectConfig;\n }\n}\n"],"names":["dirname","fileURLToPath","playwrightTest","augmentBrowser","augmentBrowserContext","augmentPage","playwrightExpect","stablyPlaywrightMatchers","playwrightDefineConfig"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDO,SAAS,WAAW,aAAA,EAA+B;AACxD,EAAA,OAAOA,oBAAA,CAAQC,wBAAA,CAAc,aAAa,CAAC,CAAA;AAC7C;AAYO,SAAS,YAAY,aAAA,EAA+B;AACzD,EAAA,OAAOA,yBAAc,aAAa,CAAA;AACpC;AAEO,MAAM,IAAA,GAA8BC,YAAe,MAAA,CAEvD;AAAA,EACD,KAAA,EAAO,OACL,EAAE,OAAA,IACF,GAAA,KACG;AAEH,IAAA,MAAM,KAAA,GAAQ,QAAQ,QAAA,EAAS;AAC/B,IAAA,MAAM,IAAI,KAAK,CAAA;AAAA,EACjB,CAAA;AAAA,EACA,OAAA,EAAS,OAAO,EAAE,OAAA,IAAW,GAAA,KAAQ;AAEnC,IAAA,MAAM,GAAA,CAAIC,6BAAA,CAAe,OAAc,CAAQ,CAAA;AAAA,EACjD,CAAA;AAAA,EACA,OAAA,EAAS,OAAO,EAAE,OAAA,IAAW,GAAA,KAAQ;AAEnC,IAAA,MAAM,GAAA,CAAIC,oCAAA,CAAsB,OAAc,CAAQ,CAAA;AAAA,EACxD,CAAA;AAAA,EACA,IAAA,EAAM,OAAO,EAAE,IAAA,IAAQ,GAAA,KAAQ;AAE7B,IAAA,MAAM,GAAA,CAAIC,0BAAA,CAAY,IAAW,CAAQ,CAAA;AAAA,EAC3C;AACF,CAAC;AAEM,MAAM,MAAA,GAASC,aAAA,CAAiB,MAAA,CAAOC,uCAAwB;AA+B/D,MAAM,YAAA,GAAeC;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../node_modules/.pnpm/@stablyai-internal+api-client@0.1.6/node_modules/@stablyai-internal/api-client/dist/index.js","../src/auth-with-google.ts","../src/index.ts"],"sourcesContent":["export { STABLY_ORG_ID_HEADER } from './chunk-HMKCSECL.js';\n\n// src/generated/core/bodySerializer.gen.ts\nvar jsonBodySerializer = {\n bodySerializer: (body) => JSON.stringify(\n body,\n (_key, value) => typeof value === \"bigint\" ? value.toString() : value\n )\n};\n\n// src/generated/core/serverSentEvents.gen.ts\nvar createSseClient = ({\n onRequest,\n onSseError,\n onSseEvent,\n responseTransformer,\n responseValidator,\n sseDefaultRetryDelay,\n sseMaxRetryAttempts,\n sseMaxRetryDelay,\n sseSleepFn,\n url,\n ...options\n}) => {\n let lastEventId;\n const sleep = sseSleepFn ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));\n const createStream = async function* () {\n let retryDelay = sseDefaultRetryDelay ?? 3e3;\n let attempt = 0;\n const signal = options.signal ?? new AbortController().signal;\n while (true) {\n if (signal.aborted) break;\n attempt++;\n const headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers);\n if (lastEventId !== void 0) {\n headers.set(\"Last-Event-ID\", lastEventId);\n }\n try {\n const requestInit = {\n redirect: \"follow\",\n ...options,\n body: options.serializedBody,\n headers,\n signal\n };\n let request = new Request(url, requestInit);\n if (onRequest) {\n request = await onRequest(url, requestInit);\n }\n const _fetch = options.fetch ?? globalThis.fetch;\n const response = await _fetch(request);\n if (!response.ok)\n throw new Error(\n `SSE failed: ${response.status} ${response.statusText}`\n );\n if (!response.body) throw new Error(\"No body in SSE response\");\n const reader = response.body.pipeThrough(new TextDecoderStream()).getReader();\n let buffer = \"\";\n const abortHandler = () => {\n try {\n reader.cancel();\n } catch {\n }\n };\n signal.addEventListener(\"abort\", abortHandler);\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += value;\n const chunks = buffer.split(\"\\n\\n\");\n buffer = chunks.pop() ?? \"\";\n for (const chunk of chunks) {\n const lines = chunk.split(\"\\n\");\n const dataLines = [];\n let eventName;\n for (const line of lines) {\n if (line.startsWith(\"data:\")) {\n dataLines.push(line.replace(/^data:\\s*/, \"\"));\n } else if (line.startsWith(\"event:\")) {\n eventName = line.replace(/^event:\\s*/, \"\");\n } else if (line.startsWith(\"id:\")) {\n lastEventId = line.replace(/^id:\\s*/, \"\");\n } else if (line.startsWith(\"retry:\")) {\n const parsed = Number.parseInt(\n line.replace(/^retry:\\s*/, \"\"),\n 10\n );\n if (!Number.isNaN(parsed)) {\n retryDelay = parsed;\n }\n }\n }\n let data;\n let parsedJson = false;\n if (dataLines.length) {\n const rawData = dataLines.join(\"\\n\");\n try {\n data = JSON.parse(rawData);\n parsedJson = true;\n } catch {\n data = rawData;\n }\n }\n if (parsedJson) {\n if (responseValidator) {\n await responseValidator(data);\n }\n if (responseTransformer) {\n data = await responseTransformer(data);\n }\n }\n onSseEvent?.({\n data,\n event: eventName,\n id: lastEventId,\n retry: retryDelay\n });\n if (dataLines.length) {\n yield data;\n }\n }\n }\n } finally {\n signal.removeEventListener(\"abort\", abortHandler);\n reader.releaseLock();\n }\n break;\n } catch (error) {\n onSseError?.(error);\n if (sseMaxRetryAttempts !== void 0 && attempt >= sseMaxRetryAttempts) {\n break;\n }\n const backoff = Math.min(\n retryDelay * 2 ** (attempt - 1),\n sseMaxRetryDelay ?? 3e4\n );\n await sleep(backoff);\n }\n }\n };\n const stream = createStream();\n return { stream };\n};\n\n// src/generated/core/pathSerializer.gen.ts\nvar separatorArrayExplode = (style) => {\n switch (style) {\n case \"label\":\n return \".\";\n case \"matrix\":\n return \";\";\n case \"simple\":\n return \",\";\n default:\n return \"&\";\n }\n};\nvar separatorArrayNoExplode = (style) => {\n switch (style) {\n case \"form\":\n return \",\";\n case \"pipeDelimited\":\n return \"|\";\n case \"spaceDelimited\":\n return \"%20\";\n default:\n return \",\";\n }\n};\nvar separatorObjectExplode = (style) => {\n switch (style) {\n case \"label\":\n return \".\";\n case \"matrix\":\n return \";\";\n case \"simple\":\n return \",\";\n default:\n return \"&\";\n }\n};\nvar serializeArrayParam = ({\n allowReserved,\n explode,\n name,\n style,\n value\n}) => {\n if (!explode) {\n const joinedValues2 = (allowReserved ? value : value.map((v) => encodeURIComponent(v))).join(separatorArrayNoExplode(style));\n switch (style) {\n case \"label\":\n return `.${joinedValues2}`;\n case \"matrix\":\n return `;${name}=${joinedValues2}`;\n case \"simple\":\n return joinedValues2;\n default:\n return `${name}=${joinedValues2}`;\n }\n }\n const separator = separatorArrayExplode(style);\n const joinedValues = value.map((v) => {\n if (style === \"label\" || style === \"simple\") {\n return allowReserved ? v : encodeURIComponent(v);\n }\n return serializePrimitiveParam({\n allowReserved,\n name,\n value: v\n });\n }).join(separator);\n return style === \"label\" || style === \"matrix\" ? separator + joinedValues : joinedValues;\n};\nvar serializePrimitiveParam = ({\n allowReserved,\n name,\n value\n}) => {\n if (value === void 0 || value === null) {\n return \"\";\n }\n if (typeof value === \"object\") {\n throw new Error(\n \"Deeply-nested arrays/objects aren\\u2019t supported. Provide your own `querySerializer()` to handle these.\"\n );\n }\n return `${name}=${allowReserved ? value : encodeURIComponent(value)}`;\n};\nvar serializeObjectParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n valueOnly\n}) => {\n if (value instanceof Date) {\n return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`;\n }\n if (style !== \"deepObject\" && !explode) {\n let values = [];\n Object.entries(value).forEach(([key, v]) => {\n values = [\n ...values,\n key,\n allowReserved ? v : encodeURIComponent(v)\n ];\n });\n const joinedValues2 = values.join(\",\");\n switch (style) {\n case \"form\":\n return `${name}=${joinedValues2}`;\n case \"label\":\n return `.${joinedValues2}`;\n case \"matrix\":\n return `;${name}=${joinedValues2}`;\n default:\n return joinedValues2;\n }\n }\n const separator = separatorObjectExplode(style);\n const joinedValues = Object.entries(value).map(\n ([key, v]) => serializePrimitiveParam({\n allowReserved,\n name: style === \"deepObject\" ? `${name}[${key}]` : key,\n value: v\n })\n ).join(separator);\n return style === \"label\" || style === \"matrix\" ? separator + joinedValues : joinedValues;\n};\n\n// src/generated/core/utils.gen.ts\nvar PATH_PARAM_RE = /\\{[^{}]+\\}/g;\nvar defaultPathSerializer = ({ path, url: _url }) => {\n let url = _url;\n const matches = _url.match(PATH_PARAM_RE);\n if (matches) {\n for (const match of matches) {\n let explode = false;\n let name = match.substring(1, match.length - 1);\n let style = \"simple\";\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n if (name.startsWith(\".\")) {\n name = name.substring(1);\n style = \"label\";\n } else if (name.startsWith(\";\")) {\n name = name.substring(1);\n style = \"matrix\";\n }\n const value = path[name];\n if (value === void 0 || value === null) {\n continue;\n }\n if (Array.isArray(value)) {\n url = url.replace(\n match,\n serializeArrayParam({ explode, name, style, value })\n );\n continue;\n }\n if (typeof value === \"object\") {\n url = url.replace(\n match,\n serializeObjectParam({\n explode,\n name,\n style,\n value,\n valueOnly: true\n })\n );\n continue;\n }\n if (style === \"matrix\") {\n url = url.replace(\n match,\n `;${serializePrimitiveParam({\n name,\n value\n })}`\n );\n continue;\n }\n const replaceValue = encodeURIComponent(\n style === \"label\" ? `.${value}` : value\n );\n url = url.replace(match, replaceValue);\n }\n }\n return url;\n};\nvar getUrl = ({\n baseUrl,\n path,\n query,\n querySerializer,\n url: _url\n}) => {\n const pathUrl = _url.startsWith(\"/\") ? _url : `/${_url}`;\n let url = (baseUrl ?? \"\") + pathUrl;\n if (path) {\n url = defaultPathSerializer({ path, url });\n }\n let search = query ? querySerializer(query) : \"\";\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n url += `?${search}`;\n }\n return url;\n};\nfunction getValidRequestBody(options) {\n const hasBody = options.body !== void 0;\n const isSerializedBody = hasBody && options.bodySerializer;\n if (isSerializedBody) {\n if (\"serializedBody\" in options) {\n const hasSerializedBody = options.serializedBody !== void 0 && options.serializedBody !== \"\";\n return hasSerializedBody ? options.serializedBody : null;\n }\n return options.body !== \"\" ? options.body : null;\n }\n if (hasBody) {\n return options.body;\n }\n return void 0;\n}\n\n// src/generated/core/auth.gen.ts\nvar getAuthToken = async (auth, callback) => {\n const token = typeof callback === \"function\" ? await callback(auth) : callback;\n if (!token) {\n return;\n }\n if (auth.scheme === \"bearer\") {\n return `Bearer ${token}`;\n }\n if (auth.scheme === \"basic\") {\n return `Basic ${btoa(token)}`;\n }\n return token;\n};\n\n// src/generated/client/utils.gen.ts\nvar createQuerySerializer = ({\n parameters = {},\n ...args\n} = {}) => {\n const querySerializer = (queryParams) => {\n const search = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const name in queryParams) {\n const value = queryParams[name];\n if (value === void 0 || value === null) {\n continue;\n }\n const options = parameters[name] || args;\n if (Array.isArray(value)) {\n const serializedArray = serializeArrayParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: \"form\",\n value,\n ...options.array\n });\n if (serializedArray) search.push(serializedArray);\n } else if (typeof value === \"object\") {\n const serializedObject = serializeObjectParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: \"deepObject\",\n value,\n ...options.object\n });\n if (serializedObject) search.push(serializedObject);\n } else {\n const serializedPrimitive = serializePrimitiveParam({\n allowReserved: options.allowReserved,\n name,\n value\n });\n if (serializedPrimitive) search.push(serializedPrimitive);\n }\n }\n }\n return search.join(\"&\");\n };\n return querySerializer;\n};\nvar getParseAs = (contentType) => {\n if (!contentType) {\n return \"stream\";\n }\n const cleanContent = contentType.split(\";\")[0]?.trim();\n if (!cleanContent) {\n return;\n }\n if (cleanContent.startsWith(\"application/json\") || cleanContent.endsWith(\"+json\")) {\n return \"json\";\n }\n if (cleanContent === \"multipart/form-data\") {\n return \"formData\";\n }\n if ([\"application/\", \"audio/\", \"image/\", \"video/\"].some(\n (type) => cleanContent.startsWith(type)\n )) {\n return \"blob\";\n }\n if (cleanContent.startsWith(\"text/\")) {\n return \"text\";\n }\n return;\n};\nvar checkForExistence = (options, name) => {\n if (!name) {\n return false;\n }\n if (options.headers.has(name) || options.query?.[name] || options.headers.get(\"Cookie\")?.includes(`${name}=`)) {\n return true;\n }\n return false;\n};\nvar setAuthParams = async ({\n security,\n ...options\n}) => {\n for (const auth of security) {\n if (checkForExistence(options, auth.name)) {\n continue;\n }\n const token = await getAuthToken(auth, options.auth);\n if (!token) {\n continue;\n }\n const name = auth.name ?? \"Authorization\";\n switch (auth.in) {\n case \"query\":\n if (!options.query) {\n options.query = {};\n }\n options.query[name] = token;\n break;\n case \"cookie\":\n options.headers.append(\"Cookie\", `${name}=${token}`);\n break;\n case \"header\":\n default:\n options.headers.set(name, token);\n break;\n }\n }\n};\nvar buildUrl = (options) => getUrl({\n baseUrl: options.baseUrl,\n path: options.path,\n query: options.query,\n querySerializer: typeof options.querySerializer === \"function\" ? options.querySerializer : createQuerySerializer(options.querySerializer),\n url: options.url\n});\nvar mergeConfigs = (a, b) => {\n const config = { ...a, ...b };\n if (config.baseUrl?.endsWith(\"/\")) {\n config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);\n }\n config.headers = mergeHeaders(a.headers, b.headers);\n return config;\n};\nvar headersEntries = (headers) => {\n const entries = [];\n headers.forEach((value, key) => {\n entries.push([key, value]);\n });\n return entries;\n};\nvar mergeHeaders = (...headers) => {\n const mergedHeaders = new Headers();\n for (const header of headers) {\n if (!header) {\n continue;\n }\n const iterator = header instanceof Headers ? headersEntries(header) : Object.entries(header);\n for (const [key, value] of iterator) {\n if (value === null) {\n mergedHeaders.delete(key);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n mergedHeaders.append(key, v);\n }\n } else if (value !== void 0) {\n mergedHeaders.set(\n key,\n typeof value === \"object\" ? JSON.stringify(value) : value\n );\n }\n }\n }\n return mergedHeaders;\n};\nvar Interceptors = class {\n fns = [];\n clear() {\n this.fns = [];\n }\n eject(id) {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = null;\n }\n }\n exists(id) {\n const index = this.getInterceptorIndex(id);\n return Boolean(this.fns[index]);\n }\n getInterceptorIndex(id) {\n if (typeof id === \"number\") {\n return this.fns[id] ? id : -1;\n }\n return this.fns.indexOf(id);\n }\n update(id, fn) {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = fn;\n return id;\n }\n return false;\n }\n use(fn) {\n this.fns.push(fn);\n return this.fns.length - 1;\n }\n};\nvar createInterceptors = () => ({\n error: new Interceptors(),\n request: new Interceptors(),\n response: new Interceptors()\n});\nvar defaultQuerySerializer = createQuerySerializer({\n allowReserved: false,\n array: {\n explode: true,\n style: \"form\"\n },\n object: {\n explode: true,\n style: \"deepObject\"\n }\n});\nvar defaultHeaders = {\n \"Content-Type\": \"application/json\"\n};\nvar createConfig = (override = {}) => ({\n ...jsonBodySerializer,\n headers: defaultHeaders,\n parseAs: \"auto\",\n querySerializer: defaultQuerySerializer,\n ...override\n});\n\n// src/generated/client/client.gen.ts\nvar createClient = (config = {}) => {\n let _config = mergeConfigs(createConfig(), config);\n const getConfig = () => ({ ..._config });\n const setConfig = (config2) => {\n _config = mergeConfigs(_config, config2);\n return getConfig();\n };\n const interceptors = createInterceptors();\n const beforeRequest = async (options) => {\n const opts = {\n ..._config,\n ...options,\n fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,\n headers: mergeHeaders(_config.headers, options.headers),\n serializedBody: void 0\n };\n if (opts.security) {\n await setAuthParams({\n ...opts,\n security: opts.security\n });\n }\n if (opts.requestValidator) {\n await opts.requestValidator(opts);\n }\n if (opts.body !== void 0 && opts.bodySerializer) {\n opts.serializedBody = opts.bodySerializer(opts.body);\n }\n if (opts.body === void 0 || opts.serializedBody === \"\") {\n opts.headers.delete(\"Content-Type\");\n }\n const url = buildUrl(opts);\n return { opts, url };\n };\n const request = async (options) => {\n const { opts, url } = await beforeRequest(options);\n const requestInit = {\n redirect: \"follow\",\n ...opts,\n body: getValidRequestBody(opts)\n };\n let request2 = new Request(url, requestInit);\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request2 = await fn(request2, opts);\n }\n }\n const _fetch = opts.fetch;\n let response;\n try {\n response = await _fetch(request2);\n } catch (error2) {\n let finalError2 = error2;\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError2 = await fn(\n error2,\n void 0,\n request2,\n opts\n );\n }\n }\n finalError2 = finalError2 || {};\n if (opts.throwOnError) {\n throw finalError2;\n }\n return opts.responseStyle === \"data\" ? void 0 : {\n error: finalError2,\n request: request2,\n response: void 0\n };\n }\n for (const fn of interceptors.response.fns) {\n if (fn) {\n response = await fn(response, request2, opts);\n }\n }\n const result = {\n request: request2,\n response\n };\n if (response.ok) {\n const parseAs = (opts.parseAs === \"auto\" ? getParseAs(response.headers.get(\"Content-Type\")) : opts.parseAs) ?? \"json\";\n if (response.status === 204 || response.headers.get(\"Content-Length\") === \"0\") {\n let emptyData;\n switch (parseAs) {\n case \"arrayBuffer\":\n case \"blob\":\n case \"text\":\n emptyData = await response[parseAs]();\n break;\n case \"formData\":\n emptyData = new FormData();\n break;\n case \"stream\":\n emptyData = response.body;\n break;\n case \"json\":\n default:\n emptyData = {};\n break;\n }\n return opts.responseStyle === \"data\" ? emptyData : {\n data: emptyData,\n ...result\n };\n }\n let data;\n switch (parseAs) {\n case \"arrayBuffer\":\n case \"blob\":\n case \"formData\":\n case \"json\":\n case \"text\":\n data = await response[parseAs]();\n break;\n case \"stream\":\n return opts.responseStyle === \"data\" ? response.body : {\n data: response.body,\n ...result\n };\n }\n if (parseAs === \"json\") {\n if (opts.responseValidator) {\n await opts.responseValidator(data);\n }\n if (opts.responseTransformer) {\n data = await opts.responseTransformer(data);\n }\n }\n return opts.responseStyle === \"data\" ? data : {\n data,\n ...result\n };\n }\n const textError = await response.text();\n let jsonError;\n try {\n jsonError = JSON.parse(textError);\n } catch {\n }\n const error = jsonError ?? textError;\n let finalError = error;\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = await fn(error, response, request2, opts);\n }\n }\n finalError = finalError || {};\n if (opts.throwOnError) {\n throw finalError;\n }\n return opts.responseStyle === \"data\" ? void 0 : {\n error: finalError,\n ...result\n };\n };\n const makeMethodFn = (method) => (options) => request({ ...options, method });\n const makeSseFn = (method) => async (options) => {\n const { opts, url } = await beforeRequest(options);\n return createSseClient({\n ...opts,\n body: opts.body,\n headers: opts.headers,\n method,\n onRequest: async (url2, init) => {\n let request2 = new Request(url2, init);\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request2 = await fn(request2, opts);\n }\n }\n return request2;\n },\n url\n });\n };\n return {\n buildUrl,\n connect: makeMethodFn(\"CONNECT\"),\n delete: makeMethodFn(\"DELETE\"),\n get: makeMethodFn(\"GET\"),\n getConfig,\n head: makeMethodFn(\"HEAD\"),\n interceptors,\n options: makeMethodFn(\"OPTIONS\"),\n patch: makeMethodFn(\"PATCH\"),\n post: makeMethodFn(\"POST\"),\n put: makeMethodFn(\"PUT\"),\n request,\n setConfig,\n sse: {\n connect: makeSseFn(\"CONNECT\"),\n delete: makeSseFn(\"DELETE\"),\n get: makeSseFn(\"GET\"),\n head: makeSseFn(\"HEAD\"),\n options: makeSseFn(\"OPTIONS\"),\n patch: makeSseFn(\"PATCH\"),\n post: makeSseFn(\"POST\"),\n put: makeSseFn(\"PUT\"),\n trace: makeSseFn(\"TRACE\")\n },\n trace: makeMethodFn(\"TRACE\")\n };\n};\n\n// src/generated/client.gen.ts\nvar client = createClient(createConfig({\n baseUrl: \"https://api.stably.ai\"\n}));\n\n// src/generated/sdk.gen.ts\nvar postV1TestSuiteByTestSuiteIdRun = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/v1/testSuite/{testSuiteId}/run\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar getV1TestSuiteRunByTestSuiteRunIdStatus = (options) => {\n return (options.client ?? client).get({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/v1/testSuiteRun/{testSuiteRunId}/status\",\n ...options\n });\n};\nvar getV1TestSuiteRunByTestSuiteRunIdResult = (options) => {\n return (options.client ?? client).get({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/v1/testSuiteRun/{testSuiteRunId}/result\",\n ...options\n });\n};\nvar postV1TestSuiteRunCancel = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/v1/testSuiteRun/cancel\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar postV1ProjectsByProjectIdRuns = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/v1/projects/{projectId}/runs\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar getV1ProjectsByProjectIdRunsByRunId = (options) => {\n return (options.client ?? client).get({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/v1/projects/{projectId}/runs/{runId}\",\n ...options\n });\n};\nvar postV1ProjectsByProjectIdRunsCancel = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/v1/projects/{projectId}/runs/cancel\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar postV1ProxyApiKey = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/v1/proxy/api-key\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar postInternalV1Extract = (options) => {\n return (options?.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/extract\",\n ...options\n });\n};\nvar postInternalV2Extract = (options) => {\n return (options?.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v2/extract\",\n ...options\n });\n};\nvar postInternalV1Assert = (options) => {\n return (options?.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/assert\",\n ...options\n });\n};\nvar postInternalV2Assert = (options) => {\n return (options?.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v2/assert\",\n ...options\n });\n};\nvar postInternalV2Agent = (options) => {\n return (options?.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v2/agent\",\n ...options\n });\n};\nvar postInternalV3Agent = (options) => {\n return (options?.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v3/agent\",\n ...options\n });\n};\nvar postInternalV3GetAriaRefs = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v3/get-aria-refs\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar postInternalV1CacheDelete = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/cache/delete\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar patchInternalV1PlaywrightRunsByRunIdStatus = (options) => {\n return (options.client ?? client).patch({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/playwright/runs/{runId}/status\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar postInternalV1BillingBrowserMinutes = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/billing/browser-minutes\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar postInternalV1TestAccountGoogleAuthState = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/test-account/google-auth-state\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar getInternalV1CliMe = (options) => {\n return (options?.client ?? client).get({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/cli/me\",\n ...options\n });\n};\nvar getInternalV1CliOrgsByOrgIdProjects = (options) => {\n return (options.client ?? client).get({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/cli/orgs/{orgId}/projects\",\n ...options\n });\n};\nvar postInternalV1CliExchangeToken = (options) => {\n return (options.client ?? client).post({\n url: \"/internal/v1/cli/exchange-token\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar postInternalV1CliProjectsByProjectIdApiKey = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/cli/projects/{projectId}/api-key\",\n ...options\n });\n};\nvar postInternalV1CliPromptsSystem = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/cli/prompts/system\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar postInternalV1CliPromptsSubagents = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/cli/prompts/subagents\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar getInternalV1CliRunsByRunIdAutohealContext = (options) => {\n return (options.client ?? client).get({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/cli/runs/{runId}/autoheal-context\",\n ...options\n });\n};\nvar postInternalV1CliRunsByRunIdAutohealReport = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/cli/runs/{runId}/autoheal-report\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar postInternalV1CliRunsByRunIdAutohealStatus = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/cli/runs/{runId}/autoheal-status\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar postInternalV1CliRunsByRunIdAutohealDiffUploadUrl = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/cli/runs/{runId}/autoheal-diff/upload-url\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar postInternalV1CliRunsByRunIdAutohealTraceUploadUrl = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/cli/runs/{runId}/autoheal-trace/upload-url\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar postInternalV1GitLfsByOwnerByRepoObjectsBatch = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/git-lfs/{owner}/{repo}/objects/batch\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar getInternalV1GitLfsByOwnerByRepoObjectsByOid = (options) => {\n return (options.client ?? client).get({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/git-lfs/{owner}/{repo}/objects/{oid}\",\n ...options\n });\n};\nvar postInternalV1GitLfsByOwnerByRepoObjectsByOidUpload = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/git-lfs/{owner}/{repo}/objects/{oid}/upload\",\n ...options\n });\n};\nvar putInternalV1GitLfsByOwnerByRepoObjectsByOidUpload = (options) => {\n return (options.client ?? client).put({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/git-lfs/{owner}/{repo}/objects/{oid}/upload\",\n ...options\n });\n};\nvar getInternalV1CodegenAgentProjectsByProjectIdClaudeHistoryDownloadUrls = (options) => {\n return (options.client ?? client).get({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/codegen-agent/projects/{projectId}/claude-history/download-urls\",\n ...options\n });\n};\nvar postInternalV1CodegenAgentProjectsByProjectIdClaudeHistoryUploadUrls = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/codegen-agent/projects/{projectId}/claude-history/upload-urls\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar getInternalV1CodegenAgentProjectsByProjectIdRepoCacheDownloadUrl = (options) => {\n return (options.client ?? client).get({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/codegen-agent/projects/{projectId}/repo-cache/download-url\",\n ...options\n });\n};\nvar getInternalV1CodegenAgentProjectsByProjectIdRepoCacheUploadUrl = (options) => {\n return (options.client ?? client).get({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/codegen-agent/projects/{projectId}/repo-cache/upload-url\",\n ...options\n });\n};\nvar postInternalV1CodegenAgentProjectsByProjectIdGithubToken = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/codegen-agent/projects/{projectId}/github-token\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar postInternalV1CodegenAgentBrowserKernelsh = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/codegen-agent/browser/kernelsh\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar deleteInternalV1CodegenAgentBrowserKernelshBySessionId = (options) => {\n return (options.client ?? client).delete({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/codegen-agent/browser/kernelsh/{sessionId}\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar getInternalV1CodegenAgentBrowserKernelshBySessionIdHealth = (options) => {\n return (options.client ?? client).get({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/codegen-agent/browser/kernelsh/{sessionId}/health\",\n ...options\n });\n};\nvar getInternalV1CodegenAgentSessionsByAgentSessionIdInitialMessages = (options) => {\n return (options.client ?? client).get({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/codegen-agent/sessions/{agentSessionId}/initial-messages\",\n ...options\n });\n};\nvar patchInternalV1CodegenAgentSessionsByAgentSessionIdInitialMessages = (options) => {\n return (options.client ?? client).patch({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/codegen-agent/sessions/{agentSessionId}/initial-messages\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar getInternalV1CodegenAgentSessionsByAgentSessionIdV1MigrationBundle = (options) => {\n return (options.client ?? client).get({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/codegen-agent/sessions/{agentSessionId}/v1-migration-bundle\",\n ...options\n });\n};\nvar patchInternalV1CodegenAgentSessionsByAgentSessionIdClaudeSessionId = (options) => {\n return (options.client ?? client).patch({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/codegen-agent/sessions/{agentSessionId}/claude-session-id\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar deleteInternalV1CodegenAgentProjectsByProjectIdClaudeHistoryBySessionId = (options) => {\n return (options.client ?? client).delete({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/codegen-agent/projects/{projectId}/claude-history/{sessionId}\",\n ...options\n });\n};\nvar deleteInternalV1CodegenAgentTasksByTaskIdSessions = (options) => {\n return (options.client ?? client).delete({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/codegen-agent/tasks/{taskId}/sessions\",\n ...options\n });\n};\nvar putInternalV1CodegenAgentProjectsByProjectIdTestSnapshot = (options) => {\n return (options.client ?? client).put({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/codegen-agent/projects/{projectId}/test-snapshot\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar patchInternalV1CodegenAgentProjectsByProjectIdDeploymentAttempt = (options) => {\n return (options.client ?? client).patch({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/codegen-agent/projects/{projectId}/deployment/attempt\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar putInternalV1CodegenAgentProjectsByProjectIdDeployment = (options) => {\n return (options.client ?? client).put({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/codegen-agent/projects/{projectId}/deployment\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar putInternalV1CodegenAgentProjectsByProjectIdSyncSchedulers = (options) => {\n return (options.client ?? client).put({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/codegen-agent/projects/{projectId}/sync-schedulers\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar getInternalV1ProjectsByProjectIdProxyConfig = (options) => {\n return (options.client ?? client).get({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/internal/v1/projects/{projectId}/proxy-config\",\n ...options\n });\n};\nvar getV1ProjectsByProjectIdEmailAddress = (options) => {\n return (options.client ?? client).get({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/v1/projects/{projectId}/email/address\",\n ...options\n });\n};\nvar deleteV1ProjectsByProjectIdEmailInboxesByAddressMessages = (options) => {\n return (options.client ?? client).delete({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/v1/projects/{projectId}/email/inboxes/{address}/messages\",\n ...options\n });\n};\nvar getV1ProjectsByProjectIdEmailInboxesByAddressMessages = (options) => {\n return (options.client ?? client).get({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/v1/projects/{projectId}/email/inboxes/{address}/messages\",\n ...options\n });\n};\nvar deleteV1ProjectsByProjectIdEmailInboxesByAddressMessagesByMessageId = (options) => {\n return (options.client ?? client).delete({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/v1/projects/{projectId}/email/inboxes/{address}/messages/{messageId}\",\n ...options\n });\n};\nvar getV1ProjectsByProjectIdEmailInboxesByAddressMessagesByMessageId = (options) => {\n return (options.client ?? client).get({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/v1/projects/{projectId}/email/inboxes/{address}/messages/{messageId}\",\n ...options\n });\n};\nvar postV1ProjectsByProjectIdEmailInboxesByAddressMessagesByMessageIdExtract = (options) => {\n return (options.client ?? client).post({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\"\n }\n ],\n url: \"/v1/projects/{projectId}/email/inboxes/{address}/messages/{messageId}/extract\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers\n }\n });\n};\nvar getOpenapiJson = (options) => {\n return (options?.client ?? client).get({\n url: \"/openapi.json\",\n ...options\n });\n};\n\nexport { client, createClient, createConfig, deleteInternalV1CodegenAgentBrowserKernelshBySessionId, deleteInternalV1CodegenAgentProjectsByProjectIdClaudeHistoryBySessionId, deleteInternalV1CodegenAgentTasksByTaskIdSessions, deleteV1ProjectsByProjectIdEmailInboxesByAddressMessages, deleteV1ProjectsByProjectIdEmailInboxesByAddressMessagesByMessageId, getInternalV1CliMe, getInternalV1CliOrgsByOrgIdProjects, getInternalV1CliRunsByRunIdAutohealContext, getInternalV1CodegenAgentBrowserKernelshBySessionIdHealth, getInternalV1CodegenAgentProjectsByProjectIdClaudeHistoryDownloadUrls, getInternalV1CodegenAgentProjectsByProjectIdRepoCacheDownloadUrl, getInternalV1CodegenAgentProjectsByProjectIdRepoCacheUploadUrl, getInternalV1CodegenAgentSessionsByAgentSessionIdInitialMessages, getInternalV1CodegenAgentSessionsByAgentSessionIdV1MigrationBundle, getInternalV1GitLfsByOwnerByRepoObjectsByOid, getInternalV1ProjectsByProjectIdProxyConfig, getOpenapiJson, getV1ProjectsByProjectIdEmailAddress, getV1ProjectsByProjectIdEmailInboxesByAddressMessages, getV1ProjectsByProjectIdEmailInboxesByAddressMessagesByMessageId, getV1ProjectsByProjectIdRunsByRunId, getV1TestSuiteRunByTestSuiteRunIdResult, getV1TestSuiteRunByTestSuiteRunIdStatus, patchInternalV1CodegenAgentProjectsByProjectIdDeploymentAttempt, patchInternalV1CodegenAgentSessionsByAgentSessionIdClaudeSessionId, patchInternalV1CodegenAgentSessionsByAgentSessionIdInitialMessages, patchInternalV1PlaywrightRunsByRunIdStatus, postInternalV1Assert, postInternalV1BillingBrowserMinutes, postInternalV1CacheDelete, postInternalV1CliExchangeToken, postInternalV1CliProjectsByProjectIdApiKey, postInternalV1CliPromptsSubagents, postInternalV1CliPromptsSystem, postInternalV1CliRunsByRunIdAutohealDiffUploadUrl, postInternalV1CliRunsByRunIdAutohealReport, postInternalV1CliRunsByRunIdAutohealStatus, postInternalV1CliRunsByRunIdAutohealTraceUploadUrl, postInternalV1CodegenAgentBrowserKernelsh, postInternalV1CodegenAgentProjectsByProjectIdClaudeHistoryUploadUrls, postInternalV1CodegenAgentProjectsByProjectIdGithubToken, postInternalV1Extract, postInternalV1GitLfsByOwnerByRepoObjectsBatch, postInternalV1GitLfsByOwnerByRepoObjectsByOidUpload, postInternalV1TestAccountGoogleAuthState, postInternalV2Agent, postInternalV2Assert, postInternalV2Extract, postInternalV3Agent, postInternalV3GetAriaRefs, postV1ProjectsByProjectIdEmailInboxesByAddressMessagesByMessageIdExtract, postV1ProjectsByProjectIdRuns, postV1ProjectsByProjectIdRunsCancel, postV1ProxyApiKey, postV1TestSuiteByTestSuiteIdRun, postV1TestSuiteRunCancel, putInternalV1CodegenAgentProjectsByProjectIdDeployment, putInternalV1CodegenAgentProjectsByProjectIdSyncSchedulers, putInternalV1CodegenAgentProjectsByProjectIdTestSnapshot, putInternalV1GitLfsByOwnerByRepoObjectsByOidUpload };\n//# sourceMappingURL=index.js.map\n//# sourceMappingURL=index.js.map","import type { BrowserContext } from \"@playwright/test\";\n\nimport {\n createClient,\n postInternalV1TestAccountGoogleAuthState,\n} from \"@stablyai-internal/api-client\";\nimport { requireApiKey } from \"@stablyai/playwright-base\";\n\ndeclare const __PACKAGE_VERSION__: string;\n\ntype PlaywrightCookie = Parameters<BrowserContext[\"addCookies\"]>[0][number];\n\ntype LocalStorageEntry = {\n name: string;\n value: string;\n};\n\ntype StorageOrigin = {\n localStorage: LocalStorageEntry[];\n origin: string;\n};\n\n/**\n * Playwright-compatible storage state.\n */\nexport type GoogleStorageState = {\n cookies: PlaywrightCookie[];\n origins: StorageOrigin[];\n};\n\n/**\n * Input for {@link authWithGoogle}.\n */\nexport type AuthWithGoogleOptions = {\n /**\n * Browser context where auth state should be applied.\n */\n context: BrowserContext;\n /**\n * Google account email.\n */\n email: string;\n /**\n * Google account password.\n */\n password: string;\n /**\n * TOTP seed/secret used to generate the Google 2FA code.\n */\n otpSecret: string;\n /**\n * Force a cache refresh server-side. Defaults to `false`.\n */\n forceRefresh?: boolean;\n /**\n * Optional API key override. Defaults to the configured Stably API key.\n */\n apiKey?: string;\n};\n\nconst getApiUrl = (): string =>\n process.env.STABLY_API_URL ?? \"https://api.stably.ai\";\n\nconst sdkVersion =\n typeof __PACKAGE_VERSION__ !== \"undefined\"\n ? __PACKAGE_VERSION__\n : (process.env.npm_package_version ?? \"local\");\n\nconst assertNonEmptyString = (value: string, fieldName: string): void => {\n if (!value.trim()) {\n throw new Error(`Missing required field: ${fieldName}`);\n }\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nconst parseCookie = (value: unknown): PlaywrightCookie => {\n if (!isRecord(value)) {\n throw new Error(\"Invalid Google storage state: cookie must be an object\");\n }\n\n const { domain } = value;\n const { name } = value;\n const { path } = value;\n const { sameSite } = value;\n const valueText = value.value;\n\n if (\n typeof domain !== \"string\" ||\n typeof name !== \"string\" ||\n typeof path !== \"string\" ||\n typeof valueText !== \"string\"\n ) {\n throw new Error(\n \"Invalid Google storage state: cookie is missing required fields\",\n );\n }\n\n return {\n ...(typeof value.expires === \"number\" ? { expires: value.expires } : {}),\n ...(typeof value.httpOnly === \"boolean\"\n ? { httpOnly: value.httpOnly }\n : {}),\n ...(typeof value.partitionKey === \"string\"\n ? { partitionKey: value.partitionKey }\n : {}),\n ...(typeof value.secure === \"boolean\" ? { secure: value.secure } : {}),\n ...(sameSite === \"Lax\" || sameSite === \"None\" || sameSite === \"Strict\"\n ? { sameSite }\n : {}),\n domain,\n name,\n path,\n value: valueText,\n };\n};\n\nconst parseLocalStorageEntry = (value: unknown): LocalStorageEntry => {\n if (!isRecord(value)) {\n throw new Error(\n \"Invalid Google storage state: localStorage entry must be an object\",\n );\n }\n\n const { name } = value;\n const storedValue = value.value;\n\n if (typeof name !== \"string\" || typeof storedValue !== \"string\") {\n throw new Error(\n \"Invalid Google storage state: localStorage entry must contain string name and value\",\n );\n }\n\n return { name, value: storedValue };\n};\n\nconst parseOrigin = (value: unknown): StorageOrigin => {\n if (!isRecord(value)) {\n throw new Error(\"Invalid Google storage state: origin must be an object\");\n }\n\n const { origin } = value;\n const rawLocalStorage = value.localStorage;\n\n if (typeof origin !== \"string\") {\n throw new Error(\"Invalid Google storage state: origin must be a string\");\n }\n\n if (!Array.isArray(rawLocalStorage)) {\n return { localStorage: [], origin };\n }\n\n return {\n localStorage: rawLocalStorage.map(parseLocalStorageEntry),\n origin,\n };\n};\n\nconst parseStorageState = (value: {\n cookies?: unknown[];\n origins?: unknown[];\n}): GoogleStorageState => ({\n cookies: Array.isArray(value.cookies) ? value.cookies.map(parseCookie) : [],\n origins: Array.isArray(value.origins) ? value.origins.map(parseOrigin) : [],\n});\n\nconst applyStorageStateToContext = async (\n context: BrowserContext,\n storageState: GoogleStorageState,\n): Promise<void> => {\n if (storageState.cookies.length > 0) {\n await context.addCookies(storageState.cookies);\n }\n\n for (const originState of storageState.origins) {\n if (originState.localStorage.length === 0) {\n continue;\n }\n\n const page = await context.newPage();\n try {\n await page.goto(originState.origin, { waitUntil: \"domcontentloaded\" });\n await page.evaluate((entries: LocalStorageEntry[]) => {\n for (const entry of entries) {\n window.localStorage.setItem(entry.name, entry.value);\n }\n }, originState.localStorage);\n } finally {\n await page.close();\n }\n }\n};\n\n/**\n * Signs in a Google test account and applies the authenticated session to a Playwright context.\n *\n * Use this when your test needs to start in an already-authenticated state without\n * manually driving the login UI. After this resolves, cookies and localStorage are\n * applied to the provided context and subsequent pages in that context can continue\n * as an authenticated user.\n *\n * @param options - Google credentials and target Playwright context.\n * @param options.context - Browser context to receive the authenticated session.\n * @param options.email - Google account email.\n * @param options.password - Google account password.\n * @param options.otpSecret - TOTP secret for 2FA. See https://docs.stably.ai/stably2/auth/google-otp-secret-helper.\n * @param options.forceRefresh - Optional flag to force regeneration of session state.\n * @param options.apiKey - Optional Stably API key override.\n *\n * @returns Resolves when auth state has been successfully applied to the context.\n *\n * @example\n * ```ts\n * import { test } from \"@stablyai/playwright-test\";\n *\n * test(\"opens Google settings as authenticated user\", async ({ context, page }) => {\n * await context.authWithGoogle({\n * email: \"qa@example.com\",\n * password: process.env.GOOGLE_TEST_PASSWORD!,\n * otpSecret: process.env.GOOGLE_TEST_OTP_SECRET!,\n * });\n *\n * await page.goto(\"https://myaccount.google.com\");\n * });\n * ```\n */\nexport async function authWithGoogle(\n options: AuthWithGoogleOptions,\n): Promise<void> {\n const apiKey = options.apiKey ?? requireApiKey();\n\n assertNonEmptyString(options.email, \"email\");\n assertNonEmptyString(options.password, \"password\");\n assertNonEmptyString(options.otpSecret, \"otpSecret\");\n\n const client = createClient({\n baseUrl: getApiUrl(),\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"X-Client-Name\": \"stably-playwright-test\",\n \"X-Client-Version\": sdkVersion,\n \"X-Stably-SDK-Version\": sdkVersion,\n },\n });\n\n const response = await postInternalV1TestAccountGoogleAuthState({\n body: {\n email: options.email,\n forceRefresh: options.forceRefresh,\n otpSecret: options.otpSecret,\n password: options.password,\n },\n client,\n });\n\n if (response.error) {\n const errorMessage =\n \"error\" in response.error ? response.error.error : \"Unknown error\";\n throw new Error(`Failed to authenticate with Google: ${errorMessage}`);\n }\n\n const storageState = parseStorageState(response.data.storageState);\n await applyStorageStateToContext(options.context, storageState);\n}\n","import { dirname } from \"path\";\nimport { fileURLToPath } from \"url\";\n\nimport type { BrowserContext } from \"@playwright/test\";\nimport {\n defineConfig as playwrightDefineConfig,\n expect as playwrightExpect,\n test as playwrightTest,\n} from \"@playwright/test\";\nimport \"@stablyai/playwright-base\";\n\nimport type { Agent } from \"@stablyai/playwright-base\";\nimport {\n augmentBrowser,\n augmentBrowserContext,\n augmentPage,\n stablyPlaywrightMatchers,\n} from \"@stablyai/playwright-base\";\n\nimport type { StablyNotificationConfig } from \"@stablyai/playwright-reporter\";\nimport {\n authWithGoogle,\n type AuthWithGoogleOptions,\n type GoogleStorageState,\n} from \"./auth-with-google\";\n\nexport { stablyReporter } from \"@stablyai/playwright-reporter\";\nexport type {\n StablyReporterOptions,\n ProjectNotificationConfig,\n NotificationResultPolicy,\n StablyEmailNotificationConfig,\n StablySlackNotificationConfig,\n StablyNotificationConfig,\n} from \"@stablyai/playwright-reporter\";\nexport { Agent, setApiKey } from \"@stablyai/playwright-base\";\nexport { authWithGoogle, type AuthWithGoogleOptions, type GoogleStorageState };\nexport type {\n AIModel,\n GetLocatorsByAIOptions,\n GetLocatorsByAIResult,\n ScreenshotPromptOptions,\n} from \"@stablyai/playwright-base\";\n\n/**\n * Get the directory name from an import.meta.url.\n * This is the ESM equivalent of __dirname.\n *\n * @example\n * ```ts\n * import { getDirname } from '@stablyai/playwright-test';\n * const __dirname = getDirname(import.meta.url);\n *\n * // Use in tests for file paths\n * await page.setInputFiles('input', path.join(__dirname, 'fixtures', 'file.pdf'));\n * ```\n */\nexport function getDirname(importMetaUrl: string): string {\n return dirname(fileURLToPath(importMetaUrl));\n}\n\n/**\n * Get the filename from an import.meta.url.\n * This is the ESM equivalent of __filename.\n *\n * @example\n * ```ts\n * import { getFilename } from '@stablyai/playwright-test';\n * const __filename = getFilename(import.meta.url);\n * ```\n */\nexport function getFilename(importMetaUrl: string): string {\n return fileURLToPath(importMetaUrl);\n}\n\nexport const test: typeof playwrightTest = playwrightTest.extend<{\n agent: Agent;\n}>({\n agent: async (\n { context }: { context: BrowserContext },\n use: (agent: Agent) => Promise<void>,\n ) => {\n // Create a default agent from the default context\n const agent = context.newAgent();\n await use(agent);\n },\n browser: async ({ browser }, use) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await use(augmentBrowser(browser as any) as any);\n },\n context: async ({ context }, use) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-type-assertion -- context augmentation requires type widening\n const augmentedContext = augmentBrowserContext(context as any) as any;\n if (!(\"authWithGoogle\" in augmentedContext)) {\n augmentedContext.authWithGoogle = (\n options: Omit<AuthWithGoogleOptions, \"context\">,\n ) => authWithGoogle({ context: augmentedContext, ...options });\n }\n\n await use(augmentedContext);\n },\n page: async ({ page }, use) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await use(augmentPage(page as any) as any);\n },\n});\n\nexport const expect = playwrightExpect.extend(stablyPlaywrightMatchers);\n\nexport * from \"@playwright/test\";\n\nexport type StablyProjectConfig = {\n notifications?: StablyNotificationConfig;\n};\n\n/**\n * Stably-enhanced defineConfig with typed support for stably notification configuration in projects.\n * The `stably` property on projects is available via module augmentation of `@playwright/test`.\n *\n * @example\n * ```ts\n * import { defineConfig, stablyReporter } from \"@stablyai/playwright-test\";\n *\n * export default defineConfig({\n * reporter: [stablyReporter({ apiKey: \"...\" })],\n * projects: [\n * {\n * name: \"smoke\",\n * stably: {\n * notifications: {\n * slack: { channelName: \"#alerts\", notifyOnResult: \"failures-only\" },\n * },\n * },\n * },\n * ],\n * });\n * ```\n */\nexport const defineConfig = playwrightDefineConfig;\n\ndeclare module \"@playwright/test\" {\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n interface LocatorAssertions {\n /**\n * Asserts that the locator satisfies a natural language condition using AI vision.\n *\n * Takes a screenshot of the locator and uses AI to verify whether the specified condition is met.\n *\n * @param condition - A natural language description of what should be true about the locator\n * @param options - Optional screenshot options (e.g., timeout)\n *\n * @example\n * ```typescript\n * await expect(page.locator('.button')).aiAssert('The button is disabled and grayed out');\n * ```\n */\n aiAssert(\n condition: string,\n // eslint-disable-next-line @typescript-eslint/consistent-type-imports\n options?: import(\"@stablyai/playwright-base\").ScreenshotPromptOptions,\n ): Promise<void>;\n\n /**\n * @deprecated Use `aiAssert` instead. This method will be removed in a future version.\n */\n toMatchScreenshotPrompt(\n condition: string,\n // eslint-disable-next-line @typescript-eslint/consistent-type-imports\n options?: import(\"@stablyai/playwright-base\").ScreenshotPromptOptions,\n ): Promise<void>;\n }\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n interface PageAssertions {\n /**\n * Asserts that the page satisfies a natural language condition using AI vision.\n *\n * Takes a screenshot of the page and uses AI to verify whether the specified condition is met.\n *\n * @param condition - A natural language description of what should be true about the page\n * @param options - Optional screenshot options (e.g., fullPage, timeout)\n *\n * @example\n * ```typescript\n * await expect(page).aiAssert('The page shows a success message after form submission');\n * ```\n */\n aiAssert(\n condition: string,\n // eslint-disable-next-line @typescript-eslint/consistent-type-imports\n options?: import(\"@stablyai/playwright-base\").ScreenshotPromptOptions,\n ): Promise<void>;\n\n /**\n * @deprecated Use `aiAssert` instead. This method will be removed in a future version.\n */\n toMatchScreenshotPrompt(\n condition: string,\n // eslint-disable-next-line @typescript-eslint/consistent-type-imports\n options?: import(\"@stablyai/playwright-base\").ScreenshotPromptOptions,\n ): Promise<void>;\n }\n\n // Add agent fixture to test args\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n interface PlaywrightTestArgs {\n agent: Agent;\n }\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n interface BrowserContext {\n /**\n * Generates and applies Google auth state to this context.\n *\n * Calls Stably's Google auth-state endpoint and proactively sets cookies and\n * localStorage values on this context.\n */\n authWithGoogle(\n options: Omit<AuthWithGoogleOptions, \"context\">,\n ): Promise<void>;\n }\n\n // Add stably config to project configuration\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n interface Project {\n stably?: StablyProjectConfig;\n }\n}\n"],"names":["requireApiKey","dirname","fileURLToPath","playwrightTest","augmentBrowser","augmentBrowserContext","augmentPage","playwrightExpect","stablyPlaywrightMatchers","playwrightDefineConfig"],"mappings":"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","x_google_ignoreList":[0]}
|