simplex-ts 1.1.2 → 1.1.4

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 CHANGED
@@ -16,22 +16,22 @@ 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
- hover(elementDescription: string, cdpUrl?: string): Promise<string>;
19
+ hover(elementDescription: string, cdpUrl?: string): Promise<void>;
20
+ scrollToElement(elementDescription: string, cdpUrl?: string): Promise<void>;
21
+ getNetworkResponse(url: string, cdpUrl?: string): Promise<string>;
20
22
  type(text: string, cdpUrl?: string): Promise<void>;
21
23
  pressEnter(cdpUrl?: string): Promise<void>;
22
24
  pressTab(cdpUrl?: string): Promise<void>;
23
25
  deleteText(cdpUrl?: string): Promise<void>;
24
26
  extractBbox(elementDescription: string, cdpUrl?: string): Promise<any>;
25
27
  extractText(elementDescription: string, cdpUrl?: string): Promise<string>;
26
- extractImage(elementDescription: string, cdpUrl?: string): Promise<string>;
27
28
  scroll(pixels: number, cdpUrl?: string): Promise<void>;
28
29
  wait(milliseconds: number, cdpUrl?: string): Promise<void>;
29
30
  clickAndUpload(elementDescription: string, filePathOrCallable: string | (() => Blob)): Promise<void>;
30
31
  clickAndDownload(elementDescription: string): Promise<[string, string]>;
31
32
  exists(elementDescription: string, cdpUrl?: string): Promise<[boolean, string]>;
32
- getNetworkResponse(url: string, cdpUrl?: string): Promise<string>;
33
33
  getPageURL(cdpUrl?: string): Promise<string>;
34
- getStorageState(cdpUrl?: string): Promise<string>;
34
+ captureLoginSession(cdpUrl?: string): Promise<string>;
35
35
  closeSession(): Promise<void>;
36
36
  }
37
37
 
package/dist/index.d.ts CHANGED
@@ -16,22 +16,22 @@ 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
- hover(elementDescription: string, cdpUrl?: string): Promise<string>;
19
+ hover(elementDescription: string, cdpUrl?: string): Promise<void>;
20
+ scrollToElement(elementDescription: string, cdpUrl?: string): Promise<void>;
21
+ getNetworkResponse(url: string, cdpUrl?: string): Promise<string>;
20
22
  type(text: string, cdpUrl?: string): Promise<void>;
21
23
  pressEnter(cdpUrl?: string): Promise<void>;
22
24
  pressTab(cdpUrl?: string): Promise<void>;
23
25
  deleteText(cdpUrl?: string): Promise<void>;
24
26
  extractBbox(elementDescription: string, cdpUrl?: string): Promise<any>;
25
27
  extractText(elementDescription: string, cdpUrl?: string): Promise<string>;
26
- extractImage(elementDescription: string, cdpUrl?: string): Promise<string>;
27
28
  scroll(pixels: number, cdpUrl?: string): Promise<void>;
28
29
  wait(milliseconds: number, cdpUrl?: string): Promise<void>;
29
30
  clickAndUpload(elementDescription: string, filePathOrCallable: string | (() => Blob)): Promise<void>;
30
31
  clickAndDownload(elementDescription: string): Promise<[string, string]>;
31
32
  exists(elementDescription: string, cdpUrl?: string): Promise<[boolean, string]>;
32
- getNetworkResponse(url: string, cdpUrl?: string): Promise<string>;
33
33
  getPageURL(cdpUrl?: string): Promise<string>;
34
- getStorageState(cdpUrl?: string): Promise<string>;
34
+ captureLoginSession(cdpUrl?: string): Promise<string>;
35
35
  closeSession(): Promise<void>;
36
36
  }
37
37
 
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://simplex-dev-shreya--api-server-fastapi-app.modal.run";
41
+ var BASE_URL = "https://api.simplex.sh";
42
42
  var Simplex = class {
43
43
  constructor(apiKey) {
44
44
  this.sessionId = null;
@@ -67,22 +67,19 @@ var Simplex = class {
67
67
  }
68
68
  });
69
69
  const responseData = response.data;
