@finalai/computers 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of @finalai/computers might be problematic. Click here for more details.

Files changed (38) hide show
  1. package/README.md +16 -0
  2. package/dist/modules/browser-access.d.mts +18 -0
  3. package/dist/modules/browser-access.mjs +22 -0
  4. package/dist/modules/browser-access.mjs.map +7 -0
  5. package/dist/modules/client.d.mts +5 -0
  6. package/dist/modules/client.mjs +764 -0
  7. package/dist/modules/client.mjs.map +7 -0
  8. package/dist/modules/file-snapshots.d.mts +69 -0
  9. package/dist/modules/file-snapshots.mjs +64 -0
  10. package/dist/modules/file-snapshots.mjs.map +7 -0
  11. package/dist/modules/index.d.mts +11 -0
  12. package/dist/modules/index.mjs +63 -0
  13. package/dist/modules/index.mjs.map +7 -0
  14. package/dist/modules/json.d.mts +5 -0
  15. package/dist/modules/json.mjs +8 -0
  16. package/dist/modules/json.mjs.map +7 -0
  17. package/dist/modules/normalize.d.mts +7 -0
  18. package/dist/modules/normalize.mjs +210 -0
  19. package/dist/modules/normalize.mjs.map +7 -0
  20. package/dist/modules/result.d.mts +13 -0
  21. package/dist/modules/result.mjs +14 -0
  22. package/dist/modules/result.mjs.map +7 -0
  23. package/dist/modules/screen.d.mts +41 -0
  24. package/dist/modules/screen.mjs +37 -0
  25. package/dist/modules/screen.mjs.map +7 -0
  26. package/dist/modules/shell.d.mts +1 -0
  27. package/dist/modules/shell.mjs +5 -0
  28. package/dist/modules/shell.mjs.map +7 -0
  29. package/dist/modules/transport-api.d.mts +2 -0
  30. package/dist/modules/transport-api.mjs +7 -0
  31. package/dist/modules/transport-api.mjs.map +7 -0
  32. package/dist/modules/transport.d.mts +15 -0
  33. package/dist/modules/transport.mjs +67 -0
  34. package/dist/modules/transport.mjs.map +7 -0
  35. package/dist/modules/types.d.mts +467 -0
  36. package/dist/modules/types.mjs +69 -0
  37. package/dist/modules/types.mjs.map +7 -0
  38. package/package.json +52 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/client.ts"],
