simplex-ts 1.0.7 → 1.0.8
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/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +31 -46
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +31 -46
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -5
package/dist/index.d.mts
CHANGED
|
@@ -16,8 +16,9 @@ declare class Simplex {
|
|
|
16
16
|
createSession(showInConsole?: boolean, proxies?: boolean, workflowName?: string, sessionData?: SessionData | string): Promise<[string, string]>;
|
|
17
17
|
goto(url: string, cdpUrl?: string): Promise<void>;
|
|
18
18
|
click(elementDescription: string, cdpUrl?: string): Promise<string>;
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
hover(elementDescription: string, cdpUrl?: string): Promise<void>;
|
|
20
|
+
scrollToElement(elementDescription: string, cdpUrl?: string): Promise<void>;
|
|
21
|
+
getNetworkResponse(url: string, cdpUrl?: string): Promise<string>;
|
|
21
22
|
type(text: string, cdpUrl?: string): Promise<void>;
|
|
22
23
|
pressEnter(cdpUrl?: string): Promise<void>;
|
|
23
24
|
pressTab(cdpUrl?: string): Promise<void>;
|
|
@@ -30,7 +31,6 @@ declare class Simplex {
|
|
|
30
31
|
clickAndUpload(elementDescription: string, filePathOrCallable: string | (() => Blob)): Promise<void>;
|
|
31
32
|
clickAndDownload(elementDescription: string): Promise<[string, string]>;
|
|
32
33
|
exists(elementDescription: string, cdpUrl?: string): Promise<[boolean, string]>;
|
|
33
|
-
getNetworkResponse(url: string, cdpUrl?: string): Promise<string>;
|
|
34
34
|
closeSession(): Promise<void>;
|
|
35
35
|
}
|
|
36
36
|
|
package/dist/index.d.ts
CHANGED
|
@@ -16,8 +16,9 @@ declare class Simplex {
|
|
|
16
16
|
createSession(showInConsole?: boolean, proxies?: boolean, workflowName?: string, sessionData?: SessionData | string): Promise<[string, string]>;
|
|
17
17
|
goto(url: string, cdpUrl?: string): Promise<void>;
|
|
18
18
|
click(elementDescription: string, cdpUrl?: string): Promise<string>;
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
hover(elementDescription: string, cdpUrl?: string): Promise<void>;
|
|
20
|
+
scrollToElement(elementDescription: string, cdpUrl?: string): Promise<void>;
|
|
21
|
+
getNetworkResponse(url: string, cdpUrl?: string): Promise<string>;
|
|
21
22
|
type(text: string, cdpUrl?: string): Promise<void>;
|
|
22
23
|
pressEnter(cdpUrl?: string): Promise<void>;
|
|
23
24
|
pressTab(cdpUrl?: string): Promise<void>;
|
|
@@ -30,7 +31,6 @@ declare class Simplex {
|
|
|
30
31
|
clickAndUpload(elementDescription: string, filePathOrCallable: string | (() => Blob)): Promise<void>;
|
|
31
32
|
clickAndDownload(elementDescription: string): Promise<[string, string]>;
|
|
32
33
|
exists(elementDescription: string, cdpUrl?: string): Promise<[boolean, string]>;
|
|
33
|
-
getNetworkResponse(url: string, cdpUrl?: string): Promise<string>;
|
|
34
34
|
closeSession(): Promise<void>;
|
|
35
35
|
}
|
|
36
36
|
|
package/dist/index.js
CHANGED
|
@@ -38,7 +38,7 @@ var import_axios = __toESM(require("axios"));
|
|
|
38
38
|
function greet(name) {
|
|
39
39
|
return `Hello, ${name}!`;
|
|
40
40
|
}
|
|
41
|
-
var BASE_URL = "https://
|
|
41
|
+
var BASE_URL = "https://api.simplex.sh";
|
|
42
42
|
var Simplex = class {
|
|
43
43
|
constructor(apiKey) {
|
|
44
44
|
this.sessionId = null;
|
|
@@ -67,34 +67,19 @@ var Simplex = class {
|
|
|
67
67
|
}
|
|
68
68
|
});
|
|
69
69
|
const responseData = response.data;
|
|
70
|
-
if (endpoint
|
|
70
|
+
if (endpoint === "/goto" || endpoint === "/hover") {
|
|
71
71
|
if (!("succeeded" in responseData)) {
|
|
72
|
-
|
|
73
|
-
throw new Error("Invalid API response: missing 'succeeded' property");
|
|
74
|
-
} else {
|
|
75
|
-
if (responseData.succeeded) {
|
|
76
|
-
return responseData;
|
|
77
|
-
} else {
|
|
78
|
-
throw new Error(responseData.error || "Request failed");
|
|
79
|
-
}
|
|
72
|
+
throw new Error('Response data is missing the "succeeded" field');
|
|
80
73
|
}
|
|
74
|
+
return responseData;
|
|
81
75
|
}
|
|
82
|
-
if (endpoint
|
|
83
|
-
if (!("succeeded" in responseData)) {
|
|
84
|
-
console.error('Response data missing "succeeded" property:', responseData);
|
|
85
|
-
throw new Error('Invalid API response: missing "succeeded" property');
|
|
86
|
-
} else {
|
|
87
|
-
return responseData;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
if (endpoint == "/get_network_response") {
|
|
76
|
+
if (endpoint === "/get_network_response") {
|
|
91
77
|
if (!("status" in responseData)) {
|
|
92
|
-
|
|
93
|
-
throw new Error('Invalid API response: missing "status" property');
|
|
78
|
+
throw new Error("It looks like the get_network_response action failed to return a response. Did you set your api_key when creating the Simplex class?");
|
|
94
79
|
} else if (responseData.status == "success") {
|
|
95
80
|
return responseData;
|
|
96
81
|
} else {
|
|
97
|
-
throw new Error(
|
|
82
|
+
throw new Error(`Failed to get network response: ${responseData.error}`);
|
|
98
83
|
}
|
|
99
84
|
}
|
|
100
85
|
if (!responseData.succeeded && !(endpoint === "/create_session" && responseData.session_id)) {
|
|
@@ -104,12 +89,13 @@ var Simplex = class {
|
|
|
104
89
|
}
|
|
105
90
|
return responseData;
|
|
106
91
|
} catch (error) {
|
|
107
|
-
|
|
108
|
-
|
|
92
|
+
const axiosError = error;
|
|
93
|
+
if (axiosError.response) {
|
|
94
|
+
const errorMessage = axiosError.response.data?.error || String(error);
|
|
109
95
|
console.error("Axios error:", {
|
|
110
|
-
status:
|
|
111
|
-
statusText:
|
|
112
|
-
data:
|
|
96
|
+
status: axiosError.response.status,
|
|
97
|
+
statusText: axiosError.response.statusText,
|
|
98
|
+
data: axiosError.response.data,
|
|
113
99
|
message: errorMessage
|
|
114
100
|
});
|
|
115
101
|
throw new Error(`Request failed: ${errorMessage}`);
|
|
@@ -172,27 +158,37 @@ var Simplex = class {
|
|
|
172
158
|
const response = await this.makeRequest("post", "/click", data);
|
|
173
159
|
return response.element_clicked || "";
|
|
174
160
|
}
|
|
175
|
-
async
|
|
161
|
+
async hover(elementDescription, cdpUrl) {
|
|
176
162
|
if (!cdpUrl && !this.sessionId) {
|
|
177
|
-
throw new Error(`Must call createSession before calling
|
|
163
|
+
throw new Error(`Must call createSession before calling click with elementDescription='${elementDescription}'`);
|
|
178
164
|
}
|
|
179
165
|
const data = {
|
|
180
166
|
element_description: elementDescription,
|
|
181
167
|
...cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId }
|
|
182
168
|
};
|
|
183
|
-
|
|
184
|
-
return response.element_info || "";
|
|
169
|
+
await this.makeRequest("post", "/hover", data);
|
|
185
170
|
}
|
|
186
|
-
async
|
|
171
|
+
async scrollToElement(elementDescription, cdpUrl) {
|
|
187
172
|
if (!cdpUrl && !this.sessionId) {
|
|
188
|
-
throw new Error(`Must call createSession before calling
|
|
173
|
+
throw new Error(`Must call createSession before calling click with elementDescription='${elementDescription}'`);
|
|
189
174
|
}
|
|
190
175
|
const data = {
|
|
191
176
|
element_description: elementDescription,
|
|
192
177
|
...cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId }
|
|
193
178
|
};
|
|
194
|
-
|
|
195
|
-
|
|
179
|
+
await this.makeRequest("post", "/scroll_to_element", data);
|
|
180
|
+
}
|
|
181
|
+
async getNetworkResponse(url, cdpUrl) {
|
|
182
|
+
if (!cdpUrl && !this.sessionId) {
|
|
183
|
+
throw new Error(`Must call createSession before calling getNetworkResponse with url='${url}'`);
|
|
184
|
+
}
|
|
185
|
+
const data = {
|
|
186
|
+
url,
|
|
187
|
+
...cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId }
|
|
188
|
+
};
|
|
189
|
+
const response = await this.makeRequest("post", "/get_network_response", data);
|
|
190
|
+
console.log(`Network response: ${response.response}`);
|
|
191
|
+
return response.response || "";
|
|
196
192
|
}
|
|
197
193
|
async type(text, cdpUrl) {
|
|
198
194
|
if (!cdpUrl && !this.sessionId) {
|
|
@@ -318,17 +314,6 @@ var Simplex = class {
|
|
|
318
314
|
const response = await this.makeRequest("post", "/exists", data);
|
|
319
315
|
return [response.exists || false, response.reasoning || ""];
|
|
320
316
|
}
|
|
321
|
-
async getNetworkResponse(url, cdpUrl) {
|
|
322
|
-
if (!cdpUrl && !this.sessionId) {
|
|
323
|
-
throw new Error(`Must call createSession before calling getNetworkResponse with url='${url}'`);
|
|
324
|
-
}
|
|
325
|
-
const data = {
|
|
326
|
-
url,
|
|
327
|
-
...cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId }
|
|
328
|
-
};
|
|
329
|
-
const response = await this.makeRequest("post", "/get_network_response", data);
|
|
330
|
-
return response.response || "";
|
|
331
|
-
}
|
|
332
317
|
async closeSession() {
|
|
333
318
|
if (!this.sessionId) {
|
|
334
319
|
return;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Example function to demonstrate package usage\n * @param name - The name to greet\n * @returns A greeting message\n */\nexport function greet(name: string): string {\n return `Hello, ${name}!`;\n}\n\n// Export other functions and types here \nimport axios from 'axios';\n\n// const BASE_URL = \"https://api.simplex.sh\"\nconst BASE_URL = \"https://simplex-dev-shreya--api-server-fastapi-app.modal.run\"\n\ninterface SessionData {\n [key: string]: any;\n}\n\ninterface PlaywrightClickOptions {\n locator: string;\n locatorType: string;\n exact?: boolean;\n elementIndex?: 'first' | 'last' | 'nth';\n nthIndex?: number;\n locatorOptions?: Record<string, any>;\n}\n\ninterface SimplexResponse {\n succeeded: boolean;\n error?: string;\n session_id?: string;\n livestream_url?: string;\n connect_url?: string;\n element_clicked?: string;\n element_info?: string;\n text?: string;\n image?: string;\n bbox?: any;\n b64?: string;\n filename?: string;\n exists?: boolean;\n reasoning?: string;\n response?: string;\n}\n\nexport class Simplex {\n private apiKey: string;\n private sessionId: string | null = null;\n private connectUrl: string | null = null;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n private async makeRequest<T>(\n method: 'get' | 'post',\n endpoint: string,\n data?: any,\n params?: any\n ): Promise<T> {\n try {\n console.log(`Making ${method.toUpperCase()} request to ${endpoint}`);\n \n // Convert data to FormData\n const formData = new FormData();\n if (data) {\n Object.entries(data).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n formData.append(key, value.toString());\n }\n });\n }\n\n // console.log('Request data:', Object.fromEntries(formData.entries()));\n \n const response = await axios({\n method,\n url: `${BASE_URL}${endpoint}`,\n data: method === 'post' ? formData : undefined,\n params: method === 'get' ? params : undefined,\n headers: {\n 'x-api-key': this.apiKey,\n ...(method === 'post' ? { 'Content-Type': 'multipart/form-data' } : {})\n }\n });\n\n // console.log('Response status:', response.status);\n // console.log('Response data:', JSON.stringify(response.data, null, 2));\n\n const responseData = response.data as SimplexResponse;\n \n // Consider response successful if:\n // 1. It has succeeded: true, or\n // 2. It's a create_session response with a session_id\n // Check if 'succeeded' property exists in responseData\n // console.log('Response data:', responseData);\n\n if (endpoint == \"/hover\" || endpoint == \"/scroll_to_element\") {\n if (!('succeeded' in responseData)) {\n console.error(\"Response data missing 'succeeded' property:\", responseData);\n throw new Error(\"Invalid API response: missing 'succeeded' property\");\n } else {\n if (responseData.succeeded) {\n return responseData as T;\n } else {\n throw new Error(responseData.error || 'Request failed');\n }\n }\n }\n\n if (endpoint == \"/goto\") {\n if (!('succeeded' in responseData)) {\n console.error('Response data missing \"succeeded\" property:', responseData);\n throw new Error('Invalid API response: missing \"succeeded\" property');\n } else {\n return responseData as T;\n }\n }\n\n if (endpoint == \"/get_network_response\") {\n if (!('status' in responseData)) {\n console.error('Response data missing \"status\" property:', responseData);\n throw new Error('Invalid API response: missing \"status\" property');\n } else if (responseData.status == \"success\") {\n return responseData as T;\n } else {\n throw new Error('Failed to get network response');\n }\n }\n\n if (!responseData.succeeded && !(endpoint === '/create_session' && responseData.session_id)) {\n const errorMessage = responseData.error || 'Request failed';\n console.error('API request failed:', errorMessage);\n throw new Error(errorMessage);\n }\n return responseData as T;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n const errorMessage = error.response?.data?.error || error.message;\n console.error('Axios error:', {\n status: error.response?.status,\n statusText: error.response?.statusText,\n data: error.response?.data,\n message: errorMessage\n });\n throw new Error(`Request failed: ${errorMessage}`);\n }\n console.error('Unexpected error:', error);\n throw error;\n }\n }\n\n async createSession(\n showInConsole: boolean = true,\n proxies: boolean = true,\n workflowName?: string,\n sessionData?: SessionData | string\n ): Promise<[string, string]> {\n const data: any = {\n proxies,\n workflow_name: workflowName\n };\n\n if (this.sessionId) {\n throw new Error(\"A session is already active. Please close the current session before creating a new one.\");\n }\n if (sessionData) {\n if (typeof sessionData === 'string') {\n try {\n data.session_data = JSON.stringify(JSON.parse(sessionData));\n } catch {\n // If parsing fails, treat as file path\n // Note: File system operations are not available in browser environment\n throw new Error('File system operations are not supported in this environment');\n }\n } else {\n data.session_data = JSON.stringify(sessionData);\n }\n }\n\n const response = await this.makeRequest<SimplexResponse>('post', '/create_session', data);\n \n if (!response.session_id) {\n throw new Error('Session creation failed: No session ID returned');\n }\n\n this.sessionId = response.session_id;\n this.connectUrl = response.connect_url || null;\n\n if (showInConsole && response.livestream_url) {\n console.log(`Livestream URL: ${response.livestream_url}`);\n }\n\n return [response.session_id, response.livestream_url || ''];\n }\n\n async goto(url: string, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling goto with url='${url}'`);\n }\n\n if (!url.startsWith('http://') && !url.startsWith('https://')) {\n url = 'https://' + url;\n }\n\n const data = {\n url,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest('post', '/goto', data);\n }\n\n async click(elementDescription: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling click with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/click', data);\n return response.element_clicked || '';\n }\n\n async scrollToElement(elementDescription: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling scrollToElement with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/scroll_to_element', data);\n return response.element_info || '';\n }\n\n async hover(elementDescription: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling hover with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/hover', data);\n return response.element_info || '';\n }\n\n async type(text: string, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling type with text='${text}'`);\n }\n\n const data = {\n text,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest('post', '/type', data);\n }\n\n async pressEnter(cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error('Must call createSession before calling pressEnter');\n }\n\n const data = cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId };\n await this.makeRequest('post', '/press_enter', data);\n }\n\n async pressTab(cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error('Must call createSession before calling pressTab');\n }\n\n const data = cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId };\n await this.makeRequest('post', '/press_tab', data);\n }\n\n async deleteText(cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error('Must call createSession before calling deleteText');\n }\n\n const data = cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId };\n await this.makeRequest('post', '/delete_text', data);\n }\n\n async extractBbox(elementDescription: string, cdpUrl?: string): Promise<any> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling extractBbox with elementDescription='${elementDescription}'`);\n }\n\n const params = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('get', '/extract-bbox', undefined, params);\n return response.bbox;\n }\n\n async extractText(elementDescription: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling extractText with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/extract-text', data);\n return response.text || '';\n }\n\n async extractImage(elementDescription: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling extractImage with elementDescription='${elementDescription}'`);\n }\n\n const params = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('get', '/extract-image', undefined, params);\n return response.image || '';\n }\n\n async scroll(pixels: number, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling scroll with pixels=${pixels}`);\n }\n\n const data = {\n pixels,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest('post', '/scroll', data);\n }\n\n async wait(milliseconds: number, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling wait with milliseconds=${milliseconds}`);\n }\n\n const data = {\n milliseconds,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest('post', '/wait', data);\n }\n\n async clickAndUpload(\n elementDescription: string,\n filePathOrCallable: string | (() => Blob)\n ): Promise<void> {\n if (!this.sessionId) {\n throw new Error(`Must call createSession before calling clickAndUpload with elementDescription='${elementDescription}'`);\n }\n\n if (typeof filePathOrCallable !== 'string' && typeof filePathOrCallable !== 'function') {\n throw new TypeError(`filePathOrCallable must be either a string or a callable, not a ${typeof filePathOrCallable}`);\n }\n\n const formData = new FormData();\n formData.append('element_description', elementDescription);\n formData.append('session_id', this.sessionId);\n\n if (typeof filePathOrCallable === 'string') {\n // Note: File system operations are not available in browser environment\n throw new Error('File system operations are not supported in this environment');\n } else {\n const blob = filePathOrCallable();\n formData.append('file', blob, 'file'); // Add filename for the blob\n }\n\n await this.makeRequest('post', '/click_and_upload', formData, undefined);\n }\n\n async clickAndDownload(elementDescription: string): Promise<[string, string]> {\n if (!this.sessionId) {\n throw new Error(`Must call createSession before calling clickAndDownload with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n session_id: this.sessionId\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/click_and_download', data);\n return [response.b64 || '', response.filename || ''];\n }\n\n async exists(elementDescription: string, cdpUrl?: string): Promise<[boolean, string]> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling exists with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/exists', data);\n return [response.exists || false, response.reasoning || ''];\n }\n\n async getNetworkResponse(url: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling getNetworkResponse with url='${url}'`);\n }\n\n const data = {\n url,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/get_network_response', data);\n return response.response || '';\n }\n\n async closeSession(): Promise<void> {\n if (!this.sessionId) {\n return;\n }\n\n await this.makeRequest('post', '/close_session', { session_id: this.sessionId });\n this.sessionId = null;\n this.connectUrl = null;\n }\n} "],"mappings":"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","names":["axios"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Example function to demonstrate package usage\n * @param name - The name to greet\n * @returns A greeting message\n */\nexport function greet(name: string): string {\n return `Hello, ${name}!`;\n}\n\n// Export other functions and types here \n\nimport axios from 'axios';\n\nconst BASE_URL = \"https://api.simplex.sh\";\n\ninterface SessionData {\n [key: string]: any;\n}\n\ninterface PlaywrightClickOptions {\n locator: string;\n locatorType: string;\n exact?: boolean;\n elementIndex?: 'first' | 'last' | 'nth';\n nthIndex?: number;\n locatorOptions?: Record<string, any>;\n}\n\ninterface SimplexResponse {\n succeeded?: boolean;\n error?: string;\n session_id?: string;\n livestream_url?: string;\n connect_url?: string;\n element_clicked?: string;\n text?: string;\n image?: string;\n bbox?: any;\n b64?: string;\n filename?: string;\n exists?: boolean;\n reasoning?: string;\n response?: string;\n}\n\nexport class Simplex {\n private apiKey: string;\n private sessionId: string | null = null;\n private connectUrl: string | null = null;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n private async makeRequest<T>(\n method: 'get' | 'post',\n endpoint: string,\n data?: any,\n params?: any\n ): Promise<T> {\n try {\n console.log(`Making ${method.toUpperCase()} request to ${endpoint}`);\n \n // Convert data to FormData\n const formData = new FormData();\n if (data) {\n Object.entries(data).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n formData.append(key, value.toString());\n }\n });\n }\n \n const response = await axios({\n method,\n url: `${BASE_URL}${endpoint}`,\n data: method === 'post' ? formData : undefined,\n params: method === 'get' ? params : undefined,\n headers: {\n 'x-api-key': this.apiKey,\n ...(method === 'post' ? { 'Content-Type': 'multipart/form-data' } : {})\n }\n });\n\n const responseData = response.data as SimplexResponse;\n \n // Consider response successful if:\n // 1. It has succeeded: true, or\n // 2. It's a create_session response with a session_id\n // 3. It's a goto or hover response with a succeeded field\n // 4. It's a get_network_response with success status\n\n if (endpoint === \"/goto\" || endpoint === \"/hover\") {\n if (!('succeeded' in responseData)) {\n throw new Error('Response data is missing the \"succeeded\" field');\n }\n return responseData as T;\n }\n\n if (endpoint === \"/get_network_response\") {\n if (!('status' in responseData)) {\n throw new Error('It looks like the get_network_response action failed to return a response. Did you set your api_key when creating the Simplex class?');\n } else if (responseData.status == \"success\") {\n return responseData as T;\n } else {\n throw new Error(`Failed to get network response: ${responseData.error}`);\n }\n }\n\n\n if (!responseData.succeeded && !(endpoint === '/create_session' && responseData.session_id)) {\n const errorMessage = responseData.error || 'Request failed';\n console.error('API request failed:', errorMessage);\n throw new Error(errorMessage);\n }\n return responseData as T;\n } catch (error: unknown) {\n const axiosError = error as { response?: { data?: { error?: string }, status?: number, statusText?: string } };\n if (axiosError.response) {\n const errorMessage = axiosError.response.data?.error || String(error);\n console.error('Axios error:', {\n status: axiosError.response.status,\n statusText: axiosError.response.statusText,\n data: axiosError.response.data,\n message: errorMessage\n });\n throw new Error(`Request failed: ${errorMessage}`);\n }\n console.error('Unexpected error:', error);\n throw error;\n }\n }\n\n async createSession(\n showInConsole: boolean = true,\n proxies: boolean = true,\n workflowName?: string,\n sessionData?: SessionData | string\n ): Promise<[string, string]> {\n const data: any = {\n proxies,\n workflow_name: workflowName\n };\n\n if (this.sessionId) {\n throw new Error(\"A session is already active. Please close the current session before creating a new one.\");\n }\n if (sessionData) {\n if (typeof sessionData === 'string') {\n try {\n data.session_data = JSON.stringify(JSON.parse(sessionData));\n } catch {\n // If parsing fails, treat as file path\n // Note: File system operations are not available in browser environment\n throw new Error('File system operations are not supported in this environment');\n }\n } else {\n data.session_data = JSON.stringify(sessionData);\n }\n }\n\n const response = await this.makeRequest<SimplexResponse>('post', '/create_session', data);\n \n if (!response.session_id) {\n throw new Error('Session creation failed: No session ID returned');\n }\n\n this.sessionId = response.session_id;\n this.connectUrl = response.connect_url || null;\n\n if (showInConsole && response.livestream_url) {\n console.log(`Livestream URL: ${response.livestream_url}`);\n }\n\n return [response.session_id, response.livestream_url || ''];\n }\n\n async goto(url: string, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling goto with url='${url}'`);\n }\n\n if (!url.startsWith('http://') && !url.startsWith('https://')) {\n url = 'https://' + url;\n }\n\n const data = {\n url,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest('post', '/goto', data);\n }\n\n async click(elementDescription: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling click with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/click', data);\n return response.element_clicked || '';\n }\n\n async hover(elementDescription: string, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling click with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest<SimplexResponse>('post', '/hover', data);\n }\n\n async scrollToElement(elementDescription: string, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling click with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest<SimplexResponse>('post', '/scroll_to_element', data);\n }\n\n\n async getNetworkResponse(url: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling getNetworkResponse with url='${url}'`);\n }\n \n const data = {\n url,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/get_network_response', data);\n console.log(`Network response: ${response.response}`);\n return response.response || '';\n }\n\n async type(text: string, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling type with text='${text}'`);\n }\n\n const data = {\n text,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest('post', '/type', data);\n }\n\n async pressEnter(cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error('Must call createSession before calling pressEnter');\n }\n\n const data = cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId };\n await this.makeRequest('post', '/press_enter', data);\n }\n\n async pressTab(cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error('Must call createSession before calling pressTab');\n }\n\n const data = cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId };\n await this.makeRequest('post', '/press_tab', data);\n }\n\n async deleteText(cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error('Must call createSession before calling deleteText');\n }\n\n const data = cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId };\n await this.makeRequest('post', '/delete_text', data);\n }\n\n async extractBbox(elementDescription: string, cdpUrl?: string): Promise<any> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling extractBbox with elementDescription='${elementDescription}'`);\n }\n\n const params = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('get', '/extract-bbox', undefined, params);\n return response.bbox;\n }\n\n async extractText(elementDescription: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling extractText with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/extract-text', data);\n return response.text || '';\n }\n\n async extractImage(elementDescription: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling extractImage with elementDescription='${elementDescription}'`);\n }\n\n const params = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('get', '/extract-image', undefined, params);\n return response.image || '';\n }\n\n async scroll(pixels: number, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling scroll with pixels=${pixels}`);\n }\n\n const data = {\n pixels,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest('post', '/scroll', data);\n }\n\n async wait(milliseconds: number, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling wait with milliseconds=${milliseconds}`);\n }\n\n const data = {\n milliseconds,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest('post', '/wait', data);\n }\n\n async clickAndUpload(\n elementDescription: string,\n filePathOrCallable: string | (() => Blob)\n ): Promise<void> {\n if (!this.sessionId) {\n throw new Error(`Must call createSession before calling clickAndUpload with elementDescription='${elementDescription}'`);\n }\n\n if (typeof filePathOrCallable !== 'string' && typeof filePathOrCallable !== 'function') {\n throw new TypeError(`filePathOrCallable must be either a string or a callable, not a ${typeof filePathOrCallable}`);\n }\n\n const formData = new FormData();\n formData.append('element_description', elementDescription);\n formData.append('session_id', this.sessionId);\n\n if (typeof filePathOrCallable === 'string') {\n // Note: File system operations are not available in browser environment\n throw new Error('File system operations are not supported in this environment');\n } else {\n const blob = filePathOrCallable();\n formData.append('file', blob, 'file'); // Add filename for the blob\n }\n\n await this.makeRequest('post', '/click_and_upload', formData, undefined);\n }\n\n async clickAndDownload(elementDescription: string): Promise<[string, string]> {\n if (!this.sessionId) {\n throw new Error(`Must call createSession before calling clickAndDownload with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n session_id: this.sessionId\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/click_and_download', data);\n return [response.b64 || '', response.filename || ''];\n }\n\n async exists(elementDescription: string, cdpUrl?: string): Promise<[boolean, string]> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling exists with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/exists', data);\n return [response.exists || false, response.reasoning || ''];\n }\n\n async closeSession(): Promise<void> {\n if (!this.sessionId) {\n return;\n }\n\n await this.makeRequest('post', '/close_session', { session_id: this.sessionId });\n this.sessionId = null;\n this.connectUrl = null;\n }\n} "],"mappings":"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","names":["axios"]}
|
package/dist/index.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import axios from "axios";
|
|
|
3
3
|
function greet(name) {
|
|
4
4
|
return `Hello, ${name}!`;
|
|
5
5
|
}
|
|
6
|
-
var BASE_URL = "https://
|
|
6
|
+
var BASE_URL = "https://api.simplex.sh";
|
|
7
7
|
var Simplex = class {
|
|
8
8
|
constructor(apiKey) {
|
|
9
9
|
this.sessionId = null;
|
|
@@ -32,34 +32,19 @@ var Simplex = class {
|
|
|
32
32
|
}
|
|
33
33
|
});
|
|
34
34
|
const responseData = response.data;
|
|
35
|
-
if (endpoint
|
|
35
|
+
if (endpoint === "/goto" || endpoint === "/hover") {
|
|
36
36
|
if (!("succeeded" in responseData)) {
|
|
37
|
-
|
|
38
|
-
throw new Error("Invalid API response: missing 'succeeded' property");
|
|
39
|
-
} else {
|
|
40
|
-
if (responseData.succeeded) {
|
|
41
|
-
return responseData;
|
|
42
|
-
} else {
|
|
43
|
-
throw new Error(responseData.error || "Request failed");
|
|
44
|
-
}
|
|
37
|
+
throw new Error('Response data is missing the "succeeded" field');
|
|
45
38
|
}
|
|
39
|
+
return responseData;
|
|
46
40
|
}
|
|
47
|
-
if (endpoint
|
|
48
|
-
if (!("succeeded" in responseData)) {
|
|
49
|
-
console.error('Response data missing "succeeded" property:', responseData);
|
|
50
|
-
throw new Error('Invalid API response: missing "succeeded" property');
|
|
51
|
-
} else {
|
|
52
|
-
return responseData;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
if (endpoint == "/get_network_response") {
|
|
41
|
+
if (endpoint === "/get_network_response") {
|
|
56
42
|
if (!("status" in responseData)) {
|
|
57
|
-
|
|
58
|
-
throw new Error('Invalid API response: missing "status" property');
|
|
43
|
+
throw new Error("It looks like the get_network_response action failed to return a response. Did you set your api_key when creating the Simplex class?");
|
|
59
44
|
} else if (responseData.status == "success") {
|
|
60
45
|
return responseData;
|
|
61
46
|
} else {
|
|
62
|
-
throw new Error(
|
|
47
|
+
throw new Error(`Failed to get network response: ${responseData.error}`);
|
|
63
48
|
}
|
|
64
49
|
}
|
|
65
50
|
if (!responseData.succeeded && !(endpoint === "/create_session" && responseData.session_id)) {
|
|
@@ -69,12 +54,13 @@ var Simplex = class {
|
|
|
69
54
|
}
|
|
70
55
|
return responseData;
|
|
71
56
|
} catch (error) {
|
|
72
|
-
|
|
73
|
-
|
|
57
|
+
const axiosError = error;
|
|
58
|
+
if (axiosError.response) {
|
|
59
|
+
const errorMessage = axiosError.response.data?.error || String(error);
|
|
74
60
|
console.error("Axios error:", {
|
|
75
|
-
status:
|
|
76
|
-
statusText:
|
|
77
|
-
data:
|
|
61
|
+
status: axiosError.response.status,
|
|
62
|
+
statusText: axiosError.response.statusText,
|
|
63
|
+
data: axiosError.response.data,
|
|
78
64
|
message: errorMessage
|
|
79
65
|
});
|
|
80
66
|
throw new Error(`Request failed: ${errorMessage}`);
|
|
@@ -137,27 +123,37 @@ var Simplex = class {
|
|
|
137
123
|
const response = await this.makeRequest("post", "/click", data);
|
|
138
124
|
return response.element_clicked || "";
|
|
139
125
|
}
|
|
140
|
-
async
|
|
126
|
+
async hover(elementDescription, cdpUrl) {
|
|
141
127
|
if (!cdpUrl && !this.sessionId) {
|
|
142
|
-
throw new Error(`Must call createSession before calling
|
|
128
|
+
throw new Error(`Must call createSession before calling click with elementDescription='${elementDescription}'`);
|
|
143
129
|
}
|
|
144
130
|
const data = {
|
|
145
131
|
element_description: elementDescription,
|
|
146
132
|
...cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId }
|
|
147
133
|
};
|
|
148
|
-
|
|
149
|
-
return response.element_info || "";
|
|
134
|
+
await this.makeRequest("post", "/hover", data);
|
|
150
135
|
}
|
|
151
|
-
async
|
|
136
|
+
async scrollToElement(elementDescription, cdpUrl) {
|
|
152
137
|
if (!cdpUrl && !this.sessionId) {
|
|
153
|
-
throw new Error(`Must call createSession before calling
|
|
138
|
+
throw new Error(`Must call createSession before calling click with elementDescription='${elementDescription}'`);
|
|
154
139
|
}
|
|
155
140
|
const data = {
|
|
156
141
|
element_description: elementDescription,
|
|
157
142
|
...cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId }
|
|
158
143
|
};
|
|
159
|
-
|
|
160
|
-
|
|
144
|
+
await this.makeRequest("post", "/scroll_to_element", data);
|
|
145
|
+
}
|
|
146
|
+
async getNetworkResponse(url, cdpUrl) {
|
|
147
|
+
if (!cdpUrl && !this.sessionId) {
|
|
148
|
+
throw new Error(`Must call createSession before calling getNetworkResponse with url='${url}'`);
|
|
149
|
+
}
|
|
150
|
+
const data = {
|
|
151
|
+
url,
|
|
152
|
+
...cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId }
|
|
153
|
+
};
|
|
154
|
+
const response = await this.makeRequest("post", "/get_network_response", data);
|
|
155
|
+
console.log(`Network response: ${response.response}`);
|
|
156
|
+
return response.response || "";
|
|
161
157
|
}
|
|
162
158
|
async type(text, cdpUrl) {
|
|
163
159
|
if (!cdpUrl && !this.sessionId) {
|
|
@@ -283,17 +279,6 @@ var Simplex = class {
|
|
|
283
279
|
const response = await this.makeRequest("post", "/exists", data);
|
|
284
280
|
return [response.exists || false, response.reasoning || ""];
|
|
285
281
|
}
|
|
286
|
-
async getNetworkResponse(url, cdpUrl) {
|
|
287
|
-
if (!cdpUrl && !this.sessionId) {
|
|
288
|
-
throw new Error(`Must call createSession before calling getNetworkResponse with url='${url}'`);
|
|
289
|
-
}
|
|
290
|
-
const data = {
|
|
291
|
-
url,
|
|
292
|
-
...cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId }
|
|
293
|
-
};
|
|
294
|
-
const response = await this.makeRequest("post", "/get_network_response", data);
|
|
295
|
-
return response.response || "";
|
|
296
|
-
}
|
|
297
282
|
async closeSession() {
|
|
298
283
|
if (!this.sessionId) {
|
|
299
284
|
return;
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Example function to demonstrate package usage\n * @param name - The name to greet\n * @returns A greeting message\n */\nexport function greet(name: string): string {\n return `Hello, ${name}!`;\n}\n\n// Export other functions and types here \nimport axios from 'axios';\n\n// const BASE_URL = \"https://api.simplex.sh\"\nconst BASE_URL = \"https://simplex-dev-shreya--api-server-fastapi-app.modal.run\"\n\ninterface SessionData {\n [key: string]: any;\n}\n\ninterface PlaywrightClickOptions {\n locator: string;\n locatorType: string;\n exact?: boolean;\n elementIndex?: 'first' | 'last' | 'nth';\n nthIndex?: number;\n locatorOptions?: Record<string, any>;\n}\n\ninterface SimplexResponse {\n succeeded: boolean;\n error?: string;\n session_id?: string;\n livestream_url?: string;\n connect_url?: string;\n element_clicked?: string;\n element_info?: string;\n text?: string;\n image?: string;\n bbox?: any;\n b64?: string;\n filename?: string;\n exists?: boolean;\n reasoning?: string;\n response?: string;\n}\n\nexport class Simplex {\n private apiKey: string;\n private sessionId: string | null = null;\n private connectUrl: string | null = null;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n private async makeRequest<T>(\n method: 'get' | 'post',\n endpoint: string,\n data?: any,\n params?: any\n ): Promise<T> {\n try {\n console.log(`Making ${method.toUpperCase()} request to ${endpoint}`);\n \n // Convert data to FormData\n const formData = new FormData();\n if (data) {\n Object.entries(data).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n formData.append(key, value.toString());\n }\n });\n }\n\n // console.log('Request data:', Object.fromEntries(formData.entries()));\n \n const response = await axios({\n method,\n url: `${BASE_URL}${endpoint}`,\n data: method === 'post' ? formData : undefined,\n params: method === 'get' ? params : undefined,\n headers: {\n 'x-api-key': this.apiKey,\n ...(method === 'post' ? { 'Content-Type': 'multipart/form-data' } : {})\n }\n });\n\n // console.log('Response status:', response.status);\n // console.log('Response data:', JSON.stringify(response.data, null, 2));\n\n const responseData = response.data as SimplexResponse;\n \n // Consider response successful if:\n // 1. It has succeeded: true, or\n // 2. It's a create_session response with a session_id\n // Check if 'succeeded' property exists in responseData\n // console.log('Response data:', responseData);\n\n if (endpoint == \"/hover\" || endpoint == \"/scroll_to_element\") {\n if (!('succeeded' in responseData)) {\n console.error(\"Response data missing 'succeeded' property:\", responseData);\n throw new Error(\"Invalid API response: missing 'succeeded' property\");\n } else {\n if (responseData.succeeded) {\n return responseData as T;\n } else {\n throw new Error(responseData.error || 'Request failed');\n }\n }\n }\n\n if (endpoint == \"/goto\") {\n if (!('succeeded' in responseData)) {\n console.error('Response data missing \"succeeded\" property:', responseData);\n throw new Error('Invalid API response: missing \"succeeded\" property');\n } else {\n return responseData as T;\n }\n }\n\n if (endpoint == \"/get_network_response\") {\n if (!('status' in responseData)) {\n console.error('Response data missing \"status\" property:', responseData);\n throw new Error('Invalid API response: missing \"status\" property');\n } else if (responseData.status == \"success\") {\n return responseData as T;\n } else {\n throw new Error('Failed to get network response');\n }\n }\n\n if (!responseData.succeeded && !(endpoint === '/create_session' && responseData.session_id)) {\n const errorMessage = responseData.error || 'Request failed';\n console.error('API request failed:', errorMessage);\n throw new Error(errorMessage);\n }\n return responseData as T;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n const errorMessage = error.response?.data?.error || error.message;\n console.error('Axios error:', {\n status: error.response?.status,\n statusText: error.response?.statusText,\n data: error.response?.data,\n message: errorMessage\n });\n throw new Error(`Request failed: ${errorMessage}`);\n }\n console.error('Unexpected error:', error);\n throw error;\n }\n }\n\n async createSession(\n showInConsole: boolean = true,\n proxies: boolean = true,\n workflowName?: string,\n sessionData?: SessionData | string\n ): Promise<[string, string]> {\n const data: any = {\n proxies,\n workflow_name: workflowName\n };\n\n if (this.sessionId) {\n throw new Error(\"A session is already active. Please close the current session before creating a new one.\");\n }\n if (sessionData) {\n if (typeof sessionData === 'string') {\n try {\n data.session_data = JSON.stringify(JSON.parse(sessionData));\n } catch {\n // If parsing fails, treat as file path\n // Note: File system operations are not available in browser environment\n throw new Error('File system operations are not supported in this environment');\n }\n } else {\n data.session_data = JSON.stringify(sessionData);\n }\n }\n\n const response = await this.makeRequest<SimplexResponse>('post', '/create_session', data);\n \n if (!response.session_id) {\n throw new Error('Session creation failed: No session ID returned');\n }\n\n this.sessionId = response.session_id;\n this.connectUrl = response.connect_url || null;\n\n if (showInConsole && response.livestream_url) {\n console.log(`Livestream URL: ${response.livestream_url}`);\n }\n\n return [response.session_id, response.livestream_url || ''];\n }\n\n async goto(url: string, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling goto with url='${url}'`);\n }\n\n if (!url.startsWith('http://') && !url.startsWith('https://')) {\n url = 'https://' + url;\n }\n\n const data = {\n url,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest('post', '/goto', data);\n }\n\n async click(elementDescription: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling click with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/click', data);\n return response.element_clicked || '';\n }\n\n async scrollToElement(elementDescription: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling scrollToElement with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/scroll_to_element', data);\n return response.element_info || '';\n }\n\n async hover(elementDescription: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling hover with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/hover', data);\n return response.element_info || '';\n }\n\n async type(text: string, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling type with text='${text}'`);\n }\n\n const data = {\n text,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest('post', '/type', data);\n }\n\n async pressEnter(cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error('Must call createSession before calling pressEnter');\n }\n\n const data = cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId };\n await this.makeRequest('post', '/press_enter', data);\n }\n\n async pressTab(cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error('Must call createSession before calling pressTab');\n }\n\n const data = cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId };\n await this.makeRequest('post', '/press_tab', data);\n }\n\n async deleteText(cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error('Must call createSession before calling deleteText');\n }\n\n const data = cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId };\n await this.makeRequest('post', '/delete_text', data);\n }\n\n async extractBbox(elementDescription: string, cdpUrl?: string): Promise<any> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling extractBbox with elementDescription='${elementDescription}'`);\n }\n\n const params = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('get', '/extract-bbox', undefined, params);\n return response.bbox;\n }\n\n async extractText(elementDescription: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling extractText with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/extract-text', data);\n return response.text || '';\n }\n\n async extractImage(elementDescription: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling extractImage with elementDescription='${elementDescription}'`);\n }\n\n const params = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('get', '/extract-image', undefined, params);\n return response.image || '';\n }\n\n async scroll(pixels: number, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling scroll with pixels=${pixels}`);\n }\n\n const data = {\n pixels,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest('post', '/scroll', data);\n }\n\n async wait(milliseconds: number, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling wait with milliseconds=${milliseconds}`);\n }\n\n const data = {\n milliseconds,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest('post', '/wait', data);\n }\n\n async clickAndUpload(\n elementDescription: string,\n filePathOrCallable: string | (() => Blob)\n ): Promise<void> {\n if (!this.sessionId) {\n throw new Error(`Must call createSession before calling clickAndUpload with elementDescription='${elementDescription}'`);\n }\n\n if (typeof filePathOrCallable !== 'string' && typeof filePathOrCallable !== 'function') {\n throw new TypeError(`filePathOrCallable must be either a string or a callable, not a ${typeof filePathOrCallable}`);\n }\n\n const formData = new FormData();\n formData.append('element_description', elementDescription);\n formData.append('session_id', this.sessionId);\n\n if (typeof filePathOrCallable === 'string') {\n // Note: File system operations are not available in browser environment\n throw new Error('File system operations are not supported in this environment');\n } else {\n const blob = filePathOrCallable();\n formData.append('file', blob, 'file'); // Add filename for the blob\n }\n\n await this.makeRequest('post', '/click_and_upload', formData, undefined);\n }\n\n async clickAndDownload(elementDescription: string): Promise<[string, string]> {\n if (!this.sessionId) {\n throw new Error(`Must call createSession before calling clickAndDownload with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n session_id: this.sessionId\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/click_and_download', data);\n return [response.b64 || '', response.filename || ''];\n }\n\n async exists(elementDescription: string, cdpUrl?: string): Promise<[boolean, string]> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling exists with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/exists', data);\n return [response.exists || false, response.reasoning || ''];\n }\n\n async getNetworkResponse(url: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling getNetworkResponse with url='${url}'`);\n }\n\n const data = {\n url,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/get_network_response', data);\n return response.response || '';\n }\n\n async closeSession(): Promise<void> {\n if (!this.sessionId) {\n return;\n }\n\n await this.makeRequest('post', '/close_session', { session_id: this.sessionId });\n this.sessionId = null;\n this.connectUrl = null;\n }\n} "],"mappings":";AAUA,OAAO,WAAW;AALX,SAAS,MAAM,MAAsB;AAC1C,SAAO,UAAU,IAAI;AACvB;AAMA,IAAM,WAAW;AAiCV,IAAM,UAAN,MAAc;AAAA,EAKnB,YAAY,QAAgB;AAH5B,SAAQ,YAA2B;AACnC,SAAQ,aAA4B;AAGlC,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,MAAc,YACZ,QACA,UACA,MACA,QACY;AACZ,QAAI;AACF,cAAQ,IAAI,UAAU,OAAO,YAAY,CAAC,eAAe,QAAQ,EAAE;AAGnE,YAAM,WAAW,IAAI,SAAS;AAC9B,UAAI,MAAM;AACR,eAAO,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC7C,cAAI,UAAU,UAAa,UAAU,MAAM;AACzC,qBAAS,OAAO,KAAK,MAAM,SAAS,CAAC;AAAA,UACvC;AAAA,QACF,CAAC;AAAA,MACH;AAIA,YAAM,WAAW,MAAM,MAAM;AAAA,QAC3B;AAAA,QACA,KAAK,GAAG,QAAQ,GAAG,QAAQ;AAAA,QAC3B,MAAM,WAAW,SAAS,WAAW;AAAA,QACrC,QAAQ,WAAW,QAAQ,SAAS;AAAA,QACpC,SAAS;AAAA,UACP,aAAa,KAAK;AAAA,UAClB,GAAI,WAAW,SAAS,EAAE,gBAAgB,sBAAsB,IAAI,CAAC;AAAA,QACvE;AAAA,MACF,CAAC;AAKD,YAAM,eAAe,SAAS;AAQ9B,UAAI,YAAY,YAAY,YAAY,sBAAsB;AAC5D,YAAI,EAAE,eAAe,eAAe;AAClC,kBAAQ,MAAM,+CAA+C,YAAY;AACzE,gBAAM,IAAI,MAAM,oDAAoD;AAAA,QACtE,OAAO;AACL,cAAI,aAAa,WAAW;AAC1B,mBAAO;AAAA,UACT,OAAO;AACL,kBAAM,IAAI,MAAM,aAAa,SAAS,gBAAgB;AAAA,UACxD;AAAA,QACF;AAAA,MACF;AAEA,UAAI,YAAY,SAAS;AACvB,YAAI,EAAE,eAAe,eAAe;AAClC,kBAAQ,MAAM,+CAA+C,YAAY;AACzE,gBAAM,IAAI,MAAM,oDAAoD;AAAA,QACtE,OAAO;AACL,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,UAAI,YAAY,yBAAyB;AACvC,YAAI,EAAE,YAAY,eAAe;AAC/B,kBAAQ,MAAM,4CAA4C,YAAY;AACtE,gBAAM,IAAI,MAAM,iDAAiD;AAAA,QACnE,WAAW,aAAa,UAAU,WAAW;AAC3C,iBAAO;AAAA,QACT,OAAO;AACL,gBAAM,IAAI,MAAM,gCAAgC;AAAA,QAClD;AAAA,MACF;AAEA,UAAI,CAAC,aAAa,aAAa,EAAE,aAAa,qBAAqB,aAAa,aAAa;AAC3F,cAAM,eAAe,aAAa,SAAS;AAC3C,gBAAQ,MAAM,uBAAuB,YAAY;AACjD,cAAM,IAAI,MAAM,YAAY;AAAA,MAC9B;AACA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,UAAI,MAAM,aAAa,KAAK,GAAG;AAC7B,cAAM,eAAe,MAAM,UAAU,MAAM,SAAS,MAAM;AAC1D,gBAAQ,MAAM,gBAAgB;AAAA,UAC5B,QAAQ,MAAM,UAAU;AAAA,UACxB,YAAY,MAAM,UAAU;AAAA,UAC5B,MAAM,MAAM,UAAU;AAAA,UACtB,SAAS;AAAA,QACX,CAAC;AACD,cAAM,IAAI,MAAM,mBAAmB,YAAY,EAAE;AAAA,MACnD;AACA,cAAQ,MAAM,qBAAqB,KAAK;AACxC,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,gBAAyB,MACzB,UAAmB,MACnB,cACA,aAC2B;AAC3B,UAAM,OAAY;AAAA,MAChB;AAAA,MACA,eAAe;AAAA,IACjB;AAEA,QAAI,KAAK,WAAW;AAClB,YAAM,IAAI,MAAM,0FAA0F;AAAA,IAC5G;AACA,QAAI,aAAa;AACf,UAAI,OAAO,gBAAgB,UAAU;AACnC,YAAI;AACF,eAAK,eAAe,KAAK,UAAU,KAAK,MAAM,WAAW,CAAC;AAAA,QAC5D,QAAQ;AAGN,gBAAM,IAAI,MAAM,8DAA8D;AAAA,QAChF;AAAA,MACF,OAAO;AACL,aAAK,eAAe,KAAK,UAAU,WAAW;AAAA,MAChD;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,KAAK,YAA6B,QAAQ,mBAAmB,IAAI;AAExF,QAAI,CAAC,SAAS,YAAY;AACxB,YAAM,IAAI,MAAM,iDAAiD;AAAA,IACnE;AAEA,SAAK,YAAY,SAAS;AAC1B,SAAK,aAAa,SAAS,eAAe;AAE1C,QAAI,iBAAiB,SAAS,gBAAgB;AAC5C,cAAQ,IAAI,mBAAmB,SAAS,cAAc,EAAE;AAAA,IAC1D;AAEA,WAAO,CAAC,SAAS,YAAY,SAAS,kBAAkB,EAAE;AAAA,EAC5D;AAAA,EAEA,MAAM,KAAK,KAAa,QAAgC;AACtD,QAAI,CAAC,UAAU,CAAC,KAAK,WAAW;AAC9B,YAAM,IAAI,MAAM,yDAAyD,GAAG,GAAG;AAAA,IACjF;AAEA,QAAI,CAAC,IAAI,WAAW,SAAS,KAAK,CAAC,IAAI,WAAW,UAAU,GAAG;AAC7D,YAAM,aAAa;AAAA,IACrB;AAEA,UAAM,OAAO;AAAA,MACX;AAAA,MACA,GAAI,SAAS,EAAE,SAAS,OAAO,IAAI,EAAE,YAAY,KAAK,UAAU;AAAA,IAClE;AAEA,UAAM,KAAK,YAAY,QAAQ,SAAS,IAAI;AAAA,EAC9C;AAAA,EAEA,MAAM,MAAM,oBAA4B,QAAkC;AACxE,QAAI,CAAC,UAAU,CAAC,KAAK,WAAW;AAC9B,YAAM,IAAI,MAAM,yEAAyE,kBAAkB,GAAG;AAAA,IAChH;AAEA,UAAM,OAAO;AAAA,MACX,qBAAqB;AAAA,MACrB,GAAI,SAAS,EAAE,SAAS,OAAO,IAAI,EAAE,YAAY,KAAK,UAAU;AAAA,IAClE;AAEA,UAAM,WAAW,MAAM,KAAK,YAA6B,QAAQ,UAAU,IAAI;AAC/E,WAAO,SAAS,mBAAmB;AAAA,EACrC;AAAA,EAEA,MAAM,gBAAgB,oBAA4B,QAAkC;AAClF,QAAI,CAAC,UAAU,CAAC,KAAK,WAAW;AAC9B,YAAM,IAAI,MAAM,mFAAmF,kBAAkB,GAAG;AAAA,IAC1H;AAEA,UAAM,OAAO;AAAA,MACX,qBAAqB;AAAA,MACrB,GAAI,SAAS,EAAE,SAAS,OAAO,IAAI,EAAE,YAAY,KAAK,UAAU;AAAA,IAClE;AAEA,UAAM,WAAW,MAAM,KAAK,YAA6B,QAAQ,sBAAsB,IAAI;AAC3F,WAAO,SAAS,gBAAgB;AAAA,EAClC;AAAA,EAEA,MAAM,MAAM,oBAA4B,QAAkC;AACxE,QAAI,CAAC,UAAU,CAAC,KAAK,WAAW;AAC9B,YAAM,IAAI,MAAM,yEAAyE,kBAAkB,GAAG;AAAA,IAChH;AAEA,UAAM,OAAO;AAAA,MACX,qBAAqB;AAAA,MACrB,GAAI,SAAS,EAAE,SAAS,OAAO,IAAI,EAAE,YAAY,KAAK,UAAU;AAAA,IAClE;AAEA,UAAM,WAAW,MAAM,KAAK,YAA6B,QAAQ,UAAU,IAAI;AAC/E,WAAO,SAAS,gBAAgB;AAAA,EAClC;AAAA,EAEA,MAAM,KAAK,MAAc,QAAgC;AACvD,QAAI,CAAC,UAAU,CAAC,KAAK,WAAW;AAC9B,YAAM,IAAI,MAAM,0DAA0D,IAAI,GAAG;AAAA,IACnF;AAEA,UAAM,OAAO;AAAA,MACX;AAAA,MACA,GAAI,SAAS,EAAE,SAAS,OAAO,IAAI,EAAE,YAAY,KAAK,UAAU;AAAA,IAClE;AAEA,UAAM,KAAK,YAAY,QAAQ,SAAS,IAAI;AAAA,EAC9C;AAAA,EAEA,MAAM,WAAW,QAAgC;AAC/C,QAAI,CAAC,UAAU,CAAC,KAAK,WAAW;AAC9B,YAAM,IAAI,MAAM,mDAAmD;AAAA,IACrE;AAEA,UAAM,OAAO,SAAS,EAAE,SAAS,OAAO,IAAI,EAAE,YAAY,KAAK,UAAU;AACzE,UAAM,KAAK,YAAY,QAAQ,gBAAgB,IAAI;AAAA,EACrD;AAAA,EAEA,MAAM,SAAS,QAAgC;AAC7C,QAAI,CAAC,UAAU,CAAC,KAAK,WAAW;AAC9B,YAAM,IAAI,MAAM,iDAAiD;AAAA,IACnE;AAEA,UAAM,OAAO,SAAS,EAAE,SAAS,OAAO,IAAI,EAAE,YAAY,KAAK,UAAU;AACzE,UAAM,KAAK,YAAY,QAAQ,cAAc,IAAI;AAAA,EACnD;AAAA,EAEA,MAAM,WAAW,QAAgC;AAC/C,QAAI,CAAC,UAAU,CAAC,KAAK,WAAW;AAC9B,YAAM,IAAI,MAAM,mDAAmD;AAAA,IACrE;AAEA,UAAM,OAAO,SAAS,EAAE,SAAS,OAAO,IAAI,EAAE,YAAY,KAAK,UAAU;AACzE,UAAM,KAAK,YAAY,QAAQ,gBAAgB,IAAI;AAAA,EACrD;AAAA,EAEA,MAAM,YAAY,oBAA4B,QAA+B;AAC3E,QAAI,CAAC,UAAU,CAAC,KAAK,WAAW;AAC9B,YAAM,IAAI,MAAM,+EAA+E,kBAAkB,GAAG;AAAA,IACtH;AAEA,UAAM,SAAS;AAAA,MACb,qBAAqB;AAAA,MACrB,GAAI,SAAS,EAAE,SAAS,OAAO,IAAI,EAAE,YAAY,KAAK,UAAU;AAAA,IAClE;AAEA,UAAM,WAAW,MAAM,KAAK,YAA6B,OAAO,iBAAiB,QAAW,MAAM;AAClG,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,YAAY,oBAA4B,QAAkC;AAC9E,QAAI,CAAC,UAAU,CAAC,KAAK,WAAW;AAC9B,YAAM,IAAI,MAAM,+EAA+E,kBAAkB,GAAG;AAAA,IACtH;AAEA,UAAM,OAAO;AAAA,MACX,qBAAqB;AAAA,MACrB,GAAI,SAAS,EAAE,SAAS,OAAO,IAAI,EAAE,YAAY,KAAK,UAAU;AAAA,IAClE;AAEA,UAAM,WAAW,MAAM,KAAK,YAA6B,QAAQ,iBAAiB,IAAI;AACtF,WAAO,SAAS,QAAQ;AAAA,EAC1B;AAAA,EAEA,MAAM,aAAa,oBAA4B,QAAkC;AAC/E,QAAI,CAAC,UAAU,CAAC,KAAK,WAAW;AAC9B,YAAM,IAAI,MAAM,gFAAgF,kBAAkB,GAAG;AAAA,IACvH;AAEA,UAAM,SAAS;AAAA,MACb,qBAAqB;AAAA,MACrB,GAAI,SAAS,EAAE,SAAS,OAAO,IAAI,EAAE,YAAY,KAAK,UAAU;AAAA,IAClE;AAEA,UAAM,WAAW,MAAM,KAAK,YAA6B,OAAO,kBAAkB,QAAW,MAAM;AACnG,WAAO,SAAS,SAAS;AAAA,EAC3B;AAAA,EAEA,MAAM,OAAO,QAAgB,QAAgC;AAC3D,QAAI,CAAC,UAAU,CAAC,KAAK,WAAW;AAC9B,YAAM,IAAI,MAAM,6DAA6D,MAAM,EAAE;AAAA,IACvF;AAEA,UAAM,OAAO;AAAA,MACX;AAAA,MACA,GAAI,SAAS,EAAE,SAAS,OAAO,IAAI,EAAE,YAAY,KAAK,UAAU;AAAA,IAClE;AAEA,UAAM,KAAK,YAAY,QAAQ,WAAW,IAAI;AAAA,EAChD;AAAA,EAEA,MAAM,KAAK,cAAsB,QAAgC;AAC/D,QAAI,CAAC,UAAU,CAAC,KAAK,WAAW;AAC9B,YAAM,IAAI,MAAM,iEAAiE,YAAY,EAAE;AAAA,IACjG;AAEA,UAAM,OAAO;AAAA,MACX;AAAA,MACA,GAAI,SAAS,EAAE,SAAS,OAAO,IAAI,EAAE,YAAY,KAAK,UAAU;AAAA,IAClE;AAEA,UAAM,KAAK,YAAY,QAAQ,SAAS,IAAI;AAAA,EAC9C;AAAA,EAEA,MAAM,eACJ,oBACA,oBACe;AACf,QAAI,CAAC,KAAK,WAAW;AACnB,YAAM,IAAI,MAAM,kFAAkF,kBAAkB,GAAG;AAAA,IACzH;AAEA,QAAI,OAAO,uBAAuB,YAAY,OAAO,uBAAuB,YAAY;AACtF,YAAM,IAAI,UAAU,mEAAmE,OAAO,kBAAkB,EAAE;AAAA,IACpH;AAEA,UAAM,WAAW,IAAI,SAAS;AAC9B,aAAS,OAAO,uBAAuB,kBAAkB;AACzD,aAAS,OAAO,cAAc,KAAK,SAAS;AAE5C,QAAI,OAAO,uBAAuB,UAAU;AAE1C,YAAM,IAAI,MAAM,8DAA8D;AAAA,IAChF,OAAO;AACL,YAAM,OAAO,mBAAmB;AAChC,eAAS,OAAO,QAAQ,MAAM,MAAM;AAAA,IACtC;AAEA,UAAM,KAAK,YAAY,QAAQ,qBAAqB,UAAU,MAAS;AAAA,EACzE;AAAA,EAEA,MAAM,iBAAiB,oBAAuD;AAC5E,QAAI,CAAC,KAAK,WAAW;AACnB,YAAM,IAAI,MAAM,oFAAoF,kBAAkB,GAAG;AAAA,IAC3H;AAEA,UAAM,OAAO;AAAA,MACX,qBAAqB;AAAA,MACrB,YAAY,KAAK;AAAA,IACnB;AAEA,UAAM,WAAW,MAAM,KAAK,YAA6B,QAAQ,uBAAuB,IAAI;AAC5F,WAAO,CAAC,SAAS,OAAO,IAAI,SAAS,YAAY,EAAE;AAAA,EACrD;AAAA,EAEA,MAAM,OAAO,oBAA4B,QAA6C;AACpF,QAAI,CAAC,UAAU,CAAC,KAAK,WAAW;AAC9B,YAAM,IAAI,MAAM,0EAA0E,kBAAkB,GAAG;AAAA,IACjH;AAEA,UAAM,OAAO;AAAA,MACX,qBAAqB;AAAA,MACrB,GAAI,SAAS,EAAE,SAAS,OAAO,IAAI,EAAE,YAAY,KAAK,UAAU;AAAA,IAClE;AAEA,UAAM,WAAW,MAAM,KAAK,YAA6B,QAAQ,WAAW,IAAI;AAChF,WAAO,CAAC,SAAS,UAAU,OAAO,SAAS,aAAa,EAAE;AAAA,EAC5D;AAAA,EAEA,MAAM,mBAAmB,KAAa,QAAkC;AACtE,QAAI,CAAC,UAAU,CAAC,KAAK,WAAW;AAC9B,YAAM,IAAI,MAAM,uEAAuE,GAAG,GAAG;AAAA,IAC/F;AAEA,UAAM,OAAO;AAAA,MACX;AAAA,MACA,GAAI,SAAS,EAAE,SAAS,OAAO,IAAI,EAAE,YAAY,KAAK,UAAU;AAAA,IAClE;AAEA,UAAM,WAAW,MAAM,KAAK,YAA6B,QAAQ,yBAAyB,IAAI;AAC9F,WAAO,SAAS,YAAY;AAAA,EAC9B;AAAA,EAEA,MAAM,eAA8B;AAClC,QAAI,CAAC,KAAK,WAAW;AACnB;AAAA,IACF;AAEA,UAAM,KAAK,YAAY,QAAQ,kBAAkB,EAAE,YAAY,KAAK,UAAU,CAAC;AAC/E,SAAK,YAAY;AACjB,SAAK,aAAa;AAAA,EACpB;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Example function to demonstrate package usage\n * @param name - The name to greet\n * @returns A greeting message\n */\nexport function greet(name: string): string {\n return `Hello, ${name}!`;\n}\n\n// Export other functions and types here \n\nimport axios from 'axios';\n\nconst BASE_URL = \"https://api.simplex.sh\";\n\ninterface SessionData {\n [key: string]: any;\n}\n\ninterface PlaywrightClickOptions {\n locator: string;\n locatorType: string;\n exact?: boolean;\n elementIndex?: 'first' | 'last' | 'nth';\n nthIndex?: number;\n locatorOptions?: Record<string, any>;\n}\n\ninterface SimplexResponse {\n succeeded?: boolean;\n error?: string;\n session_id?: string;\n livestream_url?: string;\n connect_url?: string;\n element_clicked?: string;\n text?: string;\n image?: string;\n bbox?: any;\n b64?: string;\n filename?: string;\n exists?: boolean;\n reasoning?: string;\n response?: string;\n}\n\nexport class Simplex {\n private apiKey: string;\n private sessionId: string | null = null;\n private connectUrl: string | null = null;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n private async makeRequest<T>(\n method: 'get' | 'post',\n endpoint: string,\n data?: any,\n params?: any\n ): Promise<T> {\n try {\n console.log(`Making ${method.toUpperCase()} request to ${endpoint}`);\n \n // Convert data to FormData\n const formData = new FormData();\n if (data) {\n Object.entries(data).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n formData.append(key, value.toString());\n }\n });\n }\n \n const response = await axios({\n method,\n url: `${BASE_URL}${endpoint}`,\n data: method === 'post' ? formData : undefined,\n params: method === 'get' ? params : undefined,\n headers: {\n 'x-api-key': this.apiKey,\n ...(method === 'post' ? { 'Content-Type': 'multipart/form-data' } : {})\n }\n });\n\n const responseData = response.data as SimplexResponse;\n \n // Consider response successful if:\n // 1. It has succeeded: true, or\n // 2. It's a create_session response with a session_id\n // 3. It's a goto or hover response with a succeeded field\n // 4. It's a get_network_response with success status\n\n if (endpoint === \"/goto\" || endpoint === \"/hover\") {\n if (!('succeeded' in responseData)) {\n throw new Error('Response data is missing the \"succeeded\" field');\n }\n return responseData as T;\n }\n\n if (endpoint === \"/get_network_response\") {\n if (!('status' in responseData)) {\n throw new Error('It looks like the get_network_response action failed to return a response. Did you set your api_key when creating the Simplex class?');\n } else if (responseData.status == \"success\") {\n return responseData as T;\n } else {\n throw new Error(`Failed to get network response: ${responseData.error}`);\n }\n }\n\n\n if (!responseData.succeeded && !(endpoint === '/create_session' && responseData.session_id)) {\n const errorMessage = responseData.error || 'Request failed';\n console.error('API request failed:', errorMessage);\n throw new Error(errorMessage);\n }\n return responseData as T;\n } catch (error: unknown) {\n const axiosError = error as { response?: { data?: { error?: string }, status?: number, statusText?: string } };\n if (axiosError.response) {\n const errorMessage = axiosError.response.data?.error || String(error);\n console.error('Axios error:', {\n status: axiosError.response.status,\n statusText: axiosError.response.statusText,\n data: axiosError.response.data,\n message: errorMessage\n });\n throw new Error(`Request failed: ${errorMessage}`);\n }\n console.error('Unexpected error:', error);\n throw error;\n }\n }\n\n async createSession(\n showInConsole: boolean = true,\n proxies: boolean = true,\n workflowName?: string,\n sessionData?: SessionData | string\n ): Promise<[string, string]> {\n const data: any = {\n proxies,\n workflow_name: workflowName\n };\n\n if (this.sessionId) {\n throw new Error(\"A session is already active. Please close the current session before creating a new one.\");\n }\n if (sessionData) {\n if (typeof sessionData === 'string') {\n try {\n data.session_data = JSON.stringify(JSON.parse(sessionData));\n } catch {\n // If parsing fails, treat as file path\n // Note: File system operations are not available in browser environment\n throw new Error('File system operations are not supported in this environment');\n }\n } else {\n data.session_data = JSON.stringify(sessionData);\n }\n }\n\n const response = await this.makeRequest<SimplexResponse>('post', '/create_session', data);\n \n if (!response.session_id) {\n throw new Error('Session creation failed: No session ID returned');\n }\n\n this.sessionId = response.session_id;\n this.connectUrl = response.connect_url || null;\n\n if (showInConsole && response.livestream_url) {\n console.log(`Livestream URL: ${response.livestream_url}`);\n }\n\n return [response.session_id, response.livestream_url || ''];\n }\n\n async goto(url: string, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling goto with url='${url}'`);\n }\n\n if (!url.startsWith('http://') && !url.startsWith('https://')) {\n url = 'https://' + url;\n }\n\n const data = {\n url,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest('post', '/goto', data);\n }\n\n async click(elementDescription: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling click with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/click', data);\n return response.element_clicked || '';\n }\n\n async hover(elementDescription: string, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling click with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest<SimplexResponse>('post', '/hover', data);\n }\n\n async scrollToElement(elementDescription: string, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling click with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest<SimplexResponse>('post', '/scroll_to_element', data);\n }\n\n\n async getNetworkResponse(url: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling getNetworkResponse with url='${url}'`);\n }\n \n const data = {\n url,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/get_network_response', data);\n console.log(`Network response: ${response.response}`);\n return response.response || '';\n }\n\n async type(text: string, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling type with text='${text}'`);\n }\n\n const data = {\n text,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest('post', '/type', data);\n }\n\n async pressEnter(cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error('Must call createSession before calling pressEnter');\n }\n\n const data = cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId };\n await this.makeRequest('post', '/press_enter', data);\n }\n\n async pressTab(cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error('Must call createSession before calling pressTab');\n }\n\n const data = cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId };\n await this.makeRequest('post', '/press_tab', data);\n }\n\n async deleteText(cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error('Must call createSession before calling deleteText');\n }\n\n const data = cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId };\n await this.makeRequest('post', '/delete_text', data);\n }\n\n async extractBbox(elementDescription: string, cdpUrl?: string): Promise<any> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling extractBbox with elementDescription='${elementDescription}'`);\n }\n\n const params = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('get', '/extract-bbox', undefined, params);\n return response.bbox;\n }\n\n async extractText(elementDescription: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling extractText with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/extract-text', data);\n return response.text || '';\n }\n\n async extractImage(elementDescription: string, cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling extractImage with elementDescription='${elementDescription}'`);\n }\n\n const params = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('get', '/extract-image', undefined, params);\n return response.image || '';\n }\n\n async scroll(pixels: number, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling scroll with pixels=${pixels}`);\n }\n\n const data = {\n pixels,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest('post', '/scroll', data);\n }\n\n async wait(milliseconds: number, cdpUrl?: string): Promise<void> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling wait with milliseconds=${milliseconds}`);\n }\n\n const data = {\n milliseconds,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n await this.makeRequest('post', '/wait', data);\n }\n\n async clickAndUpload(\n elementDescription: string,\n filePathOrCallable: string | (() => Blob)\n ): Promise<void> {\n if (!this.sessionId) {\n throw new Error(`Must call createSession before calling clickAndUpload with elementDescription='${elementDescription}'`);\n }\n\n if (typeof filePathOrCallable !== 'string' && typeof filePathOrCallable !== 'function') {\n throw new TypeError(`filePathOrCallable must be either a string or a callable, not a ${typeof filePathOrCallable}`);\n }\n\n const formData = new FormData();\n formData.append('element_description', elementDescription);\n formData.append('session_id', this.sessionId);\n\n if (typeof filePathOrCallable === 'string') {\n // Note: File system operations are not available in browser environment\n throw new Error('File system operations are not supported in this environment');\n } else {\n const blob = filePathOrCallable();\n formData.append('file', blob, 'file'); // Add filename for the blob\n }\n\n await this.makeRequest('post', '/click_and_upload', formData, undefined);\n }\n\n async clickAndDownload(elementDescription: string): Promise<[string, string]> {\n if (!this.sessionId) {\n throw new Error(`Must call createSession before calling clickAndDownload with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n session_id: this.sessionId\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/click_and_download', data);\n return [response.b64 || '', response.filename || ''];\n }\n\n async exists(elementDescription: string, cdpUrl?: string): Promise<[boolean, string]> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling exists with elementDescription='${elementDescription}'`);\n }\n\n const data = {\n element_description: elementDescription,\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/exists', data);\n return [response.exists || false, response.reasoning || ''];\n }\n\n async closeSession(): Promise<void> {\n if (!this.sessionId) {\n return;\n }\n\n await this.makeRequest('post', '/close_session', { session_id: this.sessionId });\n this.sessionId = null;\n this.connectUrl = null;\n }\n} "],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "simplex-ts",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"description": "A TypeScript package template",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -23,15 +23,16 @@
|
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@types/jest": "^29.5.12",
|
|
25
25
|
"@types/node": "^20.11.19",
|
|
26
|
+
"glob": "^10.3.10",
|
|
26
27
|
"jest": "^29.7.0",
|
|
27
28
|
"rimraf": "^5.0.5",
|
|
28
29
|
"ts-jest": "^29.1.2",
|
|
29
30
|
"tsup": "^8.0.2",
|
|
30
|
-
"typescript": "^5.3.3"
|
|
31
|
-
"glob": "^10.3.10"
|
|
31
|
+
"typescript": "^5.3.3"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"axios": "^
|
|
34
|
+
"@types/axios": "^0.9.36",
|
|
35
|
+
"axios": "^1.8.4",
|
|
35
36
|
"dotenv": "^16.4.5"
|
|
36
37
|
}
|
|
37
|
-
}
|
|
38
|
+
}
|