← Public packages
@kody/browser-run
Call Cloudflare Browser Run Quick Actions and reuse shared sessions with createBrowserContext.
src/sessions/get.ts
65 lines · 1.6 KB · TypeScriptimport { boolean, object, optional, parse, string } from 'remix/data-schema'
import {
accountPath,
browserRunFetch,
pickAuth,
requireAccountId,
} from '../client.ts'
const getInput = object(
{
accountId: string(),
sessionId: string(),
apiTokenSecret: optional(string()),
dryRun: optional(boolean()),
},
{ unknownKeys: 'error' },
)
/**
* Get details for one Browser Run session
* (`GET .../devtools/session/{sessionId}`).
*
* @param raw.accountId - Cloudflare account id
* @param raw.sessionId - Session UUID
* @param raw.dryRun - Preview only
* @param raw.apiTokenSecret - Optional alternate secret name
* @returns Session detail object
*
* @example
* import getSession from 'kody:@kody/browser-run/sessions/get'
* const session = await getSession({
* accountId: 'YOUR_ACCOUNT_ID',
* sessionId: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
* })
*/
export default async function getSession(raw: unknown = {}) {
const input = parse(getInput, raw ?? {})
const auth = pickAuth(input)
const accountId = requireAccountId(auth)
const sessionId = String(input.sessionId).trim()
if (!sessionId) throw new Error('sessionId is required.')
const path = accountPath(
accountId,
`/browser-rendering/devtools/session/${encodeURIComponent(sessionId)}`,
)
if (input.dryRun === true) {
return {
dryRun: true as const,
method: 'GET' as const,
path,
accountId,
sessionId,
}
}
const response = await browserRunFetch(path, { ...auth, method: 'GET' })
return {
ok: true,
accountId,
sessionId,
session: response.kind === 'json' ? response.result : response,
browserMsUsed: response.browserMsUsed,
}
}