70
- if (endpoint == "/goto" || endpoint == "/hover") {
70
+ if (endpoint === "/goto" || endpoint === "/hover") {
71
71
  if (!("succeeded" in responseData)) {
72
- console.error('Response data missing "succeeded" property:', responseData);
73
- throw new Error('Invalid API response: missing "succeeded" property');
74
- } else {
75
- return responseData;
72
+ throw new Error('Response data is missing the "succeeded" field');
76
73
  }
74
+ return responseData;
77
75
  }
78
- if (endpoint == "/get_network_response") {
76
+ if (endpoint === "/get_network_response") {
79
77
  if (!("status" in responseData)) {
80
- console.error('Response data missing "status" property:', responseData);
81
- 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?");
82
79
  } else if (responseData.status == "success") {
83
80
  return responseData;
84
81
  } else {
85
- throw new Error("Failed to get network response");
82
+ throw new Error(`Failed to get network response: ${responseData.error}`);
86
83
  }
87
84
  }
88
85
  if (!responseData.succeeded && !(endpoint === "/create_session" && responseData.session_id)) {
@@ -92,12 +89,13 @@ var Simplex = class {
92
89
  }
93
90
  return responseData;
94
91
  } catch (error) {
95
- if (import_axios.default.isAxiosError(error)) {
96
- const errorMessage = error.response?.data?.error || error.message;
92
+ const axiosError = error;
93
+ if (axiosError.response) {
94
+ const errorMessage = axiosError.response.data?.error || String(error);
97
95
  console.error("Axios error:", {
98
- status: error.response?.status,
99
- statusText: error.response?.statusText,
100
- data: error.response?.data,
96
+ status: axiosError.response.status,
97
+ statusText: axiosError.response.statusText,
98
+ data: axiosError.response.data,
101
99
  message: errorMessage
102
100
  });
103
101
  throw new Error(`Request failed: ${errorMessage}`);
@@ -162,14 +160,34 @@ var Simplex = class {
162
160
  }
163
161
  async hover(elementDescription, cdpUrl) {
164
162
  if (!cdpUrl && !this.sessionId) {
165
- throw new Error(`Must call createSession before calling hover with elementDescription='${elementDescription}'`);
163
+ throw new Error(`Must call createSession before calling click with elementDescription='${elementDescription}'`);
164
+ }
165
+ const data = {
166
+ element_description: elementDescription,
167
+ ...cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId }
168
+ };
169
+ await this.makeRequest("post", "/hover", data);
170
+ }
171
+ async scrollToElement(elementDescription, cdpUrl) {
172
+ if (!cdpUrl && !this.sessionId) {
173
+ throw new Error(`Must call createSession before calling click with elementDescription='${elementDescription}'`);
166
174
  }
167
175
  const data = {
168
176
  element_description: elementDescription,
169
177
  ...cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId }
170
178
  };
171
- const response = await this.makeRequest("post", "/hover", data);
172
- return response.element_info || "";
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
+ return response.response || "";
173
191
  }
174
192
  async type(text, cdpUrl) {
175
193
  if (!cdpUrl && !this.sessionId) {
@@ -224,17 +242,6 @@ var Simplex = class {
224
242
  const response = await this.makeRequest("post", "/extract-text", data);
225
243
  return response.text || "";
226
244
  }
227
- async extractImage(elementDescription, cdpUrl) {
228
- if (!cdpUrl && !this.sessionId) {
229
- throw new Error(`Must call createSession before calling extractImage with elementDescription='${elementDescription}'`);
230
- }
231
- const params = {
232
- element_description: elementDescription,
233
- ...cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId }
234
- };
235
- const response = await this.makeRequest("get", "/extract-image", void 0, params);
236
- return response.image || "";
237
- }
238
245
  async scroll(pixels, cdpUrl) {
239
246
  if (!cdpUrl && !this.sessionId) {
240
247
  throw new Error(`Must call createSession before calling scroll with pixels=${pixels}`);
@@ -295,17 +302,6 @@ var Simplex = class {
295
302
  const response = await this.makeRequest("post", "/exists", data);
296
303
  return [response.exists || false, response.reasoning || ""];
297
304
  }
298
- async getNetworkResponse(url, cdpUrl) {
299
- if (!cdpUrl && !this.sessionId) {
300
- throw new Error(`Must call createSession before calling getNetworkResponse with url='${url}'`);
301
- }
302
- const data = {
303
- url,
304
- ...cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId }
305
- };
306
- const response = await this.makeRequest("post", "/get_network_response", data);
307
- return response.response || "";
308
- }
309
305
  async getPageURL(cdpUrl) {
310
306
  if (!cdpUrl && !this.sessionId) {
311
307
  throw new Error(`Must call createSession before calling getPageURL`);
@@ -316,14 +312,14 @@ var Simplex = class {
316
312
  const response = await this.makeRequest("post", "/get_page_url", data);
317
313
  return response.url || "";
318
314
  }
319
- async getStorageState(cdpUrl) {
315
+ async captureLoginSession(cdpUrl) {
320
316
  if (!cdpUrl && !this.sessionId) {
321
- throw new Error(`Must call createSession before calling getStorageState`);
317
+ throw new Error(`Must call createSession before calling captureLoginSession`);
322
318
  }
323
319
  const data = {
324
320
  ...cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId }
325
321
  };
326
- const response = await this.makeRequest("post", "/get_storage_state", data);
322
+ const response = await this.makeRequest("post", "/capture_login_session", data);
327
323
  return response.storage_state || "";
328
324
  }
329
325
  async closeSession() {
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 \n\nimport axios from 'axios';\n\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 url?: string;\n storage_state?: 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\n if (endpoint == \"/goto\" || endpoint == \"/hover\") {\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 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 getPageURL(cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling getPageURL`);\n }\n\n const data = {\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/get_page_url', data);\n return response.url || '';\n }\n\n async getStorageState(cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling getStorageState`);\n }\n \n const data = {\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/get_storage_state', data);\n return response.storage_state || '';\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// const BASE_URL = \"https://simplex-dev-shreya--api-server-and-container-service-fas-bba69e.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 text?: string;\n image?: string;\n bbox?: any;\n b64?: string;\n filename?: string;\n exists?: boolean;\n reasoning?: string;\n response?: string;\n url?: string;\n storage_state?: 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 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 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 getPageURL(cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling getPageURL`);\n }\n\n const data = {\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/get_page_url', data);\n return response.url || '';\n }\n\n async captureLoginSession(cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling captureLoginSession`);\n }\n \n const data = {\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/capture_login_session', data);\n return response.storage_state || '';\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://simplex-dev-shreya--api-server-fastapi-app.modal.run";
6
+ var BASE_URL = "https://api.simplex.sh";
7
7
  var Simplex = class {
8
8
  constructor(apiKey) {
9
9
  this.sessionId = null;
@@ -32,22 +32,19 @@ var Simplex = class {
32
32
  }
33
33
  });
34
34
  const responseData = response.data;
35
- if (endpoint == "/goto" || endpoint == "/hover") {
35
+ if (endpoint === "/goto" || endpoint === "/hover") {
36
36
  if (!("succeeded" in responseData)) {
37
- console.error('Response data missing "succeeded" property:', responseData);
38
- throw new Error('Invalid API response: missing "succeeded" property');
39
- } else {
40
- return responseData;
37
+ throw new Error('Response data is missing the "succeeded" field');
41
38
  }
39
+ return responseData;
42
40
  }
43
- if (endpoint == "/get_network_response") {
41
+ if (endpoint === "/get_network_response") {
44
42
  if (!("status" in responseData)) {
45
- console.error('Response data missing "status" property:', responseData);
46
- 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?");
47
44
  } else if (responseData.status == "success") {
48
45
  return responseData;
49
46
  } else {
50
- throw new Error("Failed to get network response");
47
+ throw new Error(`Failed to get network response: ${responseData.error}`);
51
48
  }
52
49
  }
53
50
  if (!responseData.succeeded && !(endpoint === "/create_session" && responseData.session_id)) {
@@ -57,12 +54,13 @@ var Simplex = class {
57
54
  }
58
55
  return responseData;
59
56
  } catch (error) {
60
- if (axios.isAxiosError(error)) {
61
- const errorMessage = error.response?.data?.error || error.message;
57
+ const axiosError = error;
58
+ if (axiosError.response) {
59
+ const errorMessage = axiosError.response.data?.error || String(error);
62
60
  console.error("Axios error:", {
63
- status: error.response?.status,
64
- statusText: error.response?.statusText,
65
- data: error.response?.data,
61
+ status: axiosError.response.status,
62
+ statusText: axiosError.response.statusText,
63
+ data: axiosError.response.data,
66
64
  message: errorMessage
67
65
  });
68
66
  throw new Error(`Request failed: ${errorMessage}`);
@@ -127,14 +125,34 @@ var Simplex = class {
127
125
  }
128
126
  async hover(elementDescription, cdpUrl) {
129
127
  if (!cdpUrl && !this.sessionId) {
130
- throw new Error(`Must call createSession before calling hover with elementDescription='${elementDescription}'`);
128
+ throw new Error(`Must call createSession before calling click with elementDescription='${elementDescription}'`);
129
+ }
130
+ const data = {
131
+ element_description: elementDescription,
132
+ ...cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId }
133
+ };
134
+ await this.makeRequest("post", "/hover", data);
135
+ }
136
+ async scrollToElement(elementDescription, cdpUrl) {
137
+ if (!cdpUrl && !this.sessionId) {
138
+ throw new Error(`Must call createSession before calling click with elementDescription='${elementDescription}'`);
131
139
  }
132
140
  const data = {
133
141
  element_description: elementDescription,
134
142
  ...cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId }
135
143
  };
136
- const response = await this.makeRequest("post", "/hover", data);
137
- return response.element_info || "";
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
+ return response.response || "";
138
156
  }
139
157
  async type(text, cdpUrl) {
140
158
  if (!cdpUrl && !this.sessionId) {
@@ -189,17 +207,6 @@ var Simplex = class {
189
207
  const response = await this.makeRequest("post", "/extract-text", data);
190
208
  return response.text || "";
191
209
  }
192
- async extractImage(elementDescription, cdpUrl) {
193
- if (!cdpUrl && !this.sessionId) {
194
- throw new Error(`Must call createSession before calling extractImage with elementDescription='${elementDescription}'`);
195
- }
196
- const params = {
197
- element_description: elementDescription,
198
- ...cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId }
199
- };
200
- const response = await this.makeRequest("get", "/extract-image", void 0, params);
201
- return response.image || "";
202
- }
203
210
  async scroll(pixels, cdpUrl) {
204
211
  if (!cdpUrl && !this.sessionId) {
205
212
  throw new Error(`Must call createSession before calling scroll with pixels=${pixels}`);
@@ -260,17 +267,6 @@ var Simplex = class {
260
267
  const response = await this.makeRequest("post", "/exists", data);
261
268
  return [response.exists || false, response.reasoning || ""];
262
269
  }
263
- async getNetworkResponse(url, cdpUrl) {
264
- if (!cdpUrl && !this.sessionId) {
265
- throw new Error(`Must call createSession before calling getNetworkResponse with url='${url}'`);
266
- }
267
- const data = {
268
- url,
269
- ...cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId }
270
- };
271
- const response = await this.makeRequest("post", "/get_network_response", data);
272
- return response.response || "";
273
- }
274
270
  async getPageURL(cdpUrl) {
275
271
  if (!cdpUrl && !this.sessionId) {
276
272
  throw new Error(`Must call createSession before calling getPageURL`);
@@ -281,14 +277,14 @@ var Simplex = class {
281
277
  const response = await this.makeRequest("post", "/get_page_url", data);
282
278
  return response.url || "";
283
279
  }
284
- async getStorageState(cdpUrl) {
280
+ async captureLoginSession(cdpUrl) {
285
281
  if (!cdpUrl && !this.sessionId) {
286
- throw new Error(`Must call createSession before calling getStorageState`);
282
+ throw new Error(`Must call createSession before calling captureLoginSession`);
287
283
  }
288
284
  const data = {
289
285
  ...cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId }
290
286
  };
291
- const response = await this.makeRequest("post", "/get_storage_state", data);
287
+ const response = await this.makeRequest("post", "/capture_login_session", data);
292
288
  return response.storage_state || "";
293
289
  }
294
290
  async closeSession() {
@@ -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 \n\nimport axios from 'axios';\n\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 url?: string;\n storage_state?: 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\n if (endpoint == \"/goto\" || endpoint == \"/hover\") {\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 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 getPageURL(cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling getPageURL`);\n }\n\n const data = {\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/get_page_url', data);\n return response.url || '';\n }\n\n async getStorageState(cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling getStorageState`);\n }\n \n const data = {\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/get_storage_state', data);\n return response.storage_state || '';\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":[]}
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// const BASE_URL = \"https://simplex-dev-shreya--api-server-and-container-service-fas-bba69e.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 text?: string;\n image?: string;\n bbox?: any;\n b64?: string;\n filename?: string;\n exists?: boolean;\n reasoning?: string;\n response?: string;\n url?: string;\n storage_state?: 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 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 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 getPageURL(cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling getPageURL`);\n }\n\n const data = {\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/get_page_url', data);\n return response.url || '';\n }\n\n async captureLoginSession(cdpUrl?: string): Promise<string> {\n if (!cdpUrl && !this.sessionId) {\n throw new Error(`Must call createSession before calling captureLoginSession`);\n }\n \n const data = {\n ...(cdpUrl ? { cdp_url: cdpUrl } : { session_id: this.sessionId })\n };\n\n const response = await this.makeRequest<SimplexResponse>('post', '/capture_login_session', data);\n return response.storage_state || '';\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.1.2",
3
+ "version": "1.1.4",
4
4
  "description": "A TypeScript package for the Simplex API",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",