@airtop/sdk 1.0.0-alpha2.10 → 1.0.0-alpha2.12

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.cjs CHANGED
@@ -9,7 +9,7 @@ var require_package = __commonJS({
9
9
  module.exports = {
10
10
  name: "@airtop/sdk",
11
11
  description: "Airtop SDK for TypeScript",
12
- version: "1.0.0-alpha2.10",
12
+ version: "1.0.0-alpha2.12",
13
13
  type: "module",
14
14
  main: "./dist/index.cjs",
15
15
  module: "./dist/index.js",
@@ -47,7 +47,7 @@ var require_package = __commonJS({
47
47
  },
48
48
  dependencies: {
49
49
  "@airtop/json-schema-adapter": "workspace:*",
50
- "@airtop/core": "0.1.0-alpha.27",
50
+ "@airtop/core": "0.1.0-alpha.28",
51
51
  "date-fns": "4.1.0",
52
52
  loglayer: "6.3.3",
53
53
  "serialize-error": "12.0.0",
@@ -107,6 +107,11 @@ var AirtopBase = class {
107
107
  * @internal
108
108
  */
109
109
 
110
+ /**
111
+ * Instance for sending agent events
112
+ * @internal
113
+ */
114
+
110
115
  /**
111
116
  * Creates a new instance of AirtopBase
112
117
  * @param config - Configuration options for the SDK
@@ -117,6 +122,24 @@ var AirtopBase = class {
117
122
  this.outputJsonAdapter = config.outputSchemaAdapter;
118
123
  this.jobId = config.jobId;
119
124
  }
125
+ /**
126
+ * Sets the publisher for sending agent events. Internal use only.
127
+ * @internal
128
+ */
129
+ _setAgentEventPublisher(logger) {
130
+ this.agentEventPublisher = logger;
131
+ }
132
+ /**
133
+ * Sends a payload to the agent with the specified event name.
134
+ * @param eventName The name of the event
135
+ * @param payload The payload to send to the agent
136
+ * @internal
137
+ */
138
+ _sendAgentPayload(eventName, payload) {
139
+ if (this.agentEventPublisher) {
140
+ this.agentEventPublisher.withMetadata(payload).info(eventName);
141
+ }
142
+ }
120
143
  /**
121
144
  * Returns the API key used by the SDK
122
145
  * @returns API key string
@@ -241,13 +264,23 @@ var processLogMessage = (log, logLevel, ...args) => {
241
264
  // src/session/AirtopSessionClient.ts
242
265
 
243
266
 
267
+ // src/types.ts
268
+ var AirtopError = class extends Error {
269
+
270
+ constructor(issues) {
271
+ const errorMessage = issues.map((issue) => issue.message).join("\n");
272
+ super(errorMessage);
273
+ this.issues = issues;
274
+ }
275
+ };
276
+
244
277
  // src/window/AirtopWindowClient.ts
245
278
 
246
279
 
247
280
  // src/async-utils.ts
248
281
 
249
282
  var DEFAULT_TIMEOUT_SECONDS = 300;
250
- var DEFAULT_POLLING_INTERVAL_SECONDS = 2;
283
+ var DEFAULT_POLLING_INTERVAL_MS = 500;
251
284
  async function waitForRequestCompletion(client, requestId, requestOptions) {
252
285
  const startTime = Date.now();
253
286
  const timeoutMs = _datefns.secondsToMilliseconds.call(void 0, _optionalChain([requestOptions, 'optionalAccess', _5 => _5.timeoutInSeconds]) || DEFAULT_TIMEOUT_SECONDS);
@@ -259,7 +292,7 @@ async function waitForRequestCompletion(client, requestId, requestOptions) {
259
292
  if (apiResponse.status === "error") {
260
293
  throw new Error(apiResponse.error);
261
294
  }
262
- await new Promise((resolve) => setTimeout(resolve, _datefns.secondsToMilliseconds.call(void 0, DEFAULT_POLLING_INTERVAL_SECONDS)));
295
+ await new Promise((resolve) => setTimeout(resolve, DEFAULT_POLLING_INTERVAL_MS));
263
296
  }
264
297
  throw new Error("Waiting for request timed out");
265
298
  }
@@ -482,6 +515,11 @@ var AirtopWindowClient = class extends AirtopBase {
482
515
  },
483
516
  this.resolveRequestOptions(requestOptions)
484
517
  );
518
+ this._sendAgentPayload("LiveViewUrl", {
519
+ liveViewUrl: results.data.liveViewUrl,
520
+ windowId: this.windowId,
521
+ sessionId: this.sessionId
522
+ });
485
523
  return new AirtopWindow(this.getCommonConfig(), this.sessionId, results);
486
524
  }
487
525
  /**
@@ -783,7 +821,7 @@ var AirtopWindowClient = class extends AirtopBase {
783
821
  )
784
822
  );
785
823
  }
786
- async findOne(prompt, config, requestOptions = {}) {
824
+ async findOnePrivate(prompt, config, requestOptions = {}) {
787
825
  this.log.withMetadata({ prompt }).info("Executing LLM call");
788
826
  const apiResponse = await withRequestCompletionPolling(
789
827
  this.client,
@@ -801,15 +839,32 @@ var AirtopWindowClient = class extends AirtopBase {
801
839
  }
802
840
  )
803
841
  );
842
+ if (apiResponse.errors.length > 0) {
843
+ throw new AirtopError(apiResponse.errors);
844
+ }
804
845
  try {
846
+ if (!apiResponse.data.modelResponse) {
847
+ return null;
848
+ }
805
849
  const nodeData = JSON.parse(apiResponse.data.modelResponse);
850
+ if (Object.keys(nodeData).length === 0) {
851
+ return null;
852
+ }
806
853
  return new AirtopNode(this, nodeData);
807
854
  } catch (error) {
808
855
  this.log.withMetadata({ nodeDataStr: apiResponse.data.modelResponse }).withError(error).error("Error parsing node data");
809
856
  throw error;
810
857
  }
811
858
  }
812
- async findMany(prompt, config, requestOptions = {}) {
859
+ async findOne(prompt, config, requestOptions = {}) {
860
+ const configOverride = { ...config, optional: false };
861
+ return await this.findOnePrivate(prompt, configOverride, requestOptions);
862
+ }
863
+ async findOneOptional(prompt, config, requestOptions = {}) {
864
+ const configOverride = { ...config, optional: true };
865
+ return await this.findOnePrivate(prompt, configOverride, requestOptions);
866
+ }
867
+ async findManyPrivate(prompt, config, requestOptions = {}) {
813
868
  this.log.withMetadata({ prompt }).info("Executing LLM call");
814
869
  const apiResponse = await withRequestCompletionPolling(
815
870
  this.client,
@@ -827,15 +882,32 @@ var AirtopWindowClient = class extends AirtopBase {
827
882
  }
828
883
  )
829
884
  );
885
+ if (apiResponse.errors.length > 0) {
886
+ throw new AirtopError(apiResponse.errors);
887
+ }
830
888
  const nodeHandles = apiResponse.data.modelResponse.split("___DELIM___");
831
889
  return nodeHandles.map((nodeDataStr) => {
832
890
  try {
891
+ if (!nodeDataStr) {
892
+ return null;
893
+ }
833
894
  const nodeData = JSON.parse(nodeDataStr);
895
+ if (Object.keys(nodeData).length === 0) {
896
+ return null;
897
+ }
834
898
  return new AirtopNode(this, nodeData);
835
899
  } catch (error) {
836
900
  this.log.withMetadata({ nodeDataStr }).withError(error).error("Error parsing node data");
837
901
  }
838
- });
902
+ }).filter((node) => !!node);
903
+ }
904
+ async findMany(prompt, config, requestOptions = {}) {
905
+ const configOverride = { ...config, optional: false };
906
+ return await this.findManyPrivate(prompt, configOverride, requestOptions);
907
+ }
908
+ async findManyOptional(prompt, config, requestOptions = {}) {
909
+ const configOverride = { ...config, optional: true };
910
+ return await this.findManyPrivate(prompt, configOverride, requestOptions);
839
911
  }
840
912
  async waitForPage(config, requestOptions = {}) {
841
913
  return await withRequestCompletionPolling(
@@ -853,6 +925,23 @@ var AirtopWindowClient = class extends AirtopBase {
853
925
  )
854
926
  );
855
927
  }
928
+ async navigate(direction, config, requestOptions = {}) {
929
+ return await withRequestCompletionPolling(
930
+ this.client,
931
+ () => this.client.windows.navigate(
932
+ this.getWindowId(),
933
+ {
934
+ direction,
935
+ sessionId: this.sessionId,
936
+ ...config || {}
937
+ },
938
+ {
939
+ timeout: _datefns.secondsToMilliseconds.call(void 0, 600),
940
+ ...this.resolveRequestOptions(requestOptions)
941
+ }
942
+ )
943
+ );
944
+ }
856
945
  };
857
946
 
858
947
  // src/window/AirtopWindow.ts
@@ -1289,6 +1378,13 @@ var AirtopClient = class extends AirtopBase {
1289
1378
  }
1290
1379
  };
1291
1380
 
1381
+ // src/window/AirtopWindowClient.types.ts
1382
+ var WindowNavigateDirection = /* @__PURE__ */ ((WindowNavigateDirection2) => {
1383
+ WindowNavigateDirection2["BACK"] = "backward";
1384
+ WindowNavigateDirection2["FORWARD"] = "forward";
1385
+ return WindowNavigateDirection2;
1386
+ })(WindowNavigateDirection || {});
1387
+
1292
1388
  // src/plugin/AirtopPlugin.types.ts
1293
1389
  var AirtopPluginAugmentationType = /* @__PURE__ */ ((AirtopPluginAugmentationType2) => {
1294
1390
  AirtopPluginAugmentationType2["AirtopClient"] = "AirtopClient";
@@ -1428,5 +1524,7 @@ var AirtopMocks = class {
1428
1524
 
1429
1525
 
1430
1526
 
1431
- exports.AirtopBase = AirtopBase; exports.AirtopClient = AirtopClient; exports.AirtopMocks = AirtopMocks; exports.AirtopNode = AirtopNode; exports.AirtopPluginAugmentationType = AirtopPluginAugmentationType; exports.AirtopSession = AirtopSession; exports.AirtopSessionClient = AirtopSessionClient; exports.AirtopWindow = AirtopWindow; exports.AirtopWindowClient = AirtopWindowClient; exports.AirtopWindowScreenshot = AirtopWindowScreenshot; exports.registerAirtopPlugin = registerAirtopPlugin;
1527
+
1528
+
1529
+ exports.AirtopBase = AirtopBase; exports.AirtopClient = AirtopClient; exports.AirtopError = AirtopError; exports.AirtopMocks = AirtopMocks; exports.AirtopNode = AirtopNode; exports.AirtopPluginAugmentationType = AirtopPluginAugmentationType; exports.AirtopSession = AirtopSession; exports.AirtopSessionClient = AirtopSessionClient; exports.AirtopWindow = AirtopWindow; exports.AirtopWindowClient = AirtopWindowClient; exports.AirtopWindowScreenshot = AirtopWindowScreenshot; exports.WindowNavigateDirection = WindowNavigateDirection; exports.registerAirtopPlugin = registerAirtopPlugin;
1432
1530
  //# sourceMappingURL=index.cjs.map