@hyperbrowser/sdk 0.1.0 → 0.2.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.
- package/dist/client.d.ts +4 -4
- package/dist/client.js +83 -40
- package/dist/types/session.d.ts +3 -0
- package/package.json +2 -2
package/dist/client.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Response } from "node-fetch";
|
|
2
2
|
import { HyperbrowserConfig } from "./types/config";
|
|
3
|
-
import { SessionDetail, SessionListParams, SessionListResponse } from "./types/session";
|
|
3
|
+
import { BasicResponse, SessionDetail, SessionListParams, SessionListResponse } from "./types/session";
|
|
4
4
|
export declare class HyperbrowserError extends Error {
|
|
5
5
|
statusCode?: number | undefined;
|
|
6
6
|
response?: Response | undefined;
|
|
7
|
-
|
|
7
|
+
originalError?: Error | undefined;
|
|
8
|
+
constructor(message: string, statusCode?: number | undefined, response?: Response | undefined, originalError?: Error | undefined);
|
|
8
9
|
}
|
|
9
10
|
export declare class HyperbrowserClient {
|
|
10
11
|
private readonly apiKey;
|
|
@@ -21,9 +22,8 @@ export declare class HyperbrowserClient {
|
|
|
21
22
|
getSession(id: string): Promise<SessionDetail>;
|
|
22
23
|
/**
|
|
23
24
|
* Stop a running session
|
|
24
|
-
* @returns true if the session was successfully stopped
|
|
25
25
|
*/
|
|
26
|
-
stopSession(id: string): Promise<
|
|
26
|
+
stopSession(id: string): Promise<BasicResponse>;
|
|
27
27
|
/**
|
|
28
28
|
* List all sessions with optional filtering
|
|
29
29
|
*/
|
package/dist/client.js
CHANGED
|
@@ -6,10 +6,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.HyperbrowserClient = exports.HyperbrowserError = void 0;
|
|
7
7
|
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
8
8
|
class HyperbrowserError extends Error {
|
|
9
|
-
constructor(message, statusCode, response) {
|
|
10
|
-
super(message);
|
|
9
|
+
constructor(message, statusCode, response, originalError) {
|
|
10
|
+
super(`[Hyperbrowser]: ${message}`);
|
|
11
11
|
this.statusCode = statusCode;
|
|
12
12
|
this.response = response;
|
|
13
|
+
this.originalError = originalError;
|
|
13
14
|
this.name = "HyperbrowserError";
|
|
14
15
|
}
|
|
15
16
|
}
|
|
@@ -19,76 +20,118 @@ class HyperbrowserClient {
|
|
|
19
20
|
this.apiKey = config.apiKey;
|
|
20
21
|
this.baseUrl = config.baseUrl || "https://app.hyperbrowser.ai";
|
|
21
22
|
if (!this.apiKey) {
|
|
22
|
-
throw new
|
|
23
|
+
throw new HyperbrowserError("API key is required");
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
26
|
async request(path, init, params) {
|
|
26
|
-
const url = new URL(`${this.baseUrl}/api${path}`);
|
|
27
|
-
if (params) {
|
|
28
|
-
Object.entries(params).forEach(([key, value]) => {
|
|
29
|
-
if (value !== undefined) {
|
|
30
|
-
url.searchParams.append(key, value.toString());
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
const response = await (0, node_fetch_1.default)(url.toString(), {
|
|
35
|
-
...init,
|
|
36
|
-
headers: {
|
|
37
|
-
"x-api-key": this.apiKey,
|
|
38
|
-
"Content-Type": "application/json",
|
|
39
|
-
...init?.headers,
|
|
40
|
-
},
|
|
41
|
-
});
|
|
42
|
-
if (!response.ok) {
|
|
43
|
-
throw new HyperbrowserError(`HTTP error! status: ${response.status}`, response.status, response);
|
|
44
|
-
}
|
|
45
|
-
// Handle empty responses (like for stop session)
|
|
46
|
-
if (response.headers.get("content-length") === "0") {
|
|
47
|
-
return {};
|
|
48
|
-
}
|
|
49
27
|
try {
|
|
50
|
-
|
|
28
|
+
const url = new URL(`${this.baseUrl}/api${path}`);
|
|
29
|
+
if (params) {
|
|
30
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
31
|
+
if (value !== undefined) {
|
|
32
|
+
url.searchParams.append(key, value.toString());
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
const response = await (0, node_fetch_1.default)(url.toString(), {
|
|
37
|
+
...init,
|
|
38
|
+
headers: {
|
|
39
|
+
"x-api-key": this.apiKey,
|
|
40
|
+
"Content-Type": "application/json",
|
|
41
|
+
...init?.headers,
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
if (!response.ok) {
|
|
45
|
+
let errorMessage;
|
|
46
|
+
try {
|
|
47
|
+
const errorData = await response.json();
|
|
48
|
+
errorMessage =
|
|
49
|
+
errorData.message || errorData.error || `HTTP error! status: ${response.status}`;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
errorMessage = `HTTP error! status: ${response.status}`;
|
|
53
|
+
}
|
|
54
|
+
throw new HyperbrowserError(errorMessage, response.status, response);
|
|
55
|
+
}
|
|
56
|
+
if (response.headers.get("content-length") === "0") {
|
|
57
|
+
return {};
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
return (await response.json());
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
throw new HyperbrowserError("Failed to parse JSON response", response.status, response, error instanceof Error ? error : undefined);
|
|
64
|
+
}
|
|
51
65
|
}
|
|
52
66
|
catch (error) {
|
|
53
|
-
|
|
67
|
+
// If it's already a HyperbrowserError, rethrow it
|
|
68
|
+
if (error instanceof HyperbrowserError) {
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
// Convert other errors to HyperbrowserError
|
|
72
|
+
throw new HyperbrowserError(error instanceof Error ? error.message : "Unknown error occurred", undefined, undefined, error instanceof Error ? error : undefined);
|
|
54
73
|
}
|
|
55
74
|
}
|
|
56
75
|
/**
|
|
57
76
|
* Create a new browser session
|
|
58
77
|
*/
|
|
59
78
|
async createSession() {
|
|
60
|
-
|
|
79
|
+
try {
|
|
80
|
+
return await this.request("/session", { method: "POST" });
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
if (error instanceof HyperbrowserError) {
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
throw new HyperbrowserError("Failed to create session", undefined, undefined, error instanceof Error ? error : undefined);
|
|
87
|
+
}
|
|
61
88
|
}
|
|
62
89
|
/**
|
|
63
90
|
* Get details of an existing session
|
|
64
91
|
*/
|
|
65
92
|
async getSession(id) {
|
|
66
|
-
|
|
93
|
+
try {
|
|
94
|
+
return await this.request(`/session/${id}`);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
if (error instanceof HyperbrowserError) {
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
throw new HyperbrowserError(`Failed to get session ${id}`, undefined, undefined, error instanceof Error ? error : undefined);
|
|
101
|
+
}
|
|
67
102
|
}
|
|
68
103
|
/**
|
|
69
104
|
* Stop a running session
|
|
70
|
-
* @returns true if the session was successfully stopped
|
|
71
105
|
*/
|
|
72
106
|
async stopSession(id) {
|
|
73
107
|
try {
|
|
74
|
-
await this.request(`/session/${id}/stop`, {
|
|
75
|
-
|
|
108
|
+
return await this.request(`/session/${id}/stop`, {
|
|
109
|
+
method: "PUT",
|
|
110
|
+
});
|
|
76
111
|
}
|
|
77
112
|
catch (error) {
|
|
78
|
-
if (error instanceof HyperbrowserError
|
|
79
|
-
|
|
113
|
+
if (error instanceof HyperbrowserError) {
|
|
114
|
+
throw error;
|
|
80
115
|
}
|
|
81
|
-
throw error;
|
|
116
|
+
throw new HyperbrowserError(`Failed to stop session ${id}`, undefined, undefined, error instanceof Error ? error : undefined);
|
|
82
117
|
}
|
|
83
118
|
}
|
|
84
119
|
/**
|
|
85
120
|
* List all sessions with optional filtering
|
|
86
121
|
*/
|
|
87
122
|
async listSessions(params = {}) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
123
|
+
try {
|
|
124
|
+
return await this.request("/sessions", undefined, {
|
|
125
|
+
status: params.status,
|
|
126
|
+
page: params.page,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
if (error instanceof HyperbrowserError) {
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
throw new HyperbrowserError("Failed to list sessions", undefined, undefined, error instanceof Error ? error : undefined);
|
|
134
|
+
}
|
|
92
135
|
}
|
|
93
136
|
}
|
|
94
137
|
exports.HyperbrowserClient = HyperbrowserClient;
|
package/dist/types/session.d.ts
CHANGED
package/package.json
CHANGED