← Public packages
@kody/browser-run
Call Cloudflare Browser Run Quick Actions and reuse shared sessions with createBrowserContext.
src/sessions/list.ts
73 lines · 2.1 KB · TypeScriptimport { boolean, number, object, optional, parse, string } from 'remix/data-schema'
import {
accountPath,
browserRunFetch,
pickAuth,
requireAccountId,
} from '../client.ts'
const listInput = object(
{
accountId: string(),
apiTokenSecret: optional(string()),
limit: optional(number()),
offset: optional(number()),
dryRun: optional(boolean()),
},
{ unknownKeys: 'error' },
)
/**
* List active Cloudflare Browser Run sessions
* (`GET .../browser-rendering/devtools/session`).
* Prefer this before launching a new browser; pair with `./open-isolated`.
*
* @param raw.accountId - Cloudflare account id
* @param raw.limit - Optional page limit
* @param raw.offset - Optional page offset
* @param raw.dryRun - When true, return the request preview without calling CF
* @param raw.apiTokenSecret - Optional alternate secret name
* @returns `{ sessions, count }` or a dry-run preview
*
* @example
* import listSessions from 'kody:@kody/browser-run/sessions/list'
* const { sessions } = await listSessions({ accountId: 'YOUR_ACCOUNT_ID' })
*/
export default async function listSessions(raw: unknown = {}) {
const input = parse(listInput, raw ?? {})
const auth = pickAuth(input)
const accountId = requireAccountId(auth)
const path = accountPath(accountId, '/browser-rendering/devtools/session')
const query: Record<string, number> = {}
if (input.limit != null) query.limit = input.limit
if (input.offset != null) query.offset = input.offset
if (input.dryRun === true) {
return {
dryRun: true as const,
method: 'GET' as const,
path,
query,
accountId,
note: 'Would list active Browser Run sessions.',
}
}
const response = await browserRunFetch(path, { ...auth, method: 'GET', query })
const result = response.kind === 'json' ? response.result : null
const sessions = Array.isArray(result)
? result
: Array.isArray((result as { sessions?: unknown })?.sessions)
? (result as { sessions: unknown[] }).sessions
: result
? [result]
: []
return {
ok: true,
accountId,
count: sessions.length,
sessions,
browserMsUsed: response.browserMsUsed,
}
}