@intuned/runtime-dev 1.3.18-interface.8 → 1.3.18-interface.9
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/dist/{chunk-XC75QGFG.mjs → chunk-3AGSY4RT.mjs} +5 -3
- package/dist/{chunk-XC75QGFG.mjs.map → chunk-3AGSY4RT.mjs.map} +1 -1
- package/dist/chunk-BF45RZ32.mjs +13 -0
- package/dist/chunk-BF45RZ32.mjs.map +1 -0
- package/dist/{chunk-B3T6RXPC.mjs → chunk-UO2E7T7T.mjs} +17 -24
- package/dist/chunk-UO2E7T7T.mjs.map +1 -0
- package/dist/commands/common/tsNodeImport.d.mts +5 -0
- package/dist/commands/common/tsNodeImport.d.ts +5 -0
- package/dist/commands/common/tsNodeImport.js +83 -0
- package/dist/commands/common/tsNodeImport.js.map +1 -0
- package/dist/commands/common/tsNodeImport.mjs +45 -0
- package/dist/commands/common/tsNodeImport.mjs.map +1 -0
- package/dist/commands/interface/run.mjs +3 -2
- package/dist/commands/interface/run.mjs.map +1 -1
- package/dist/common/runApi/index.mjs +3 -2
- package/dist/index.mjs +2 -1
- package/dist/runtime/index.mjs +2 -1
- package/package.json +1 -1
- package/dist/chunk-B3T6RXPC.mjs.map +0 -1
|
@@ -2,13 +2,15 @@ import {
|
|
|
2
2
|
buildExtensionsList,
|
|
3
3
|
cleanIntunedExtensionServer,
|
|
4
4
|
getDownloadDirectoryPath,
|
|
5
|
-
getFullPathInProject,
|
|
6
5
|
getIntunedExtensionWorker,
|
|
7
6
|
isIntunedExtensionEnabled,
|
|
8
7
|
isIntunedExtensionLoaded,
|
|
9
8
|
setupIntunedExtension,
|
|
10
9
|
setupIntunedExtensionServer
|
|
11
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-UO2E7T7T.mjs";
|
|
11
|
+
import {
|
|
12
|
+
getFullPathInProject
|
|
13
|
+
} from "./chunk-BF45RZ32.mjs";
|
|
12
14
|
import {
|
|
13
15
|
getExecutionContext
|
|
14
16
|
} from "./chunk-W4UX6G4X.mjs";
|
|
@@ -1103,4 +1105,4 @@ export {
|
|
|
1103
1105
|
runApi,
|
|
1104
1106
|
checkAuthSessionWithRetries
|
|
1105
1107
|
};
|
|
1106
|
-
//# sourceMappingURL=chunk-
|
|
1108
|
+
//# sourceMappingURL=chunk-3AGSY4RT.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../packages/runtime-interface/src/errors.ts","../../packages/runtime-interface/src/types.ts","../../packages/runtime-interface/src/interfaceClient.ts","../../packages/runtime-interface/src/index.ts","../src/common/runApi/index.ts","../src/common/playwrightContext.ts","../src/common/setupContextHook.ts","../src/common/runApi/importUsingImportFunction.ts","../src/common/launchBrowser.ts"],"sourcesContent":["// import { RunError } from \"../../runtime\";\n// import { RunErrorOptions } from \"../../runtime/export\";\n\nexport const apiNotFoundErrorCode = \"APINotFoundError\";\nexport const invalidApiErrorCode = \"InvalidAPIError\";\nexport const invalidCheckErrorCode = \"InvalidCheckError\";\nexport const abortedErrorCode = \"AbortedError\";\nexport const authRequiredErrorCode = \"AuthRequiredError\";\nexport const authCheckNotFoundErrorCode = \"AuthCheckNotFoundError\";\nexport const authCheckFailedErrorCode = \"AuthCheckFailedError\";\nexport const maxLevelsExceededErrorCode = \"MaxLevelsExceededError\";\nexport const automationError = \"AutomationError\";\nexport const internalInvalidInputErrorCode = \"InternalInvalidInputError\";\nexport const resultTooBigErrorCode = \"ResultTooBigError\";\n\nexport const runAutomationErrorCodes = [\n apiNotFoundErrorCode,\n invalidApiErrorCode,\n invalidCheckErrorCode,\n abortedErrorCode,\n authRequiredErrorCode,\n authCheckNotFoundErrorCode,\n authCheckFailedErrorCode,\n maxLevelsExceededErrorCode,\n automationError,\n internalInvalidInputErrorCode,\n resultTooBigErrorCode,\n] as const;\n\nexport type RunAutomationErrorCode = (typeof runAutomationErrorCodes)[number];\n\nexport type RunAutomationErrorJSON = {\n code: RunAutomationErrorCode;\n details?: any;\n cause?: RunAutomationErrorJSON;\n [key: string]: any;\n};\n\nexport abstract class RunAutomationError<T = any> {\n cause?: RunAutomationError;\n details?: T;\n\n constructor(public code: RunAutomationErrorCode, public message: string) {}\n\n get json(): RunAutomationErrorJSON {\n return {\n code: this.code,\n details: this.details,\n cause: this.cause?.json,\n };\n }\n}\n\nexport class ApiNotFoundError extends RunAutomationError {\n constructor(apiName: string) {\n super(apiNotFoundErrorCode, `API ${apiName} not found`);\n }\n}\n\nexport class InvalidApiError extends RunAutomationError {\n constructor(message: string) {\n super(invalidApiErrorCode, `API is invalid: ${message}`);\n\n this.details = {\n message,\n };\n }\n}\n\nexport class InvalidCheckError extends RunAutomationError {\n constructor(message: string, cause?: RunAutomationError) {\n super(invalidCheckErrorCode, message);\n this.cause = cause;\n }\n}\n\nexport class AbortedError extends RunAutomationError {\n constructor() {\n super(abortedErrorCode, \"Operation was aborted\");\n }\n}\n\nexport class AuthRequiredError extends RunAutomationError {\n constructor() {\n super(authRequiredErrorCode, \"AuthSessions are required\");\n }\n}\n\nexport class AuthCheckNotFoundError extends RunAutomationError {\n constructor() {\n super(authCheckNotFoundErrorCode, \"AuthSession check not found\");\n }\n}\n\nexport class AuthCheckFailedError extends RunAutomationError {\n constructor() {\n super(authCheckFailedErrorCode, \"AuthSession check failed\");\n }\n}\n\nexport class MaxLevelsExceededError extends RunAutomationError<{\n levels: number;\n}> {\n constructor(levels: number) {\n super(\n maxLevelsExceededErrorCode,\n `Max levels exceeded. Only ${levels} levels are supported`\n );\n this.details = { levels };\n }\n}\n\nexport class AutomationError extends RunAutomationError<{\n name?: string;\n message?: string;\n statusCode?: number;\n errorCode?: string;\n}> {\n error: any;\n\n constructor(error: any) {\n super(automationError, `[${error?.name ?? error}] ${error?.message}`);\n this.details = {\n ...error,\n };\n }\n}\n\nexport class InternalInvalidInputError extends RunAutomationError {\n constructor(message: string, details?: any) {\n super(internalInvalidInputErrorCode, message);\n this.details = details;\n }\n}\n\nexport class ResultTooBigError extends RunAutomationError<{\n sizeInBytes: number;\n maxSizeInBytes: number;\n}> {\n constructor(sizeInBytes: number, maxSizeInBytes: number) {\n super(\n resultTooBigErrorCode,\n `Automation result is too big. Size: ${\n Math.round((sizeInBytes / 1024 / 1024) * 100) / 100\n }MB, Max allowed: ${\n Math.round((maxSizeInBytes / 1024 / 1024) * 100) / 100\n }MB`\n );\n this.details = { sizeInBytes, maxSizeInBytes };\n }\n}\n","import type { Result } from \"neverthrow\";\nimport type { RunAutomationError } from \"./errors\";\nimport z from \"zod\";\n\nexport type Payload = {\n api: string;\n parameters: any;\n};\nexport interface PayloadToAppend {\n apiName: string;\n parameters: Record<string, any>;\n}\n\nexport interface RunAutomationSuccessResult {\n result: any;\n status: number;\n payloadToAppend: PayloadToAppend[] | null;\n session?: RunApiStorageState;\n}\n\nexport interface RunAutomationErrorResult {\n error: string;\n message: string;\n status?: number;\n details?: any;\n [key: string]: any;\n}\n\nexport type RunAutomationResult =\n | RunAutomationSuccessResult\n | RunAutomationErrorResult;\n\nexport interface RunAutomationResponse {\n status: number;\n body: RunAutomationResult;\n}\n\nexport const runApiStorageStateSchema = z.object({\n cookies: z.array(\n z.object({\n name: z.string(),\n value: z.string(),\n domain: z.string(),\n path: z.string(),\n expires: z.number(),\n httpOnly: z.boolean(),\n secure: z.boolean(),\n sameSite: z.enum([\"Strict\", \"Lax\", \"None\"]),\n })\n ),\n origins: z.array(\n z.object({\n origin: z.string(),\n localStorage: z.array(\n z.object({\n name: z.string(),\n value: z.string(),\n })\n ),\n })\n ),\n sessionStorage: z\n .array(\n z.object({\n origin: z.string(),\n sessionStorage: z.array(\n z.object({\n name: z.string(),\n value: z.string(),\n })\n ),\n })\n )\n .optional(),\n});\n\nexport type RunApiStorageState = z.input<typeof runApiStorageStateSchema>;\n\nexport const runApiSessionSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"file\"),\n path: z.string(),\n }),\n z.object({\n type: z.literal(\"state\"),\n state: runApiStorageStateSchema.nullable().optional(),\n }),\n]);\n\nexport const runApiAutomationFunctionSchema = z.object({\n name: z.string(),\n params: z.any().optional(),\n});\n\nexport type RunApiAutomationFunction = z.infer<\n typeof runApiAutomationFunctionSchema\n>;\n\nexport const runApiTracingSchema = z\n .discriminatedUnion(\"enabled\", [\n z.object({ enabled: z.literal(false) }),\n z.object({ enabled: z.literal(true), filePath: z.string() }),\n ])\n .optional()\n .default({ enabled: false });\n\nexport type RunApiTracing = z.infer<typeof runApiTracingSchema>;\n\nexport const runApiAuthSchema = z\n .object({\n session: runApiSessionSchema,\n parameters: z.record(z.any()).optional(),\n })\n .optional();\n\nexport type RunApiAuth = z.infer<typeof runApiAuthSchema>;\n\nexport const runApiStandaloneRunOptionsSchema = z.object({\n environment: z.literal(\"standalone\"),\n headless: z.boolean().default(true),\n proxy: z\n .object({\n server: z.string(),\n username: z.string(),\n password: z.string(),\n })\n .optional(),\n});\n\nexport type RunApiStandaloneRunOptions = z.infer<\n typeof runApiStandaloneRunOptionsSchema\n>;\n\nexport const runApiCdpRunOptionsSchema = z.object({\n environment: z.literal(\"cdp\"),\n cdpAddress: z.string(),\n cdpTargetId: z.string().optional(),\n});\n\nexport type RunApiCdpRunOptions = z.infer<typeof runApiCdpRunOptionsSchema>;\n\nexport const runApiRunOptionsSchema = z\n .discriminatedUnion(\"environment\", [\n runApiStandaloneRunOptionsSchema,\n runApiCdpRunOptionsSchema,\n ])\n .default({ environment: \"standalone\", headless: true });\n\nexport type RunApiRunOptions = z.infer<typeof runApiRunOptionsSchema>;\n\nexport const runApiParametersSchema = z.object({\n automationFunction: runApiAutomationFunctionSchema,\n tracing: runApiTracingSchema,\n auth: runApiAuthSchema,\n runOptions: runApiRunOptionsSchema,\n retrieveSession: z.boolean().default(false),\n});\n\nexport type RunApiSession = z.infer<typeof runApiSessionSchema>;\n\nexport type RunApiParameters = z.input<typeof runApiParametersSchema>;\n\nexport type ImportFunctionError =\n | {\n type: \"not_found\";\n }\n | {\n type: \"other\";\n error: any;\n };\n\nexport type ImportFunction = (\n name: string\n) => Promise<Result<any, ImportFunctionError>>;\n\nexport type ExtendedRunApiParameters = RunApiParameters & {\n abortSignal?: AbortSignal;\n importFunction: ImportFunction;\n};\n\nexport function runApiResultOkSchema<R extends any>(\n resultSchema: z.ZodType<R>\n) {\n return z.object({\n result: resultSchema,\n extendedPayloads: z\n .array(\n z.object({\n api: z.string(),\n parameters: z.record(z.any()),\n })\n )\n .optional(),\n });\n}\n\nexport type RunApiResultOk<R = any> = {\n result: R;\n extendedPayloads: Payload[] | undefined;\n};\n\nexport function runApiResultWithSessionOkSchema<R extends any>(\n resultSchema: z.ZodType<R>\n) {\n return runApiResultOkSchema(resultSchema).extend({\n session: runApiStorageStateSchema,\n });\n}\n\nexport type RunApiResultWithSessionOk<R = any> = RunApiResultOk<R> & {\n session: RunApiStorageState;\n};\n\nexport type RunApiResult<\n R = any,\n FullResult extends RunApiResultOk<R> = RunApiResultOk<R>\n> = Result<FullResult, RunAutomationError>;\n\n// incoming messages\n\nexport const startRunApiParametersSchema = runApiParametersSchema.extend({\n retrieveSession: z.boolean(),\n functionsToken: z.string().optional(),\n context: z\n .object({\n jobId: z.string().optional(),\n jobRunId: z.string().optional(),\n runId: z.string().optional(),\n queueId: z.string().optional(),\n authSessionId: z.string().optional(),\n })\n .optional(),\n});\n\nexport type StartRunApiParameters = z.infer<typeof startRunApiParametersSchema>;\n\nexport const startRunApiSchema = z.object({\n type: z.literal(\"start\"),\n parameters: startRunApiParametersSchema,\n});\n\nexport type StartRunApiMessage = z.infer<typeof startRunApiSchema>;\n\nexport const abortRunApiSchema = z.object({\n type: z.literal(\"abort\"),\n parameters: z.object({}).optional(),\n});\n\nexport type AbortRunApiMessage = z.infer<typeof abortRunApiSchema>;\n\nexport const tokenUpdateSchema = z.object({\n type: z.literal(\"tokenUpdate\"),\n parameters: z.object({\n functionsToken: z.string(),\n }),\n});\n\nexport type TokenUpdateMessage = z.infer<typeof tokenUpdateSchema>;\n\nexport const pingSchema = z.object({\n type: z.literal(\"ping\"),\n parameters: z.object({}).optional(),\n});\n\nexport type PingMessage = z.infer<typeof pingSchema>;\n\nexport const runApiInputSchema = z.union([\n startRunApiSchema,\n abortRunApiSchema,\n tokenUpdateSchema,\n pingSchema,\n]);\n\nexport type RunApiInputMessage = z.infer<typeof runApiInputSchema>;\n\n// outgoing messages\n\nexport const extendMessageSchema = z.object({ type: z.literal(\"extend\") });\n\nexport type ExtendMessage = z.infer<typeof extendMessageSchema>;\n\nexport const doneMessageSchema = z.object({\n type: z.literal(\"done\"),\n result: z.any(),\n success: z.boolean(),\n});\n\nexport type DoneMessage = z.infer<typeof doneMessageSchema>;\n\nexport const pongMessageSchema = z.object({\n type: z.literal(\"pong\"),\n});\n\nexport type PongMessage = z.infer<typeof pongMessageSchema>;\n\nexport const outputRunApiSchema = z.union([\n extendMessageSchema,\n doneMessageSchema,\n pongMessageSchema,\n]);\n\nexport type RunApiOutputMessage = z.infer<typeof outputRunApiSchema>;\n","import * as net from \"net\";\nimport * as fs from \"fs-extra\";\nimport { createInterface } from \"readline\";\nimport { setTimeout } from \"timers/promises\";\n\nexport interface InterfaceClient {\n sendJSON(data: any): void;\n receiveJSON(): AsyncGenerator<any, void, unknown>;\n close(): void;\n get closed(): boolean;\n}\n\nexport class SocketClient implements InterfaceClient {\n static readonly LENGTH_HEADER_LENGTH = 4;\n protected readonly socket: net.Socket;\n\n constructor(socket: net.Socket) {\n this.socket = socket;\n }\n\n sendJSON(data: any) {\n const dataToSend = JSON.stringify(data);\n // calculate length\n const length = Buffer.byteLength(dataToSend);\n // create buffer\n const buffer = Buffer.alloc(SocketClient.LENGTH_HEADER_LENGTH + length);\n\n // write length in big endian\n buffer.writeUInt32BE(length, 0);\n // write data\n buffer.write(dataToSend, SocketClient.LENGTH_HEADER_LENGTH);\n\n this.socket.write(buffer);\n }\n\n async *receiveJSON() {\n let buffer = Buffer.alloc(0);\n const endPromise = new Promise<void>((resolve, reject) => {\n this.socket.once(\"end\", () => {\n resolve();\n });\n this.socket.once(\"error\", reject);\n });\n\n while (true) {\n const chunk = await Promise.race([\n new Promise<Buffer>((resolve) =>\n this.socket.once(\"data\", (data) => {\n if(typeof data === \"string\") {\n return resolve(Buffer.from(data));\n }\n resolve(data);\n })\n ),\n endPromise,\n ]);\n\n if (!(chunk instanceof Buffer)) {\n break;\n }\n\n buffer = Buffer.concat([buffer, chunk]);\n\n const length = buffer.readUInt32BE(0);\n if (buffer.length < length + SocketClient.LENGTH_HEADER_LENGTH) {\n continue;\n }\n\n const data = buffer.subarray(\n SocketClient.LENGTH_HEADER_LENGTH,\n length + SocketClient.LENGTH_HEADER_LENGTH\n );\n buffer = buffer.subarray(length + SocketClient.LENGTH_HEADER_LENGTH);\n\n yield JSON.parse(data.toString());\n }\n }\n\n async close() {\n this.socket.end();\n\n await Promise.race([\n new Promise((resolve) => this.socket.once(\"close\", resolve)),\n new Promise((resolve) => this.socket.once(\"error\", resolve)),\n setTimeout(3000),\n ]);\n }\n\n get closed(): boolean {\n return this.socket.closed;\n }\n}\n\nexport class UnixSocketClient extends SocketClient {\n constructor(path: string) {\n super(net.createConnection(path));\n }\n}\n\nexport class TCPSocketClient extends SocketClient {\n constructor(host: string, port: number) {\n super(net.createConnection(port, host));\n }\n}\n\nexport class JSONLFileClient implements InterfaceClient {\n private readonly fileStream: fs.ReadStream;\n constructor(filePath: string) {\n this.fileStream = fs.createReadStream(filePath, { encoding: \"utf-8\" });\n }\n\n sendJSON(data: any) {\n console.log(\"Sending message\", data);\n }\n\n async *receiveJSON() {\n const rl = createInterface({\n input: this.fileStream,\n crlfDelay: Infinity,\n });\n\n for await (const line of rl) {\n if (line.trim() === \"\") {\n continue;\n }\n yield JSON.parse(line);\n }\n }\n\n async close() {\n this.fileStream.close();\n\n await Promise.race([\n new Promise((resolve) => this.fileStream.once(\"close\", resolve)),\n new Promise((resolve) => this.fileStream.once(\"error\", resolve)),\n setTimeout(3000),\n ]);\n }\n\n get closed(): boolean {\n return this.fileStream.closed;\n }\n}\n","export * from \"./errors\";\nexport * from \"./types\";\nexport * from \"./interfaceClient\";","import { getDownloadDirectoryPath } from \"../../runtime/downloadDirectory\";\nimport { getExecutionContext } from \"../asyncLocalStorage\";\nimport * as fs from \"fs-extra\";\nimport { remove } from \"fs-extra\";\nimport { ok, err, Result } from \"neverthrow\";\nimport type { Page, BrowserContext } from \"playwright\";\nimport { AUTH_SESSIONS_FOLDER_NAME } from \"../constants\";\nimport {\n browserScriptsFile,\n loadSessionToContext,\n withPlaywrightContext,\n WithPlaywrightContextWrappedFunction,\n} from \"../playwrightContext\";\nimport { formatZodError } from \"../formatZodError\";\nimport { cleanEnvironmentVariables } from \"../cleanEnvironmentVariables\";\nimport { importUsingImportFunction } from \"./importUsingImportFunction\";\nimport {\n ExtendedRunApiParameters,\n runApiParametersSchema,\n RunApiResult,\n RunApiResultOk,\n RunApiResultWithSessionOk,\n AbortedError,\n AuthRequiredError,\n AutomationError,\n InternalInvalidInputError,\n ResultTooBigError,\n RunAutomationError,\n} from \"@intuned/runtime-interface\";\nimport { getStorageState } from \"../contextStorageStateHelpers\";\n\n// Helper function to calculate the approximate size of an object in bytes\nfunction getObjectSizeInBytes(obj: any): number {\n try {\n return new TextEncoder().encode(JSON.stringify(obj)).length;\n } catch (error) {\n // If JSON.stringify fails (e.g., circular references), return a conservative estimate\n return new TextEncoder().encode(String(obj)).length;\n }\n}\n\nexport async function runApi<ResultType = any>(\n input: ExtendedRunApiParameters & {\n retrieveSession: true;\n }\n): Promise<RunApiResult<ResultType, RunApiResultWithSessionOk<ResultType>>>;\nexport async function runApi<ResultType = any>(\n input: ExtendedRunApiParameters\n): Promise<RunApiResult<ResultType>>;\nexport async function runApi<ResultType = any>({\n abortSignal,\n importFunction,\n retrieveSession = false,\n ...input\n}: ExtendedRunApiParameters): Promise<\n | RunApiResult<ResultType>\n | RunApiResult<ResultType, RunApiResultWithSessionOk<ResultType>>\n> {\n let traceStarted = false;\n const inputParseResult = runApiParametersSchema.safeParse(input);\n if (!inputParseResult.success) {\n return err(\n new InternalInvalidInputError(\n \"Input validation failed\",\n formatZodError(inputParseResult.error)\n )\n );\n }\n const {\n automationFunction: { name, params },\n runOptions,\n tracing,\n auth,\n } = inputParseResult.data;\n\n const abortSymbol = Symbol(\"abort\");\n\n const abortPromise = new Promise<typeof abortSymbol>((resolve) => {\n if (!abortSignal) return;\n abortSignal.addEventListener(\"abort\", () => {\n resolve(abortSymbol);\n });\n });\n\n async function runAutomation() {\n const validatedModuleResult = await importUsingImportFunction<ResultType>({\n path: name,\n importFunction,\n });\n if (validatedModuleResult.isErr()) {\n return err(validatedModuleResult.error);\n }\n\n const automationFunction = validatedModuleResult.value;\n\n if (auth && auth.session.type === \"state\") {\n const state = auth.session.state;\n if (state === undefined || state === null) {\n return err(new AuthRequiredError());\n }\n }\n\n const playwrightContextParameters = {\n apiName: name,\n apiParameters: params,\n importFunction,\n };\n\n const intunedContext = getExecutionContext();\n\n const runAutomationWithContext: WithPlaywrightContextWrappedFunction<\n RunApiResultOk<ResultType> | RunApiResultWithSessionOk<ResultType>\n > = async (context, page) => {\n async function saveTraceIfNeeded({\n errorMessage,\n }: {\n errorMessage: string;\n }) {\n if (!tracing.enabled || !traceStarted) {\n return;\n }\n try {\n await context?.tracing.stop({ path: tracing.filePath });\n } catch (error: any) {\n console.log(errorMessage, error?.message);\n await remove(tracing.filePath);\n }\n }\n\n if (auth) {\n await loadSessionToContext({\n context,\n session: auth.session,\n });\n if (intunedContext && auth.parameters) {\n intunedContext.getAuthSessionParameters = async () =>\n auth.parameters!;\n }\n }\n\n const scriptContent = await fs.readFile(browserScriptsFile, \"utf-8\");\n await context.addInitScript({\n content: scriptContent,\n });\n\n for (const page of context.pages()) {\n await page.evaluate(scriptContent);\n }\n\n if (tracing.enabled) {\n await context.tracing.start({\n screenshots: true,\n snapshots: true,\n sources: true,\n });\n traceStarted = true;\n }\n\n cleanEnvironmentVariables();\n\n const automationFunctionParameters = [\n ...(params !== undefined ? [params] : []),\n page,\n context,\n ];\n\n try {\n const [automationFunctionResult] = await Promise.all([\n automationFunction(...automationFunctionParameters),\n ]);\n const MAX_RESULT_SIZE_BYTES = 2 * 1024 * 1024; // 2MB\n const resultSizeInBytes = getObjectSizeInBytes(\n automationFunctionResult\n );\n if (resultSizeInBytes > MAX_RESULT_SIZE_BYTES) {\n return err(\n new ResultTooBigError(resultSizeInBytes, MAX_RESULT_SIZE_BYTES)\n );\n }\n\n if (retrieveSession) {\n return ok({\n result: automationFunctionResult as ResultType,\n extendedPayloads: intunedContext?.extendedPayloads,\n session: await getStorageState(context),\n });\n }\n return ok({\n result: automationFunctionResult as ResultType,\n extendedPayloads: intunedContext?.extendedPayloads,\n });\n } catch (error) {\n return err(new AutomationError(error));\n } finally {\n await saveTraceIfNeeded({ errorMessage: \"failed to save trace\" });\n }\n };\n\n if (intunedContext?.store) {\n intunedContext.store = {};\n }\n\n if (runOptions.environment === \"standalone\") {\n const downloadsPath = getDownloadDirectoryPath();\n try {\n return await withPlaywrightContext(\n {\n headless: runOptions.headless,\n proxy: runOptions.proxy,\n downloadsPath,\n ...playwrightContextParameters,\n },\n runAutomationWithContext\n );\n } finally {\n await fs.remove(downloadsPath);\n }\n } else {\n return await withPlaywrightContext(\n {\n cdpAddress: runOptions.cdpAddress,\n cdpTargetId: runOptions.cdpTargetId,\n ...playwrightContextParameters,\n },\n runAutomationWithContext\n );\n }\n }\n\n const result = await Promise.race([await runAutomation(), abortPromise]);\n\n if (result === abortSymbol) {\n return err(new AbortedError());\n }\n\n return result;\n}\n\nexport async function checkAuthSessionWithRetries(\n page: Page,\n context: BrowserContext,\n checkFn: (..._: any) => Promise<boolean>,\n retries = 3\n): Promise<Result<boolean, RunAutomationError>> {\n if (retries === 0) {\n return ok(false);\n }\n\n let tryNumber = 0;\n\n console.log(\n \"Checking AuthSession with retries\",\n `${AUTH_SESSIONS_FOLDER_NAME}/check`\n );\n\n while (retries > tryNumber) {\n const result = await checkFn(page, context);\n if (result) return ok(true);\n\n tryNumber++;\n }\n\n return ok(false);\n}\n","import type * as playwright from \"playwright\";\nimport { setStorageState } from \"./contextStorageStateHelpers\";\nimport path from \"path\";\nimport * as fs from \"fs-extra\";\nimport { getFullPathInProject } from \"../commands/common/utils/fileUtils\";\nimport { err, Err, ok, Ok } from \"neverthrow\";\nimport { SetupContextHook, loadSetupContextHook } from \"./setupContextHook\";\nimport { getPort } from \"portfinder\";\nimport {\n getLocalCdpAddress,\n launchBrowser,\n type Proxy,\n getCdpWebSocketUrl,\n} from \"./launchBrowser\";\nimport {\n RunApiStorageState,\n ImportFunction,\n AutomationError,\n RunAutomationError,\n RunApiSession,\n} from \"@intuned/runtime-interface\";\n\nexport const browserScriptsFile = path.join(\n __dirname,\n \"./assets/browser_scripts.js\"\n);\n\ntype WithPlaywrightContextParameters =\n | {\n importFunction: ImportFunction;\n apiName: string;\n apiParameters: any;\n }\n | {\n importFunction?: undefined;\n apiName?: undefined;\n apiParameters?: undefined;\n };\n\ntype WithPlaywrightContextWrappedFunctionReturn<R> =\n | Ok<R, any>\n | Err<any, RunAutomationError>;\n\nexport type WithPlaywrightContextWrappedFunction<R> = (\n context: playwright.BrowserContext,\n page: playwright.Page\n) => Promise<WithPlaywrightContextWrappedFunctionReturn<R>>;\n\nexport async function withPlaywrightContext<R>(\n options: {\n proxy?: Proxy;\n headless: boolean;\n downloadsPath: string;\n } & WithPlaywrightContextParameters,\n fn: WithPlaywrightContextWrappedFunction<R>\n): Promise<Ok<R, any> | Err<any, RunAutomationError>>;\n\nexport async function withPlaywrightContext<R>(\n options: {\n cdpAddress: string;\n cdpTargetId?: string;\n } & WithPlaywrightContextParameters,\n fn: WithPlaywrightContextWrappedFunction<R>\n): Promise<Ok<R, any> | Err<any, RunAutomationError>>;\n\nexport async function withPlaywrightContext<R>(\n {\n cdpAddress,\n cdpTargetId,\n proxy,\n headless = true,\n downloadsPath,\n importFunction,\n apiName,\n apiParameters,\n }: {\n cdpAddress?: string;\n cdpTargetId?: string;\n proxy?: Proxy;\n headless?: boolean;\n downloadsPath?: string;\n } & WithPlaywrightContextParameters,\n fn: WithPlaywrightContextWrappedFunction<R>\n): Promise<Ok<R, any> | Err<any, RunAutomationError>> {\n let context: playwright.BrowserContext | undefined;\n let page: playwright.Page;\n\n try {\n const setupContextHookResult = importFunction\n ? await loadSetupContextHook({\n importFunction,\n })\n : ok(null);\n if (setupContextHookResult.isErr()) {\n return setupContextHookResult;\n }\n const setupContextHook = setupContextHookResult.value;\n\n if (setupContextHook === null) {\n if (cdpAddress !== undefined) {\n ({ page, context } = await launchBrowser({ cdpAddress, cdpTargetId }));\n } else {\n ({ page, context } = await launchBrowser({\n proxy,\n headless,\n downloadsPath,\n }));\n }\n return await fn(context, page);\n }\n\n let hookCdpUrl: string | null = null;\n if (cdpAddress) {\n hookCdpUrl = cdpAddress;\n ({ context, page } = await launchBrowser({ cdpAddress, cdpTargetId }));\n } else {\n const port = await getPort({\n port: 9222,\n });\n ({ context, page } = await launchBrowser({\n proxy,\n headless,\n downloadsPath,\n cdpPort: port,\n }));\n\n hookCdpUrl = getLocalCdpAddress(port);\n }\n\n let hookResult: Awaited<ReturnType<SetupContextHook>>;\n try {\n const wsUrlResult = await getCdpWebSocketUrl(hookCdpUrl);\n if (wsUrlResult.isOk()) {\n hookCdpUrl = wsUrlResult.value;\n } else {\n throw new Error(wsUrlResult.error);\n }\n hookResult = await setupContextHook({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n apiName: apiName!,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n apiParameters: apiParameters!,\n cdpUrl: hookCdpUrl,\n });\n } catch (error) {\n return err(new AutomationError(error));\n }\n if (!hookResult) {\n return await fn(context, page);\n }\n const { page: newPage, context: newContext, cleanup } = hookResult;\n\n let result:\n | {\n return: WithPlaywrightContextWrappedFunctionReturn<R>;\n }\n | {\n throw: Error;\n };\n\n try {\n result = { return: await fn(newContext, newPage ?? page) };\n } catch (e) {\n result = { throw: e };\n }\n try {\n await cleanup?.();\n } catch (e) {\n result = { return: err(new AutomationError(e)) };\n }\n\n if (\"throw\" in result) {\n throw result.throw;\n }\n return result.return;\n } finally {\n await context?.close();\n }\n}\n\nexport async function loadSessionToContext({\n context,\n session,\n}: {\n context: playwright.BrowserContext;\n session: RunApiSession;\n}) {\n let sessionToLoad: RunApiStorageState;\n if (session.type === \"state\") {\n const state = session.state;\n if (state === undefined || state === null) {\n return;\n }\n sessionToLoad = state;\n } else {\n const fullPath = getFullPathInProject(session.path);\n sessionToLoad = await fs.readJson(fullPath);\n }\n\n await setStorageState(context, sessionToLoad);\n}\n","import type * as playwright from \"playwright\";\nimport { ok, type Err, type Ok } from \"neverthrow\";\nimport { importUsingImportFunction } from \"./runApi/importUsingImportFunction\";\nimport {\n ImportFunction,\n ApiNotFoundError,\n type RunAutomationError,\n} from \"@intuned/runtime-interface\";\n\nexport type InitializeContextHookOptions = {\n apiName: string;\n apiParameters: any;\n cdpUrl: string;\n};\n\nexport type SetupContextHook = (\n options: InitializeContextHookOptions\n) => Promise<{\n page: playwright.Page | null;\n context: playwright.BrowserContext;\n cleanup?: () => Promise<void>;\n} | null>;\n\nconst setupContextHookPath = \"hooks/setupContext\";\n\nexport async function loadSetupContextHook({\n importFunction,\n}: {\n importFunction: ImportFunction;\n}): Promise<Ok<SetupContextHook | null, any> | Err<any, RunAutomationError>> {\n const importedFunctionResult = await importUsingImportFunction({\n path: setupContextHookPath,\n importFunction,\n });\n if (\n importedFunctionResult.isErr() &&\n importedFunctionResult.error instanceof ApiNotFoundError\n ) {\n return ok(null);\n }\n return importedFunctionResult;\n}\n","import { ok, err, Result } from \"neverthrow\";\nimport {\n ImportFunction,\n ApiNotFoundError,\n AutomationError,\n InvalidApiError,\n RunAutomationError,\n} from \"@intuned/runtime-interface\";\n\nexport async function importUsingImportFunction<_ReturnType = any>({\n path,\n allowGenerators = true,\n importFunction,\n}: {\n path: string;\n importFunction: ImportFunction;\n allowGenerators?: boolean;\n}): Promise<Result<(..._: any) => Promise<_ReturnType>, RunAutomationError>> {\n try {\n const importedResult = await importFunction(path);\n if (importedResult.isErr()) {\n if (importedResult.error.type === \"not_found\") {\n return err(new ApiNotFoundError(path));\n }\n return err(new AutomationError(importedResult.error.error));\n }\n const imported = importedResult.value;\n if (!imported || !imported.default || !imported.default.constructor) {\n return err(new InvalidApiError(`${path} does not have a default export`));\n }\n if (imported.default.constructor.name === \"AsyncGeneratorFunction\") {\n if (!allowGenerators) {\n return err(\n new InvalidApiError(\n `${path} default export must be an async function`\n )\n );\n }\n return ok(async (...args) => {\n const generator = imported.default(\n ...args\n ) as AsyncGenerator<_ReturnType>;\n const result = await generator.next();\n if (!result.done) {\n throw new Error(\"Yield is not supported\");\n }\n return result.value;\n });\n }\n if (imported.default.constructor.name === \"AsyncFunction\") {\n return ok(imported.default);\n }\n return err(\n new InvalidApiError(`${path} default export must be an async function`)\n );\n } catch (error: any) {\n return err(new AutomationError(error));\n }\n}\n","import * as playwright from \"playwright\";\nimport { mkdir, mkdtemp, rm, writeFile } from \"fs-extra\";\nimport { join } from \"path\";\nimport * as fs from \"fs-extra\";\nimport waitOn from \"wait-on\";\nimport { exec } from \"child_process\";\nimport {\n buildExtensionsList,\n getIntunedExtensionWorker,\n isIntunedExtensionEnabled,\n isIntunedExtensionLoaded,\n setupIntunedExtension,\n} from \"./extension/extensionsHelpers\";\nimport {\n cleanIntunedExtensionServer,\n setupIntunedExtensionServer,\n} from \"./extension/intunedExtensionServer\";\nimport { promisify } from \"util\";\nimport { Result, err, ok } from \"neverthrow\";\nimport { z } from \"zod\";\n\nconst execAsync = promisify(exec);\n\nexport interface Proxy {\n server: string;\n username: string;\n password: string;\n}\n\nasync function createUserDirWithPreferences() {\n const playwrightTempDir = await mkdtemp(\"/tmp/pw-\");\n const userDir = join(playwrightTempDir, \"userdir\");\n const defaultDir = join(userDir, \"Default\");\n await mkdir(defaultDir, {\n recursive: true,\n });\n const preferences = {\n plugins: {\n always_open_pdf_externally: true,\n },\n };\n await writeFile(join(defaultDir, \"Preferences\"), JSON.stringify(preferences));\n\n return userDir;\n}\n\nexport type LaunchBrowserResult = {\n page: playwright.Page;\n context: playwright.BrowserContext;\n};\n\nexport type LaunchChromiumStandaloneOptions = {\n proxy?: Proxy;\n headless: boolean;\n downloadsPath?: string;\n cdpPort?: number;\n appModeInitialUrl?: string;\n executablePath?: string;\n};\n\nexport type LaunchChromiumCdpOptions = {\n cdpAddress: string;\n cdpTargetId?: string;\n};\n\nexport async function launchChromium(\n options: LaunchChromiumStandaloneOptions\n): Promise<LaunchBrowserResult>;\n\nexport async function launchChromium(\n options: LaunchChromiumCdpOptions\n): Promise<LaunchBrowserResult>;\n\nexport async function launchChromium(\n options: LaunchChromiumStandaloneOptions | LaunchChromiumCdpOptions\n): Promise<LaunchBrowserResult> {\n if (\"cdpAddress\" in options) {\n if (await isIntunedExtensionEnabled()) {\n await setupIntunedExtensionServer();\n }\n\n const browser = await playwright.chromium.connectOverCDP(\n options.cdpAddress\n );\n if (browser.contexts().length === 0) {\n throw new Error(\"No browser contexts found in the connected browser\");\n }\n const context = browser.contexts()[0];\n let page = context.pages().at(0) ?? (await context.newPage());\n const targetId = options.cdpTargetId;\n if (targetId) {\n for (const p of context.pages()) {\n let cdp: playwright.CDPSession | null = null;\n try {\n cdp = await context.newCDPSession(p);\n const result = await cdp.send(\"Target.getTargetInfo\");\n if (result.targetInfo.targetId === targetId) {\n page = p;\n break;\n }\n } catch (error) {\n } finally {\n await cdp?.detach();\n }\n }\n }\n\n return { page, context };\n }\n const { headless, appModeInitialUrl, cdpPort, proxy, downloadsPath } =\n options;\n\n let { executablePath } = options;\n\n const defaultArgsToIgnore: string[] = [\n \"--disable-extensions\",\n \"--disable-component-extensions-with-background-pages\",\n \"--disable-background-networking\",\n \"--disable-backgrounding-occluded-windows\",\n \"--disable-background-timer-throttling\",\n ];\n const extraArgs: string[] = [];\n\n const userDataDir = await createUserDirWithPreferences();\n\n if (isIntunedExtensionLoaded()) {\n const extensionsList = buildExtensionsList();\n const extensions = extensionsList.join(\",\");\n extraArgs.push(`--disable-extensions-except=${extensions}`);\n extraArgs.push(`--load-extension=${extensions}`);\n }\n\n if (await isIntunedExtensionEnabled()) {\n await setupIntunedExtension();\n if (proxy) {\n extraArgs.push('--proxy-bypass-list=\"<-loopback>\"'); // This is added to bypass proxy for localhost traffic because some proxy providers block localhost traffic, and localhost traffic doesn't need proxying\n }\n }\n\n if (cdpPort) {\n extraArgs.push(`--remote-debugging-port=${cdpPort}`);\n }\n if (headless) {\n defaultArgsToIgnore.push(\"--headless=old\");\n extraArgs.push(\"--headless=new\");\n }\n\n if (appModeInitialUrl) {\n extraArgs.push(`--app=${appModeInitialUrl}`);\n }\n\n if (executablePath) {\n executablePath = await fs.realpath(executablePath);\n if (!(await fs.exists(executablePath))) {\n console.log(\n `Warning: Executable path ${executablePath} does not exist. Falling back to default.`\n );\n executablePath = undefined;\n }\n }\n\n const viewport = null;\n const userAgent =\n process.env.__PLAYWRIGHT_USER_AGENT_OVERRIDE ??\n (await getHeadlessUserAgent({\n executablePath,\n }));\n\n const context = await playwright.chromium.launchPersistentContext(\n userDataDir,\n {\n userAgent,\n executablePath,\n headless,\n viewport,\n proxy,\n downloadsPath,\n args: extraArgs,\n ignoreDefaultArgs: defaultArgsToIgnore,\n }\n );\n\n context.once(\"close\", async () => {\n try {\n await rm(userDataDir, {\n recursive: true,\n force: true,\n retryDelay: 1000,\n maxRetries: 5,\n });\n if (await isIntunedExtensionEnabled()) {\n await cleanIntunedExtensionServer();\n }\n } catch (error) {\n console.error(\"Failed to remove user data dir\", error);\n }\n });\n\n if (cdpPort) {\n const createdCdpAddress = getLocalCdpAddress(cdpPort);\n await waitOnCdpAddress(createdCdpAddress);\n }\n\n const page = context.pages().at(0) ?? (await context.newPage());\n\n if (await isIntunedExtensionEnabled()) {\n await getIntunedExtensionWorker(context);\n }\n\n return {\n page,\n context,\n };\n}\n\nexport async function getBrowserExecutablePath(): Promise<string | undefined> {\n const browserType = getBrowserType();\n if (browserType === \"brave\") {\n return await getBraveExecutablePath();\n }\n}\n\nexport async function launchBrowser(\n options:\n | Omit<LaunchChromiumStandaloneOptions, \"executablePath\">\n | LaunchChromiumCdpOptions\n): Promise<LaunchBrowserResult> {\n if (\"cdpAddress\" in options) {\n return launchChromium(options);\n }\n\n return launchChromium({\n ...options,\n executablePath: await getBrowserExecutablePath(),\n });\n}\n\nfunction getBrowserType() {\n if (process.env.BROWSER_TYPE === \"brave\") {\n return \"brave\";\n }\n return \"chromium\";\n}\n\nasync function getBraveExecutablePath() {\n const { stdout } = await execAsync(\"which brave-browser-stable\");\n const bravePath = stdout.trim();\n if (bravePath.length === 0) {\n throw new Error(\"Brave browser not found\");\n }\n return bravePath;\n}\n\nexport function getLocalCdpAddress(port: number): string {\n return `http://localhost:${port}`;\n}\n\nexport async function getCdpWebSocketUrl(\n cdpAddress: string\n): Promise<Result<string, string>> {\n let response: Response;\n try {\n response = await fetch(`${cdpAddress}/json/version`);\n } catch (error) {\n return err(\n `Failed to fetch CDP version from ${cdpAddress}: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n if (!response.ok) {\n return err(\n `Failed to get CDP WebSocket URL from ${cdpAddress}: ${response.status} ${response.statusText}`\n );\n }\n let data: any;\n try {\n data = await response.json();\n } catch (error) {\n return err(\n `Invalid CDP version response from ${cdpAddress}: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n const cdpJsonVersionResponseSchema = z.object({\n webSocketDebuggerUrl: z.string().url(),\n });\n const parseResult = cdpJsonVersionResponseSchema.safeParse(data);\n if (!parseResult.success) {\n return err(\n `Invalid CDP version response from ${cdpAddress}: ${JSON.stringify(\n parseResult.error.format()\n )}`\n );\n }\n return ok(parseResult.data.webSocketDebuggerUrl);\n}\n\nasync function waitOnCdpAddress(cdpAddress: string) {\n const cdpAddressWithoutProtocol = cdpAddress\n .replace(\"http://\", \"\")\n .replace(\"https://\", \"\")\n .replace(\"localhost\", \"127.0.0.1\");\n\n await waitOn({\n resources: [`http-get://${cdpAddressWithoutProtocol}/json/version`],\n delay: 100,\n interval: 100,\n timeout: 5000,\n tcpTimeout: 1000,\n window: 1000,\n });\n}\n\nexport async function getHeadlessUserAgent({\n executablePath,\n args,\n ignoreDefaultArgs,\n}: {\n executablePath?: string;\n args?: string[];\n ignoreDefaultArgs?: string[];\n}) {\n const browser = await playwright.chromium.launch({\n headless: true,\n executablePath,\n args,\n ignoreDefaultArgs,\n });\n const context = await browser.newContext();\n const page = await context.newPage();\n let userAgent = await page.evaluate(() => navigator.userAgent);\n await browser.close();\n if (!userAgent || typeof userAgent !== \"string\") {\n return undefined;\n }\n userAgent = userAgent.replace(\"HeadlessChrome\", \"Chrome\");\n return userAgent;\n}\n"],"mappings":"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","names":["RunAutomationError","ApiNotFoundError","InvalidApiError","AbortedError","AuthRequiredError","AutomationError","InternalInvalidInputError","ResultTooBigError","fs","data","path","fs","remove","ok","err","fs","err","ok","ok","path","import_runtime_interface","ok","err","ok","context","page","import_runtime_interface","ok","err","import_runtime_interface","err","remove","page","ok"]}
|
|
1
|
+
{"version":3,"sources":["../../packages/runtime-interface/src/errors.ts","../../packages/runtime-interface/src/types.ts","../../packages/runtime-interface/src/interfaceClient.ts","../../packages/runtime-interface/src/index.ts","../src/common/runApi/index.ts","../src/common/playwrightContext.ts","../src/common/setupContextHook.ts","../src/common/runApi/importUsingImportFunction.ts","../src/common/launchBrowser.ts"],"sourcesContent":["// import { RunError } from \"../../runtime\";\n// import { RunErrorOptions } from \"../../runtime/export\";\n\nexport const apiNotFoundErrorCode = \"APINotFoundError\";\nexport const invalidApiErrorCode = \"InvalidAPIError\";\nexport const invalidCheckErrorCode = \"InvalidCheckError\";\nexport const abortedErrorCode = \"AbortedError\";\nexport const authRequiredErrorCode = \"AuthRequiredError\";\nexport const authCheckNotFoundErrorCode = \"AuthCheckNotFoundError\";\nexport const authCheckFailedErrorCode = \"AuthCheckFailedError\";\nexport const maxLevelsExceededErrorCode = \"MaxLevelsExceededError\";\nexport const automationError = \"AutomationError\";\nexport const internalInvalidInputErrorCode = \"InternalInvalidInputError\";\nexport const resultTooBigErrorCode = \"ResultTooBigError\";\n\nexport const runAutomationErrorCodes = [\n apiNotFoundErrorCode,\n invalidApiErrorCode,\n invalidCheckErrorCode,\n abortedErrorCode,\n authRequiredErrorCode,\n authCheckNotFoundErrorCode,\n authCheckFailedErrorCode,\n maxLevelsExceededErrorCode,\n automationError,\n internalInvalidInputErrorCode,\n resultTooBigErrorCode,\n] as const;\n\nexport type RunAutomationErrorCode = (typeof runAutomationErrorCodes)[number];\n\nexport type RunAutomationErrorJSON = {\n code: RunAutomationErrorCode;\n details?: any;\n cause?: RunAutomationErrorJSON;\n [key: string]: any;\n};\n\nexport abstract class RunAutomationError<T = any> {\n cause?: RunAutomationError;\n details?: T;\n\n constructor(public code: RunAutomationErrorCode, public message: string) {}\n\n get json(): RunAutomationErrorJSON {\n return {\n code: this.code,\n details: this.details,\n cause: this.cause?.json,\n };\n }\n}\n\nexport class ApiNotFoundError extends RunAutomationError {\n constructor(apiName: string) {\n super(apiNotFoundErrorCode, `API ${apiName} not found`);\n }\n}\n\nexport class InvalidApiError extends RunAutomationError {\n constructor(message: string) {\n super(invalidApiErrorCode, `API is invalid: ${message}`);\n\n this.details = {\n message,\n };\n }\n}\n\nexport class InvalidCheckError extends RunAutomationError {\n constructor(message: string, cause?: RunAutomationError) {\n super(invalidCheckErrorCode, message);\n this.cause = cause;\n }\n}\n\nexport class AbortedError extends RunAutomationError {\n constructor() {\n super(abortedErrorCode, \"Operation was aborted\");\n }\n}\n\nexport class AuthRequiredError extends RunAutomationError {\n constructor() {\n super(authRequiredErrorCode, \"AuthSessions are required\");\n }\n}\n\nexport class AuthCheckNotFoundError extends RunAutomationError {\n constructor() {\n super(authCheckNotFoundErrorCode, \"AuthSession check not found\");\n }\n}\n\nexport class AuthCheckFailedError extends RunAutomationError {\n constructor() {\n super(authCheckFailedErrorCode, \"AuthSession check failed\");\n }\n}\n\nexport class MaxLevelsExceededError extends RunAutomationError<{\n levels: number;\n}> {\n constructor(levels: number) {\n super(\n maxLevelsExceededErrorCode,\n `Max levels exceeded. Only ${levels} levels are supported`\n );\n this.details = { levels };\n }\n}\n\nexport class AutomationError extends RunAutomationError<{\n name?: string;\n message?: string;\n statusCode?: number;\n errorCode?: string;\n}> {\n error: any;\n\n constructor(error: any) {\n super(automationError, `[${error?.name ?? error}] ${error?.message}`);\n this.details = {\n ...error,\n };\n }\n}\n\nexport class InternalInvalidInputError extends RunAutomationError {\n constructor(message: string, details?: any) {\n super(internalInvalidInputErrorCode, message);\n this.details = details;\n }\n}\n\nexport class ResultTooBigError extends RunAutomationError<{\n sizeInBytes: number;\n maxSizeInBytes: number;\n}> {\n constructor(sizeInBytes: number, maxSizeInBytes: number) {\n super(\n resultTooBigErrorCode,\n `Automation result is too big. Size: ${\n Math.round((sizeInBytes / 1024 / 1024) * 100) / 100\n }MB, Max allowed: ${\n Math.round((maxSizeInBytes / 1024 / 1024) * 100) / 100\n }MB`\n );\n this.details = { sizeInBytes, maxSizeInBytes };\n }\n}\n","import type { Result } from \"neverthrow\";\nimport type { RunAutomationError } from \"./errors\";\nimport z from \"zod\";\n\nexport type Payload = {\n api: string;\n parameters: any;\n};\nexport interface PayloadToAppend {\n apiName: string;\n parameters: Record<string, any>;\n}\n\nexport interface RunAutomationSuccessResult {\n result: any;\n status: number;\n payloadToAppend: PayloadToAppend[] | null;\n session?: RunApiStorageState;\n}\n\nexport interface RunAutomationErrorResult {\n error: string;\n message: string;\n status?: number;\n details?: any;\n [key: string]: any;\n}\n\nexport type RunAutomationResult =\n | RunAutomationSuccessResult\n | RunAutomationErrorResult;\n\nexport interface RunAutomationResponse {\n status: number;\n body: RunAutomationResult;\n}\n\nexport const runApiStorageStateSchema = z.object({\n cookies: z.array(\n z.object({\n name: z.string(),\n value: z.string(),\n domain: z.string(),\n path: z.string(),\n expires: z.number(),\n httpOnly: z.boolean(),\n secure: z.boolean(),\n sameSite: z.enum([\"Strict\", \"Lax\", \"None\"]),\n })\n ),\n origins: z.array(\n z.object({\n origin: z.string(),\n localStorage: z.array(\n z.object({\n name: z.string(),\n value: z.string(),\n })\n ),\n })\n ),\n sessionStorage: z\n .array(\n z.object({\n origin: z.string(),\n sessionStorage: z.array(\n z.object({\n name: z.string(),\n value: z.string(),\n })\n ),\n })\n )\n .optional(),\n});\n\nexport type RunApiStorageState = z.input<typeof runApiStorageStateSchema>;\n\nexport const runApiSessionSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"file\"),\n path: z.string(),\n }),\n z.object({\n type: z.literal(\"state\"),\n state: runApiStorageStateSchema.nullable().optional(),\n }),\n]);\n\nexport const runApiAutomationFunctionSchema = z.object({\n name: z.string(),\n params: z.any().optional(),\n});\n\nexport type RunApiAutomationFunction = z.infer<\n typeof runApiAutomationFunctionSchema\n>;\n\nexport const runApiTracingSchema = z\n .discriminatedUnion(\"enabled\", [\n z.object({ enabled: z.literal(false) }),\n z.object({ enabled: z.literal(true), filePath: z.string() }),\n ])\n .optional()\n .default({ enabled: false });\n\nexport type RunApiTracing = z.infer<typeof runApiTracingSchema>;\n\nexport const runApiAuthSchema = z\n .object({\n session: runApiSessionSchema,\n parameters: z.record(z.any()).optional(),\n })\n .optional();\n\nexport type RunApiAuth = z.infer<typeof runApiAuthSchema>;\n\nexport const runApiStandaloneRunOptionsSchema = z.object({\n environment: z.literal(\"standalone\"),\n headless: z.boolean().default(true),\n proxy: z\n .object({\n server: z.string(),\n username: z.string(),\n password: z.string(),\n })\n .optional(),\n});\n\nexport type RunApiStandaloneRunOptions = z.infer<\n typeof runApiStandaloneRunOptionsSchema\n>;\n\nexport const runApiCdpRunOptionsSchema = z.object({\n environment: z.literal(\"cdp\"),\n cdpAddress: z.string(),\n cdpTargetId: z.string().optional(),\n});\n\nexport type RunApiCdpRunOptions = z.infer<typeof runApiCdpRunOptionsSchema>;\n\nexport const runApiRunOptionsSchema = z\n .discriminatedUnion(\"environment\", [\n runApiStandaloneRunOptionsSchema,\n runApiCdpRunOptionsSchema,\n ])\n .default({ environment: \"standalone\", headless: true });\n\nexport type RunApiRunOptions = z.infer<typeof runApiRunOptionsSchema>;\n\nexport const runApiParametersSchema = z.object({\n automationFunction: runApiAutomationFunctionSchema,\n tracing: runApiTracingSchema,\n auth: runApiAuthSchema,\n runOptions: runApiRunOptionsSchema,\n retrieveSession: z.boolean().default(false),\n});\n\nexport type RunApiSession = z.infer<typeof runApiSessionSchema>;\n\nexport type RunApiParameters = z.input<typeof runApiParametersSchema>;\n\nexport type ImportFunctionError =\n | {\n type: \"not_found\";\n }\n | {\n type: \"other\";\n error: any;\n };\n\nexport type ImportFunction = (\n name: string\n) => Promise<Result<any, ImportFunctionError>>;\n\nexport type ExtendedRunApiParameters = RunApiParameters & {\n abortSignal?: AbortSignal;\n importFunction: ImportFunction;\n};\n\nexport function runApiResultOkSchema<R extends any>(\n resultSchema: z.ZodType<R>\n) {\n return z.object({\n result: resultSchema,\n extendedPayloads: z\n .array(\n z.object({\n api: z.string(),\n parameters: z.record(z.any()),\n })\n )\n .optional(),\n });\n}\n\nexport type RunApiResultOk<R = any> = {\n result: R;\n extendedPayloads: Payload[] | undefined;\n};\n\nexport function runApiResultWithSessionOkSchema<R extends any>(\n resultSchema: z.ZodType<R>\n) {\n return runApiResultOkSchema(resultSchema).extend({\n session: runApiStorageStateSchema,\n });\n}\n\nexport type RunApiResultWithSessionOk<R = any> = RunApiResultOk<R> & {\n session: RunApiStorageState;\n};\n\nexport type RunApiResult<\n R = any,\n FullResult extends RunApiResultOk<R> = RunApiResultOk<R>\n> = Result<FullResult, RunAutomationError>;\n\n// incoming messages\n\nexport const startRunApiParametersSchema = runApiParametersSchema.extend({\n retrieveSession: z.boolean(),\n functionsToken: z.string().optional(),\n context: z\n .object({\n jobId: z.string().optional(),\n jobRunId: z.string().optional(),\n runId: z.string().optional(),\n queueId: z.string().optional(),\n authSessionId: z.string().optional(),\n })\n .optional(),\n});\n\nexport type StartRunApiParameters = z.infer<typeof startRunApiParametersSchema>;\n\nexport const startRunApiSchema = z.object({\n type: z.literal(\"start\"),\n parameters: startRunApiParametersSchema,\n});\n\nexport type StartRunApiMessage = z.infer<typeof startRunApiSchema>;\n\nexport const abortRunApiSchema = z.object({\n type: z.literal(\"abort\"),\n parameters: z.object({}).optional(),\n});\n\nexport type AbortRunApiMessage = z.infer<typeof abortRunApiSchema>;\n\nexport const tokenUpdateSchema = z.object({\n type: z.literal(\"tokenUpdate\"),\n parameters: z.object({\n functionsToken: z.string(),\n }),\n});\n\nexport type TokenUpdateMessage = z.infer<typeof tokenUpdateSchema>;\n\nexport const pingSchema = z.object({\n type: z.literal(\"ping\"),\n parameters: z.object({}).optional(),\n});\n\nexport type PingMessage = z.infer<typeof pingSchema>;\n\nexport const runApiInputSchema = z.union([\n startRunApiSchema,\n abortRunApiSchema,\n tokenUpdateSchema,\n pingSchema,\n]);\n\nexport type RunApiInputMessage = z.infer<typeof runApiInputSchema>;\n\n// outgoing messages\n\nexport const extendMessageSchema = z.object({ type: z.literal(\"extend\") });\n\nexport type ExtendMessage = z.infer<typeof extendMessageSchema>;\n\nexport const doneMessageSchema = z.object({\n type: z.literal(\"done\"),\n result: z.any(),\n success: z.boolean(),\n});\n\nexport type DoneMessage = z.infer<typeof doneMessageSchema>;\n\nexport const pongMessageSchema = z.object({\n type: z.literal(\"pong\"),\n});\n\nexport type PongMessage = z.infer<typeof pongMessageSchema>;\n\nexport const outputRunApiSchema = z.union([\n extendMessageSchema,\n doneMessageSchema,\n pongMessageSchema,\n]);\n\nexport type RunApiOutputMessage = z.infer<typeof outputRunApiSchema>;\n","import * as net from \"net\";\nimport * as fs from \"fs-extra\";\nimport { createInterface } from \"readline\";\nimport { setTimeout } from \"timers/promises\";\n\nexport interface InterfaceClient {\n sendJSON(data: any): void;\n receiveJSON(): AsyncGenerator<any, void, unknown>;\n close(): void;\n get closed(): boolean;\n}\n\nexport class SocketClient implements InterfaceClient {\n static readonly LENGTH_HEADER_LENGTH = 4;\n protected readonly socket: net.Socket;\n\n constructor(socket: net.Socket) {\n this.socket = socket;\n }\n\n sendJSON(data: any) {\n const dataToSend = JSON.stringify(data);\n // calculate length\n const length = Buffer.byteLength(dataToSend);\n // create buffer\n const buffer = Buffer.alloc(SocketClient.LENGTH_HEADER_LENGTH + length);\n\n // write length in big endian\n buffer.writeUInt32BE(length, 0);\n // write data\n buffer.write(dataToSend, SocketClient.LENGTH_HEADER_LENGTH);\n\n this.socket.write(buffer);\n }\n\n async *receiveJSON() {\n let buffer = Buffer.alloc(0);\n const endPromise = new Promise<void>((resolve, reject) => {\n this.socket.once(\"end\", () => {\n resolve();\n });\n this.socket.once(\"error\", reject);\n });\n\n while (true) {\n const chunk = await Promise.race([\n new Promise<Buffer>((resolve) =>\n this.socket.once(\"data\", (data) => {\n if(typeof data === \"string\") {\n return resolve(Buffer.from(data));\n }\n resolve(data);\n })\n ),\n endPromise,\n ]);\n\n if (!(chunk instanceof Buffer)) {\n break;\n }\n\n buffer = Buffer.concat([buffer, chunk]);\n\n const length = buffer.readUInt32BE(0);\n if (buffer.length < length + SocketClient.LENGTH_HEADER_LENGTH) {\n continue;\n }\n\n const data = buffer.subarray(\n SocketClient.LENGTH_HEADER_LENGTH,\n length + SocketClient.LENGTH_HEADER_LENGTH\n );\n buffer = buffer.subarray(length + SocketClient.LENGTH_HEADER_LENGTH);\n\n yield JSON.parse(data.toString());\n }\n }\n\n async close() {\n this.socket.end();\n\n await Promise.race([\n new Promise((resolve) => this.socket.once(\"close\", resolve)),\n new Promise((resolve) => this.socket.once(\"error\", resolve)),\n setTimeout(3000),\n ]);\n }\n\n get closed(): boolean {\n return this.socket.closed;\n }\n}\n\nexport class UnixSocketClient extends SocketClient {\n constructor(path: string) {\n super(net.createConnection(path));\n }\n}\n\nexport class TCPSocketClient extends SocketClient {\n constructor(host: string, port: number) {\n super(net.createConnection(port, host));\n }\n}\n\nexport class JSONLFileClient implements InterfaceClient {\n private readonly fileStream: fs.ReadStream;\n constructor(filePath: string) {\n this.fileStream = fs.createReadStream(filePath, { encoding: \"utf-8\" });\n }\n\n sendJSON(data: any) {\n console.log(\"Sending message\", data);\n }\n\n async *receiveJSON() {\n const rl = createInterface({\n input: this.fileStream,\n crlfDelay: Infinity,\n });\n\n for await (const line of rl) {\n if (line.trim() === \"\") {\n continue;\n }\n yield JSON.parse(line);\n }\n }\n\n async close() {\n this.fileStream.close();\n\n await Promise.race([\n new Promise((resolve) => this.fileStream.once(\"close\", resolve)),\n new Promise((resolve) => this.fileStream.once(\"error\", resolve)),\n setTimeout(3000),\n ]);\n }\n\n get closed(): boolean {\n return this.fileStream.closed;\n }\n}\n","export * from \"./errors\";\nexport * from \"./types\";\nexport * from \"./interfaceClient\";","import { getDownloadDirectoryPath } from \"../../runtime/downloadDirectory\";\nimport { getExecutionContext } from \"../asyncLocalStorage\";\nimport * as fs from \"fs-extra\";\nimport { remove } from \"fs-extra\";\nimport { ok, err, Result } from \"neverthrow\";\nimport type { Page, BrowserContext } from \"playwright\";\nimport { AUTH_SESSIONS_FOLDER_NAME } from \"../constants\";\nimport {\n browserScriptsFile,\n loadSessionToContext,\n withPlaywrightContext,\n WithPlaywrightContextWrappedFunction,\n} from \"../playwrightContext\";\nimport { formatZodError } from \"../formatZodError\";\nimport { cleanEnvironmentVariables } from \"../cleanEnvironmentVariables\";\nimport { importUsingImportFunction } from \"./importUsingImportFunction\";\nimport {\n ExtendedRunApiParameters,\n runApiParametersSchema,\n RunApiResult,\n RunApiResultOk,\n RunApiResultWithSessionOk,\n AbortedError,\n AuthRequiredError,\n AutomationError,\n InternalInvalidInputError,\n ResultTooBigError,\n RunAutomationError,\n} from \"@intuned/runtime-interface\";\nimport { getStorageState } from \"../contextStorageStateHelpers\";\n\n// Helper function to calculate the approximate size of an object in bytes\nfunction getObjectSizeInBytes(obj: any): number {\n try {\n return new TextEncoder().encode(JSON.stringify(obj)).length;\n } catch (error) {\n // If JSON.stringify fails (e.g., circular references), return a conservative estimate\n return new TextEncoder().encode(String(obj)).length;\n }\n}\n\nexport async function runApi<ResultType = any>(\n input: ExtendedRunApiParameters & {\n retrieveSession: true;\n }\n): Promise<RunApiResult<ResultType, RunApiResultWithSessionOk<ResultType>>>;\nexport async function runApi<ResultType = any>(\n input: ExtendedRunApiParameters\n): Promise<RunApiResult<ResultType>>;\nexport async function runApi<ResultType = any>({\n abortSignal,\n importFunction,\n retrieveSession = false,\n ...input\n}: ExtendedRunApiParameters): Promise<\n | RunApiResult<ResultType>\n | RunApiResult<ResultType, RunApiResultWithSessionOk<ResultType>>\n> {\n let traceStarted = false;\n const inputParseResult = runApiParametersSchema.safeParse(input);\n if (!inputParseResult.success) {\n return err(\n new InternalInvalidInputError(\n \"Input validation failed\",\n formatZodError(inputParseResult.error)\n )\n );\n }\n const {\n automationFunction: { name, params },\n runOptions,\n tracing,\n auth,\n } = inputParseResult.data;\n\n const abortSymbol = Symbol(\"abort\");\n\n const abortPromise = new Promise<typeof abortSymbol>((resolve) => {\n if (!abortSignal) return;\n abortSignal.addEventListener(\"abort\", () => {\n resolve(abortSymbol);\n });\n });\n\n async function runAutomation() {\n const validatedModuleResult = await importUsingImportFunction<ResultType>({\n path: name,\n importFunction,\n });\n if (validatedModuleResult.isErr()) {\n return err(validatedModuleResult.error);\n }\n\n const automationFunction = validatedModuleResult.value;\n\n if (auth && auth.session.type === \"state\") {\n const state = auth.session.state;\n if (state === undefined || state === null) {\n return err(new AuthRequiredError());\n }\n }\n\n const playwrightContextParameters = {\n apiName: name,\n apiParameters: params,\n importFunction,\n };\n\n const intunedContext = getExecutionContext();\n\n const runAutomationWithContext: WithPlaywrightContextWrappedFunction<\n RunApiResultOk<ResultType> | RunApiResultWithSessionOk<ResultType>\n > = async (context, page) => {\n async function saveTraceIfNeeded({\n errorMessage,\n }: {\n errorMessage: string;\n }) {\n if (!tracing.enabled || !traceStarted) {\n return;\n }\n try {\n await context?.tracing.stop({ path: tracing.filePath });\n } catch (error: any) {\n console.log(errorMessage, error?.message);\n await remove(tracing.filePath);\n }\n }\n\n if (auth) {\n await loadSessionToContext({\n context,\n session: auth.session,\n });\n if (intunedContext && auth.parameters) {\n intunedContext.getAuthSessionParameters = async () =>\n auth.parameters!;\n }\n }\n\n const scriptContent = await fs.readFile(browserScriptsFile, \"utf-8\");\n await context.addInitScript({\n content: scriptContent,\n });\n\n for (const page of context.pages()) {\n await page.evaluate(scriptContent);\n }\n\n if (tracing.enabled) {\n await context.tracing.start({\n screenshots: true,\n snapshots: true,\n sources: true,\n });\n traceStarted = true;\n }\n\n cleanEnvironmentVariables();\n\n const automationFunctionParameters = [\n ...(params !== undefined ? [params] : []),\n page,\n context,\n ];\n\n try {\n const [automationFunctionResult] = await Promise.all([\n automationFunction(...automationFunctionParameters),\n ]);\n const MAX_RESULT_SIZE_BYTES = 2 * 1024 * 1024; // 2MB\n const resultSizeInBytes = getObjectSizeInBytes(\n automationFunctionResult\n );\n if (resultSizeInBytes > MAX_RESULT_SIZE_BYTES) {\n return err(\n new ResultTooBigError(resultSizeInBytes, MAX_RESULT_SIZE_BYTES)\n );\n }\n\n if (retrieveSession) {\n return ok({\n result: automationFunctionResult as ResultType,\n extendedPayloads: intunedContext?.extendedPayloads,\n session: await getStorageState(context),\n });\n }\n return ok({\n result: automationFunctionResult as ResultType,\n extendedPayloads: intunedContext?.extendedPayloads,\n });\n } catch (error) {\n return err(new AutomationError(error));\n } finally {\n await saveTraceIfNeeded({ errorMessage: \"failed to save trace\" });\n }\n };\n\n if (intunedContext?.store) {\n intunedContext.store = {};\n }\n\n if (runOptions.environment === \"standalone\") {\n const downloadsPath = getDownloadDirectoryPath();\n try {\n return await withPlaywrightContext(\n {\n headless: runOptions.headless,\n proxy: runOptions.proxy,\n downloadsPath,\n ...playwrightContextParameters,\n },\n runAutomationWithContext\n );\n } finally {\n await fs.remove(downloadsPath);\n }\n } else {\n return await withPlaywrightContext(\n {\n cdpAddress: runOptions.cdpAddress,\n cdpTargetId: runOptions.cdpTargetId,\n ...playwrightContextParameters,\n },\n runAutomationWithContext\n );\n }\n }\n\n const result = await Promise.race([await runAutomation(), abortPromise]);\n\n if (result === abortSymbol) {\n return err(new AbortedError());\n }\n\n return result;\n}\n\nexport async function checkAuthSessionWithRetries(\n page: Page,\n context: BrowserContext,\n checkFn: (..._: any) => Promise<boolean>,\n retries = 3\n): Promise<Result<boolean, RunAutomationError>> {\n if (retries === 0) {\n return ok(false);\n }\n\n let tryNumber = 0;\n\n console.log(\n \"Checking AuthSession with retries\",\n `${AUTH_SESSIONS_FOLDER_NAME}/check`\n );\n\n while (retries > tryNumber) {\n const result = await checkFn(page, context);\n if (result) return ok(true);\n\n tryNumber++;\n }\n\n return ok(false);\n}\n","import type * as playwright from \"playwright\";\nimport { setStorageState } from \"./contextStorageStateHelpers\";\nimport path from \"path\";\nimport * as fs from \"fs-extra\";\nimport { getFullPathInProject } from \"../commands/common/utils/fileUtils\";\nimport { err, Err, ok, Ok } from \"neverthrow\";\nimport { SetupContextHook, loadSetupContextHook } from \"./setupContextHook\";\nimport { getPort } from \"portfinder\";\nimport {\n getLocalCdpAddress,\n launchBrowser,\n type Proxy,\n getCdpWebSocketUrl,\n} from \"./launchBrowser\";\nimport {\n RunApiStorageState,\n ImportFunction,\n AutomationError,\n RunAutomationError,\n RunApiSession,\n} from \"@intuned/runtime-interface\";\n\nexport const browserScriptsFile = path.join(\n __dirname,\n \"./assets/browser_scripts.js\"\n);\n\ntype WithPlaywrightContextParameters =\n | {\n importFunction: ImportFunction;\n apiName: string;\n apiParameters: any;\n }\n | {\n importFunction?: undefined;\n apiName?: undefined;\n apiParameters?: undefined;\n };\n\ntype WithPlaywrightContextWrappedFunctionReturn<R> =\n | Ok<R, any>\n | Err<any, RunAutomationError>;\n\nexport type WithPlaywrightContextWrappedFunction<R> = (\n context: playwright.BrowserContext,\n page: playwright.Page\n) => Promise<WithPlaywrightContextWrappedFunctionReturn<R>>;\n\nexport async function withPlaywrightContext<R>(\n options: {\n proxy?: Proxy;\n headless: boolean;\n downloadsPath: string;\n } & WithPlaywrightContextParameters,\n fn: WithPlaywrightContextWrappedFunction<R>\n): Promise<Ok<R, any> | Err<any, RunAutomationError>>;\n\nexport async function withPlaywrightContext<R>(\n options: {\n cdpAddress: string;\n cdpTargetId?: string;\n } & WithPlaywrightContextParameters,\n fn: WithPlaywrightContextWrappedFunction<R>\n): Promise<Ok<R, any> | Err<any, RunAutomationError>>;\n\nexport async function withPlaywrightContext<R>(\n {\n cdpAddress,\n cdpTargetId,\n proxy,\n headless = true,\n downloadsPath,\n importFunction,\n apiName,\n apiParameters,\n }: {\n cdpAddress?: string;\n cdpTargetId?: string;\n proxy?: Proxy;\n headless?: boolean;\n downloadsPath?: string;\n } & WithPlaywrightContextParameters,\n fn: WithPlaywrightContextWrappedFunction<R>\n): Promise<Ok<R, any> | Err<any, RunAutomationError>> {\n let context: playwright.BrowserContext | undefined;\n let page: playwright.Page;\n\n try {\n const setupContextHookResult = importFunction\n ? await loadSetupContextHook({\n importFunction,\n })\n : ok(null);\n if (setupContextHookResult.isErr()) {\n return setupContextHookResult;\n }\n const setupContextHook = setupContextHookResult.value;\n\n if (setupContextHook === null) {\n if (cdpAddress !== undefined) {\n ({ page, context } = await launchBrowser({ cdpAddress, cdpTargetId }));\n } else {\n ({ page, context } = await launchBrowser({\n proxy,\n headless,\n downloadsPath,\n }));\n }\n return await fn(context, page);\n }\n\n let hookCdpUrl: string | null = null;\n if (cdpAddress) {\n hookCdpUrl = cdpAddress;\n ({ context, page } = await launchBrowser({ cdpAddress, cdpTargetId }));\n } else {\n const port = await getPort({\n port: 9222,\n });\n ({ context, page } = await launchBrowser({\n proxy,\n headless,\n downloadsPath,\n cdpPort: port,\n }));\n\n hookCdpUrl = getLocalCdpAddress(port);\n }\n\n let hookResult: Awaited<ReturnType<SetupContextHook>>;\n try {\n const wsUrlResult = await getCdpWebSocketUrl(hookCdpUrl);\n if (wsUrlResult.isOk()) {\n hookCdpUrl = wsUrlResult.value;\n } else {\n throw new Error(wsUrlResult.error);\n }\n hookResult = await setupContextHook({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n apiName: apiName!,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n apiParameters: apiParameters!,\n cdpUrl: hookCdpUrl,\n });\n } catch (error) {\n return err(new AutomationError(error));\n }\n if (!hookResult) {\n return await fn(context, page);\n }\n const { page: newPage, context: newContext, cleanup } = hookResult;\n\n let result:\n | {\n return: WithPlaywrightContextWrappedFunctionReturn<R>;\n }\n | {\n throw: Error;\n };\n\n try {\n result = { return: await fn(newContext, newPage ?? page) };\n } catch (e) {\n result = { throw: e };\n }\n try {\n await cleanup?.();\n } catch (e) {\n result = { return: err(new AutomationError(e)) };\n }\n\n if (\"throw\" in result) {\n throw result.throw;\n }\n return result.return;\n } finally {\n await context?.close();\n }\n}\n\nexport async function loadSessionToContext({\n context,\n session,\n}: {\n context: playwright.BrowserContext;\n session: RunApiSession;\n}) {\n let sessionToLoad: RunApiStorageState;\n if (session.type === \"state\") {\n const state = session.state;\n if (state === undefined || state === null) {\n return;\n }\n sessionToLoad = state;\n } else {\n const fullPath = getFullPathInProject(session.path);\n sessionToLoad = await fs.readJson(fullPath);\n }\n\n await setStorageState(context, sessionToLoad);\n}\n","import type * as playwright from \"playwright\";\nimport { ok, type Err, type Ok } from \"neverthrow\";\nimport { importUsingImportFunction } from \"./runApi/importUsingImportFunction\";\nimport {\n ImportFunction,\n ApiNotFoundError,\n type RunAutomationError,\n} from \"@intuned/runtime-interface\";\n\nexport type InitializeContextHookOptions = {\n apiName: string;\n apiParameters: any;\n cdpUrl: string;\n};\n\nexport type SetupContextHook = (\n options: InitializeContextHookOptions\n) => Promise<{\n page: playwright.Page | null;\n context: playwright.BrowserContext;\n cleanup?: () => Promise<void>;\n} | null>;\n\nconst setupContextHookPath = \"hooks/setupContext\";\n\nexport async function loadSetupContextHook({\n importFunction,\n}: {\n importFunction: ImportFunction;\n}): Promise<Ok<SetupContextHook | null, any> | Err<any, RunAutomationError>> {\n const importedFunctionResult = await importUsingImportFunction({\n path: setupContextHookPath,\n importFunction,\n });\n if (\n importedFunctionResult.isErr() &&\n importedFunctionResult.error instanceof ApiNotFoundError\n ) {\n return ok(null);\n }\n return importedFunctionResult;\n}\n","import { ok, err, Result } from \"neverthrow\";\nimport {\n ImportFunction,\n ApiNotFoundError,\n AutomationError,\n InvalidApiError,\n RunAutomationError,\n} from \"@intuned/runtime-interface\";\n\nexport async function importUsingImportFunction<_ReturnType = any>({\n path,\n allowGenerators = true,\n importFunction,\n}: {\n path: string;\n importFunction: ImportFunction;\n allowGenerators?: boolean;\n}): Promise<Result<(..._: any) => Promise<_ReturnType>, RunAutomationError>> {\n try {\n const importedResult = await importFunction(path);\n if (importedResult.isErr()) {\n if (importedResult.error.type === \"not_found\") {\n return err(new ApiNotFoundError(path));\n }\n return err(new AutomationError(importedResult.error.error));\n }\n const imported = importedResult.value;\n if (!imported || !imported.default || !imported.default.constructor) {\n return err(new InvalidApiError(`${path} does not have a default export`));\n }\n if (imported.default.constructor.name === \"AsyncGeneratorFunction\") {\n if (!allowGenerators) {\n return err(\n new InvalidApiError(\n `${path} default export must be an async function`\n )\n );\n }\n return ok(async (...args) => {\n const generator = imported.default(\n ...args\n ) as AsyncGenerator<_ReturnType>;\n const result = await generator.next();\n if (!result.done) {\n throw new Error(\"Yield is not supported\");\n }\n return result.value;\n });\n }\n if (imported.default.constructor.name === \"AsyncFunction\") {\n return ok(imported.default);\n }\n return err(\n new InvalidApiError(`${path} default export must be an async function`)\n );\n } catch (error: any) {\n return err(new AutomationError(error));\n }\n}\n","import * as playwright from \"playwright\";\nimport { mkdir, mkdtemp, rm, writeFile } from \"fs-extra\";\nimport { join } from \"path\";\nimport * as fs from \"fs-extra\";\nimport waitOn from \"wait-on\";\nimport { exec } from \"child_process\";\nimport {\n buildExtensionsList,\n getIntunedExtensionWorker,\n isIntunedExtensionEnabled,\n isIntunedExtensionLoaded,\n setupIntunedExtension,\n} from \"./extension/extensionsHelpers\";\nimport {\n cleanIntunedExtensionServer,\n setupIntunedExtensionServer,\n} from \"./extension/intunedExtensionServer\";\nimport { promisify } from \"util\";\nimport { Result, err, ok } from \"neverthrow\";\nimport { z } from \"zod\";\n\nconst execAsync = promisify(exec);\n\nexport interface Proxy {\n server: string;\n username: string;\n password: string;\n}\n\nasync function createUserDirWithPreferences() {\n const playwrightTempDir = await mkdtemp(\"/tmp/pw-\");\n const userDir = join(playwrightTempDir, \"userdir\");\n const defaultDir = join(userDir, \"Default\");\n await mkdir(defaultDir, {\n recursive: true,\n });\n const preferences = {\n plugins: {\n always_open_pdf_externally: true,\n },\n };\n await writeFile(join(defaultDir, \"Preferences\"), JSON.stringify(preferences));\n\n return userDir;\n}\n\nexport type LaunchBrowserResult = {\n page: playwright.Page;\n context: playwright.BrowserContext;\n};\n\nexport type LaunchChromiumStandaloneOptions = {\n proxy?: Proxy;\n headless: boolean;\n downloadsPath?: string;\n cdpPort?: number;\n appModeInitialUrl?: string;\n executablePath?: string;\n};\n\nexport type LaunchChromiumCdpOptions = {\n cdpAddress: string;\n cdpTargetId?: string;\n};\n\nexport async function launchChromium(\n options: LaunchChromiumStandaloneOptions\n): Promise<LaunchBrowserResult>;\n\nexport async function launchChromium(\n options: LaunchChromiumCdpOptions\n): Promise<LaunchBrowserResult>;\n\nexport async function launchChromium(\n options: LaunchChromiumStandaloneOptions | LaunchChromiumCdpOptions\n): Promise<LaunchBrowserResult> {\n if (\"cdpAddress\" in options) {\n if (await isIntunedExtensionEnabled()) {\n await setupIntunedExtensionServer();\n }\n\n const browser = await playwright.chromium.connectOverCDP(\n options.cdpAddress\n );\n if (browser.contexts().length === 0) {\n throw new Error(\"No browser contexts found in the connected browser\");\n }\n const context = browser.contexts()[0];\n let page = context.pages().at(0) ?? (await context.newPage());\n const targetId = options.cdpTargetId;\n if (targetId) {\n for (const p of context.pages()) {\n let cdp: playwright.CDPSession | null = null;\n try {\n cdp = await context.newCDPSession(p);\n const result = await cdp.send(\"Target.getTargetInfo\");\n if (result.targetInfo.targetId === targetId) {\n page = p;\n break;\n }\n } catch (error) {\n } finally {\n await cdp?.detach();\n }\n }\n }\n\n return { page, context };\n }\n const { headless, appModeInitialUrl, cdpPort, proxy, downloadsPath } =\n options;\n\n let { executablePath } = options;\n\n const defaultArgsToIgnore: string[] = [\n \"--disable-extensions\",\n \"--disable-component-extensions-with-background-pages\",\n \"--disable-background-networking\",\n \"--disable-backgrounding-occluded-windows\",\n \"--disable-background-timer-throttling\",\n ];\n const extraArgs: string[] = [];\n\n const userDataDir = await createUserDirWithPreferences();\n\n if (isIntunedExtensionLoaded()) {\n const extensionsList = buildExtensionsList();\n const extensions = extensionsList.join(\",\");\n extraArgs.push(`--disable-extensions-except=${extensions}`);\n extraArgs.push(`--load-extension=${extensions}`);\n }\n\n if (await isIntunedExtensionEnabled()) {\n await setupIntunedExtension();\n if (proxy) {\n extraArgs.push('--proxy-bypass-list=\"<-loopback>\"'); // This is added to bypass proxy for localhost traffic because some proxy providers block localhost traffic, and localhost traffic doesn't need proxying\n }\n }\n\n if (cdpPort) {\n extraArgs.push(`--remote-debugging-port=${cdpPort}`);\n }\n if (headless) {\n defaultArgsToIgnore.push(\"--headless=old\");\n extraArgs.push(\"--headless=new\");\n }\n\n if (appModeInitialUrl) {\n extraArgs.push(`--app=${appModeInitialUrl}`);\n }\n\n if (executablePath) {\n executablePath = await fs.realpath(executablePath);\n if (!(await fs.exists(executablePath))) {\n console.log(\n `Warning: Executable path ${executablePath} does not exist. Falling back to default.`\n );\n executablePath = undefined;\n }\n }\n\n const viewport = null;\n const userAgent =\n process.env.__PLAYWRIGHT_USER_AGENT_OVERRIDE ??\n (await getHeadlessUserAgent({\n executablePath,\n }));\n\n const context = await playwright.chromium.launchPersistentContext(\n userDataDir,\n {\n userAgent,\n executablePath,\n headless,\n viewport,\n proxy,\n downloadsPath,\n args: extraArgs,\n ignoreDefaultArgs: defaultArgsToIgnore,\n }\n );\n\n context.once(\"close\", async () => {\n try {\n await rm(userDataDir, {\n recursive: true,\n force: true,\n retryDelay: 1000,\n maxRetries: 5,\n });\n if (await isIntunedExtensionEnabled()) {\n await cleanIntunedExtensionServer();\n }\n } catch (error) {\n console.error(\"Failed to remove user data dir\", error);\n }\n });\n\n if (cdpPort) {\n const createdCdpAddress = getLocalCdpAddress(cdpPort);\n await waitOnCdpAddress(createdCdpAddress);\n }\n\n const page = context.pages().at(0) ?? (await context.newPage());\n\n if (await isIntunedExtensionEnabled()) {\n await getIntunedExtensionWorker(context);\n }\n\n return {\n page,\n context,\n };\n}\n\nexport async function getBrowserExecutablePath(): Promise<string | undefined> {\n const browserType = getBrowserType();\n if (browserType === \"brave\") {\n return await getBraveExecutablePath();\n }\n}\n\nexport async function launchBrowser(\n options:\n | Omit<LaunchChromiumStandaloneOptions, \"executablePath\">\n | LaunchChromiumCdpOptions\n): Promise<LaunchBrowserResult> {\n if (\"cdpAddress\" in options) {\n return launchChromium(options);\n }\n\n return launchChromium({\n ...options,\n executablePath: await getBrowserExecutablePath(),\n });\n}\n\nfunction getBrowserType() {\n if (process.env.BROWSER_TYPE === \"brave\") {\n return \"brave\";\n }\n return \"chromium\";\n}\n\nasync function getBraveExecutablePath() {\n const { stdout } = await execAsync(\"which brave-browser-stable\");\n const bravePath = stdout.trim();\n if (bravePath.length === 0) {\n throw new Error(\"Brave browser not found\");\n }\n return bravePath;\n}\n\nexport function getLocalCdpAddress(port: number): string {\n return `http://localhost:${port}`;\n}\n\nexport async function getCdpWebSocketUrl(\n cdpAddress: string\n): Promise<Result<string, string>> {\n let response: Response;\n try {\n response = await fetch(`${cdpAddress}/json/version`);\n } catch (error) {\n return err(\n `Failed to fetch CDP version from ${cdpAddress}: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n if (!response.ok) {\n return err(\n `Failed to get CDP WebSocket URL from ${cdpAddress}: ${response.status} ${response.statusText}`\n );\n }\n let data: any;\n try {\n data = await response.json();\n } catch (error) {\n return err(\n `Invalid CDP version response from ${cdpAddress}: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n const cdpJsonVersionResponseSchema = z.object({\n webSocketDebuggerUrl: z.string().url(),\n });\n const parseResult = cdpJsonVersionResponseSchema.safeParse(data);\n if (!parseResult.success) {\n return err(\n `Invalid CDP version response from ${cdpAddress}: ${JSON.stringify(\n parseResult.error.format()\n )}`\n );\n }\n return ok(parseResult.data.webSocketDebuggerUrl);\n}\n\nasync function waitOnCdpAddress(cdpAddress: string) {\n const cdpAddressWithoutProtocol = cdpAddress\n .replace(\"http://\", \"\")\n .replace(\"https://\", \"\")\n .replace(\"localhost\", \"127.0.0.1\");\n\n await waitOn({\n resources: [`http-get://${cdpAddressWithoutProtocol}/json/version`],\n delay: 100,\n interval: 100,\n timeout: 5000,\n tcpTimeout: 1000,\n window: 1000,\n });\n}\n\nexport async function getHeadlessUserAgent({\n executablePath,\n args,\n ignoreDefaultArgs,\n}: {\n executablePath?: string;\n args?: string[];\n ignoreDefaultArgs?: string[];\n}) {\n const browser = await playwright.chromium.launch({\n headless: true,\n executablePath,\n args,\n ignoreDefaultArgs,\n });\n const context = await browser.newContext();\n const page = await context.newPage();\n let userAgent = await page.evaluate(() => navigator.userAgent);\n await browser.close();\n if (!userAgent || typeof userAgent !== \"string\") {\n return undefined;\n }\n userAgent = userAgent.replace(\"HeadlessChrome\", \"Chrome\");\n return userAgent;\n}\n"],"mappings":"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","names":["RunAutomationError","ApiNotFoundError","InvalidApiError","AbortedError","AuthRequiredError","AutomationError","InternalInvalidInputError","ResultTooBigError","fs","data","path","fs","remove","ok","err","fs","err","ok","ok","path","import_runtime_interface","ok","err","ok","context","page","import_runtime_interface","ok","err","import_runtime_interface","err","remove","page","ok"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// src/commands/common/utils/fileUtils.ts
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import * as fs from "fs-extra";
|
|
4
|
+
import dotenv from "dotenv";
|
|
5
|
+
dotenv.config();
|
|
6
|
+
function getFullPathInProject(...paths) {
|
|
7
|
+
return path.resolve(process.cwd(), process.env.ROOT || "./", ...paths);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export {
|
|
11
|
+
getFullPathInProject
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=chunk-BF45RZ32.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/common/utils/fileUtils.ts"],"sourcesContent":["import * as path from \"path\";\nimport * as fs from \"fs-extra\";\nimport dotenv from \"dotenv\";\n\ndotenv.config();\n\n// TODO: todo-identity handle identity instances\nexport function getFullPathInProject(...paths: string[]) {\n return path.resolve(process.cwd(), process.env.ROOT || \"./\", ...paths);\n}\n\nexport async function listProjectFilesAndFolders() {\n const projectPath = path.resolve(process.cwd(), process.env.ROOT || \"./\");\n try {\n const files = await fs.readdir(projectPath, { withFileTypes: true });\n return files.map((file) => ({\n type: file.isDirectory() ? (\"Folder\" as const) : (\"File\" as const),\n fullPath: path.join(projectPath, file.name),\n name: file.name,\n }));\n } catch (err) {\n console.error(\"Error reading the directory:\", err);\n throw err;\n }\n}\n"],"mappings":";AAAA,YAAY,UAAU;AACtB,YAAY,QAAQ;AACpB,OAAO,YAAY;AAEnB,OAAO,OAAO;AAGP,SAAS,wBAAwB,OAAiB;AACvD,SAAY,aAAQ,QAAQ,IAAI,GAAG,QAAQ,IAAI,QAAQ,MAAM,GAAG,KAAK;AACvE;","names":[]}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getFullPathInProject
|
|
3
|
+
} from "./chunk-BF45RZ32.mjs";
|
|
1
4
|
import {
|
|
2
5
|
getExecutionContext
|
|
3
6
|
} from "./chunk-W4UX6G4X.mjs";
|
|
@@ -223,15 +226,6 @@ var TimeoutError = class extends Error {
|
|
|
223
226
|
}
|
|
224
227
|
};
|
|
225
228
|
|
|
226
|
-
// src/commands/common/utils/fileUtils.ts
|
|
227
|
-
import * as path from "path";
|
|
228
|
-
import * as fs from "fs-extra";
|
|
229
|
-
import dotenv from "dotenv";
|
|
230
|
-
dotenv.config();
|
|
231
|
-
function getFullPathInProject(...paths) {
|
|
232
|
-
return path.resolve(process.cwd(), process.env.ROOT || "./", ...paths);
|
|
233
|
-
}
|
|
234
|
-
|
|
235
229
|
// src/commands/common/utils/settings.ts
|
|
236
230
|
import { readFile } from "fs/promises";
|
|
237
231
|
async function getSettings() {
|
|
@@ -252,7 +246,7 @@ async function getSettings() {
|
|
|
252
246
|
}
|
|
253
247
|
|
|
254
248
|
// src/common/extension/extensionsHelpers.ts
|
|
255
|
-
import
|
|
249
|
+
import path from "path";
|
|
256
250
|
import { writeFile } from "fs/promises";
|
|
257
251
|
import { getPort } from "portfinder";
|
|
258
252
|
var INTUNED_WORKER = "intunedWorker.js";
|
|
@@ -286,8 +280,8 @@ function getIntunedExtensionPath() {
|
|
|
286
280
|
return process.env.INTUNED_EXTENSION_PATH;
|
|
287
281
|
}
|
|
288
282
|
async function isIntunedExtensionEnabled() {
|
|
289
|
-
const
|
|
290
|
-
if (!
|
|
283
|
+
const path2 = getIntunedExtensionPath();
|
|
284
|
+
if (!path2) {
|
|
291
285
|
return false;
|
|
292
286
|
}
|
|
293
287
|
const captchaSolverSettings2 = await getIntunedCaptchaSolverSettings();
|
|
@@ -367,7 +361,7 @@ async function setupIntunedExtension() {
|
|
|
367
361
|
return;
|
|
368
362
|
}
|
|
369
363
|
const intunedExtensionPath = getIntunedExtensionPath();
|
|
370
|
-
const intunedExtensionSettingsPath =
|
|
364
|
+
const intunedExtensionSettingsPath = path.join(
|
|
371
365
|
intunedExtensionPath,
|
|
372
366
|
INTUNED_EXTENSION_SETTINGS_FILE_NAME
|
|
373
367
|
);
|
|
@@ -555,8 +549,8 @@ async function withWaitForCaptchaSolve(callback, options) {
|
|
|
555
549
|
);
|
|
556
550
|
const extensionServer = getIntunedExtensionServer();
|
|
557
551
|
let settledResolve = null;
|
|
558
|
-
let settledPromise = new Promise((
|
|
559
|
-
settledResolve =
|
|
552
|
+
let settledPromise = new Promise((resolve) => {
|
|
553
|
+
settledResolve = resolve;
|
|
560
554
|
});
|
|
561
555
|
let isTimeout = false;
|
|
562
556
|
let captchasAppeared = false;
|
|
@@ -601,12 +595,12 @@ async function withWaitForCaptchaSolve(callback, options) {
|
|
|
601
595
|
console.error(`Failed to wait for networkidle. Error: ${err}`);
|
|
602
596
|
}
|
|
603
597
|
}
|
|
604
|
-
const timeoutPromise = new Promise((
|
|
598
|
+
const timeoutPromise = new Promise((resolve) => {
|
|
605
599
|
setTimeout(() => {
|
|
606
600
|
isTimeout = true;
|
|
607
601
|
console.error("Captcha solve timeout reached");
|
|
608
602
|
settledResolve?.();
|
|
609
|
-
|
|
603
|
+
resolve();
|
|
610
604
|
}, timeoutInMs);
|
|
611
605
|
});
|
|
612
606
|
await extensionServer.subscribe(page, onCaptchaUpdate);
|
|
@@ -649,8 +643,8 @@ async function withWaitForCaptchaSolve(callback, options) {
|
|
|
649
643
|
console.error(
|
|
650
644
|
`Still have ${pending.length} pending captchas, waiting for more updates`
|
|
651
645
|
);
|
|
652
|
-
settledPromise = new Promise((
|
|
653
|
-
settledResolve =
|
|
646
|
+
settledPromise = new Promise((resolve) => {
|
|
647
|
+
settledResolve = resolve;
|
|
654
648
|
});
|
|
655
649
|
}
|
|
656
650
|
}
|
|
@@ -758,11 +752,11 @@ function getDownloadDirectoryPath() {
|
|
|
758
752
|
if (!context) {
|
|
759
753
|
throw new Error("ExecutionContext not found");
|
|
760
754
|
}
|
|
761
|
-
const
|
|
762
|
-
ensureDirSync(
|
|
755
|
+
const path2 = `/tmp/downloads/${context.runId}`;
|
|
756
|
+
ensureDirSync(path2, {
|
|
763
757
|
mode: 1533
|
|
764
758
|
});
|
|
765
|
-
return
|
|
759
|
+
return path2;
|
|
766
760
|
}
|
|
767
761
|
|
|
768
762
|
export {
|
|
@@ -773,7 +767,6 @@ export {
|
|
|
773
767
|
getAuthSessionParameters,
|
|
774
768
|
runInfo,
|
|
775
769
|
RunError,
|
|
776
|
-
getFullPathInProject,
|
|
777
770
|
isIntunedExtensionLoaded,
|
|
778
771
|
buildExtensionsList,
|
|
779
772
|
isIntunedExtensionEnabled,
|
|
@@ -791,4 +784,4 @@ export {
|
|
|
791
784
|
getAiGatewayConfig,
|
|
792
785
|
getDownloadDirectoryPath
|
|
793
786
|
};
|
|
794
|
-
//# sourceMappingURL=chunk-
|
|
787
|
+
//# sourceMappingURL=chunk-UO2E7T7T.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime/extendTimeout.ts","../src/runtime/extendPayload.ts","../src/runtime/attemptStore.ts","../src/runtime/persistentStore.ts","../src/runtime/getAuthSessionParameters.ts","../src/runtime/runInfo.ts","../src/runtime/RunError.ts","../src/common/extension/intunedExtensionServer.ts","../src/common/extension/types.ts","../src/commands/common/utils/settings.ts","../src/common/extension/extensionsHelpers.ts","../src/runtime/captcha.ts","../src/runtime/getAiGatewayConfig.ts","../src/runtime/downloadDirectory.ts"],"sourcesContent":["import { getExecutionContext } from \"../common/asyncLocalStorage\";\n\nconst _DEBOUNCE_TIME = 60_000;\n\nexport function extendTimeout() {\n const context = getExecutionContext();\n\n if (!context) {\n throw new Error(\"extendTimeout failed due to an internal error.\");\n }\n\n const { timeoutInfo } = context;\n\n if (!timeoutInfo) {\n return;\n }\n\n if (timeoutInfo.extendTimeoutCallback !== undefined) {\n void timeoutInfo.extendTimeoutCallback().catch(() => undefined);\n }\n}\n","import { getExecutionContext } from \"../common/asyncLocalStorage\";\nimport { Payload } from \"./export\";\nimport { extendTimeout } from \"./extendTimeout\";\n\nexport function extendPayload(payload: Payload | Payload[]) {\n const context = getExecutionContext();\n\n if (!context) {\n throw new Error(\"extendPayload failed due to an internal error.\");\n }\n\n const items = Array.isArray(payload) ? payload : [payload];\n\n if (!context.extendedPayloads) {\n context.extendedPayloads = [...items];\n return;\n }\n\n context?.extendedPayloads.push(...items);\n\n extendTimeout();\n}\n","import { getExecutionContext } from \"../common/asyncLocalStorage\";\nimport { AttemptStore } from \"./export\";\n\nexport const attemptStore: AttemptStore = Object.freeze({\n get: (key: string) => {\n const context = getExecutionContext();\n return context?.store ? context.store[key] : undefined;\n },\n set: (key: string, value: any) => {\n const context = getExecutionContext();\n if (!context) {\n throw new Error(\"store.set failed due to an internal error.\");\n }\n if (!context.store) {\n context.store = {};\n }\n context.store[key] = value;\n },\n});\n","import { z } from \"zod\";\nimport { callBackendFunctionWithToken } from \"../common/jwtTokenManager\";\nimport type { PersistentStore } from \"./export\";\n\nconst forbiddenCharacters = /[:#]/g;\n\nconst keySchema = z\n .string()\n .min(1, \"Key must be at least 1 character long\")\n .refine(\n (key) => (key.match(forbiddenCharacters)?.length ?? 0) === 0,\n 'Key cannot contain the following characters: \":\" or \"#\"'\n );\n\nexport const persistentStore: PersistentStore = Object.freeze({\n get: async (key: string) => {\n const parsedKey = keySchema.parse(key);\n const response = await callBackendFunctionWithToken(\n `kv-store/${parsedKey}`,\n {\n method: \"GET\",\n }\n );\n const json = await response.json();\n if (!response.ok) {\n throw new Error(json.message);\n }\n return json.value;\n },\n set: async (key: string, value: any) => {\n const keyResult = keySchema.parse(key);\n const response = await callBackendFunctionWithToken(\n `kv-store/${keyResult}`,\n {\n method: \"PUT\",\n body: JSON.stringify(value),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n const json = await response.json();\n if (!response.ok) {\n throw new Error(json.message);\n }\n },\n});\n","import { getExecutionContext } from \"../common/asyncLocalStorage\";\n\nexport async function getAuthSessionParameters() {\n const context = getExecutionContext();\n\n if (!context) {\n throw new Error(\n \"getAuthSessionParameters failed due to an internal error (context was not found).\"\n );\n }\n\n const { getAuthSessionParameters } = context;\n\n if (!getAuthSessionParameters) {\n throw new Error(\n \"getAuthSessionParameters failed due to an internal error (helper was not found on context).\"\n );\n }\n\n return await getAuthSessionParameters();\n}\n","import { getExecutionContext } from \"../common/asyncLocalStorage\";\nimport { RunInfo } from \"./export\";\nimport { RunType, RunEnvironment } from \"./enums\";\n\nexport function runInfo(): RunInfo {\n const context = getExecutionContext();\n\n if (!context) {\n return {\n runEnvironment: RunEnvironment.IDE,\n // runType: RunType.SYNC,\n };\n }\n\n //remove extendedPayloads from the user exposed data\n const { extendedPayloads: _extendedPayloads, ...rest } = context;\n\n return rest;\n}\n","import { RunErrorOptions } from \"./export\";\n\nexport class RunError extends Error {\n options: RunErrorOptions;\n constructor(message: string, options?: RunErrorOptions) {\n super(message);\n this.message = message;\n this.name = \"USER_GENERATED_ERROR\";\n this.options = options ?? {\n retryable: false,\n };\n Object.setPrototypeOf(this, RunError.prototype);\n }\n}\n\nnew RunError(\"\", {});\n","import type * as playwright from \"playwright\";\nimport fastify, { type FastifyInstance } from \"fastify\";\nimport {\n Captcha,\n CaptchaCallback,\n CaptchaStatus,\n captchaSchema,\n} from \"./types\";\nimport { CaptchaSolverSettings } from \"../settingsSchema\";\nimport { resolveCaptchaSolverSettings } from \"./extensionsHelpers\";\n\ntype CaptchaSubscriber = {\n handler: CaptchaCallback;\n status?: CaptchaStatus;\n};\n\nclass TabCaptchaState {\n public readonly tabId: number;\n private captchasById: Map<string, Captcha>;\n private subscribers: Array<CaptchaSubscriber>;\n\n constructor(tabId: number) {\n this.tabId = tabId;\n this.captchasById = new Map();\n this.subscribers = new Array<CaptchaSubscriber>();\n }\n\n subscribe(handler: CaptchaSubscriber) {\n this.subscribers.push(handler);\n }\n\n unsubscribe(handler: CaptchaCallback, status?: CaptchaStatus) {\n const index = this.subscribers.findIndex(\n (subscriber) =>\n subscriber.handler === handler &&\n (subscriber.status === status || !status)\n );\n if (index !== -1) {\n this.subscribers.splice(index, 1);\n }\n }\n\n getCaptchas(): Captcha[] {\n return [...this.captchasById.values()];\n }\n\n async upsertCaptcha(captcha: Captcha) {\n this.captchasById.set(captcha.id, captcha);\n for (const subscriber of this.subscribers) {\n // Only call handler if no status filter specified or status matches\n if (!subscriber.status || subscriber.status === captcha.status) {\n await subscriber.handler(captcha);\n }\n }\n }\n}\n\nexport class ExtensionServer {\n private tabs: Map<number, TabCaptchaState>;\n private app: FastifyInstance | null = null;\n\n constructor() {\n this.tabs = new Map();\n }\n\n private getOrCreateTab(tabId: number): TabCaptchaState {\n const existing = this.tabs.get(tabId);\n if (existing) return existing;\n const created = new TabCaptchaState(tabId);\n this.tabs.set(tabId, created);\n return created;\n }\n\n public async handleUpsertCaptcha(captcha: Captcha) {\n const tab = this.getOrCreateTab(captcha.tabId);\n await tab.upsertCaptcha(captcha);\n }\n\n async start({\n port,\n host = \"0.0.0.0\",\n }: {\n port: number;\n host?: string;\n }): Promise<void> {\n if (this.app) {\n return;\n }\n this.app = fastify({\n logger: false,\n bodyLimit: 1_000_000,\n });\n\n this.app.post(\"/state\", async (request, reply) => {\n try {\n const result = captchaSchema.safeParse(request.body);\n if (!result.success) {\n return reply.code(400).send({\n error: \"Invalid captcha payload\",\n details: result.error.flatten().fieldErrors,\n });\n }\n\n await this.handleUpsertCaptcha(result.data);\n return reply.code(200).send({});\n } catch (error: any) {\n console.error(\"Error processing captcha state update:\", error);\n return reply.code(500).send({\n error: \"Internal server error\",\n message: error?.message ?? String(error),\n });\n }\n });\n\n this.app.setNotFoundHandler((_request, reply) => {\n return reply.code(404).send({ error: \"Not found\" });\n });\n\n await this.app.listen({\n port,\n host,\n });\n }\n\n async stop(): Promise<void> {\n if (!this.app) return;\n const toClose = this.app;\n this.app = null;\n await toClose.close();\n }\n\n async getCaptchas(\n page: playwright.Page,\n status?: CaptchaStatus\n ): Promise<Captcha[]> {\n const tabId = await getTabId(page);\n const tab = this.tabs.get(tabId);\n if (!tab) return [];\n const captchas = tab.getCaptchas();\n if (!status) return captchas;\n return captchas.filter((c) => c.status === status && c.tabId === tabId);\n }\n\n async subscribe(\n page: playwright.Page,\n handler: CaptchaCallback,\n status?: CaptchaStatus\n ) {\n const tabId = await getTabId(page);\n const tab = this.getOrCreateTab(tabId);\n tab.subscribe({ handler, status });\n }\n\n async unsubscribe(\n page: playwright.Page,\n handler: CaptchaCallback,\n status?: CaptchaStatus\n ) {\n const tabId = await getTabId(page);\n const tab = this.tabs.get(tabId);\n if (!tab) return;\n tab.unsubscribe(handler, status);\n }\n\n removeTab(tabId: number) {\n this.tabs.delete(tabId);\n }\n\n async getTabId(page: playwright.Page): Promise<number> {\n return await getTabId(page);\n }\n}\n\nlet extensionServerSingleton: ExtensionServer | null = null;\n\nexport function getIntunedExtensionServer(): ExtensionServer {\n if (!extensionServerSingleton) {\n throw new Error(\"Intuned Extension Server is not initialized.\");\n }\n return extensionServerSingleton;\n}\n\nexport async function setupIntunedExtensionServer(\n captchaSolverSettings?: CaptchaSolverSettings\n) {\n if (!captchaSolverSettings) {\n captchaSolverSettings = await resolveCaptchaSolverSettings();\n }\n if (!extensionServerSingleton) {\n extensionServerSingleton = new ExtensionServer();\n }\n await extensionServerSingleton.start({\n port: captchaSolverSettings.port ?? 9000,\n });\n}\n\nexport async function cleanIntunedExtensionServer() {\n if (extensionServerSingleton) {\n await extensionServerSingleton.stop();\n extensionServerSingleton = null;\n }\n}\n\n// Cache tab IDs on the page object to avoid repeated expensive lookups\nconst TAB_ID_CACHE_KEY = \"__INTUNED_CACHED_TAB_ID__\";\n\nexport async function getTabId(page: playwright.Page): Promise<number> {\n // Check if we have a cached tab ID\n const cached = (page as any)[TAB_ID_CACHE_KEY];\n if (cached !== undefined && typeof cached === \"number\") {\n return cached;\n }\n\n // Try to get tab ID with a quick check first\n let tabId: number | undefined;\n try {\n tabId = await page.evaluate(\"window.__INTUNED_TAB_ID__\", { timeout: 100 });\n } catch {\n // If quick check fails, wait for it to be available\n await page.waitForFunction(\"window.__INTUNED_TAB_ID__ !== undefined\", {\n timeout: 15_000,\n });\n tabId = await page.evaluate(\"window.__INTUNED_TAB_ID__\");\n }\n\n const numericTabId = Number(tabId);\n // Cache the result on the page object\n (page as any)[TAB_ID_CACHE_KEY] = numericTabId;\n return numericTabId;\n}\n","import { z } from \"zod\";\n\nexport const captchaTypeSchema = z.enum([\n \"aws\",\n \"cloudflare\",\n \"customcaptcha\",\n \"funcaptcha\",\n \"geetest\",\n \"hcaptcha\",\n \"lemincaptcha\",\n \"recaptcha\",\n \"textcaptcha\",\n]);\n\nexport type CaptchaType = z.infer<typeof captchaTypeSchema>;\n\nexport const captchaStatusSchema = z.enum([\n \"attached\",\n \"solving\",\n \"solved\",\n \"error\",\n \"detached\",\n]);\n\nexport type CaptchaStatus = z.infer<typeof captchaStatusSchema>;\n\nexport const captchaErrorCodeSchema = z.enum([\n \"HIT_LIMIT\",\n \"MAX_RETRIES\",\n \"UNEXPECTED_SERVER_RESPONSE\",\n \"UNEXPECTED_ERROR\",\n]);\n\nexport type CaptchaErrorCode = z.infer<typeof captchaErrorCodeSchema>;\n\nexport const captchaErrorSchema = z.object({\n code: captchaErrorCodeSchema,\n error: z.unknown().optional(),\n});\n\nexport type CaptchaError = z.infer<typeof captchaErrorSchema>;\n\nconst captchaBaseSchema = z.object({\n id: z.string().min(1),\n tabId: z.number().int().positive(),\n type: captchaTypeSchema,\n retryCount: z.number().int().nonnegative().optional(),\n});\n\nexport type CaptchaBase = z.infer<typeof captchaBaseSchema>;\n\nconst captchaNonErrorSchema = captchaBaseSchema.extend({\n status: captchaStatusSchema.exclude([\"error\"]),\n});\n\nexport type CaptchaNonError = z.infer<typeof captchaNonErrorSchema>;\n\nconst captchaErrorStatusSchema = captchaBaseSchema.extend({\n status: z.literal(\"error\"),\n error: captchaErrorSchema,\n});\n\nexport type CaptchaErrorStatus = z.infer<typeof captchaErrorStatusSchema>;\n\nexport const captchaSchema = z.discriminatedUnion(\"status\", [\n captchaBaseSchema.extend({\n status: z.literal(\"attached\"),\n }),\n captchaBaseSchema.extend({\n status: z.literal(\"solving\"),\n }),\n captchaBaseSchema.extend({\n status: z.literal(\"solved\"),\n }),\n captchaBaseSchema.extend({\n status: z.literal(\"detached\"),\n }),\n captchaErrorStatusSchema,\n]);\n\nexport type Captcha = z.infer<typeof captchaSchema>;\n\nexport type CaptchaCallback = (captcha: Captcha) => Promise<void> | void;\n\nexport class CaptchaSolveError extends Error {\n constructor(message: string, public error: CaptchaError) {\n super(message);\n this.name = \"CaptchaSolveError\";\n }\n}\n\nexport class TimeoutError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"TimeoutError\";\n }\n}\n","import { getFullPathInProject } from \"./fileUtils\";\nimport {\n IntunedSettings,\n settingsSchema,\n} from \"../../../common/settingsSchema\";\nimport { readFile } from \"fs/promises\";\n\nexport async function getSettings(): Promise<IntunedSettings> {\n const settingsFilePath = getFullPathInProject(\"Intuned.json\");\n\n const settings = await readFile(settingsFilePath, { encoding: \"utf-8\" });\n if (settings) {\n const parsed = settingsSchema.safeParse(JSON.parse(settings));\n if (parsed.success) {\n return parsed.data;\n } else {\n // ToDo: why does the type not work here?\n throw new Error((parsed as any).error.message);\n }\n }\n\n return {\n authSessions: { enabled: false },\n stealthMode: { enabled: false },\n };\n}\n","import type * as playwright from \"playwright\";\nimport { getSettings } from \"../../commands/common/utils/settings\";\nimport {\n CaptchaSolverSettings,\n captchaSolverSettingsSchema,\n CaptchaSolverSettingsWithRunContext,\n} from \"../settingsSchema\";\nimport { PROJECT_ID_ENV_VAR_KEY, WORKSPACE_ID_ENV_VAR_KEY } from \"../constants\";\nimport { backendFunctionsTokenManager } from \"../jwtTokenManager\";\nimport path from \"path\";\nimport { writeFile } from \"fs/promises\";\nimport { setupIntunedExtensionServer } from \"./intunedExtensionServer\";\nimport { getPort } from \"portfinder\";\n\nconst INTUNED_WORKER = \"intunedWorker.js\";\nconst INTUNED_EXTENSION_SETTINGS_FILE_NAME = \"intunedSettings.json\";\nconst INTUNED_CAPTCHA_EXTENSION_PORT_ENV_VAR = \"INTUNED_CAPTCHA_EXTENSION_PORT\";\n\nlet captchaSolverSettings: CaptchaSolverSettings | null = null;\n\nasync function getIntunedCaptchaExtensionPort(): Promise<number> {\n if (process.env.INTUNED_CAPTCHA_EXTENSION_PORT) {\n return parseInt(process.env.INTUNED_CAPTCHA_EXTENSION_PORT, 10);\n }\n return await getPort({});\n}\n\nexport async function resolveCaptchaSolverSettings(\n input?: unknown\n): Promise<CaptchaSolverSettings> {\n const parsed = captchaSolverSettingsSchema.parse(input || {});\n\n if (!parsed.port) {\n parsed.port = await getIntunedCaptchaExtensionPort();\n }\n\n return parsed;\n}\n\nfunction getIntunedCaptchaExtensionPortFromEnv(): number | null {\n const raw = process.env[INTUNED_CAPTCHA_EXTENSION_PORT_ENV_VAR];\n if (!raw) return null;\n const parsed = Number(raw);\n if (!Number.isFinite(parsed) || parsed <= 0 || parsed > 65535) {\n throw new Error(\n `Invalid ${INTUNED_CAPTCHA_EXTENSION_PORT_ENV_VAR}: ${raw}`\n );\n }\n return parsed;\n}\n\nexport function isIntunedExtensionLoaded() {\n return !!getIntunedExtensionPath();\n}\n\nexport function buildExtensionsList(): string[] {\n const extensionsList: string[] = [];\n if (isIntunedExtensionLoaded()) {\n const intunedExtensionPath = getIntunedExtensionPath();\n extensionsList.push(intunedExtensionPath);\n }\n return extensionsList;\n}\n\nexport function getIntunedExtensionPath() {\n return process.env.INTUNED_EXTENSION_PATH as string;\n}\n\nexport async function isIntunedExtensionEnabled() {\n const path = getIntunedExtensionPath();\n if (!path) {\n return false;\n }\n\n const captchaSolverSettings = await getIntunedCaptchaSolverSettings();\n return captchaSolverSettings.enabled;\n}\n\nexport async function getIntunedExtensionWorker(\n context: playwright.BrowserContext\n): Promise<playwright.Worker | null> {\n if (!(await isIntunedExtensionEnabled())) {\n return null;\n }\n let attemptCount = 0;\n while (attemptCount < 4) {\n const intunedServiceWorker = context\n .serviceWorkers()\n .find((serviceWorker) => serviceWorker.url().includes(INTUNED_WORKER));\n if (intunedServiceWorker) {\n return intunedServiceWorker;\n }\n try {\n await context.waitForEvent(\"serviceworker\", { timeout: 3000 });\n } catch (err: any) {\n console.log(`Error accessing service workers (attempt ${attemptCount})`);\n }\n attemptCount++;\n }\n console.error(\"Failed to get intuned worker after 5 attmepts\");\n return null;\n}\n\nexport async function getIntunedExtensionSettings(\n captchaSolverSettings: CaptchaSolverSettings\n): Promise<CaptchaSolverSettingsWithRunContext> {\n const [domain, workspaceId, projectId] = [\n process.env.FUNCTIONS_DOMAIN,\n process.env[WORKSPACE_ID_ENV_VAR_KEY],\n process.env.INTUNED_INTEGRATION_ID ?? process.env[PROJECT_ID_ENV_VAR_KEY],\n ];\n if (!domain || !workspaceId || !projectId) {\n const missingEnvVars = [\n domain && \"FUNCTIONS_DOMAIN\",\n workspaceId && WORKSPACE_ID_ENV_VAR_KEY,\n projectId && `INTUNED_INTEGRATION_ID OR ${PROJECT_ID_ENV_VAR_KEY}`,\n ];\n throw new Error(\n `Missing required environment variables: ${missingEnvVars}`\n );\n }\n\n const authentication = (() => {\n if (process.env.INTUNED_API_KEY) {\n return { type: \"apiKey\" as const, apiKey: process.env.INTUNED_API_KEY };\n }\n if (\n process.env.INTUNED_BASIC_AUTH_USERNAME &&\n process.env.INTUNED_BASIC_AUTH_PASSWORD\n ) {\n const credentials = `${process.env.INTUNED_BASIC_AUTH_USERNAME}:${process.env.INTUNED_BASIC_AUTH_PASSWORD}`;\n const token = Buffer.from(credentials, \"utf-8\").toString(\"base64\");\n return { type: \"basic\" as const, token };\n }\n return {\n type: \"bearer\" as const,\n token: backendFunctionsTokenManager.token,\n };\n })();\n\n const baseUrl = process.env.INTUNED_API_BASE_URL ?? domain;\n\n return {\n ...captchaSolverSettings,\n workspaceId,\n projectId,\n baseUrl,\n authentication,\n };\n}\n\nexport async function getIntunedCaptchaSolverSettings(): Promise<CaptchaSolverSettings> {\n if (captchaSolverSettings) {\n return captchaSolverSettings;\n }\n const settings = await getSettings();\n captchaSolverSettings = await resolveCaptchaSolverSettings(\n settings.captchaSolver\n );\n return captchaSolverSettings;\n}\n\nexport async function setupIntunedExtension() {\n if (!(await isIntunedExtensionEnabled())) {\n return;\n }\n const intunedExtensionPath = getIntunedExtensionPath();\n const intunedExtensionSettingsPath = path.join(\n intunedExtensionPath,\n INTUNED_EXTENSION_SETTINGS_FILE_NAME\n );\n const captchaSolverSettings = await getIntunedCaptchaSolverSettings();\n await setupIntunedExtensionServer(captchaSolverSettings);\n const captchaSolverSettingsWithRunContext = await getIntunedExtensionSettings(\n captchaSolverSettings\n );\n\n await writeFile(\n intunedExtensionSettingsPath,\n JSON.stringify(captchaSolverSettingsWithRunContext)\n );\n}\n","import type { Page, BrowserContext } from \"playwright\";\n\nimport { getIntunedExtensionServer } from \"../common/extension/intunedExtensionServer\";\nimport {\n getIntunedExtensionWorker,\n isIntunedExtensionEnabled,\n} from \"../common/extension/extensionsHelpers\";\nimport {\n Captcha,\n CaptchaErrorStatus,\n CaptchaStatus,\n CaptchaCallback,\n TimeoutError,\n CaptchaSolveError,\n CaptchaError,\n} from \"../common/extension/types\";\n\nexport type WithWaitForCaptchaSolveOptions = {\n page: Page;\n timeoutInMs?: number;\n settleDurationMs?: number;\n waitForNetworkSettled?: boolean;\n};\n\nexport async function withWaitForCaptchaSolve<T>(\n callback: (page: Page) => Promise<T>,\n options: WithWaitForCaptchaSolveOptions\n): Promise<T> {\n const {\n page,\n timeoutInMs = 10_000,\n settleDurationMs = 5_000,\n waitForNetworkSettled = true,\n } = options;\n\n console.error(\n `Starting captcha solve wait (timeout=${timeoutInMs}ms, settleDuration=${settleDurationMs}ms, waitForNetworkSettled=${waitForNetworkSettled})`\n );\n\n const extensionServer = getIntunedExtensionServer();\n let settledResolve: (() => void) | null = null;\n let settledPromise = new Promise<void>((resolve) => {\n settledResolve = resolve;\n });\n let isTimeout = false;\n let captchasAppeared = false;\n let error: CaptchaError | undefined = undefined;\n let actionDone = false;\n\n const getPendingCaptchas = async () =>\n await extensionServer.getCaptchas(page, \"solving\");\n\n const hasNoPendingCaptchas = async () =>\n !captchasAppeared || (await getPendingCaptchas()).length === 0;\n\n const maybeSettle = async () => {\n if (await hasNoPendingCaptchas()) {\n settledResolve?.();\n }\n };\n\n const onCaptchaUpdate = async (_captcha: Captcha) => {\n const solvingCaptchas = await extensionServer.getCaptchas(page, \"solving\");\n const errorCaptchas = await extensionServer.getCaptchas(page, \"error\");\n\n console.error(\n `Captcha update received: solving=${solvingCaptchas.length}, errors=${errorCaptchas.length}`\n );\n\n if (solvingCaptchas.length > 0) {\n captchasAppeared = true;\n console.error(\n `Captchas detected: ${solvingCaptchas.map((c) => c.id).join(\", \")}`\n );\n }\n\n if (errorCaptchas.length > 0) {\n error = (errorCaptchas[0] as CaptchaErrorStatus).error;\n console.error(`Captcha error detected: ${error?.code}`);\n await maybeSettle();\n return;\n }\n\n if (solvingCaptchas.length === 0) {\n console.error(\"No pending captchas, settling\");\n await maybeSettle();\n }\n };\n\n const result = await callback(page);\n actionDone = true;\n if (waitForNetworkSettled) {\n try {\n await page.waitForLoadState(\"networkidle\");\n } catch (err) {\n console.error(`Failed to wait for networkidle. Error: ${err}`);\n }\n }\n\n const timeoutPromise = new Promise<void>((resolve) => {\n setTimeout(() => {\n isTimeout = true;\n console.error(\"Captcha solve timeout reached\");\n settledResolve?.();\n resolve();\n }, timeoutInMs);\n });\n\n await extensionServer.subscribe(page, onCaptchaUpdate);\n\n try {\n const initialPending = await getPendingCaptchas();\n console.error(`Found ${initialPending.length} ongoing captchas`);\n if (initialPending.length > 0) {\n captchasAppeared = true;\n }\n await maybeSettle();\n\n let shouldContinue = true;\n while (shouldContinue) {\n await Promise.race([settledPromise, timeoutPromise]);\n console.error(\n `Settled event received, waiting ${settleDurationMs}ms before checking`\n );\n await new Promise((r) => setTimeout(r, settleDurationMs));\n\n if (error) {\n console.error(`Raising captcha error: ${(error as CaptchaError).code}`);\n throw new CaptchaSolveError(\n `CAPTCHA Solve Error: ${(error as CaptchaError).code}`,\n error as CaptchaError\n );\n }\n const noPendingCaptchas = await hasNoPendingCaptchas();\n const pending = await getPendingCaptchas();\n console.error(\n `Check point: actionDone=${actionDone}, noPendingCaptchas=${noPendingCaptchas}, isTimeout=${isTimeout}, pendingCount=${pending.length}`\n );\n\n if ((actionDone && noPendingCaptchas) || isTimeout) {\n if (isTimeout && !noPendingCaptchas) {\n console.error(`Timeout with ${pending.length} pending captchas`);\n throw new TimeoutError(\n \"CAPTCHA Solve timed out with pending captchas.\"\n );\n }\n console.error(\"Captcha solve completed successfully\");\n shouldContinue = false;\n } else {\n console.error(\n `Still have ${pending.length} pending captchas, waiting for more updates`\n );\n settledPromise = new Promise<void>((resolve) => {\n settledResolve = resolve;\n });\n }\n }\n\n return result;\n } finally {\n await extensionServer.unsubscribe(page, onCaptchaUpdate);\n }\n}\n\nexport async function waitForCaptchaSolve(\n page: Page,\n {\n timeoutInMs = 10_000,\n settleDurationMs = 5_000,\n }: Pick<\n WithWaitForCaptchaSolveOptions,\n \"timeoutInMs\" | \"settleDurationMs\"\n > = {}\n): Promise<void> {\n await withWaitForCaptchaSolve(async () => undefined, {\n page,\n timeoutInMs,\n settleDurationMs,\n waitForNetworkSettled: false,\n });\n}\n\nexport async function removeCaptchaEventListener(\n page: Page,\n status: CaptchaStatus,\n f: CaptchaCallback\n) {\n const extensionServer = getIntunedExtensionServer();\n await extensionServer.unsubscribe(page, f, status);\n}\n\nexport async function onCaptchaEvent(\n page: Page,\n status: CaptchaStatus,\n f: CaptchaCallback\n) {\n const extensionServer = getIntunedExtensionServer();\n await extensionServer.subscribe(page, f, status);\n}\n\nexport async function onceCaptchaEvent(\n page: Page,\n status: CaptchaStatus,\n f: CaptchaCallback\n) {\n const extensionServer = getIntunedExtensionServer();\n\n const oneTimeHandler: CaptchaCallback = async (captcha: Captcha) => {\n await extensionServer.unsubscribe(page, oneTimeHandler, status);\n await f(captcha);\n };\n\n await extensionServer.subscribe(page, oneTimeHandler, status);\n}\n\nasync function setAutoSolve(context: BrowserContext, enabled: boolean) {\n const worker = await getIntunedExtensionWorker(context);\n if (!worker) {\n if (!enabled) {\n return;\n }\n throw new Error(\"Intuned service worker not found\");\n }\n\n await worker.evaluate(\n `\n (enabled) => new Promise((resolve, reject) => {\n const updateSettings = () => {\n if (chrome?.storage?.local) {\n chrome.storage.local.get('settings', (result) => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n return;\n }\n const settings = result.settings || {};\n if (!settings.settings) {\n settings.settings = {};\n }\n settings.settings.autoSolve = enabled;\n chrome.storage.local.set({ settings }, () => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve(true);\n }\n });\n });\n } else {\n setTimeout(updateSettings, 50);\n }\n };\n updateSettings();\n })\n `,\n enabled\n );\n}\n\nexport async function pauseCaptchaSolver(\n context: BrowserContext\n): Promise<void> {\n if (!(await isIntunedExtensionEnabled())) {\n throw new Error(\n \"Intuned extension is not enabled. Cannot pause captcha solver.\"\n );\n }\n await setAutoSolve(context, false);\n}\n\nexport async function resumeCaptchaSolver(\n context: BrowserContext\n): Promise<void> {\n if (!(await isIntunedExtensionEnabled())) {\n throw new Error(\n \"Intuned extension is not enabled. Cannot resume captcha solver.\"\n );\n }\n await setAutoSolve(context, true);\n}\n","import { API_KEY_ENV_VAR_KEY } from \"../common/constants\";\nimport { backendFunctionsTokenManager } from \"../common/jwtTokenManager\";\n\n/**\n * Retrieves the base URL and API key for the Intuned AI Gateway.\n\n * Returns:\n * { baseUrl: string, apiKey: string }: An object containing the base URL and API key\n */\nexport function getAiGatewayConfig() {\n const baseUrl = `${backendFunctionsTokenManager.backendFunctionsBaseUrl}/intuned-ai-gateway`;\n const apiKey =\n backendFunctionsTokenManager.token ??\n process.env[API_KEY_ENV_VAR_KEY] ??\n \"\";\n return { baseUrl, apiKey };\n}\n","import { getExecutionContext } from \"..\";\nimport { ensureDirSync } from \"fs-extra\";\n\nexport function getDownloadDirectoryPath() {\n const context = getExecutionContext();\n if (!context) {\n throw new Error(\"ExecutionContext not found\");\n }\n const path = `/tmp/downloads/${context.runId}`;\n ensureDirSync(path, {\n mode: 0o2775,\n });\n return path;\n}\n"],"mappings":"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","names":["getAuthSessionParameters","z","path","captchaSolverSettings","captchaSolverSettings","path"]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
29
|
+
// src/commands/common/tsNodeImport.ts
|
|
30
|
+
var tsNodeImport_exports = {};
|
|
31
|
+
__export(tsNodeImport_exports, {
|
|
32
|
+
tsNodeImport: () => tsNodeImport
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(tsNodeImport_exports);
|
|
35
|
+
var import_neverthrow = require("neverthrow");
|
|
36
|
+
|
|
37
|
+
// src/commands/common/utils/fileUtils.ts
|
|
38
|
+
var path = __toESM(require("path"));
|
|
39
|
+
var fs = __toESM(require("fs-extra"));
|
|
40
|
+
var import_dotenv = __toESM(require("dotenv"));
|
|
41
|
+
import_dotenv.default.config();
|
|
42
|
+
function getFullPathInProject(...paths) {
|
|
43
|
+
return path.resolve(process.cwd(), process.env.ROOT || "./", ...paths);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// src/commands/common/tsNodeImport.ts
|
|
47
|
+
var tsNodeImport = async (apiName) => {
|
|
48
|
+
require("ts-node").register({
|
|
49
|
+
transpileOnly: true,
|
|
50
|
+
compilerOptions: {
|
|
51
|
+
lib: ["dom", "es2020"]
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
const path2 = getFullPathInProject(...apiName.split("/"));
|
|
55
|
+
try {
|
|
56
|
+
const imported = await import(path2);
|
|
57
|
+
return (0, import_neverthrow.ok)(imported);
|
|
58
|
+
} catch (e) {
|
|
59
|
+
if ("code" in e && e.code.includes("MODULE_NOT_FOUND")) {
|
|
60
|
+
if ("requireStack" in e && Array.isArray(e.requireStack)) {
|
|
61
|
+
const isStackTopThisFile = e.requireStack[0] === __filename;
|
|
62
|
+
if (!isStackTopThisFile) {
|
|
63
|
+
return (0, import_neverthrow.err)({
|
|
64
|
+
type: "other",
|
|
65
|
+
error: e
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return (0, import_neverthrow.err)({
|
|
70
|
+
type: "not_found"
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return (0, import_neverthrow.err)({
|
|
74
|
+
type: "other",
|
|
75
|
+
error: e
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
80
|
+
0 && (module.exports = {
|
|
81
|
+
tsNodeImport
|
|
82
|
+
});
|
|
83
|
+
//# sourceMappingURL=tsNodeImport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/common/tsNodeImport.ts","../../../src/commands/common/utils/fileUtils.ts"],"sourcesContent":["import { err, ok } from \"neverthrow\";\nimport { getFullPathInProject } from \"./utils/fileUtils\";\nimport { ExtendedRunApiParameters } from \"@intuned/runtime-interface\";\n\nexport const tsNodeImport: ExtendedRunApiParameters[\"importFunction\"] = async (\n apiName\n) => {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n require(\"ts-node\").register({\n transpileOnly: true,\n compilerOptions: {\n lib: [\"dom\", \"es2020\"],\n },\n });\n\n const path = getFullPathInProject(...apiName.split(\"/\"));\n try {\n const imported = await import(path);\n return ok(imported);\n } catch (e: any) {\n if (\"code\" in e && e.code.includes(\"MODULE_NOT_FOUND\")) {\n if (\"requireStack\" in e && Array.isArray(e.requireStack)) {\n const isStackTopThisFile = e.requireStack[0] === __filename;\n if (!isStackTopThisFile) {\n // if the top of the require stack is not this file, it means the error is from a nested import\n return err({\n type: \"other\",\n error: e,\n });\n }\n }\n return err({\n type: \"not_found\",\n });\n }\n return err({\n type: \"other\",\n error: e,\n });\n }\n};\n","import * as path from \"path\";\nimport * as fs from \"fs-extra\";\nimport dotenv from \"dotenv\";\n\ndotenv.config();\n\n// TODO: todo-identity handle identity instances\nexport function getFullPathInProject(...paths: string[]) {\n return path.resolve(process.cwd(), process.env.ROOT || \"./\", ...paths);\n}\n\nexport async function listProjectFilesAndFolders() {\n const projectPath = path.resolve(process.cwd(), process.env.ROOT || \"./\");\n try {\n const files = await fs.readdir(projectPath, { withFileTypes: true });\n return files.map((file) => ({\n type: file.isDirectory() ? (\"Folder\" as const) : (\"File\" as const),\n fullPath: path.join(projectPath, file.name),\n name: file.name,\n }));\n } catch (err) {\n console.error(\"Error reading the directory:\", err);\n throw err;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAwB;;;ACAxB,WAAsB;AACtB,SAAoB;AACpB,oBAAmB;AAEnB,cAAAA,QAAO,OAAO;AAGP,SAAS,wBAAwB,OAAiB;AACvD,SAAY,aAAQ,QAAQ,IAAI,GAAG,QAAQ,IAAI,QAAQ,MAAM,GAAG,KAAK;AACvE;;;ADLO,IAAM,eAA2D,OACtE,YACG;AAEH,UAAQ,SAAS,EAAE,SAAS;AAAA,IAC1B,eAAe;AAAA,IACf,iBAAiB;AAAA,MACf,KAAK,CAAC,OAAO,QAAQ;AAAA,IACvB;AAAA,EACF,CAAC;AAED,QAAMC,QAAO,qBAAqB,GAAG,QAAQ,MAAM,GAAG,CAAC;AACvD,MAAI;AACF,UAAM,WAAW,MAAM,OAAOA;AAC9B,eAAO,sBAAG,QAAQ;AAAA,EACpB,SAAS,GAAQ;AACf,QAAI,UAAU,KAAK,EAAE,KAAK,SAAS,kBAAkB,GAAG;AACtD,UAAI,kBAAkB,KAAK,MAAM,QAAQ,EAAE,YAAY,GAAG;AACxD,cAAM,qBAAqB,EAAE,aAAa,CAAC,MAAM;AACjD,YAAI,CAAC,oBAAoB;AAEvB,qBAAO,uBAAI;AAAA,YACT,MAAM;AAAA,YACN,OAAO;AAAA,UACT,CAAC;AAAA,QACH;AAAA,MACF;AACA,iBAAO,uBAAI;AAAA,QACT,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AACA,eAAO,uBAAI;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;","names":["dotenv","path"]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getFullPathInProject
|
|
3
|
+
} from "../../chunk-BF45RZ32.mjs";
|
|
4
|
+
import {
|
|
5
|
+
__require
|
|
6
|
+
} from "../../chunk-LZOMFHX3.mjs";
|
|
7
|
+
|
|
8
|
+
// src/commands/common/tsNodeImport.ts
|
|
9
|
+
import { err, ok } from "neverthrow";
|
|
10
|
+
var tsNodeImport = async (apiName) => {
|
|
11
|
+
__require("ts-node").register({
|
|
12
|
+
transpileOnly: true,
|
|
13
|
+
compilerOptions: {
|
|
14
|
+
lib: ["dom", "es2020"]
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
const path = getFullPathInProject(...apiName.split("/"));
|
|
18
|
+
try {
|
|
19
|
+
const imported = await import(path);
|
|
20
|
+
return ok(imported);
|
|
21
|
+
} catch (e) {
|
|
22
|
+
if ("code" in e && e.code.includes("MODULE_NOT_FOUND")) {
|
|
23
|
+
if ("requireStack" in e && Array.isArray(e.requireStack)) {
|
|
24
|
+
const isStackTopThisFile = e.requireStack[0] === __filename;
|
|
25
|
+
if (!isStackTopThisFile) {
|
|
26
|
+
return err({
|
|
27
|
+
type: "other",
|
|
28
|
+
error: e
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return err({
|
|
33
|
+
type: "not_found"
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return err({
|
|
37
|
+
type: "other",
|
|
38
|
+
error: e
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
export {
|
|
43
|
+
tsNodeImport
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=tsNodeImport.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/common/tsNodeImport.ts"],"sourcesContent":["import { err, ok } from \"neverthrow\";\nimport { getFullPathInProject } from \"./utils/fileUtils\";\nimport { ExtendedRunApiParameters } from \"@intuned/runtime-interface\";\n\nexport const tsNodeImport: ExtendedRunApiParameters[\"importFunction\"] = async (\n apiName\n) => {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n require(\"ts-node\").register({\n transpileOnly: true,\n compilerOptions: {\n lib: [\"dom\", \"es2020\"],\n },\n });\n\n const path = getFullPathInProject(...apiName.split(\"/\"));\n try {\n const imported = await import(path);\n return ok(imported);\n } catch (e: any) {\n if (\"code\" in e && e.code.includes(\"MODULE_NOT_FOUND\")) {\n if (\"requireStack\" in e && Array.isArray(e.requireStack)) {\n const isStackTopThisFile = e.requireStack[0] === __filename;\n if (!isStackTopThisFile) {\n // if the top of the require stack is not this file, it means the error is from a nested import\n return err({\n type: \"other\",\n error: e,\n });\n }\n }\n return err({\n type: \"not_found\",\n });\n }\n return err({\n type: \"other\",\n error: e,\n });\n }\n};\n"],"mappings":";;;;;;;;AAAA,SAAS,KAAK,UAAU;AAIjB,IAAM,eAA2D,OACtE,YACG;AAEH,YAAQ,SAAS,EAAE,SAAS;AAAA,IAC1B,eAAe;AAAA,IACf,iBAAiB;AAAA,MACf,KAAK,CAAC,OAAO,QAAQ;AAAA,IACvB;AAAA,EACF,CAAC;AAED,QAAM,OAAO,qBAAqB,GAAG,QAAQ,MAAM,GAAG,CAAC;AACvD,MAAI;AACF,UAAM,WAAW,MAAM,OAAO;AAC9B,WAAO,GAAG,QAAQ;AAAA,EACpB,SAAS,GAAQ;AACf,QAAI,UAAU,KAAK,EAAE,KAAK,SAAS,kBAAkB,GAAG;AACtD,UAAI,kBAAkB,KAAK,MAAM,QAAQ,EAAE,YAAY,GAAG;AACxD,cAAM,qBAAqB,EAAE,aAAa,CAAC,MAAM;AACjD,YAAI,CAAC,oBAAoB;AAEvB,iBAAO,IAAI;AAAA,YACT,MAAM;AAAA,YACN,OAAO;AAAA,UACT,CAAC;AAAA,QACH;AAAA,MACF;AACA,aAAO,IAAI;AAAA,QACT,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AACA,WAAO,IAAI;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
require_dist,
|
|
3
3
|
runApi
|
|
4
|
-
} from "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
4
|
+
} from "../../chunk-3AGSY4RT.mjs";
|
|
5
|
+
import "../../chunk-UO2E7T7T.mjs";
|
|
6
|
+
import "../../chunk-BF45RZ32.mjs";
|
|
6
7
|
import {
|
|
7
8
|
getExecutionContext,
|
|
8
9
|
runWithContext
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/interface/run.ts","../../../src/common/backendFunctions/getAuthSessionParameters.ts"],"sourcesContent":["import { program } from \"commander\";\nimport dotenv from \"dotenv\";\nimport {\n runWithContext,\n InternalRunInfo,\n} from \"../../common/asyncLocalStorage\";\nimport { runApi } from \"../../common/runApi\";\nimport { RunEnvironment } from \"../../runtime/enums\";\nimport { setTimeout } from \"timers/promises\";\nimport { backendFunctionsTokenManager } from \"../../common/jwtTokenManager\";\nimport { formatZodError } from \"../../common/formatZodError\";\nimport { err, ok } from \"neverthrow\";\nimport { getAuthSessionParameters } from \"../../common/backendFunctions/getAuthSessionParameters\";\nimport {\n RunApiParameters,\n InternalInvalidInputError,\n RunApiInputMessage,\n runApiInputSchema,\n JSONLFileClient,\n TCPSocketClient,\n UnixSocketClient,\n ImportFunction,\n} from \"@intuned/runtime-interface\";\n\ndotenv.config({\n path: `.env`,\n});\n\nexport function runAutomationCLI<ResultType = any>(\n importFunction?: (path: string) => Promise<any>\n) {\n program\n .description(\"run user automation and communicate using unix socket\")\n .argument(\n \"<input>\",\n \"In unix socket mode: path to the unix socket. In jsonl mode: path to the jsonl file. In tcp socket mode: host:port\"\n )\n .option(\"--mode [mode]\", \"Communication mode: unix, jsonl, or tcp\")\n .action(\n async (\n input: string,\n {\n mode = \"unix\",\n }: {\n mode: \"unix\" | \"jsonl\" | \"tcp\";\n }\n ) => {\n let context: InternalRunInfo;\n const throttleTime = 60 * 1000; // 1 minute\n let timeoutTimestamp = Date.now();\n\n const client = createClient(mode, input);\n\n const abortController = new AbortController();\n\n const interruptSignalHandler = async () => {\n abortController.abort();\n // wait for the script to finish gracefully\n await setTimeout(60_000);\n await client.close();\n process.exit(1);\n };\n\n process.on(\"SIGINT\", interruptSignalHandler);\n process.on(\"SIGTERM\", interruptSignalHandler);\n\n const messagesGenerator = client.receiveJSON();\n\n async function receiveMessages() {\n const data = await messagesGenerator.next();\n if (data.done) {\n return;\n }\n const inputParseResult = runApiInputSchema.safeParse(data.value);\n if (!inputParseResult.success) {\n console.error(\n \"Validation error:\",\n formatZodError(inputParseResult.error)\n );\n return {\n type: \"error\" as const,\n error: new InternalInvalidInputError(\n \"Invalid input\",\n formatZodError(inputParseResult.error)\n ),\n };\n }\n const input = inputParseResult.data;\n return input;\n }\n\n let resultPromise: ReturnType<typeof runApi<ResultType>> | null =\n null as any;\n\n async function handleMessage(message: RunApiInputMessage) {\n if (message.type === \"abort\") {\n abortController.abort();\n return;\n }\n if (message.type === \"tokenUpdate\") {\n backendFunctionsTokenManager.token =\n message.parameters.functionsToken;\n return;\n }\n if (message.type === \"start\") {\n context = {\n extendedPayloads: [],\n runEnvironment:\n message.parameters.runOptions.environment === \"standalone\"\n ? RunEnvironment.DEPLOYED\n : RunEnvironment.IDE,\n timeoutInfo: {\n extendTimeoutCallback: async () => {\n if (Date.now() - timeoutTimestamp < throttleTime) return;\n timeoutTimestamp = Date.now();\n client.sendJSON({ type: \"extend\" });\n },\n },\n getAuthSessionParameters,\n\n ...(message.parameters.context ?? {}),\n proxy: getProxyUrlFromRunOptions(message.parameters.runOptions),\n };\n backendFunctionsTokenManager.token =\n message.parameters.functionsToken;\n resultPromise = runWithContext(context, async () => {\n return await runApi<ResultType>({\n ...message.parameters,\n abortSignal: abortController.signal,\n importFunction: importFunction ?? _defaultImport,\n });\n });\n return;\n }\n }\n\n let receiveMessagesPromise = receiveMessages();\n\n while (true as boolean) {\n const messageOrResult = await Promise.race([\n receiveMessagesPromise.then((message) => ({\n type: \"message\" as const,\n message,\n })),\n ...(resultPromise\n ? [\n resultPromise.then((result) => ({\n type: \"result\" as const,\n result,\n })),\n ]\n : []),\n ]);\n if (messageOrResult.type === \"message\") {\n const { message } = messageOrResult;\n if (message === undefined) {\n break;\n }\n if (message.type === \"error\") {\n client.sendJSON({\n type: \"done\",\n result: message.error.json,\n success: false,\n });\n break;\n }\n if (message.type === \"ping\") {\n client.sendJSON({\n type: \"pong\",\n });\n break;\n }\n await handleMessage(message);\n receiveMessagesPromise = receiveMessages();\n continue;\n }\n const { result } = messageOrResult;\n const success = result.isOk();\n const resultToSend = success ? result.value : result.error.json;\n client.sendJSON({\n type: \"done\",\n result: resultToSend,\n success,\n });\n break;\n }\n\n if (!client.closed) {\n await client.close();\n }\n\n process.exit(0);\n }\n );\n\n program.parse(process.argv);\n}\n\nfunction getProxyUrlFromRunOptions(runOptions: RunApiParameters[\"runOptions\"]) {\n if (runOptions?.environment !== \"standalone\") return undefined;\n const proxy = runOptions.proxy;\n if (!proxy) return undefined;\n const url = new URL(proxy.server);\n url.username = proxy.username;\n url.password = proxy.password;\n return url.toString();\n}\n\n// this is only for debugging purposes\nconst _defaultImport: ImportFunction = async (path) => {\n try {\n const imported = await import(`${process.cwd()}/${path}`);\n return ok(imported);\n } catch (e: any) {\n if (\n (\"code\" in e && e.code === \"MODULE_NOT_FOUND\") ||\n e.code === \"ERR_MODULE_NOT_FOUND\"\n ) {\n return err({\n type: \"not_found\",\n });\n }\n return err({\n type: \"other\",\n error: e,\n });\n }\n};\n\nfunction createClient(mode: \"unix\" | \"jsonl\" | \"tcp\", input: string) {\n if (mode === \"jsonl\") {\n return new JSONLFileClient(input);\n }\n if (mode === \"tcp\") {\n const [host, portString] = input.split(\":\");\n const port = Number(portString);\n if (!host || isNaN(port)) {\n throw new Error(\"Invalid tcp input, expected format host:port\");\n }\n return new TCPSocketClient(host, port);\n }\n return new UnixSocketClient(input);\n}\n\nif (require.main === module) {\n runAutomationCLI();\n}\n","import isNil from \"lodash/isNil\";\nimport { getExecutionContext } from \"../asyncLocalStorage\";\nimport { z } from \"zod\";\nimport { callBackendFunctionWithToken } from \"../jwtTokenManager\";\n\nconst authSessionParametersResponseSchema = z.object({\n parameters: z.any().refine((v) => v !== undefined),\n});\n\nexport async function getAuthSessionParameters() {\n const context = getExecutionContext();\n\n if (!context) {\n throw new Error(\n \"getAuthSessionParameters failed due to an internal error (context was not found).\"\n );\n }\n\n const authSessionId = context.authSessionId;\n\n if (isNil(authSessionId)) {\n throw new Error(\"AuthSessions are not enabled\");\n }\n\n const response = await callBackendFunctionWithToken(\n `auth-session/${authSessionId}/parameters`,\n {\n method: \"GET\",\n }\n );\n\n const body = await response.text();\n if (!response.ok) {\n throw new Error(\n `getAuthSessionParameters failed with status ${response.status}: ${body}`\n );\n }\n\n let json: unknown;\n try {\n json = JSON.parse(body);\n } catch (e) {\n throw new Error(`Expected JSON response, but got ${body}`);\n }\n\n return authSessionParametersResponseSchema.parse(json).parameters as any;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,eAAe;AACxB,OAAO,YAAY;AAOnB,SAAS,kBAAkB;AAG3B,SAAS,KAAK,UAAU;;;ACXxB,OAAO,WAAW;AAElB,SAAS,SAAS;AAGlB,IAAM,sCAAsC,EAAE,OAAO;AAAA,EACnD,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,MAAM,MAAS;AACnD,CAAC;AAED,eAAsB,2BAA2B;AAC/C,QAAM,UAAU,oBAAoB;AAEpC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAAgB,QAAQ;AAE9B,MAAI,MAAM,aAAa,GAAG;AACxB,UAAM,IAAI,MAAM,8BAA8B;AAAA,EAChD;AAEA,QAAM,WAAW,MAAM;AAAA,IACrB,gBAAgB,aAAa;AAAA,IAC7B;AAAA,MACE,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,QAAM,OAAO,MAAM,SAAS,KAAK;AACjC,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI;AAAA,MACR,+CAA+C,SAAS,MAAM,KAAK,IAAI;AAAA,IACzE;AAAA,EACF;AAEA,MAAI;AACJ,MAAI;AACF,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,SAAS,GAAG;AACV,UAAM,IAAI,MAAM,mCAAmC,IAAI,EAAE;AAAA,EAC3D;AAEA,SAAO,oCAAoC,MAAM,IAAI,EAAE;AACzD;;;ADjCA,+BASO;AAEP,OAAO,OAAO;AAAA,EACZ,MAAM;AACR,CAAC;AAEM,SAAS,iBACd,gBACA;AACA,UACG,YAAY,uDAAuD,EACnE;AAAA,IACC;AAAA,IACA;AAAA,EACF,EACC,OAAO,iBAAiB,yCAAyC,EACjE;AAAA,IACC,OACE,OACA;AAAA,MACE,OAAO;AAAA,IACT,MAGG;AACH,UAAI;AACJ,YAAM,eAAe,KAAK;AAC1B,UAAI,mBAAmB,KAAK,IAAI;AAEhC,YAAM,SAAS,aAAa,MAAM,KAAK;AAEvC,YAAM,kBAAkB,IAAI,gBAAgB;AAE5C,YAAM,yBAAyB,YAAY;AACzC,wBAAgB,MAAM;AAEtB,cAAM,WAAW,GAAM;AACvB,cAAM,OAAO,MAAM;AACnB,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAEA,cAAQ,GAAG,UAAU,sBAAsB;AAC3C,cAAQ,GAAG,WAAW,sBAAsB;AAE5C,YAAM,oBAAoB,OAAO,YAAY;AAE7C,qBAAe,kBAAkB;AAC/B,cAAM,OAAO,MAAM,kBAAkB,KAAK;AAC1C,YAAI,KAAK,MAAM;AACb;AAAA,QACF;AACA,cAAM,mBAAmB,2CAAkB,UAAU,KAAK,KAAK;AAC/D,YAAI,CAAC,iBAAiB,SAAS;AAC7B,kBAAQ;AAAA,YACN;AAAA,YACA,eAAe,iBAAiB,KAAK;AAAA,UACvC;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,OAAO,IAAI;AAAA,cACT;AAAA,cACA,eAAe,iBAAiB,KAAK;AAAA,YACvC;AAAA,UACF;AAAA,QACF;AACA,cAAMA,SAAQ,iBAAiB;AAC/B,eAAOA;AAAA,MACT;AAEA,UAAI,gBACF;AAEF,qBAAe,cAAc,SAA6B;AACxD,YAAI,QAAQ,SAAS,SAAS;AAC5B,0BAAgB,MAAM;AACtB;AAAA,QACF;AACA,YAAI,QAAQ,SAAS,eAAe;AAClC,uCAA6B,QAC3B,QAAQ,WAAW;AACrB;AAAA,QACF;AACA,YAAI,QAAQ,SAAS,SAAS;AAC5B,oBAAU;AAAA,YACR,kBAAkB,CAAC;AAAA,YACnB,gBACE,QAAQ,WAAW,WAAW,gBAAgB;AAAA,YAGhD,aAAa;AAAA,cACX,uBAAuB,YAAY;AACjC,oBAAI,KAAK,IAAI,IAAI,mBAAmB,aAAc;AAClD,mCAAmB,KAAK,IAAI;AAC5B,uBAAO,SAAS,EAAE,MAAM,SAAS,CAAC;AAAA,cACpC;AAAA,YACF;AAAA,YACA;AAAA,YAEA,GAAI,QAAQ,WAAW,WAAW,CAAC;AAAA,YACnC,OAAO,0BAA0B,QAAQ,WAAW,UAAU;AAAA,UAChE;AACA,uCAA6B,QAC3B,QAAQ,WAAW;AACrB,0BAAgB,eAAe,SAAS,YAAY;AAClD,mBAAO,MAAM,OAAmB;AAAA,cAC9B,GAAG,QAAQ;AAAA,cACX,aAAa,gBAAgB;AAAA,cAC7B,gBAAgB,kBAAkB;AAAA,YACpC,CAAC;AAAA,UACH,CAAC;AACD;AAAA,QACF;AAAA,MACF;AAEA,UAAI,yBAAyB,gBAAgB;AAE7C,aAAO,MAAiB;AACtB,cAAM,kBAAkB,MAAM,QAAQ,KAAK;AAAA,UACzC,uBAAuB,KAAK,CAAC,aAAa;AAAA,YACxC,MAAM;AAAA,YACN;AAAA,UACF,EAAE;AAAA,UACF,GAAI,gBACA;AAAA,YACE,cAAc,KAAK,CAACC,aAAY;AAAA,cAC9B,MAAM;AAAA,cACN,QAAAA;AAAA,YACF,EAAE;AAAA,UACJ,IACA,CAAC;AAAA,QACP,CAAC;AACD,YAAI,gBAAgB,SAAS,WAAW;AACtC,gBAAM,EAAE,QAAQ,IAAI;AACpB,cAAI,YAAY,QAAW;AACzB;AAAA,UACF;AACA,cAAI,QAAQ,SAAS,SAAS;AAC5B,mBAAO,SAAS;AAAA,cACd,MAAM;AAAA,cACN,QAAQ,QAAQ,MAAM;AAAA,cACtB,SAAS;AAAA,YACX,CAAC;AACD;AAAA,UACF;AACA,cAAI,QAAQ,SAAS,QAAQ;AAC3B,mBAAO,SAAS;AAAA,cACd,MAAM;AAAA,YACR,CAAC;AACD;AAAA,UACF;AACA,gBAAM,cAAc,OAAO;AAC3B,mCAAyB,gBAAgB;AACzC;AAAA,QACF;AACA,cAAM,EAAE,OAAO,IAAI;AACnB,cAAM,UAAU,OAAO,KAAK;AAC5B,cAAM,eAAe,UAAU,OAAO,QAAQ,OAAO,MAAM;AAC3D,eAAO,SAAS;AAAA,UACd,MAAM;AAAA,UACN,QAAQ;AAAA,UACR;AAAA,QACF,CAAC;AACD;AAAA,MACF;AAEA,UAAI,CAAC,OAAO,QAAQ;AAClB,cAAM,OAAO,MAAM;AAAA,MACrB;AAEA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AAEF,UAAQ,MAAM,QAAQ,IAAI;AAC5B;AAEA,SAAS,0BAA0B,YAA4C;AAC7E,MAAI,YAAY,gBAAgB,aAAc,QAAO;AACrD,QAAM,QAAQ,WAAW;AACzB,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,MAAM,IAAI,IAAI,MAAM,MAAM;AAChC,MAAI,WAAW,MAAM;AACrB,MAAI,WAAW,MAAM;AACrB,SAAO,IAAI,SAAS;AACtB;AAGA,IAAM,iBAAiC,OAAO,SAAS;AACrD,MAAI;AACF,UAAM,WAAW,MAAM,OAAO,GAAG,QAAQ,IAAI,CAAC,IAAI,IAAI;AACtD,WAAO,GAAG,QAAQ;AAAA,EACpB,SAAS,GAAQ;AACf,QACG,UAAU,KAAK,EAAE,SAAS,sBAC3B,EAAE,SAAS,wBACX;AACA,aAAO,IAAI;AAAA,QACT,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AACA,WAAO,IAAI;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;AAEA,SAAS,aAAa,MAAgC,OAAe;AACnE,MAAI,SAAS,SAAS;AACpB,WAAO,IAAI,yCAAgB,KAAK;AAAA,EAClC;AACA,MAAI,SAAS,OAAO;AAClB,UAAM,CAAC,MAAM,UAAU,IAAI,MAAM,MAAM,GAAG;AAC1C,UAAM,OAAO,OAAO,UAAU;AAC9B,QAAI,CAAC,QAAQ,MAAM,IAAI,GAAG;AACxB,YAAM,IAAI,MAAM,8CAA8C;AAAA,IAChE;AACA,WAAO,IAAI,yCAAgB,MAAM,IAAI;AAAA,EACvC;AACA,SAAO,IAAI,0CAAiB,KAAK;AACnC;AAEA,IAAI,UAAQ,SAAS,QAAQ;AAC3B,mBAAiB;AACnB;","names":["input","result"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/interface/run.ts","../../../src/common/backendFunctions/getAuthSessionParameters.ts"],"sourcesContent":["import { program } from \"commander\";\nimport dotenv from \"dotenv\";\nimport {\n runWithContext,\n InternalRunInfo,\n} from \"../../common/asyncLocalStorage\";\nimport { runApi } from \"../../common/runApi\";\nimport { RunEnvironment } from \"../../runtime/enums\";\nimport { setTimeout } from \"timers/promises\";\nimport { backendFunctionsTokenManager } from \"../../common/jwtTokenManager\";\nimport { formatZodError } from \"../../common/formatZodError\";\nimport { err, ok } from \"neverthrow\";\nimport { getAuthSessionParameters } from \"../../common/backendFunctions/getAuthSessionParameters\";\nimport {\n RunApiParameters,\n InternalInvalidInputError,\n RunApiInputMessage,\n runApiInputSchema,\n JSONLFileClient,\n TCPSocketClient,\n UnixSocketClient,\n ImportFunction,\n} from \"@intuned/runtime-interface\";\n\ndotenv.config({\n path: `.env`,\n});\n\nexport function runAutomationCLI<ResultType = any>(\n importFunction?: (path: string) => Promise<any>\n) {\n program\n .description(\"run user automation and communicate using unix socket\")\n .argument(\n \"<input>\",\n \"In unix socket mode: path to the unix socket. In jsonl mode: path to the jsonl file. In tcp socket mode: host:port\"\n )\n .option(\"--mode [mode]\", \"Communication mode: unix, jsonl, or tcp\")\n .action(\n async (\n input: string,\n {\n mode = \"unix\",\n }: {\n mode: \"unix\" | \"jsonl\" | \"tcp\";\n }\n ) => {\n let context: InternalRunInfo;\n const throttleTime = 60 * 1000; // 1 minute\n let timeoutTimestamp = Date.now();\n\n const client = createClient(mode, input);\n\n const abortController = new AbortController();\n\n const interruptSignalHandler = async () => {\n abortController.abort();\n // wait for the script to finish gracefully\n await setTimeout(60_000);\n await client.close();\n process.exit(1);\n };\n\n process.on(\"SIGINT\", interruptSignalHandler);\n process.on(\"SIGTERM\", interruptSignalHandler);\n\n const messagesGenerator = client.receiveJSON();\n\n async function receiveMessages() {\n const data = await messagesGenerator.next();\n if (data.done) {\n return;\n }\n const inputParseResult = runApiInputSchema.safeParse(data.value);\n if (!inputParseResult.success) {\n console.error(\n \"Validation error:\",\n formatZodError(inputParseResult.error)\n );\n return {\n type: \"error\" as const,\n error: new InternalInvalidInputError(\n \"Invalid input\",\n formatZodError(inputParseResult.error)\n ),\n };\n }\n const input = inputParseResult.data;\n return input;\n }\n\n let resultPromise: ReturnType<typeof runApi<ResultType>> | null =\n null as any;\n\n async function handleMessage(message: RunApiInputMessage) {\n if (message.type === \"abort\") {\n abortController.abort();\n return;\n }\n if (message.type === \"tokenUpdate\") {\n backendFunctionsTokenManager.token =\n message.parameters.functionsToken;\n return;\n }\n if (message.type === \"start\") {\n context = {\n extendedPayloads: [],\n runEnvironment:\n message.parameters.runOptions.environment === \"standalone\"\n ? RunEnvironment.DEPLOYED\n : RunEnvironment.IDE,\n timeoutInfo: {\n extendTimeoutCallback: async () => {\n if (Date.now() - timeoutTimestamp < throttleTime) return;\n timeoutTimestamp = Date.now();\n client.sendJSON({ type: \"extend\" });\n },\n },\n getAuthSessionParameters,\n\n ...(message.parameters.context ?? {}),\n proxy: getProxyUrlFromRunOptions(message.parameters.runOptions),\n };\n backendFunctionsTokenManager.token =\n message.parameters.functionsToken;\n resultPromise = runWithContext(context, async () => {\n return await runApi<ResultType>({\n ...message.parameters,\n abortSignal: abortController.signal,\n importFunction: importFunction ?? _defaultImport,\n });\n });\n return;\n }\n }\n\n let receiveMessagesPromise = receiveMessages();\n\n while (true as boolean) {\n const messageOrResult = await Promise.race([\n receiveMessagesPromise.then((message) => ({\n type: \"message\" as const,\n message,\n })),\n ...(resultPromise\n ? [\n resultPromise.then((result) => ({\n type: \"result\" as const,\n result,\n })),\n ]\n : []),\n ]);\n if (messageOrResult.type === \"message\") {\n const { message } = messageOrResult;\n if (message === undefined) {\n break;\n }\n if (message.type === \"error\") {\n client.sendJSON({\n type: \"done\",\n result: message.error.json,\n success: false,\n });\n break;\n }\n if (message.type === \"ping\") {\n client.sendJSON({\n type: \"pong\",\n });\n break;\n }\n await handleMessage(message);\n receiveMessagesPromise = receiveMessages();\n continue;\n }\n const { result } = messageOrResult;\n const success = result.isOk();\n const resultToSend = success ? result.value : result.error.json;\n client.sendJSON({\n type: \"done\",\n result: resultToSend,\n success,\n });\n break;\n }\n\n if (!client.closed) {\n await client.close();\n }\n\n process.exit(0);\n }\n );\n\n program.parse(process.argv);\n}\n\nfunction getProxyUrlFromRunOptions(runOptions: RunApiParameters[\"runOptions\"]) {\n if (runOptions?.environment !== \"standalone\") return undefined;\n const proxy = runOptions.proxy;\n if (!proxy) return undefined;\n const url = new URL(proxy.server);\n url.username = proxy.username;\n url.password = proxy.password;\n return url.toString();\n}\n\n// this is only for debugging purposes\nconst _defaultImport: ImportFunction = async (path) => {\n try {\n const imported = await import(`${process.cwd()}/${path}`);\n return ok(imported);\n } catch (e: any) {\n if (\n (\"code\" in e && e.code === \"MODULE_NOT_FOUND\") ||\n e.code === \"ERR_MODULE_NOT_FOUND\"\n ) {\n return err({\n type: \"not_found\",\n });\n }\n return err({\n type: \"other\",\n error: e,\n });\n }\n};\n\nfunction createClient(mode: \"unix\" | \"jsonl\" | \"tcp\", input: string) {\n if (mode === \"jsonl\") {\n return new JSONLFileClient(input);\n }\n if (mode === \"tcp\") {\n const [host, portString] = input.split(\":\");\n const port = Number(portString);\n if (!host || isNaN(port)) {\n throw new Error(\"Invalid tcp input, expected format host:port\");\n }\n return new TCPSocketClient(host, port);\n }\n return new UnixSocketClient(input);\n}\n\nif (require.main === module) {\n runAutomationCLI();\n}\n","import isNil from \"lodash/isNil\";\nimport { getExecutionContext } from \"../asyncLocalStorage\";\nimport { z } from \"zod\";\nimport { callBackendFunctionWithToken } from \"../jwtTokenManager\";\n\nconst authSessionParametersResponseSchema = z.object({\n parameters: z.any().refine((v) => v !== undefined),\n});\n\nexport async function getAuthSessionParameters() {\n const context = getExecutionContext();\n\n if (!context) {\n throw new Error(\n \"getAuthSessionParameters failed due to an internal error (context was not found).\"\n );\n }\n\n const authSessionId = context.authSessionId;\n\n if (isNil(authSessionId)) {\n throw new Error(\"AuthSessions are not enabled\");\n }\n\n const response = await callBackendFunctionWithToken(\n `auth-session/${authSessionId}/parameters`,\n {\n method: \"GET\",\n }\n );\n\n const body = await response.text();\n if (!response.ok) {\n throw new Error(\n `getAuthSessionParameters failed with status ${response.status}: ${body}`\n );\n }\n\n let json: unknown;\n try {\n json = JSON.parse(body);\n } catch (e) {\n throw new Error(`Expected JSON response, but got ${body}`);\n }\n\n return authSessionParametersResponseSchema.parse(json).parameters as any;\n}\n"],"mappings":"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","names":["input","result"]}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
checkAuthSessionWithRetries,
|
|
3
3
|
runApi
|
|
4
|
-
} from "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
4
|
+
} from "../../chunk-3AGSY4RT.mjs";
|
|
5
|
+
import "../../chunk-UO2E7T7T.mjs";
|
|
6
|
+
import "../../chunk-BF45RZ32.mjs";
|
|
6
7
|
import "../../chunk-W4UX6G4X.mjs";
|
|
7
8
|
import "../../chunk-NDMVGENG.mjs";
|
|
8
9
|
import "../../chunk-6ZRJOUQS.mjs";
|
package/dist/index.mjs
CHANGED
package/dist/runtime/index.mjs
CHANGED
|
@@ -15,7 +15,8 @@ import {
|
|
|
15
15
|
runInfo,
|
|
16
16
|
waitForCaptchaSolve,
|
|
17
17
|
withWaitForCaptchaSolve
|
|
18
|
-
} from "../chunk-
|
|
18
|
+
} from "../chunk-UO2E7T7T.mjs";
|
|
19
|
+
import "../chunk-BF45RZ32.mjs";
|
|
19
20
|
import "../chunk-W4UX6G4X.mjs";
|
|
20
21
|
import "../chunk-7YL2JUTE.mjs";
|
|
21
22
|
import "../chunk-FGV5T6SI.mjs";
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtime/extendTimeout.ts","../src/runtime/extendPayload.ts","../src/runtime/attemptStore.ts","../src/runtime/persistentStore.ts","../src/runtime/getAuthSessionParameters.ts","../src/runtime/runInfo.ts","../src/runtime/RunError.ts","../src/common/extension/intunedExtensionServer.ts","../src/common/extension/types.ts","../src/commands/common/utils/fileUtils.ts","../src/commands/common/utils/settings.ts","../src/common/extension/extensionsHelpers.ts","../src/runtime/captcha.ts","../src/runtime/getAiGatewayConfig.ts","../src/runtime/downloadDirectory.ts"],"sourcesContent":["import { getExecutionContext } from \"../common/asyncLocalStorage\";\n\nconst _DEBOUNCE_TIME = 60_000;\n\nexport function extendTimeout() {\n const context = getExecutionContext();\n\n if (!context) {\n throw new Error(\"extendTimeout failed due to an internal error.\");\n }\n\n const { timeoutInfo } = context;\n\n if (!timeoutInfo) {\n return;\n }\n\n if (timeoutInfo.extendTimeoutCallback !== undefined) {\n void timeoutInfo.extendTimeoutCallback().catch(() => undefined);\n }\n}\n","import { getExecutionContext } from \"../common/asyncLocalStorage\";\nimport { Payload } from \"./export\";\nimport { extendTimeout } from \"./extendTimeout\";\n\nexport function extendPayload(payload: Payload | Payload[]) {\n const context = getExecutionContext();\n\n if (!context) {\n throw new Error(\"extendPayload failed due to an internal error.\");\n }\n\n const items = Array.isArray(payload) ? payload : [payload];\n\n if (!context.extendedPayloads) {\n context.extendedPayloads = [...items];\n return;\n }\n\n context?.extendedPayloads.push(...items);\n\n extendTimeout();\n}\n","import { getExecutionContext } from \"../common/asyncLocalStorage\";\nimport { AttemptStore } from \"./export\";\n\nexport const attemptStore: AttemptStore = Object.freeze({\n get: (key: string) => {\n const context = getExecutionContext();\n return context?.store ? context.store[key] : undefined;\n },\n set: (key: string, value: any) => {\n const context = getExecutionContext();\n if (!context) {\n throw new Error(\"store.set failed due to an internal error.\");\n }\n if (!context.store) {\n context.store = {};\n }\n context.store[key] = value;\n },\n});\n","import { z } from \"zod\";\nimport { callBackendFunctionWithToken } from \"../common/jwtTokenManager\";\nimport type { PersistentStore } from \"./export\";\n\nconst forbiddenCharacters = /[:#]/g;\n\nconst keySchema = z\n .string()\n .min(1, \"Key must be at least 1 character long\")\n .refine(\n (key) => (key.match(forbiddenCharacters)?.length ?? 0) === 0,\n 'Key cannot contain the following characters: \":\" or \"#\"'\n );\n\nexport const persistentStore: PersistentStore = Object.freeze({\n get: async (key: string) => {\n const parsedKey = keySchema.parse(key);\n const response = await callBackendFunctionWithToken(\n `kv-store/${parsedKey}`,\n {\n method: \"GET\",\n }\n );\n const json = await response.json();\n if (!response.ok) {\n throw new Error(json.message);\n }\n return json.value;\n },\n set: async (key: string, value: any) => {\n const keyResult = keySchema.parse(key);\n const response = await callBackendFunctionWithToken(\n `kv-store/${keyResult}`,\n {\n method: \"PUT\",\n body: JSON.stringify(value),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n const json = await response.json();\n if (!response.ok) {\n throw new Error(json.message);\n }\n },\n});\n","import { getExecutionContext } from \"../common/asyncLocalStorage\";\n\nexport async function getAuthSessionParameters() {\n const context = getExecutionContext();\n\n if (!context) {\n throw new Error(\n \"getAuthSessionParameters failed due to an internal error (context was not found).\"\n );\n }\n\n const { getAuthSessionParameters } = context;\n\n if (!getAuthSessionParameters) {\n throw new Error(\n \"getAuthSessionParameters failed due to an internal error (helper was not found on context).\"\n );\n }\n\n return await getAuthSessionParameters();\n}\n","import { getExecutionContext } from \"../common/asyncLocalStorage\";\nimport { RunInfo } from \"./export\";\nimport { RunType, RunEnvironment } from \"./enums\";\n\nexport function runInfo(): RunInfo {\n const context = getExecutionContext();\n\n if (!context) {\n return {\n runEnvironment: RunEnvironment.IDE,\n // runType: RunType.SYNC,\n };\n }\n\n //remove extendedPayloads from the user exposed data\n const { extendedPayloads: _extendedPayloads, ...rest } = context;\n\n return rest;\n}\n","import { RunErrorOptions } from \"./export\";\n\nexport class RunError extends Error {\n options: RunErrorOptions;\n constructor(message: string, options?: RunErrorOptions) {\n super(message);\n this.message = message;\n this.name = \"USER_GENERATED_ERROR\";\n this.options = options ?? {\n retryable: false,\n };\n Object.setPrototypeOf(this, RunError.prototype);\n }\n}\n\nnew RunError(\"\", {});\n","import type * as playwright from \"playwright\";\nimport fastify, { type FastifyInstance } from \"fastify\";\nimport {\n Captcha,\n CaptchaCallback,\n CaptchaStatus,\n captchaSchema,\n} from \"./types\";\nimport { CaptchaSolverSettings } from \"../settingsSchema\";\nimport { resolveCaptchaSolverSettings } from \"./extensionsHelpers\";\n\ntype CaptchaSubscriber = {\n handler: CaptchaCallback;\n status?: CaptchaStatus;\n};\n\nclass TabCaptchaState {\n public readonly tabId: number;\n private captchasById: Map<string, Captcha>;\n private subscribers: Array<CaptchaSubscriber>;\n\n constructor(tabId: number) {\n this.tabId = tabId;\n this.captchasById = new Map();\n this.subscribers = new Array<CaptchaSubscriber>();\n }\n\n subscribe(handler: CaptchaSubscriber) {\n this.subscribers.push(handler);\n }\n\n unsubscribe(handler: CaptchaCallback, status?: CaptchaStatus) {\n const index = this.subscribers.findIndex(\n (subscriber) =>\n subscriber.handler === handler &&\n (subscriber.status === status || !status)\n );\n if (index !== -1) {\n this.subscribers.splice(index, 1);\n }\n }\n\n getCaptchas(): Captcha[] {\n return [...this.captchasById.values()];\n }\n\n async upsertCaptcha(captcha: Captcha) {\n this.captchasById.set(captcha.id, captcha);\n for (const subscriber of this.subscribers) {\n // Only call handler if no status filter specified or status matches\n if (!subscriber.status || subscriber.status === captcha.status) {\n await subscriber.handler(captcha);\n }\n }\n }\n}\n\nexport class ExtensionServer {\n private tabs: Map<number, TabCaptchaState>;\n private app: FastifyInstance | null = null;\n\n constructor() {\n this.tabs = new Map();\n }\n\n private getOrCreateTab(tabId: number): TabCaptchaState {\n const existing = this.tabs.get(tabId);\n if (existing) return existing;\n const created = new TabCaptchaState(tabId);\n this.tabs.set(tabId, created);\n return created;\n }\n\n public async handleUpsertCaptcha(captcha: Captcha) {\n const tab = this.getOrCreateTab(captcha.tabId);\n await tab.upsertCaptcha(captcha);\n }\n\n async start({\n port,\n host = \"0.0.0.0\",\n }: {\n port: number;\n host?: string;\n }): Promise<void> {\n if (this.app) {\n return;\n }\n this.app = fastify({\n logger: false,\n bodyLimit: 1_000_000,\n });\n\n this.app.post(\"/state\", async (request, reply) => {\n try {\n const result = captchaSchema.safeParse(request.body);\n if (!result.success) {\n return reply.code(400).send({\n error: \"Invalid captcha payload\",\n details: result.error.flatten().fieldErrors,\n });\n }\n\n await this.handleUpsertCaptcha(result.data);\n return reply.code(200).send({});\n } catch (error: any) {\n console.error(\"Error processing captcha state update:\", error);\n return reply.code(500).send({\n error: \"Internal server error\",\n message: error?.message ?? String(error),\n });\n }\n });\n\n this.app.setNotFoundHandler((_request, reply) => {\n return reply.code(404).send({ error: \"Not found\" });\n });\n\n await this.app.listen({\n port,\n host,\n });\n }\n\n async stop(): Promise<void> {\n if (!this.app) return;\n const toClose = this.app;\n this.app = null;\n await toClose.close();\n }\n\n async getCaptchas(\n page: playwright.Page,\n status?: CaptchaStatus\n ): Promise<Captcha[]> {\n const tabId = await getTabId(page);\n const tab = this.tabs.get(tabId);\n if (!tab) return [];\n const captchas = tab.getCaptchas();\n if (!status) return captchas;\n return captchas.filter((c) => c.status === status && c.tabId === tabId);\n }\n\n async subscribe(\n page: playwright.Page,\n handler: CaptchaCallback,\n status?: CaptchaStatus\n ) {\n const tabId = await getTabId(page);\n const tab = this.getOrCreateTab(tabId);\n tab.subscribe({ handler, status });\n }\n\n async unsubscribe(\n page: playwright.Page,\n handler: CaptchaCallback,\n status?: CaptchaStatus\n ) {\n const tabId = await getTabId(page);\n const tab = this.tabs.get(tabId);\n if (!tab) return;\n tab.unsubscribe(handler, status);\n }\n\n removeTab(tabId: number) {\n this.tabs.delete(tabId);\n }\n\n async getTabId(page: playwright.Page): Promise<number> {\n return await getTabId(page);\n }\n}\n\nlet extensionServerSingleton: ExtensionServer | null = null;\n\nexport function getIntunedExtensionServer(): ExtensionServer {\n if (!extensionServerSingleton) {\n throw new Error(\"Intuned Extension Server is not initialized.\");\n }\n return extensionServerSingleton;\n}\n\nexport async function setupIntunedExtensionServer(\n captchaSolverSettings?: CaptchaSolverSettings\n) {\n if (!captchaSolverSettings) {\n captchaSolverSettings = await resolveCaptchaSolverSettings();\n }\n if (!extensionServerSingleton) {\n extensionServerSingleton = new ExtensionServer();\n }\n await extensionServerSingleton.start({\n port: captchaSolverSettings.port ?? 9000,\n });\n}\n\nexport async function cleanIntunedExtensionServer() {\n if (extensionServerSingleton) {\n await extensionServerSingleton.stop();\n extensionServerSingleton = null;\n }\n}\n\n// Cache tab IDs on the page object to avoid repeated expensive lookups\nconst TAB_ID_CACHE_KEY = \"__INTUNED_CACHED_TAB_ID__\";\n\nexport async function getTabId(page: playwright.Page): Promise<number> {\n // Check if we have a cached tab ID\n const cached = (page as any)[TAB_ID_CACHE_KEY];\n if (cached !== undefined && typeof cached === \"number\") {\n return cached;\n }\n\n // Try to get tab ID with a quick check first\n let tabId: number | undefined;\n try {\n tabId = await page.evaluate(\"window.__INTUNED_TAB_ID__\", { timeout: 100 });\n } catch {\n // If quick check fails, wait for it to be available\n await page.waitForFunction(\"window.__INTUNED_TAB_ID__ !== undefined\", {\n timeout: 15_000,\n });\n tabId = await page.evaluate(\"window.__INTUNED_TAB_ID__\");\n }\n\n const numericTabId = Number(tabId);\n // Cache the result on the page object\n (page as any)[TAB_ID_CACHE_KEY] = numericTabId;\n return numericTabId;\n}\n","import { z } from \"zod\";\n\nexport const captchaTypeSchema = z.enum([\n \"aws\",\n \"cloudflare\",\n \"customcaptcha\",\n \"funcaptcha\",\n \"geetest\",\n \"hcaptcha\",\n \"lemincaptcha\",\n \"recaptcha\",\n \"textcaptcha\",\n]);\n\nexport type CaptchaType = z.infer<typeof captchaTypeSchema>;\n\nexport const captchaStatusSchema = z.enum([\n \"attached\",\n \"solving\",\n \"solved\",\n \"error\",\n \"detached\",\n]);\n\nexport type CaptchaStatus = z.infer<typeof captchaStatusSchema>;\n\nexport const captchaErrorCodeSchema = z.enum([\n \"HIT_LIMIT\",\n \"MAX_RETRIES\",\n \"UNEXPECTED_SERVER_RESPONSE\",\n \"UNEXPECTED_ERROR\",\n]);\n\nexport type CaptchaErrorCode = z.infer<typeof captchaErrorCodeSchema>;\n\nexport const captchaErrorSchema = z.object({\n code: captchaErrorCodeSchema,\n error: z.unknown().optional(),\n});\n\nexport type CaptchaError = z.infer<typeof captchaErrorSchema>;\n\nconst captchaBaseSchema = z.object({\n id: z.string().min(1),\n tabId: z.number().int().positive(),\n type: captchaTypeSchema,\n retryCount: z.number().int().nonnegative().optional(),\n});\n\nexport type CaptchaBase = z.infer<typeof captchaBaseSchema>;\n\nconst captchaNonErrorSchema = captchaBaseSchema.extend({\n status: captchaStatusSchema.exclude([\"error\"]),\n});\n\nexport type CaptchaNonError = z.infer<typeof captchaNonErrorSchema>;\n\nconst captchaErrorStatusSchema = captchaBaseSchema.extend({\n status: z.literal(\"error\"),\n error: captchaErrorSchema,\n});\n\nexport type CaptchaErrorStatus = z.infer<typeof captchaErrorStatusSchema>;\n\nexport const captchaSchema = z.discriminatedUnion(\"status\", [\n captchaBaseSchema.extend({\n status: z.literal(\"attached\"),\n }),\n captchaBaseSchema.extend({\n status: z.literal(\"solving\"),\n }),\n captchaBaseSchema.extend({\n status: z.literal(\"solved\"),\n }),\n captchaBaseSchema.extend({\n status: z.literal(\"detached\"),\n }),\n captchaErrorStatusSchema,\n]);\n\nexport type Captcha = z.infer<typeof captchaSchema>;\n\nexport type CaptchaCallback = (captcha: Captcha) => Promise<void> | void;\n\nexport class CaptchaSolveError extends Error {\n constructor(message: string, public error: CaptchaError) {\n super(message);\n this.name = \"CaptchaSolveError\";\n }\n}\n\nexport class TimeoutError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"TimeoutError\";\n }\n}\n","import * as path from \"path\";\nimport * as fs from \"fs-extra\";\nimport dotenv from \"dotenv\";\n\ndotenv.config();\n\n// TODO: todo-identity handle identity instances\nexport function getFullPathInProject(...paths: string[]) {\n return path.resolve(process.cwd(), process.env.ROOT || \"./\", ...paths);\n}\n\nexport async function listProjectFilesAndFolders() {\n const projectPath = path.resolve(process.cwd(), process.env.ROOT || \"./\");\n try {\n const files = await fs.readdir(projectPath, { withFileTypes: true });\n return files.map((file) => ({\n type: file.isDirectory() ? (\"Folder\" as const) : (\"File\" as const),\n fullPath: path.join(projectPath, file.name),\n name: file.name,\n }));\n } catch (err) {\n console.error(\"Error reading the directory:\", err);\n throw err;\n }\n}\n","import { getFullPathInProject } from \"./fileUtils\";\nimport {\n IntunedSettings,\n settingsSchema,\n} from \"../../../common/settingsSchema\";\nimport { readFile } from \"fs/promises\";\n\nexport async function getSettings(): Promise<IntunedSettings> {\n const settingsFilePath = getFullPathInProject(\"Intuned.json\");\n\n const settings = await readFile(settingsFilePath, { encoding: \"utf-8\" });\n if (settings) {\n const parsed = settingsSchema.safeParse(JSON.parse(settings));\n if (parsed.success) {\n return parsed.data;\n } else {\n // ToDo: why does the type not work here?\n throw new Error((parsed as any).error.message);\n }\n }\n\n return {\n authSessions: { enabled: false },\n stealthMode: { enabled: false },\n };\n}\n","import type * as playwright from \"playwright\";\nimport { getSettings } from \"../../commands/common/utils/settings\";\nimport {\n CaptchaSolverSettings,\n captchaSolverSettingsSchema,\n CaptchaSolverSettingsWithRunContext,\n} from \"../settingsSchema\";\nimport { PROJECT_ID_ENV_VAR_KEY, WORKSPACE_ID_ENV_VAR_KEY } from \"../constants\";\nimport { backendFunctionsTokenManager } from \"../jwtTokenManager\";\nimport path from \"path\";\nimport { writeFile } from \"fs/promises\";\nimport { setupIntunedExtensionServer } from \"./intunedExtensionServer\";\nimport { getPort } from \"portfinder\";\n\nconst INTUNED_WORKER = \"intunedWorker.js\";\nconst INTUNED_EXTENSION_SETTINGS_FILE_NAME = \"intunedSettings.json\";\nconst INTUNED_CAPTCHA_EXTENSION_PORT_ENV_VAR = \"INTUNED_CAPTCHA_EXTENSION_PORT\";\n\nlet captchaSolverSettings: CaptchaSolverSettings | null = null;\n\nasync function getIntunedCaptchaExtensionPort(): Promise<number> {\n if (process.env.INTUNED_CAPTCHA_EXTENSION_PORT) {\n return parseInt(process.env.INTUNED_CAPTCHA_EXTENSION_PORT, 10);\n }\n return await getPort({});\n}\n\nexport async function resolveCaptchaSolverSettings(\n input?: unknown\n): Promise<CaptchaSolverSettings> {\n const parsed = captchaSolverSettingsSchema.parse(input || {});\n\n if (!parsed.port) {\n parsed.port = await getIntunedCaptchaExtensionPort();\n }\n\n return parsed;\n}\n\nfunction getIntunedCaptchaExtensionPortFromEnv(): number | null {\n const raw = process.env[INTUNED_CAPTCHA_EXTENSION_PORT_ENV_VAR];\n if (!raw) return null;\n const parsed = Number(raw);\n if (!Number.isFinite(parsed) || parsed <= 0 || parsed > 65535) {\n throw new Error(\n `Invalid ${INTUNED_CAPTCHA_EXTENSION_PORT_ENV_VAR}: ${raw}`\n );\n }\n return parsed;\n}\n\nexport function isIntunedExtensionLoaded() {\n return !!getIntunedExtensionPath();\n}\n\nexport function buildExtensionsList(): string[] {\n const extensionsList: string[] = [];\n if (isIntunedExtensionLoaded()) {\n const intunedExtensionPath = getIntunedExtensionPath();\n extensionsList.push(intunedExtensionPath);\n }\n return extensionsList;\n}\n\nexport function getIntunedExtensionPath() {\n return process.env.INTUNED_EXTENSION_PATH as string;\n}\n\nexport async function isIntunedExtensionEnabled() {\n const path = getIntunedExtensionPath();\n if (!path) {\n return false;\n }\n\n const captchaSolverSettings = await getIntunedCaptchaSolverSettings();\n return captchaSolverSettings.enabled;\n}\n\nexport async function getIntunedExtensionWorker(\n context: playwright.BrowserContext\n): Promise<playwright.Worker | null> {\n if (!(await isIntunedExtensionEnabled())) {\n return null;\n }\n let attemptCount = 0;\n while (attemptCount < 4) {\n const intunedServiceWorker = context\n .serviceWorkers()\n .find((serviceWorker) => serviceWorker.url().includes(INTUNED_WORKER));\n if (intunedServiceWorker) {\n return intunedServiceWorker;\n }\n try {\n await context.waitForEvent(\"serviceworker\", { timeout: 3000 });\n } catch (err: any) {\n console.log(`Error accessing service workers (attempt ${attemptCount})`);\n }\n attemptCount++;\n }\n console.error(\"Failed to get intuned worker after 5 attmepts\");\n return null;\n}\n\nexport async function getIntunedExtensionSettings(\n captchaSolverSettings: CaptchaSolverSettings\n): Promise<CaptchaSolverSettingsWithRunContext> {\n const [domain, workspaceId, projectId] = [\n process.env.FUNCTIONS_DOMAIN,\n process.env[WORKSPACE_ID_ENV_VAR_KEY],\n process.env.INTUNED_INTEGRATION_ID ?? process.env[PROJECT_ID_ENV_VAR_KEY],\n ];\n if (!domain || !workspaceId || !projectId) {\n const missingEnvVars = [\n domain && \"FUNCTIONS_DOMAIN\",\n workspaceId && WORKSPACE_ID_ENV_VAR_KEY,\n projectId && `INTUNED_INTEGRATION_ID OR ${PROJECT_ID_ENV_VAR_KEY}`,\n ];\n throw new Error(\n `Missing required environment variables: ${missingEnvVars}`\n );\n }\n\n const authentication = (() => {\n if (process.env.INTUNED_API_KEY) {\n return { type: \"apiKey\" as const, apiKey: process.env.INTUNED_API_KEY };\n }\n if (\n process.env.INTUNED_BASIC_AUTH_USERNAME &&\n process.env.INTUNED_BASIC_AUTH_PASSWORD\n ) {\n const credentials = `${process.env.INTUNED_BASIC_AUTH_USERNAME}:${process.env.INTUNED_BASIC_AUTH_PASSWORD}`;\n const token = Buffer.from(credentials, \"utf-8\").toString(\"base64\");\n return { type: \"basic\" as const, token };\n }\n return {\n type: \"bearer\" as const,\n token: backendFunctionsTokenManager.token,\n };\n })();\n\n const baseUrl = process.env.INTUNED_API_BASE_URL ?? domain;\n\n return {\n ...captchaSolverSettings,\n workspaceId,\n projectId,\n baseUrl,\n authentication,\n };\n}\n\nexport async function getIntunedCaptchaSolverSettings(): Promise<CaptchaSolverSettings> {\n if (captchaSolverSettings) {\n return captchaSolverSettings;\n }\n const settings = await getSettings();\n captchaSolverSettings = await resolveCaptchaSolverSettings(\n settings.captchaSolver\n );\n return captchaSolverSettings;\n}\n\nexport async function setupIntunedExtension() {\n if (!(await isIntunedExtensionEnabled())) {\n return;\n }\n const intunedExtensionPath = getIntunedExtensionPath();\n const intunedExtensionSettingsPath = path.join(\n intunedExtensionPath,\n INTUNED_EXTENSION_SETTINGS_FILE_NAME\n );\n const captchaSolverSettings = await getIntunedCaptchaSolverSettings();\n await setupIntunedExtensionServer(captchaSolverSettings);\n const captchaSolverSettingsWithRunContext = await getIntunedExtensionSettings(\n captchaSolverSettings\n );\n\n await writeFile(\n intunedExtensionSettingsPath,\n JSON.stringify(captchaSolverSettingsWithRunContext)\n );\n}\n","import type { Page, BrowserContext } from \"playwright\";\n\nimport { getIntunedExtensionServer } from \"../common/extension/intunedExtensionServer\";\nimport {\n getIntunedExtensionWorker,\n isIntunedExtensionEnabled,\n} from \"../common/extension/extensionsHelpers\";\nimport {\n Captcha,\n CaptchaErrorStatus,\n CaptchaStatus,\n CaptchaCallback,\n TimeoutError,\n CaptchaSolveError,\n CaptchaError,\n} from \"../common/extension/types\";\n\nexport type WithWaitForCaptchaSolveOptions = {\n page: Page;\n timeoutInMs?: number;\n settleDurationMs?: number;\n waitForNetworkSettled?: boolean;\n};\n\nexport async function withWaitForCaptchaSolve<T>(\n callback: (page: Page) => Promise<T>,\n options: WithWaitForCaptchaSolveOptions\n): Promise<T> {\n const {\n page,\n timeoutInMs = 10_000,\n settleDurationMs = 5_000,\n waitForNetworkSettled = true,\n } = options;\n\n console.error(\n `Starting captcha solve wait (timeout=${timeoutInMs}ms, settleDuration=${settleDurationMs}ms, waitForNetworkSettled=${waitForNetworkSettled})`\n );\n\n const extensionServer = getIntunedExtensionServer();\n let settledResolve: (() => void) | null = null;\n let settledPromise = new Promise<void>((resolve) => {\n settledResolve = resolve;\n });\n let isTimeout = false;\n let captchasAppeared = false;\n let error: CaptchaError | undefined = undefined;\n let actionDone = false;\n\n const getPendingCaptchas = async () =>\n await extensionServer.getCaptchas(page, \"solving\");\n\n const hasNoPendingCaptchas = async () =>\n !captchasAppeared || (await getPendingCaptchas()).length === 0;\n\n const maybeSettle = async () => {\n if (await hasNoPendingCaptchas()) {\n settledResolve?.();\n }\n };\n\n const onCaptchaUpdate = async (_captcha: Captcha) => {\n const solvingCaptchas = await extensionServer.getCaptchas(page, \"solving\");\n const errorCaptchas = await extensionServer.getCaptchas(page, \"error\");\n\n console.error(\n `Captcha update received: solving=${solvingCaptchas.length}, errors=${errorCaptchas.length}`\n );\n\n if (solvingCaptchas.length > 0) {\n captchasAppeared = true;\n console.error(\n `Captchas detected: ${solvingCaptchas.map((c) => c.id).join(\", \")}`\n );\n }\n\n if (errorCaptchas.length > 0) {\n error = (errorCaptchas[0] as CaptchaErrorStatus).error;\n console.error(`Captcha error detected: ${error?.code}`);\n await maybeSettle();\n return;\n }\n\n if (solvingCaptchas.length === 0) {\n console.error(\"No pending captchas, settling\");\n await maybeSettle();\n }\n };\n\n const result = await callback(page);\n actionDone = true;\n if (waitForNetworkSettled) {\n try {\n await page.waitForLoadState(\"networkidle\");\n } catch (err) {\n console.error(`Failed to wait for networkidle. Error: ${err}`);\n }\n }\n\n const timeoutPromise = new Promise<void>((resolve) => {\n setTimeout(() => {\n isTimeout = true;\n console.error(\"Captcha solve timeout reached\");\n settledResolve?.();\n resolve();\n }, timeoutInMs);\n });\n\n await extensionServer.subscribe(page, onCaptchaUpdate);\n\n try {\n const initialPending = await getPendingCaptchas();\n console.error(`Found ${initialPending.length} ongoing captchas`);\n if (initialPending.length > 0) {\n captchasAppeared = true;\n }\n await maybeSettle();\n\n let shouldContinue = true;\n while (shouldContinue) {\n await Promise.race([settledPromise, timeoutPromise]);\n console.error(\n `Settled event received, waiting ${settleDurationMs}ms before checking`\n );\n await new Promise((r) => setTimeout(r, settleDurationMs));\n\n if (error) {\n console.error(`Raising captcha error: ${(error as CaptchaError).code}`);\n throw new CaptchaSolveError(\n `CAPTCHA Solve Error: ${(error as CaptchaError).code}`,\n error as CaptchaError\n );\n }\n const noPendingCaptchas = await hasNoPendingCaptchas();\n const pending = await getPendingCaptchas();\n console.error(\n `Check point: actionDone=${actionDone}, noPendingCaptchas=${noPendingCaptchas}, isTimeout=${isTimeout}, pendingCount=${pending.length}`\n );\n\n if ((actionDone && noPendingCaptchas) || isTimeout) {\n if (isTimeout && !noPendingCaptchas) {\n console.error(`Timeout with ${pending.length} pending captchas`);\n throw new TimeoutError(\n \"CAPTCHA Solve timed out with pending captchas.\"\n );\n }\n console.error(\"Captcha solve completed successfully\");\n shouldContinue = false;\n } else {\n console.error(\n `Still have ${pending.length} pending captchas, waiting for more updates`\n );\n settledPromise = new Promise<void>((resolve) => {\n settledResolve = resolve;\n });\n }\n }\n\n return result;\n } finally {\n await extensionServer.unsubscribe(page, onCaptchaUpdate);\n }\n}\n\nexport async function waitForCaptchaSolve(\n page: Page,\n {\n timeoutInMs = 10_000,\n settleDurationMs = 5_000,\n }: Pick<\n WithWaitForCaptchaSolveOptions,\n \"timeoutInMs\" | \"settleDurationMs\"\n > = {}\n): Promise<void> {\n await withWaitForCaptchaSolve(async () => undefined, {\n page,\n timeoutInMs,\n settleDurationMs,\n waitForNetworkSettled: false,\n });\n}\n\nexport async function removeCaptchaEventListener(\n page: Page,\n status: CaptchaStatus,\n f: CaptchaCallback\n) {\n const extensionServer = getIntunedExtensionServer();\n await extensionServer.unsubscribe(page, f, status);\n}\n\nexport async function onCaptchaEvent(\n page: Page,\n status: CaptchaStatus,\n f: CaptchaCallback\n) {\n const extensionServer = getIntunedExtensionServer();\n await extensionServer.subscribe(page, f, status);\n}\n\nexport async function onceCaptchaEvent(\n page: Page,\n status: CaptchaStatus,\n f: CaptchaCallback\n) {\n const extensionServer = getIntunedExtensionServer();\n\n const oneTimeHandler: CaptchaCallback = async (captcha: Captcha) => {\n await extensionServer.unsubscribe(page, oneTimeHandler, status);\n await f(captcha);\n };\n\n await extensionServer.subscribe(page, oneTimeHandler, status);\n}\n\nasync function setAutoSolve(context: BrowserContext, enabled: boolean) {\n const worker = await getIntunedExtensionWorker(context);\n if (!worker) {\n if (!enabled) {\n return;\n }\n throw new Error(\"Intuned service worker not found\");\n }\n\n await worker.evaluate(\n `\n (enabled) => new Promise((resolve, reject) => {\n const updateSettings = () => {\n if (chrome?.storage?.local) {\n chrome.storage.local.get('settings', (result) => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n return;\n }\n const settings = result.settings || {};\n if (!settings.settings) {\n settings.settings = {};\n }\n settings.settings.autoSolve = enabled;\n chrome.storage.local.set({ settings }, () => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve(true);\n }\n });\n });\n } else {\n setTimeout(updateSettings, 50);\n }\n };\n updateSettings();\n })\n `,\n enabled\n );\n}\n\nexport async function pauseCaptchaSolver(\n context: BrowserContext\n): Promise<void> {\n if (!(await isIntunedExtensionEnabled())) {\n throw new Error(\n \"Intuned extension is not enabled. Cannot pause captcha solver.\"\n );\n }\n await setAutoSolve(context, false);\n}\n\nexport async function resumeCaptchaSolver(\n context: BrowserContext\n): Promise<void> {\n if (!(await isIntunedExtensionEnabled())) {\n throw new Error(\n \"Intuned extension is not enabled. Cannot resume captcha solver.\"\n );\n }\n await setAutoSolve(context, true);\n}\n","import { API_KEY_ENV_VAR_KEY } from \"../common/constants\";\nimport { backendFunctionsTokenManager } from \"../common/jwtTokenManager\";\n\n/**\n * Retrieves the base URL and API key for the Intuned AI Gateway.\n\n * Returns:\n * { baseUrl: string, apiKey: string }: An object containing the base URL and API key\n */\nexport function getAiGatewayConfig() {\n const baseUrl = `${backendFunctionsTokenManager.backendFunctionsBaseUrl}/intuned-ai-gateway`;\n const apiKey =\n backendFunctionsTokenManager.token ??\n process.env[API_KEY_ENV_VAR_KEY] ??\n \"\";\n return { baseUrl, apiKey };\n}\n","import { getExecutionContext } from \"..\";\nimport { ensureDirSync } from \"fs-extra\";\n\nexport function getDownloadDirectoryPath() {\n const context = getExecutionContext();\n if (!context) {\n throw new Error(\"ExecutionContext not found\");\n }\n const path = `/tmp/downloads/${context.runId}`;\n ensureDirSync(path, {\n mode: 0o2775,\n });\n return path;\n}\n"],"mappings":"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","names":["getAuthSessionParameters","z","path","path","captchaSolverSettings","captchaSolverSettings","resolve","path"]}
|