4
+ "sourcesContent": ["import * as z from 'zod';\nimport { computerBrowserAccessRequestSchema, computerBrowserAccessSchema } from \"./browser-access.mjs\";\nimport { computerSnapshotRequestSchema, computerSnapshotResponseSchema } from \"./file-snapshots.mjs\";\nimport { normalizeComputerBase, normalizeComputerImage, normalizeComputerInfo } from \"./normalize.mjs\";\nimport { err, ok, type ResultIface } from \"./result.mjs\";\nimport { jsonObjectSchema, type JsonObject, type JsonValue } from \"./json.mjs\";\nimport { computerScreenSessionSchema } from \"./screen.mjs\";\nimport { createTransport, type TransportIface, type TransportRequestArgsIface } from \"./transport.mjs\";\nimport {\n ComputerState,\n ComputerTokenScope,\n type ComputerBaseIface,\n type ComputerClientIface,\n type ComputerConnectTarget,\n type ComputerHandleIface,\n type ComputerImageIface,\n type ComputerInfoIface,\n type ComputerProcessIface,\n type ComputerRunIface,\n type ComputerTokenIface,\n type CreateComputerClientArgsIface,\n type CreateComputerOptsIface,\n type CreateTokenOptsIface,\n type ExecProcessOptsIface,\n type LifecycleActionOptionsIface,\n type ListImagesOptsIface,\n type ProcessHandleIface,\n type ProcessOutputBatchIface,\n type ProcessWaitResultIface,\n type ReadProcessOutputOptsIface,\n type RegisterImageOptsIface,\n type RunCommandOptsIface,\n} from \"./types.mjs\";\n\nconst computerFromResponse = (data: JsonValue): ComputerInfoIface | null => {\n const response = jsonObjectSchema.safeParse(data);\n if (!response.success) return null;\n return normalizeComputerInfo(response.data.computer ?? response.data.vm ?? null);\n};\n\nconst toBase64 = (data: string | Uint8Array): string =>\n (data instanceof Uint8Array ? Buffer.from(data) : Buffer.from(data, 'utf8')).toString('base64');\n\nconst processStateSchema = z.union([z.literal('running'), z.literal('exited')]);\nconst computerProcessSchema: z.ZodType<ComputerProcessIface> = z.object({\n id: z.string(),\n bootId: z.string(),\n command: z.string(),\n leaderPid: z.number().nullable().default(null),\n state: processStateSchema,\n keepsAwake: z.boolean().default(false),\n createdAtMs: z.number().default(0),\n updatedAtMs: z.number().default(0),\n endedAtMs: z.number().nullable().default(null),\n cpuUsec: z.number().default(0),\n memoryBytes: z.number().default(0),\n memoryPeakBytes: z.number().default(0),\n ioReadBytes: z.number().default(0),\n ioWriteBytes: z.number().default(0),\n processCount: z.number().default(0),\n descendantCount: z.number().optional(),\n});\nconst processesResponseSchema = z.object({ processes: z.array(computerProcessSchema) });\nconst managedProcessSchema = z.object({\n id: z.string(),\n bootId: z.string(),\n pid: z.number().nullable(),\n state: processStateSchema,\n});\nconst execResponseSchema = managedProcessSchema.extend({\n pid: z.number(),\n state: z.literal('running'),\n});\nconst outputChunkSchema = z.object({\n dataB64: z.string(),\n offset: z.number(),\n nextOffset: z.number(),\n eof: z.boolean(),\n});\nconst processOutputResponseSchema = z.object({\n stdout: outputChunkSchema,\n stderr: outputChunkSchema,\n state: processStateSchema,\n result: z.object({ exitCode: z.number().nullable(), signal: z.string().nullable() }).nullable(),\n});\nconst runResponseSchema = processOutputResponseSchema.extend({\n id: z.string(),\n bootId: z.string(),\n pid: z.number(),\n timedOut: z.boolean(),\n elapsedMs: z.number(),\n});\nconst okResponseSchema = z.object({ ok: z.literal(true) });\nconst fileReadResponseSchema = z.object({\n dataB64: z.string(),\n eof: z.boolean(),\n offset: z.number().optional(),\n});\n// One request stays well under the guest's 4 MiB read ceiling and proxy body limits.\nconst FILE_TRANSFER_CHUNK_BYTES = 1024 * 1024;\ninterface FileWriteBodyIface {\n path: string;\n dataB64: string;\n append?: boolean;\n}\nconst fileWriteResponseSchema = z.object({ bytesWritten: z.number() });\n\nconst decodeResult = <T>(\n result: ResultIface<JsonValue>,\n schema: z.ZodType<T>,\n errorMessage: string,\n): ResultIface<T> => {\n if (!result.ok) return result;\n const parsed = schema.safeParse(result.data);\n return parsed.success ? ok(parsed.data) : err(errorMessage);\n};\n\nconst resourcePath = (): string => '/computers';\n\nconst tokenResponseSchema = z.object({ id: z.string(), token: z.string() });\nconst PREVIEW_TOKEN_LIFETIME_MS = 60 * 60_000;\ninterface TokenMintBodyIface {\n name: string;\n scopes?: ComputerTokenScope[];\n expiresAt?: string;\n computerId?: string;\n vmId?: string;\n}\n\nconst mintToken = async (\n transport: TransportIface,\n opts: CreateTokenOptsIface,\n): Promise<ResultIface<ComputerTokenIface>> => {\n const body: TokenMintBodyIface = { name: opts.name };\n if (opts.scopes != null) body.scopes = opts.scopes;\n if (opts.expiresAt != null) body.expiresAt = opts.expiresAt.toISOString();\n if (opts.computerId != null) body.computerId = opts.computerId;\n return decodeResult(\n await transport.request({ method: 'POST', path: '/tokens', jsonBody: body }),\n tokenResponseSchema,\n 'unexpected token response shape',\n );\n};\n\nexport const createComputerHandle = (\n transport: TransportIface,\n initialInfo: ComputerInfoIface,\n): ComputerHandleIface => {\n let info = initialInfo;\n const computerPath = `${resourcePath()}/${encodeURIComponent(info.id)}`;\n\n const updateFromComputerResponse = (\n result: ResultIface<JsonValue>,\n ): ResultIface<ComputerInfoIface> => {\n if (!result.ok) {\n return result;\n }\n const computer = computerFromResponse(result.data);\n if (computer == null) {\n return err('unexpected computer response shape');\n }\n info = computer;\n return ok(computer);\n };\n\n const action = async (name: string): Promise<ResultIface<ComputerInfoIface>> =>\n updateFromComputerResponse(\n await transport.request({ method: 'POST', path: `${computerPath}/actions/${name}` }),\n );\n\n const processHandle = (process: {\n id: string;\n bootId: string;\n pid: number | null;\n state: 'running' | 'exited';\n }): ProcessHandleIface => {\n const path = `${computerPath}/processes/${encodeURIComponent(process.id)}`;\n let stdoutOffset = 0;\n let stderrOffset = 0;\n const readOutput = async (\n stream: 'stdout' | 'stderr',\n opts: { offset?: number; waitMs?: number } = {},\n ) => {\n const offset = opts.offset ?? (stream === 'stdout' ? stdoutOffset : stderrOffset);\n const result = await transport.request({\n method: 'GET',\n path: `${path}/output`,\n query: {\n bootId: process.bootId,\n stdoutOffset: String(stream === 'stdout' ? offset : 0),\n stderrOffset: String(stream === 'stderr' ? offset : 0),\n waitMs: String(opts.waitMs ?? 0),\n },\n });\n const parsed = decodeResult(\n result,\n processOutputResponseSchema,\n 'unexpected process output response shape',\n );\n if (!parsed.ok) return parsed;\n const chunk = parsed.data[stream];\n if (opts.offset == null) {\n if (stream === 'stdout') stdoutOffset = chunk.nextOffset;\n else stderrOffset = chunk.nextOffset;\n }\n const state = parsed.data.state;\n handle.state = state;\n const dataBytes = Buffer.from(chunk.dataB64, 'base64');\n return ok({\n data: dataBytes.toString('utf8'),\n dataBytes,\n offset: chunk.offset,\n nextOffset: chunk.nextOffset,\n eof: chunk.eof,\n state,\n });\n };\n const readBothOutputs = async (\n opts: ReadProcessOutputOptsIface,\n ): Promise<ResultIface<ProcessOutputBatchIface>> => {\n const parsed = decodeResult(\n await transport.request({\n method: 'GET',\n path: `${path}/output`,\n query: {\n bootId: process.bootId,\n stdoutOffset: String(opts.stdoutOffset),\n stderrOffset: String(opts.stderrOffset),\n waitMs: String(opts.waitMs ?? 0),\n },\n }),\n processOutputResponseSchema,\n 'unexpected process output response shape',\n );\n if (!parsed.ok) return parsed;\n const state = parsed.data.state;\n handle.state = state;\n const chunkFor = (stream: 'stdout' | 'stderr') => {\n const chunk = parsed.data[stream];\n const dataBytes = Buffer.from(chunk.dataB64, 'base64');\n return {\n data: dataBytes.toString('utf8'),\n dataBytes,\n offset: chunk.offset,\n nextOffset: chunk.nextOffset,\n eof: chunk.eof,\n state,\n };\n };\n return ok({\n stdout: chunkFor('stdout'),\n stderr: chunkFor('stderr'),\n state,\n result: parsed.data.result,\n });\n };\n const input = async (body: JsonObject): Promise<ResultIface<{ ok: true }>> =>\n decodeResult(\n await transport.request({\n method: 'POST',\n path: `${path}/input`,\n jsonBody: { bootId: process.bootId, ...body },\n }),\n okResponseSchema,\n 'unexpected process input response shape',\n );\n const handle: ProcessHandleIface = {\n id: process.id,\n bootId: process.bootId,\n pid: process.pid,\n state: process.state,\n readOutput: readBothOutputs,\n stdout: { read: (opts) => readOutput('stdout', opts) },\n stderr: { read: (opts) => readOutput('stderr', opts) },\n wait: async (opts = {}): Promise<ResultIface<ProcessWaitResultIface>> => {\n const deadline =\n opts.timeoutMs == null ? Number.POSITIVE_INFINITY : Date.now() + opts.timeoutMs;\n let waitStdoutOffset = stdoutOffset;\n let waitStderrOffset = stderrOffset;\n while (true) {\n const remaining = deadline - Date.now();\n if (remaining <= 0) return err(`wait timed out after ${opts.timeoutMs}ms`, 504);\n const result = await transport.request({\n method: 'GET',\n path: `${path}/output`,\n query: {\n bootId: process.bootId,\n stdoutOffset: String(waitStdoutOffset),\n stderrOffset: String(waitStderrOffset),\n waitMs: String(Math.min(30_000, remaining)),\n },\n });\n const parsed = decodeResult(\n result,\n processOutputResponseSchema,\n 'unexpected process wait response shape',\n );\n if (!parsed.ok) return parsed;\n waitStdoutOffset = parsed.data.stdout.nextOffset;\n waitStderrOffset = parsed.data.stderr.nextOffset;\n if (parsed.data.state === 'exited') {\n handle.state = 'exited';\n return ok(parsed.data.result ?? { exitCode: null, signal: null });\n }\n }\n },\n write: (data) => input({ dataB64: toBase64(data) }),\n eof: () => input({ eof: true }),\n resize: (cols, rows) => input({ cols, rows }),\n signal: (signal) => input({ signal }),\n terminate: async () =>\n decodeResult(\n await transport.request({\n method: 'POST',\n path: `${path}/terminate`,\n jsonBody: { bootId: process.bootId },\n }),\n okResponseSchema,\n 'unexpected process terminate response shape',\n ),\n };\n return handle;\n };\n\n const readFileBuffer = async (\n path: string,\n options?: { autoResume?: boolean },\n ): Promise<ResultIface<Buffer>> => {\n const chunks: Buffer[] = [];\n let offset = 0;\n for (;;) {\n const query: NonNullable<TransportRequestArgsIface['query']> = {\n path,\n offset: String(offset),\n length: String(FILE_TRANSFER_CHUNK_BYTES),\n };\n if (options?.autoResume != null) query.autoResume = String(options.autoResume);\n const result = await transport.request({\n method: 'GET',\n path: `${computerPath}/files`,\n query,\n });\n if (!result.ok) {\n return result;\n }\n const parsed = fileReadResponseSchema.safeParse(result.data);\n if (!parsed.success) {\n return err('unexpected file read response shape');\n }\n // A server without ranged reads ignores the offset and returns the file's start again.\n if (offset > 0 && parsed.data.offset !== offset) {\n return err('Server does not support ranged file reads; partial contents refused');\n }\n const chunk = Buffer.from(parsed.data.dataB64, 'base64');\n chunks.push(chunk);\n if (parsed.data.eof) {\n return ok(Buffer.concat(chunks));\n }\n if (chunk.length === 0) {\n return err('File read made no progress before the end of the file');\n }\n offset += chunk.length;\n }\n };\n\n const exec = async (\n command: string,\n opts: ExecProcessOptsIface,\n ): Promise<ResultIface<ProcessHandleIface>> => {\n const result = await transport.request({\n method: 'POST',\n path: `${computerPath}/exec`,\n jsonBody: {\n command,\n env: opts.env,\n cwd: opts.cwd,\n user: opts.user,\n pty: opts.pty,\n cols: opts.cols,\n rows: opts.rows,\n timeoutMs: opts.timeoutMs,\n autoResume: opts.autoResume,\n },\n });\n if (!result.ok) return result;\n const parsed = execResponseSchema.safeParse(result.data);\n return parsed.success ? ok(processHandle(parsed.data)) : err('unexpected exec response shape');\n };\n\n const run = async (\n command: string,\n opts: RunCommandOptsIface,\n ): Promise<ResultIface<ComputerRunIface>> => {\n const parsed = decodeResult(\n await transport.request({\n method: 'POST',\n path: `${computerPath}/run`,\n jsonBody: {\n command,\n env: opts.env,\n cwd: opts.cwd,\n user: opts.user,\n timeoutMs: opts.timeoutMs,\n autoResume: opts.autoResume,\n waitMs: opts.waitMs,\n readyTimeoutMs: opts.readyTimeoutMs,\n },\n }),\n runResponseSchema,\n 'unexpected run response shape',\n );\n if (!parsed.ok) return parsed;\n const { id, bootId, pid, state, result, timedOut, elapsedMs } = parsed.data;\n const chunkFor = (stream: 'stdout' | 'stderr') => {\n const chunk = parsed.data[stream];\n const dataBytes = Buffer.from(chunk.dataB64, 'base64');\n return {\n data: dataBytes.toString('utf8'),\n dataBytes,\n offset: chunk.offset,\n nextOffset: chunk.nextOffset,\n eof: chunk.eof,\n state,\n };\n };\n return ok({\n process: processHandle({ id, bootId, pid, state }),\n output: { stdout: chunkFor('stdout'), stderr: chunkFor('stderr'), state, result },\n timedOut,\n elapsedMs,\n });\n };\n\n return {\n screen: {\n status: async () => {\n const result = await transport.request({ method: 'GET', path: `${computerPath}/screen` });\n if (!result.ok) return result;\n const parsed = z.object({ available: z.boolean() }).safeParse(result.data);\n return parsed.success ? ok(parsed.data) : err('unexpected screen status response');\n },\n open: async (options) => {\n const result = await transport.request({\n method: 'POST',\n path: `${computerPath}/screen`,\n jsonBody: options ?? {},\n });\n if (!result.ok) return result;\n const parsed = computerScreenSessionSchema.safeParse(result.data);\n return parsed.success ? ok(parsed.data) : err('unexpected screen session response');\n },\n },\n computerUse: {\n status: async () => {\n const result = await transport.request({\n method: 'GET',\n path: `${computerPath}/computer-use`,\n });\n if (!result.ok) return result;\n const parsed = z\n .object({ available: z.boolean(), installed: z.boolean().optional() })\n .safeParse(result.data);\n return parsed.success\n ? ok({\n available: parsed.data.available,\n installed: parsed.data.installed ?? parsed.data.available,\n })\n : err('unexpected computer-use capability response shape');\n },\n available: async () => {\n const result = await transport.request({\n method: 'GET',\n path: `${computerPath}/computer-use`,\n });\n if (!result.ok) return result;\n const parsed = z.object({ available: z.boolean() }).safeParse(result.data);\n return parsed.success\n ? ok(parsed.data.available)\n : err('unexpected computer-use capability response shape');\n },\n open: async (options = {}) => {\n const result = await transport.request({\n method: 'POST',\n path: `${computerPath}/computer-use`,\n jsonBody: {\n cwd: options.cwd,\n readyTimeoutMs: options.readyTimeoutMs,\n },\n });\n if (!result.ok) return result;\n const parsed = execResponseSchema.safeParse(result.data);\n return parsed.success\n ? ok(processHandle(parsed.data))\n : err('unexpected computer-use process response shape');\n },\n },\n id: info.id,\n name: info.name,\n getInfo: () => info,\n refresh: async () =>\n updateFromComputerResponse(await transport.request({ method: 'GET', path: computerPath })),\n refreshActivity: () => action('refresh-activity'),\n exec: (command, opts = {}) => exec(command, opts),\n run: (command, opts = {}) => run(command, opts),\n processes: {\n list: async () => {\n const result = await transport.request({\n method: 'GET',\n path: `${computerPath}/processes`,\n });\n if (!result.ok) {\n return result;\n }\n const processes = processesResponseSchema.safeParse(result.data);\n if (!processes.success) {\n return err('unexpected processes response shape');\n }\n return ok(processes.data.processes);\n },\n get: async (id, bootId) => {\n const result = await transport.request({\n method: 'GET',\n path: `${computerPath}/processes/${encodeURIComponent(id)}`,\n query: { bootId },\n });\n if (!result.ok) return result;\n const process = z.object({ process: computerProcessSchema }).safeParse(result.data);\n if (!process.success) return err('unexpected process response shape');\n return ok(\n processHandle({\n id: process.data.process.id,\n bootId: process.data.process.bootId,\n pid: process.data.process.leaderPid,\n state: process.data.process.state,\n }),\n );\n },\n },\n browserAccess: {\n open: async (options) => {\n const input = computerBrowserAccessRequestSchema.safeParse(options);\n if (!input.success) return err('invalid browser access request');\n return decodeResult(\n await transport.request({\n method: 'POST',\n path: `${computerPath}/browser-access`,\n jsonBody: input.data,\n }),\n computerBrowserAccessSchema,\n 'unexpected browser access response',\n );\n },\n close: async (tokenId) =>\n decodeResult(\n await transport.request({\n method: 'DELETE',\n path: `${computerPath}/browser-access/${encodeURIComponent(tokenId)}`,\n }),\n okResponseSchema,\n 'unexpected browser access close response',\n ),\n },\n files: {\n snapshot: async (request) => {\n const parsed = computerSnapshotRequestSchema.safeParse(request);\n if (!parsed.success) return err('invalid file snapshot request');\n return decodeResult(\n await transport.request({\n method: 'POST',\n path: `${computerPath}/file-snapshots/read`,\n jsonBody: parsed.data,\n }),\n computerSnapshotResponseSchema,\n 'unexpected file snapshot response',\n );\n },\n read: async (path, options) => {\n const result = await readFileBuffer(path, options);\n return result.ok ? ok(result.data.toString('utf8')) : result;\n },\n readBytes: async (path, options) => {\n const result = await readFileBuffer(path, options);\n return result.ok ? ok(new Uint8Array(result.data)) : result;\n },\n write: async (path, data) => {\n const bytes =\n data instanceof Uint8Array\n ? Buffer.from(data.buffer, data.byteOffset, data.byteLength)\n : Buffer.from(data, 'utf8');\n let bytesWritten = 0;\n // The first request truncates, including for an empty file; later chunks append.\n for (\n let offset = 0;\n offset === 0 || offset < bytes.length;\n offset += FILE_TRANSFER_CHUNK_BYTES\n ) {\n const body: FileWriteBodyIface = {\n path,\n dataB64: bytes.subarray(offset, offset + FILE_TRANSFER_CHUNK_BYTES).toString('base64'),\n };\n if (offset > 0) body.append = true;\n const result = await transport.request({\n method: 'PUT',\n path: `${computerPath}/files`,\n jsonBody: body,\n });\n if (!result.ok) {\n return result;\n }\n const parsed = fileWriteResponseSchema.safeParse(result.data);\n if (!parsed.success) {\n return err('unexpected file write response shape');\n }\n bytesWritten += parsed.data.bytesWritten;\n }\n return ok({ bytesWritten });\n },\n },\n getHost: (port) => {\n if (info.hostname == null) {\n return null;\n }\n return port === 443 ? info.hostname : `${info.hostname}:${port}`;\n },\n createPreviewToken: (opts = {}) =>\n mintToken(transport, {\n name: opts.name ?? `preview ${info.name}`,\n computerId: info.id,\n scopes: [ComputerTokenScope.Http],\n expiresAt: opts.expiresAt ?? new Date(Date.now() + PREVIEW_TOKEN_LIFETIME_MS),\n }),\n pause: () => action('pause'),\n resume: () => action('resume'),\n start: () => action('start'),\n stop: () => action('stop'),\n restart: () => action('restart'),\n kill: () => action('delete'),\n settings: async (patch) =>\n updateFromComputerResponse(\n await transport.request({ method: 'PATCH', path: computerPath, jsonBody: patch }),\n ),\n };\n};\n\nexport const createComputerClientWithTransport = (\n transport: TransportIface,\n): ComputerClientIface => {\n const baseResourcePath = resourcePath();\n\n const getComputer = async (idOrName: string): Promise<ResultIface<ComputerInfoIface>> => {\n const result = await transport.request({\n method: 'GET',\n path: `${baseResourcePath}/${encodeURIComponent(idOrName)}`,\n });\n if (!result.ok) {\n return result;\n }\n const computer = computerFromResponse(result.data);\n if (computer == null) {\n return err('unexpected computer response shape');\n }\n return ok(computer);\n };\n\n const createComputer = async (\n opts: CreateComputerOptsIface,\n ): Promise<ResultIface<ComputerHandleIface>> => {\n const { idempotencyKey, ...body } = opts;\n const result = await transport.request({\n method: 'POST',\n path: baseResourcePath,\n jsonBody: body,\n headers: idempotencyKey == null ? undefined : { 'idempotency-key': idempotencyKey },\n });\n if (!result.ok) {\n return result;\n }\n const computer = computerFromResponse(result.data);\n if (computer == null) {\n return err('unexpected computer response shape');\n }\n return ok(createComputerHandle(transport, computer));\n };\n\n const connectComputer = async (\n target: ComputerConnectTarget,\n ): Promise<ResultIface<ComputerHandleIface>> => {\n const idOrName = 'id' in target ? target.id : target.name;\n const fetched = await getComputer(idOrName);\n if (!fetched.ok) {\n return fetched;\n }\n let computer = fetched.data;\n if (\n target.resumeIfNeeded !== false &&\n (computer.state === ComputerState.Paused ||\n computer.state === ComputerState.Stopped ||\n computer.state === ComputerState.Shelved)\n ) {\n const resumed = await transport.request({\n method: 'POST',\n path: `${baseResourcePath}/${encodeURIComponent(computer.id)}/actions/resume`,\n });\n if (!resumed.ok) {\n return resumed;\n }\n const resumedComputer = computerFromResponse(resumed.data);\n if (resumedComputer != null) {\n computer = resumedComputer;\n }\n }\n return ok(createComputerHandle(transport, computer));\n };\n\n const listComputers = async (): Promise<ResultIface<ComputerInfoIface[]>> => {\n const result = await transport.request({ method: 'GET', path: baseResourcePath });\n if (!result.ok) {\n return result;\n }\n const response = jsonObjectSchema.safeParse(result.data);\n if (!response.success) {\n return err('unexpected computer list response shape');\n }\n const rawComputers = response.data.computers ?? response.data.vms;\n if (!Array.isArray(rawComputers)) {\n return err('unexpected computer list response shape');\n }\n const computers: ComputerInfoIface[] = [];\n for (const raw of rawComputers) {\n const computer = normalizeComputerInfo(raw);\n if (computer != null) {\n computers.push(computer);\n }\n }\n return ok(computers);\n };\n\n const lifecycleAction = async (\n idOrName: string,\n actionName: string,\n options: LifecycleActionOptionsIface = {},\n ): Promise<ResultIface<ComputerInfoIface>> => {\n const result = await transport.request({\n method: 'POST',\n path: `${baseResourcePath}/${encodeURIComponent(idOrName)}/actions/${actionName}`,\n signal: options.signal,\n });\n if (!result.ok) {\n return result;\n }\n const computer = computerFromResponse(result.data);\n if (computer == null) {\n return err('unexpected computer response shape');\n }\n return ok(computer);\n };\n\n // POST actions/delete works on both surfaces (/internal has no DELETE route).\n const deleteComputer = async (idOrName: string): Promise<ResultIface<ComputerInfoIface>> =>\n lifecycleAction(idOrName, 'delete');\n\n const pauseComputer = async (idOrName: string): Promise<ResultIface<ComputerInfoIface>> =>\n lifecycleAction(idOrName, 'pause');\n\n const resumeComputer = async (idOrName: string): Promise<ResultIface<ComputerInfoIface>> =>\n lifecycleAction(idOrName, 'resume');\n\n const stopComputer = async (\n idOrName: string,\n options?: LifecycleActionOptionsIface,\n ): Promise<ResultIface<ComputerInfoIface>> => lifecycleAction(idOrName, 'stop', options);\n\n const stopComputerRetained = async (idOrName: string): Promise<ResultIface<ComputerInfoIface>> =>\n lifecycleAction(idOrName, 'stop-retained');\n\n const refreshComputerActivity = async (\n idOrName: string,\n ): Promise<ResultIface<ComputerInfoIface>> => lifecycleAction(idOrName, 'refresh-activity');\n\n const withEphemeralComputer = async <T>(\n opts: CreateComputerOptsIface,\n fn: (computer: ComputerHandleIface) => Promise<T>,\n ): Promise<T> => {\n const created = await createComputer({ ...opts, ephemeral: true });\n if (!created.ok) {\n throw new Error(`withEphemeralComputer: create failed: ${created.error}`);\n }\n try {\n return await fn(created.data);\n } finally {\n await created.data.kill();\n }\n };\n\n const imageFromResponse = (data: JsonValue): ComputerImageIface | null => {\n const response = jsonObjectSchema.safeParse(data);\n if (!response.success) return null;\n return normalizeComputerImage(response.data.image ?? response.data.version ?? null);\n };\n\n const registerImage = async (\n opts: RegisterImageOptsIface,\n ): Promise<ResultIface<ComputerImageIface>> => {\n const { idempotencyKey, ...body } = opts;\n const result = await transport.request({\n method: 'POST',\n path: '/images',\n jsonBody: body,\n headers: idempotencyKey == null ? undefined : { 'idempotency-key': idempotencyKey },\n });\n if (!result.ok) return result;\n const image = imageFromResponse(result.data);\n return image == null ? err('unexpected image response shape') : ok(image);\n };\n\n const getImage = async (id: string): Promise<ResultIface<ComputerImageIface>> => {\n const result = await transport.request({\n method: 'GET',\n path: `/images/${encodeURIComponent(id)}`,\n });\n if (!result.ok) return result;\n const image = imageFromResponse(result.data);\n return image == null ? err('unexpected image response shape') : ok(image);\n };\n\n const listImages = async (\n opts: ListImagesOptsIface = {},\n ): Promise<ResultIface<ComputerImageIface[]>> => {\n const query: Record<string, string> = {};\n if (opts.lineage != null) query.lineage = opts.lineage;\n if (opts.state != null) query.state = opts.state;\n const result = await transport.request({\n method: 'GET',\n path: '/images',\n query,\n });\n if (!result.ok) return result;\n const response = jsonObjectSchema.safeParse(result.data);\n const rawImages = response.success\n ? (response.data.images ?? response.data.versions)\n : undefined;\n if (!Array.isArray(rawImages)) {\n return err('unexpected image list response shape');\n }\n const images: ComputerImageIface[] = [];\n for (const raw of rawImages) {\n const image = normalizeComputerImage(raw);\n if (image != null) images.push(image);\n }\n return ok(images);\n };\n\n const baseFromResponse = (data: JsonValue): ComputerBaseIface | null => {\n const response = jsonObjectSchema.safeParse(data);\n return response.success ? normalizeComputerBase(response.data.base ?? null) : null;\n };\n\n const captureComputer = async (\n idOrName: string,\n options?: { retained?: boolean },\n ): Promise<ResultIface<ComputerBaseIface>> => {\n const result = await transport.request({\n method: 'POST',\n path: `${baseResourcePath}/${encodeURIComponent(idOrName)}/capture`,\n jsonBody: options,\n });\n if (!result.ok) return result;\n const base = baseFromResponse(result.data);\n return base == null ? err('unexpected base response shape') : ok(base);\n };\n\n const getBase = async (id: string): Promise<ResultIface<ComputerBaseIface>> => {\n const result = await transport.request({\n method: 'GET',\n path: `/bases/${encodeURIComponent(id)}`,\n });\n if (!result.ok) return result;\n const base = baseFromResponse(result.data);\n return base == null ? err('unexpected base response shape') : ok(base);\n };\n\n const setBaseRetention = async (\n id: string,\n retained: boolean,\n ): Promise<ResultIface<ComputerBaseIface>> => {\n const result = await transport.request({\n method: 'PATCH',\n path: `/bases/${encodeURIComponent(id)}`,\n jsonBody: { retained },\n });\n if (!result.ok) return result;\n const base = baseFromResponse(result.data);\n return base == null ? err('unexpected base response shape') : ok(base);\n };\n\n const revokeToken = async (id: string): Promise<ResultIface<void>> => {\n const result = decodeResult(\n await transport.request({ method: 'DELETE', path: `/tokens/${encodeURIComponent(id)}` }),\n okResponseSchema,\n 'unexpected token revoke response shape',\n );\n return result.ok ? ok(undefined) : result;\n };\n\n return {\n createComputer,\n connectComputer,\n registerImage,\n getImage,\n listImages,\n captureComputer,\n getBase,\n setBaseRetention,\n createToken: (opts) => mintToken(transport, opts),\n revokeToken,\n pauseComputer,\n resumeComputer,\n stopComputer,\n stopComputerRetained,\n refreshComputerActivity,\n listComputers,\n getComputer,\n deleteComputer,\n withEphemeralComputer,\n };\n};\n\nexport const createComputerClient = (args: CreateComputerClientArgsIface): ComputerClientIface =>\n createComputerClientWithTransport(createTransport(args));\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,69 @@
1
+ import * as z from 'zod';
2
+ export declare enum ComputerSnapshotOperation {
3
+ Stat = "stat",
4
+ ReadDirectory = "list_directory",
5
+ Read = "read"
6
+ }
7
+ export declare const computerSnapshotRequestSchema: z.ZodObject<{
8
+ operation: z.ZodDiscriminatedUnion<[z.ZodObject<{
9
+ kind: z.ZodLiteral<ComputerSnapshotOperation.Stat>;
10
+ path: z.ZodString;
11
+ }, z.core.$strip>, z.ZodObject<{
12
+ kind: z.ZodLiteral<ComputerSnapshotOperation.ReadDirectory>;
13
+ path: z.ZodString;
14
+ }, z.core.$strip>, z.ZodObject<{
15
+ kind: z.ZodLiteral<ComputerSnapshotOperation.Read>;
16
+ path: z.ZodString;
17
+ offset: z.ZodNumber;
18
+ maxBytes: z.ZodNumber;
19
+ }, z.core.$strip>], "kind">;
20
+ storageGenerationId: z.ZodOptional<z.ZodString>;
21
+ }, z.core.$strict>;
22
+ export declare const computerSnapshotResponseSchema: z.ZodObject<{
23
+ snapshot: z.ZodObject<{
24
+ storageGenerationId: z.ZodString;
25
+ capturedAt: z.ZodString;
26
+ }, z.core.$strip>;
27
+ result: z.ZodDiscriminatedUnion<[z.ZodObject<{
28
+ kind: z.ZodLiteral<ComputerSnapshotOperation.Stat>;
29
+ entry: z.ZodObject<{
30
+ name: z.ZodString;
31
+ path: z.ZodString;
32
+ resolvedPath: z.ZodString;
33
+ isDirectory: z.ZodBoolean;
34
+ isFile: z.ZodBoolean;
35
+ isSymlink: z.ZodOptional<z.ZodBoolean>;
36
+ size: z.ZodNullable<z.ZodNumber>;
37
+ mtimeMs: z.ZodNullable<z.ZodNumber>;
38
+ grantAncestorOnly: z.ZodBoolean;
39
+ }, z.core.$strip>;
40
+ }, z.core.$strip>, z.ZodObject<{
41
+ kind: z.ZodLiteral<ComputerSnapshotOperation.ReadDirectory>;
42
+ entries: z.ZodArray<z.ZodObject<{
43
+ name: z.ZodString;
44
+ path: z.ZodString;
45
+ resolvedPath: z.ZodString;
46
+ isDirectory: z.ZodBoolean;
47
+ isFile: z.ZodBoolean;
48
+ isSymlink: z.ZodOptional<z.ZodBoolean>;
49
+ size: z.ZodNullable<z.ZodNumber>;
50
+ mtimeMs: z.ZodNullable<z.ZodNumber>;
51
+ grantAncestorOnly: z.ZodBoolean;
52
+ }, z.core.$strip>>;
53
+ truncated: z.ZodBoolean;
54
+ }, z.core.$strip>, z.ZodObject<{
55
+ kind: z.ZodLiteral<ComputerSnapshotOperation.Read>;
56
+ path: z.ZodString;
57
+ resolvedPath: z.ZodString;
58
+ offset: z.ZodNumber;
59
+ sizeBytes: z.ZodNumber;
60
+ contentBase64: z.ZodString;
61
+ truncated: z.ZodBoolean;
62
+ }, z.core.$strip>, z.ZodObject<{
63
+ kind: z.ZodLiteral<"error">;
64
+ code: z.ZodString;
65
+ message: z.ZodString;
66
+ }, z.core.$strip>], "kind">;
67
+ }, z.core.$strip>;
68
+ export type ComputerSnapshotRequestIface = z.infer<typeof computerSnapshotRequestSchema>;
69
+ export type ComputerSnapshotResponseIface = z.infer<typeof computerSnapshotResponseSchema>;
@@ -0,0 +1,64 @@
1
+ import * as z from "zod";
2
+ var ComputerSnapshotOperation = /* @__PURE__ */ ((ComputerSnapshotOperation2) => {
3
+ ComputerSnapshotOperation2["Stat"] = "stat";
4
+ ComputerSnapshotOperation2["ReadDirectory"] = "list_directory";
5
+ ComputerSnapshotOperation2["Read"] = "read";
6
+ return ComputerSnapshotOperation2;
7
+ })(ComputerSnapshotOperation || {});
8
+ const computerSnapshotRequestSchema = z.strictObject({
9
+ operation: z.discriminatedUnion("kind", [
10
+ z.object({
11
+ kind: z.literal("stat" /* Stat */),
12
+ path: z.string().min(1).max(4096)
13
+ }),
14
+ z.object({
15
+ kind: z.literal("list_directory" /* ReadDirectory */),
16
+ path: z.string().min(1).max(4096)
17
+ }),
18
+ z.object({
19
+ kind: z.literal("read" /* Read */),
20
+ path: z.string().min(1).max(4096),
21
+ offset: z.number().int().nonnegative(),
22
+ maxBytes: z.number().int().positive().max(1024 * 1024)
23
+ })
24
+ ]),
25
+ storageGenerationId: z.string().uuid().optional()
26
+ });
27
+ const entrySchema = z.object({
28
+ name: z.string(),
29
+ path: z.string(),
30
+ resolvedPath: z.string(),
31
+ isDirectory: z.boolean(),
32
+ isFile: z.boolean(),
33
+ isSymlink: z.boolean().optional(),
34
+ size: z.number().nullable(),
35
+ mtimeMs: z.number().nullable(),
36
+ grantAncestorOnly: z.boolean()
37
+ });
38
+ const computerSnapshotResponseSchema = z.object({
39
+ snapshot: z.object({ storageGenerationId: z.string(), capturedAt: z.string() }),
40
+ result: z.discriminatedUnion("kind", [
41
+ z.object({ kind: z.literal("stat" /* Stat */), entry: entrySchema }),
42
+ z.object({
43
+ kind: z.literal("list_directory" /* ReadDirectory */),
44
+ entries: z.array(entrySchema),
45
+ truncated: z.boolean()
46
+ }),
47
+ z.object({
48
+ kind: z.literal("read" /* Read */),
49
+ path: z.string(),
50
+ resolvedPath: z.string(),
51
+ offset: z.number(),
52
+ sizeBytes: z.number(),
53
+ contentBase64: z.string(),
54
+ truncated: z.boolean()
55
+ }),
56
+ z.object({ kind: z.literal("error"), code: z.string(), message: z.string() })
57
+ ])
58
+ });
59
+ export {
60
+ ComputerSnapshotOperation,
61
+ computerSnapshotRequestSchema,
62
+ computerSnapshotResponseSchema
63
+ };
64
+ //# sourceMappingURL=file-snapshots.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/file-snapshots.ts"],
4
+ "sourcesContent": ["import * as z from 'zod';\n\nexport enum ComputerSnapshotOperation {\n Stat = 'stat',\n ReadDirectory = 'list_directory',\n Read = 'read',\n}\n\nexport const computerSnapshotRequestSchema = z.strictObject({\n operation: z.discriminatedUnion('kind', [\n z.object({\n kind: z.literal(ComputerSnapshotOperation.Stat),\n path: z.string().min(1).max(4096),\n }),\n z.object({\n kind: z.literal(ComputerSnapshotOperation.ReadDirectory),\n path: z.string().min(1).max(4096),\n }),\n z.object({\n kind: z.literal(ComputerSnapshotOperation.Read),\n path: z.string().min(1).max(4096),\n offset: z.number().int().nonnegative(),\n maxBytes: z\n .number()\n .int()\n .positive()\n .max(1024 * 1024),\n }),\n ]),\n storageGenerationId: z.string().uuid().optional(),\n});\n\nconst entrySchema = z.object({\n name: z.string(),\n path: z.string(),\n resolvedPath: z.string(),\n isDirectory: z.boolean(),\n isFile: z.boolean(),\n isSymlink: z.boolean().optional(),\n size: z.number().nullable(),\n mtimeMs: z.number().nullable(),\n grantAncestorOnly: z.boolean(),\n});\n\nexport const computerSnapshotResponseSchema = z.object({\n snapshot: z.object({ storageGenerationId: z.string(), capturedAt: z.string() }),\n result: z.discriminatedUnion('kind', [\n z.object({ kind: z.literal(ComputerSnapshotOperation.Stat), entry: entrySchema }),\n z.object({\n kind: z.literal(ComputerSnapshotOperation.ReadDirectory),\n entries: z.array(entrySchema),\n truncated: z.boolean(),\n }),\n z.object({\n kind: z.literal(ComputerSnapshotOperation.Read),\n path: z.string(),\n resolvedPath: z.string(),\n offset: z.number(),\n sizeBytes: z.number(),\n contentBase64: z.string(),\n truncated: z.boolean(),\n }),\n z.object({ kind: z.literal('error'), code: z.string(), message: z.string() }),\n ]),\n});\n\nexport type ComputerSnapshotRequestIface = z.infer<typeof computerSnapshotRequestSchema>;\nexport type ComputerSnapshotResponseIface = z.infer<typeof computerSnapshotResponseSchema>;\n"],
5
+ "mappings": "AAAA,YAAY,OAAO;AAEZ,IAAK,4BAAL,kBAAKA,+BAAL;AACL,EAAAA,2BAAA,UAAO;AACP,EAAAA,2BAAA,mBAAgB;AAChB,EAAAA,2BAAA,UAAO;AAHG,SAAAA;AAAA,GAAA;AAML,MAAM,gCAAgC,EAAE,aAAa;AAAA,EAC1D,WAAW,EAAE,mBAAmB,QAAQ;AAAA,IACtC,EAAE,OAAO;AAAA,MACP,MAAM,EAAE,QAAQ,iBAA8B;AAAA,MAC9C,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI;AAAA,IAClC,CAAC;AAAA,IACD,EAAE,OAAO;AAAA,MACP,MAAM,EAAE,QAAQ,oCAAuC;AAAA,MACvD,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI;AAAA,IAClC,CAAC;AAAA,IACD,EAAE,OAAO;AAAA,MACP,MAAM,EAAE,QAAQ,iBAA8B;AAAA,MAC9C,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI;AAAA,MAChC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,MACrC,UAAU,EACP,OAAO,EACP,IAAI,EACJ,SAAS,EACT,IAAI,OAAO,IAAI;AAAA,IACpB,CAAC;AAAA,EACH,CAAC;AAAA,EACD,qBAAqB,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAClD,CAAC;AAED,MAAM,cAAc,EAAE,OAAO;AAAA,EAC3B,MAAM,EAAE,OAAO;AAAA,EACf,MAAM,EAAE,OAAO;AAAA,EACf,cAAc,EAAE,OAAO;AAAA,EACvB,aAAa,EAAE,QAAQ;AAAA,EACvB,QAAQ,EAAE,QAAQ;AAAA,EAClB,WAAW,EAAE,QAAQ,EAAE,SAAS;AAAA,EAChC,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,mBAAmB,EAAE,QAAQ;AAC/B,CAAC;AAEM,MAAM,iCAAiC,EAAE,OAAO;AAAA,EACrD,UAAU,EAAE,OAAO,EAAE,qBAAqB,EAAE,OAAO,GAAG,YAAY,EAAE,OAAO,EAAE,CAAC;AAAA,EAC9E,QAAQ,EAAE,mBAAmB,QAAQ;AAAA,IACnC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,iBAA8B,GAAG,OAAO,YAAY,CAAC;AAAA,IAChF,EAAE,OAAO;AAAA,MACP,MAAM,EAAE,QAAQ,oCAAuC;AAAA,MACvD,SAAS,EAAE,MAAM,WAAW;AAAA,MAC5B,WAAW,EAAE,QAAQ;AAAA,IACvB,CAAC;AAAA,IACD,EAAE,OAAO;AAAA,MACP,MAAM,EAAE,QAAQ,iBAA8B;AAAA,MAC9C,MAAM,EAAE,OAAO;AAAA,MACf,cAAc,EAAE,OAAO;AAAA,MACvB,QAAQ,EAAE,OAAO;AAAA,MACjB,WAAW,EAAE,OAAO;AAAA,MACpB,eAAe,EAAE,OAAO;AAAA,MACxB,WAAW,EAAE,QAAQ;AAAA,IACvB,CAAC;AAAA,IACD,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,OAAO,GAAG,MAAM,EAAE,OAAO,GAAG,SAAS,EAAE,OAAO,EAAE,CAAC;AAAA,EAC9E,CAAC;AACH,CAAC;",
6
+ "names": ["ComputerSnapshotOperation"]
7
+ }
@@ -0,0 +1,11 @@
1
+ export { createComputerClient } from "./client.mjs";
2
+ export { ComputerSnapshotOperation, computerSnapshotRequestSchema, computerSnapshotResponseSchema, type ComputerSnapshotRequestIface, type ComputerSnapshotResponseIface, } from "./file-snapshots.mjs";
3
+ export { isRecord, normalizeComputerBase, normalizeComputerImage, normalizeComputerInfo, } from "./normalize.mjs";
4
+ export { err, ok, orThrow } from "./result.mjs";
5
+ export type { ErrResultIface, OkResultIface, ResultIface } from "./result.mjs";
6
+ export { createTransport } from "./transport.mjs";
7
+ export type { TransportIface, TransportRequestArgsIface } from "./transport.mjs";
8
+ export { ComputerBaseState, ComputerCommandMode, ComputerEgressPolicy, ComputerIdlePolicy, ComputerImageSource, ComputerImageState, ComputerState, ComputerTokenScope, } from "./types.mjs";
9
+ export type { ComputerApiKeyAuthIface, ComputerBaseIface, ComputerClientAuth, ComputerClientIface, ComputerConnectTarget, ComputerFileWriteResultIface, ComputerFilesIface, ComputerHandleIface, ComputerImageIface, ComputerInfoIface, ComputerProcessIface, ComputerProcessesIface, ComputerRunIface, ComputerSettingsPatchIface, ComputerTokenIface, ComputerUseOpenOptsIface, ComputerUseStatusIface, CreateComputerBaseOptsIface, CreateComputerClientArgsIface, CreateComputerFromBaseOptsIface, CreateComputerFromImageVersionOptsIface, CreateComputerOptsIface, CreatePreviewTokenOptsIface, CreateTokenOptsIface, ExecProcessOptsIface, LifecycleActionOptionsIface, ListImagesOptsIface, ProcessHandleIface, ProcessOutputBatchIface, ProcessOutputChunkIface, ProcessOutputIface, ProcessWaitResultIface, ReadProcessOutputOptsIface, RegisterImageOptsIface, RunCommandOptsIface, } from "./types.mjs";
10
+ export { computerBrowserAccessRequestSchema, computerBrowserAccessSchema, type ComputerBrowserAccessIface, type ComputerBrowserAccessOptionsIface, } from "./browser-access.mjs";
11
+ export { ComputerScreenQuality, computerScreenIceServerSchema, computerScreenOpenSchema, computerScreenSessionSchema, type ComputerScreenIceServerIface, type ComputerScreenOpenOptionsIface, type ComputerScreenSessionIface, } from "./screen.mjs";
@@ -0,0 +1,63 @@
1
+ import { createComputerClient } from "./client.mjs";
2
+ import {
3
+ ComputerSnapshotOperation,
4
+ computerSnapshotRequestSchema,
5
+ computerSnapshotResponseSchema
6
+ } from "./file-snapshots.mjs";
7
+ import {
8
+ isRecord,
9
+ normalizeComputerBase,
10
+ normalizeComputerImage,
11
+ normalizeComputerInfo
12
+ } from "./normalize.mjs";
13
+ import { err, ok, orThrow } from "./result.mjs";
14
+ import { createTransport } from "./transport.mjs";
15
+ import {
16
+ ComputerBaseState,
17
+ ComputerCommandMode,
18
+ ComputerEgressPolicy,
19
+ ComputerIdlePolicy,
20
+ ComputerImageSource,
21
+ ComputerImageState,
22
+ ComputerState,
23
+ ComputerTokenScope
24
+ } from "./types.mjs";
25
+ import {
26
+ computerBrowserAccessRequestSchema,
27
+ computerBrowserAccessSchema
28
+ } from "./browser-access.mjs";
29
+ import {
30
+ ComputerScreenQuality,
31
+ computerScreenIceServerSchema,
32
+ computerScreenOpenSchema,
33
+ computerScreenSessionSchema
34
+ } from "./screen.mjs";
35
+ export {
36
+ ComputerBaseState,
37
+ ComputerCommandMode,
38
+ ComputerEgressPolicy,
39
+ ComputerIdlePolicy,
40
+ ComputerImageSource,
41
+ ComputerImageState,
42
+ ComputerScreenQuality,
43
+ ComputerSnapshotOperation,
44
+ ComputerState,
45
+ ComputerTokenScope,
46
+ computerBrowserAccessRequestSchema,
47
+ computerBrowserAccessSchema,
48
+ computerScreenIceServerSchema,
49
+ computerScreenOpenSchema,
50
+ computerScreenSessionSchema,
51
+ computerSnapshotRequestSchema,
52
+ computerSnapshotResponseSchema,
53
+ createComputerClient,
54
+ createTransport,
55
+ err,
56
+ isRecord,
57
+ normalizeComputerBase,
58
+ normalizeComputerImage,
59
+ normalizeComputerInfo,
60
+ ok,
61
+ orThrow
62
+ };
63
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/index.ts"],
4
+ "sourcesContent": ["export { createComputerClient } from \"./client.mjs\";\nexport {\n ComputerSnapshotOperation,\n computerSnapshotRequestSchema,\n computerSnapshotResponseSchema,\n type ComputerSnapshotRequestIface,\n type ComputerSnapshotResponseIface,\n} from \"./file-snapshots.mjs\";\nexport {\n isRecord,\n normalizeComputerBase,\n normalizeComputerImage,\n normalizeComputerInfo,\n} from \"./normalize.mjs\";\nexport { err, ok, orThrow } from \"./result.mjs\";\nexport type { ErrResultIface, OkResultIface, ResultIface } from \"./result.mjs\";\nexport { createTransport } from \"./transport.mjs\";\nexport type { TransportIface, TransportRequestArgsIface } from \"./transport.mjs\";\nexport {\n ComputerBaseState,\n ComputerCommandMode,\n ComputerEgressPolicy,\n ComputerIdlePolicy,\n ComputerImageSource,\n ComputerImageState,\n ComputerState,\n ComputerTokenScope,\n} from \"./types.mjs\";\nexport type {\n ComputerApiKeyAuthIface,\n ComputerBaseIface,\n ComputerClientAuth,\n ComputerClientIface,\n ComputerConnectTarget,\n ComputerFileWriteResultIface,\n ComputerFilesIface,\n ComputerHandleIface,\n ComputerImageIface,\n ComputerInfoIface,\n ComputerProcessIface,\n ComputerProcessesIface,\n ComputerRunIface,\n ComputerSettingsPatchIface,\n ComputerTokenIface,\n ComputerUseOpenOptsIface,\n ComputerUseStatusIface,\n CreateComputerBaseOptsIface,\n CreateComputerClientArgsIface,\n CreateComputerFromBaseOptsIface,\n CreateComputerFromImageVersionOptsIface,\n CreateComputerOptsIface,\n CreatePreviewTokenOptsIface,\n CreateTokenOptsIface,\n ExecProcessOptsIface,\n LifecycleActionOptionsIface,\n ListImagesOptsIface,\n ProcessHandleIface,\n ProcessOutputBatchIface,\n ProcessOutputChunkIface,\n ProcessOutputIface,\n ProcessWaitResultIface,\n ReadProcessOutputOptsIface,\n RegisterImageOptsIface,\n RunCommandOptsIface,\n} from \"./types.mjs\";\n\nexport {\n computerBrowserAccessRequestSchema,\n computerBrowserAccessSchema,\n type ComputerBrowserAccessIface,\n type ComputerBrowserAccessOptionsIface,\n} from \"./browser-access.mjs\";\n\nexport {\n ComputerScreenQuality,\n computerScreenIceServerSchema,\n computerScreenOpenSchema,\n computerScreenSessionSchema,\n type ComputerScreenIceServerIface,\n type ComputerScreenOpenOptionsIface,\n type ComputerScreenSessionIface,\n} from \"./screen.mjs\";\n"],
5
+ "mappings": "AAAA,SAAS,4BAA4B;AACrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,KAAK,IAAI,eAAe;AAEjC,SAAS,uBAAuB;AAEhC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAuCP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;",
6
+ "names": []
7
+ }
@@ -0,0 +1,5 @@
1
+ import * as z from 'zod';
2
+ export declare const jsonValueSchema: z.ZodJSONSchema;
3
+ export declare const jsonObjectSchema: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
4
+ export type JsonValue = z.infer<typeof jsonValueSchema>;
5
+ export type JsonObject = z.infer<typeof jsonObjectSchema>;
@@ -0,0 +1,8 @@
1
+ import * as z from "zod";
2
+ const jsonValueSchema = z.json();
3
+ const jsonObjectSchema = z.record(z.string(), jsonValueSchema);
4
+ export {
5
+ jsonObjectSchema,
6
+ jsonValueSchema
7
+ };
8
+ //# sourceMappingURL=json.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/json.ts"],
4
+ "sourcesContent": ["import * as z from 'zod';\n\nexport const jsonValueSchema = z.json();\nexport const jsonObjectSchema = z.record(z.string(), jsonValueSchema);\nexport type JsonValue = z.infer<typeof jsonValueSchema>;\nexport type JsonObject = z.infer<typeof jsonObjectSchema>;\n"],
5
+ "mappings": "AAAA,YAAY,OAAO;AAEZ,MAAM,kBAAkB,EAAE,KAAK;AAC/B,MAAM,mBAAmB,EAAE,OAAO,EAAE,OAAO,GAAG,eAAe;",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ import { type JsonObject, type JsonValue } from "./json.mjs";
2
+ import { ComputerImageState, type ComputerBaseIface, type ComputerImageIface, type ComputerInfoIface } from "./types.mjs";
3
+ export declare const isRecord: <TValue>(value: TValue) => value is TValue & JsonObject;
4
+ export declare const normalizeComputerInfo: (raw: JsonValue) => ComputerInfoIface | null;
5
+ export declare const imageStateCode: (state: ComputerImageState) => number;
6
+ export declare const normalizeComputerImage: (raw: JsonValue) => ComputerImageIface | null;
7
+ export declare const normalizeComputerBase: (raw: JsonValue) => ComputerBaseIface | null;
@@ -0,0 +1,210 @@
1
+ import * as z from "zod";
2
+ import { jsonObjectSchema } from "./json.mjs";
3
+ import {
4
+ ComputerBaseState,
5
+ ComputerImageSource,
6
+ ComputerImageState,
7
+ ComputerState
8
+ } from "./types.mjs";
9
+ const isRecord = (value) => jsonObjectSchema.safeParse(value).success;
10
+ const stringAt = (row, ...keys) => {
11
+ for (const key of keys) {
12
+ const value = row[key];
13
+ if (typeof value === "string") {
14
+ return value;
15
+ }
16
+ }
17
+ return null;
18
+ };
19
+ const numberAt = (row, ...keys) => {
20
+ for (const key of keys) {
21
+ const value = row[key];
22
+ if (typeof value === "number" && Number.isFinite(value)) {
23
+ return value;
24
+ }
25
+ }
26
+ return null;
27
+ };
28
+ const booleanAt = (row, ...keys) => {
29
+ for (const key of keys) {
30
+ const value = row[key];
31
+ if (typeof value === "boolean") {
32
+ return value;
33
+ }
34
+ }
35
+ return null;
36
+ };
37
+ const stringArrayAt = (row, ...keys) => {
38
+ for (const key of keys) {
39
+ const value = row[key];
40
+ if (Array.isArray(value)) {
41
+ return value.filter((item) => typeof item === "string");
42
+ }
43
+ }
44
+ return [];
45
+ };
46
+ const nullableRecordAt = (row, ...keys) => {
47
+ for (const key of keys) {
48
+ const value = row[key];
49
+ const parsed = jsonObjectSchema.safeParse(value);
50
+ if (parsed.success) return parsed.data;
51
+ }
52
+ return null;
53
+ };
54
+ const recordAt = (row, ...keys) => nullableRecordAt(row, ...keys) ?? {};
55
+ const safeIntegerSchema = z.number().int().refine(Number.isSafeInteger);
56
+ const checkpointTimestampSchema = z.union([
57
+ safeIntegerSchema,
58
+ z.string().regex(/^-?\d+$/).transform(Number).pipe(safeIntegerSchema)
59
+ ]).nullish();
60
+ const COMPUTER_STATE_VALUES = [
61
+ ComputerState.Unknown,
62
+ ComputerState.Pending,
63
+ ComputerState.Creating,
64
+ ComputerState.Running,
65
+ ComputerState.Paused,
66
+ ComputerState.Stopped,
67
+ ComputerState.Resuming,
68
+ ComputerState.Error,
69
+ ComputerState.Deleted,
70
+ ComputerState.Shelved
71
+ ];
72
+ const toComputerState = (value) => COMPUTER_STATE_VALUES.find((state) => state === value) ?? ComputerState.Unknown;
73
+ const COMPUTER_STATE_NAMES = {
74
+ [ComputerState.Unknown]: "unknown",
75
+ [ComputerState.Pending]: "pending",
76
+ [ComputerState.Creating]: "creating",
77
+ [ComputerState.Running]: "running",
78
+ [ComputerState.Paused]: "paused",
79
+ [ComputerState.Stopped]: "stopped",
80
+ [ComputerState.Resuming]: "resuming",
81
+ [ComputerState.Error]: "error",
82
+ [ComputerState.Deleted]: "deleted",
83
+ [ComputerState.Shelved]: "shelved"
84
+ };
85
+ const normalizeComputerInfo = (raw) => {
86
+ const parsed = jsonObjectSchema.safeParse(raw);
87
+ if (!parsed.success) return null;
88
+ const row = parsed.data;
89
+ const id = stringAt(row, "id");
90
+ const name = stringAt(row, "name");
91
+ const state = numberAt(row, "state");
92
+ if (id == null || name == null || state == null) {
93
+ return null;
94
+ }
95
+ const normalizedState = toComputerState(state);
96
+ const checkpointTimestamp = checkpointTimestampSchema.safeParse(
97
+ row.storage_checkpoint_completed_at_ms
98
+ );
99
+ return {
100
+ id,
101
+ name,
102
+ teamId: stringAt(row, "teamId", "team_id"),
103
+ ownerUserId: stringAt(row, "ownerUserId", "owner_user_id"),
104
+ state: normalizedState,
105
+ stateName: stringAt(row, "stateName", "state_name") ?? COMPUTER_STATE_NAMES[normalizedState],
106
+ desiredState: numberAt(row, "desiredState", "desired_state"),
107
+ image: stringAt(row, "image", "image_ref"),
108
+ imageVersionId: stringAt(row, "imageVersionId", "image_version_id"),
109
+ regionSlug: stringAt(row, "regionSlug"),
110
+ vcpu: numberAt(row, "vcpu"),
111
+ memoryMb: numberAt(row, "memoryMb", "memory_mb"),
112
+ diskGb: numberAt(row, "diskGb", "disk_gb"),
113
+ httpPort: numberAt(row, "httpPort", "http_port"),
114
+ httpPublic: booleanAt(row, "httpPublic", "http_public") ?? false,
115
+ ephemeral: booleanAt(row, "ephemeral") ?? false,
116
+ idleTimeoutSeconds: numberAt(row, "idleTimeoutSeconds", "idle_timeout_seconds"),
117
+ autoResume: booleanAt(row, "autoResume", "auto_resume") ?? true,
118
+ tags: stringArrayAt(row, "tags"),
119
+ comment: stringAt(row, "comment"),
120
+ errorMessage: stringAt(row, "errorMessage", "error_message"),
121
+ hostname: stringAt(row, "hostname"),
122
+ createdAt: stringAt(row, "createdAt", "created_at"),
123
+ lastActiveAt: stringAt(row, "lastActiveAt", "last_active_at"),
124
+ startupTimings: recordAt(row, "startup_timings"),
125
+ legacyBackupCheckpoint: nullableRecordAt(row, "legacy_backup_checkpoint"),
126
+ storageCheckpointCompletedAtMs: checkpointTimestamp.success ? checkpointTimestamp.data ?? null : null
127
+ };
128
+ };
129
+ const IMAGE_STATE_VALUES = [
130
+ ComputerImageState.Pending,
131
+ ComputerImageState.Building,
132
+ ComputerImageState.Ready,
133
+ ComputerImageState.Failed,
134
+ ComputerImageState.Expired
135
+ ];
136
+ const imageStateCode = (state) => IMAGE_STATE_VALUES.indexOf(state) + 1;
137
+ const toImageState = (row) => {
138
+ const name = stringAt(row, "state");
139
+ const byName = IMAGE_STATE_VALUES.find((state) => state === name);
140
+ if (byName != null) return byName;
141
+ const code = numberAt(row, "state");
142
+ return code == null ? null : IMAGE_STATE_VALUES[code - 1] ?? null;
143
+ };
144
+ const normalizeComputerImage = (raw) => {
145
+ const parsed = jsonObjectSchema.safeParse(raw);
146
+ if (!parsed.success) return null;
147
+ const row = parsed.data;
148
+ const id = stringAt(row, "id");
149
+ const reference = stringAt(row, "reference");
150
+ const digest = stringAt(row, "digest", "imageDigest");
151
+ const state = toImageState(row);
152
+ if (id == null || reference == null || digest == null || state == null) {
153
+ return null;
154
+ }
155
+ const source = stringAt(row, "source") === ComputerImageSource.Platform || numberAt(row, "source") === 1 ? ComputerImageSource.Platform : ComputerImageSource.Customer;
156
+ return {
157
+ id,
158
+ source,
159
+ reference,
160
+ lineage: stringAt(row, "lineage") ?? reference,
161
+ digest,
162
+ state,
163
+ error: stringAt(row, "error"),
164
+ sizes: stringArrayAt(row, "sizes"),
165
+ registryCredentialId: stringAt(row, "registryCredentialId"),
166
+ createdAt: stringAt(row, "createdAt"),
167
+ readyAt: stringAt(row, "readyAt"),
168
+ lastUsedAt: stringAt(row, "lastUsedAt")
169
+ };
170
+ };
171
+ const BASE_STATE_VALUES = [
172
+ ComputerBaseState.Capturing,
173
+ ComputerBaseState.Ready,
174
+ ComputerBaseState.Failed,
175
+ ComputerBaseState.Expired
176
+ ];
177
+ const normalizeComputerBase = (raw) => {
178
+ const parsed = jsonObjectSchema.safeParse(raw);
179
+ if (!parsed.success) return null;
180
+ const row = parsed.data;
181
+ const id = stringAt(row, "id");
182
+ const stateName = stringAt(row, "state");
183
+ const state = BASE_STATE_VALUES.find((value) => value === stateName);
184
+ const image = stringAt(row, "image");
185
+ const digest = stringAt(row, "digest");
186
+ if (id == null || state == null || image == null || digest == null) {
187
+ return null;
188
+ }
189
+ return {
190
+ id,
191
+ state,
192
+ error: stringAt(row, "error"),
193
+ computerId: stringAt(row, "computerId"),
194
+ image,
195
+ digest,
196
+ diskGb: numberAt(row, "diskGb"),
197
+ createdAt: stringAt(row, "createdAt"),
198
+ readyAt: stringAt(row, "readyAt"),
199
+ lastUsedAt: stringAt(row, "lastUsedAt"),
200
+ retained: row.retained === true
201
+ };
202
+ };
203
+ export {
204
+ imageStateCode,
205
+ isRecord,
206
+ normalizeComputerBase,
207
+ normalizeComputerImage,
208
+ normalizeComputerInfo
209
+ };
210
+ //# sourceMappingURL=normalize.mjs.map