diff --git a/package.json b/package.json index 0d82b01..390781d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@hyperbrowser/sdk", - "version": "0.79.0", + "version": "0.80.0", "description": "Node SDK for Hyperbrowser API", "author": "", "main": "dist/index.js", diff --git a/src/services/extensions.ts b/src/services/extensions.ts index d387091..beff40a 100644 --- a/src/services/extensions.ts +++ b/src/services/extensions.ts @@ -62,7 +62,13 @@ export class ExtensionService extends BaseService { */ async list(): Promise { try { - return await this.request("/extensions/list", { method: "GET" }); + const response = await this.request<{ + extensions?: ListExtensionsResponse; + totalCount?: number; + page?: number; + perPage?: number; + }>("/extensions/list", { method: "GET" }); + return Array.isArray(response.extensions) ? response.extensions : []; } catch (err) { if (err instanceof HyperbrowserError) { throw err; diff --git a/src/services/sessions.ts b/src/services/sessions.ts index 7d13daa..55afe86 100644 --- a/src/services/sessions.ts +++ b/src/services/sessions.ts @@ -17,6 +17,8 @@ import { UploadFileResponse, SessionEventLogListParams, SessionEventLogListResponse, + SessionConsoleLogListParams, + SessionConsoleLogListResponse, } from "../types/session"; import { BaseService } from "./base"; import { HyperbrowserError } from "../client"; @@ -52,12 +54,48 @@ class SessionEventLogsService extends BaseService { } } +/** + * Service for managing session console logs + */ +class SessionConsoleLogsService extends BaseService { + /** + * List console logs for a session + * @param sessionId The ID of the session + * @param params Optional filters for console logs + */ + async list( + sessionId: string, + params: SessionConsoleLogListParams = {} + ): Promise { + try { + return await this.request( + `/session/${sessionId}/console`, + undefined, + { + ...params, + logLevels: params.logLevels, + } + ); + } catch (error) { + if (error instanceof HyperbrowserError) { + throw error; + } + throw new HyperbrowserError( + `Failed to list console logs for session ${sessionId}`, + undefined + ); + } + } +} + export class SessionsService extends BaseService { public readonly eventLogs: SessionEventLogsService; + public readonly consoleLogs: SessionConsoleLogsService; constructor(apiKey: string, baseUrl: string, timeout: number) { super(apiKey, baseUrl, timeout); this.eventLogs = new SessionEventLogsService(apiKey, baseUrl, timeout); + this.consoleLogs = new SessionConsoleLogsService(apiKey, baseUrl, timeout); } /** diff --git a/src/types/index.ts b/src/types/index.ts index 301c846..dcf7447 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -110,6 +110,11 @@ export { SessionEventLog, SessionProfile, SessionLaunchState, + SessionConsoleLogLevel, + SessionConsoleLog, + SessionConsolePage, + SessionConsoleLogListParams, + SessionConsoleLogListResponse, } from "./session"; export { CreateProfileParams, diff --git a/src/types/session.ts b/src/types/session.ts index 5834d42..71272ff 100644 --- a/src/types/session.ts +++ b/src/types/session.ts @@ -174,6 +174,44 @@ export interface GetActiveSessionsCountResponse { activeSessionsCount: number; } +export type SessionConsoleLogLevel = "log" | "debug" | "info" | "error" | "warning"; + +export interface SessionConsoleLog { + id: string; + sessionId: string; + teamId: string; + log: string; + pageId: string; + logLevel: SessionConsoleLogLevel; + timestamp: number; + createdAt: string; + updatedAt: string; +} + +export interface SessionConsolePage { + id: string; + sessionId: string; + teamId: string; + url: string; + timestamp: number; + createdAt: string; + updatedAt: string; +} + +export interface SessionConsoleLogListParams { + logLevels?: SessionConsoleLogLevel[]; + search?: string; + afterTimestamp?: number; + beforeTimestamp?: number; + order?: "asc" | "desc"; + limit?: number; +} + +export interface SessionConsoleLogListResponse { + consoleLogs: SessionConsoleLog[]; + pages: SessionConsolePage[]; +} + export interface SessionEventLog { id: string; sessionId: string;