browser-use-sdk 2.0.7 → 2.0.9
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/cjs/BaseClient.d.ts +2 -1
- package/dist/cjs/BaseClient.js +47 -0
- package/dist/cjs/Client.d.ts +22 -22
- package/dist/cjs/Client.js +10 -51
- package/dist/cjs/api/resources/billing/client/Client.d.ts +6 -6
- package/dist/cjs/api/resources/billing/client/Client.js +7 -6
- package/dist/cjs/api/resources/browsers/client/Client.d.ts +12 -12
- package/dist/cjs/api/resources/browsers/client/Client.js +10 -9
- package/dist/cjs/api/resources/browsers/client/requests/CreateBrowserSessionRequest.d.ts +4 -0
- package/dist/cjs/api/resources/files/client/Client.d.ts +10 -10
- package/dist/cjs/api/resources/files/client/Client.js +9 -8
- package/dist/cjs/api/resources/index.d.ts +0 -1
- package/dist/cjs/api/resources/index.js +0 -1
- package/dist/cjs/api/resources/profiles/client/Client.d.ts +14 -14
- package/dist/cjs/api/resources/profiles/client/Client.js +11 -10
- package/dist/cjs/api/resources/sessions/client/Client.d.ts +20 -20
- package/dist/cjs/api/resources/sessions/client/Client.js +14 -13
- package/dist/cjs/api/resources/sessions/client/requests/CreateSessionRequest.d.ts +4 -0
- package/dist/cjs/api/resources/tasks/client/Client.d.ts +14 -14
- package/dist/cjs/api/resources/tasks/client/Client.js +11 -10
- package/dist/cjs/api/resources/workflows/client/Client.d.ts +92 -35
- package/dist/cjs/api/resources/workflows/client/Client.js +241 -27
- package/dist/cjs/api/resources/workflows/client/requests/GetExecutionMediaWorkflowsExecutionsExecutionIdMediaGetRequest.d.ts +9 -0
- package/dist/cjs/api/resources/workflows/client/requests/GetExecutionMediaWorkflowsExecutionsExecutionIdMediaGetRequest.js +3 -0
- package/dist/cjs/api/resources/workflows/client/requests/GetExecutionStateWorkflowsExecutionsExecutionIdStateGetRequest.d.ts +9 -0
- package/dist/cjs/api/resources/workflows/client/requests/GetExecutionStateWorkflowsExecutionsExecutionIdStateGetRequest.js +3 -0
- package/dist/cjs/api/resources/workflows/client/requests/GetWorkflowGenerationStateWorkflowsWorkflowIdGenerationStateGetRequest.d.ts +9 -0
- package/dist/cjs/api/resources/workflows/client/requests/GetWorkflowGenerationStateWorkflowsWorkflowIdGenerationStateGetRequest.js +3 -0
- package/dist/cjs/api/resources/workflows/client/requests/WorkflowExecuteRequest.d.ts +0 -3
- package/dist/cjs/api/resources/workflows/client/requests/index.d.ts +3 -0
- package/dist/cjs/api/resources/workflows/index.d.ts +0 -1
- package/dist/cjs/api/resources/workflows/index.js +0 -1
- package/dist/cjs/api/types/SupportedLlMs.d.ts +2 -0
- package/dist/cjs/api/types/SupportedLlMs.js +2 -0
- package/dist/cjs/api/types/WorkflowExecutionMediaStepView.d.ts +13 -0
- package/dist/cjs/api/types/WorkflowExecutionMediaStepView.js +3 -0
- package/dist/cjs/api/types/WorkflowExecutionMediaView.d.ts +8 -0
- package/dist/cjs/api/types/WorkflowExecutionMediaView.js +3 -0
- package/dist/cjs/api/types/WorkflowExecutionStateView.d.ts +28 -0
- package/dist/cjs/api/types/WorkflowExecutionStateView.js +3 -0
- package/dist/cjs/api/types/WorkflowExecutionStepView.d.ts +29 -0
- package/dist/cjs/api/types/WorkflowExecutionStepView.js +3 -0
- package/dist/cjs/api/types/WorkflowGenerationStateView.d.ts +18 -0
- package/dist/cjs/api/types/WorkflowGenerationStateView.js +3 -0
- package/dist/cjs/api/types/WorkflowGenerationStepView.d.ts +19 -0
- package/dist/cjs/api/types/WorkflowGenerationStepView.js +3 -0
- package/dist/cjs/api/types/index.d.ts +6 -1
- package/dist/cjs/api/types/index.js +6 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/wrapper/api/BrowserUseTasks.d.ts +7 -7
- package/dist/cjs/wrapper/api/BrowserUseTasks.js +1 -1
- package/dist/cjs/wrapper/lib/webhooks.d.ts +2 -2
- package/dist/cjs/wrapper/lib/webhooks.js +3 -3
- package/dist/esm/BaseClient.d.mts +2 -1
- package/dist/esm/BaseClient.mjs +13 -1
- package/dist/esm/Client.d.mts +22 -22
- package/dist/esm/Client.mjs +17 -25
- package/dist/esm/api/resources/billing/client/Client.d.mts +6 -6
- package/dist/esm/api/resources/billing/client/Client.mjs +5 -4
- package/dist/esm/api/resources/browsers/client/Client.d.mts +12 -12
- package/dist/esm/api/resources/browsers/client/Client.mjs +8 -7
- package/dist/esm/api/resources/browsers/client/requests/CreateBrowserSessionRequest.d.mts +4 -0
- package/dist/esm/api/resources/files/client/Client.d.mts +10 -10
- package/dist/esm/api/resources/files/client/Client.mjs +7 -6
- package/dist/esm/api/resources/index.d.mts +0 -1
- package/dist/esm/api/resources/index.mjs +0 -1
- package/dist/esm/api/resources/profiles/client/Client.d.mts +14 -14
- package/dist/esm/api/resources/profiles/client/Client.mjs +9 -8
- package/dist/esm/api/resources/sessions/client/Client.d.mts +20 -20
- package/dist/esm/api/resources/sessions/client/Client.mjs +12 -11
- package/dist/esm/api/resources/sessions/client/requests/CreateSessionRequest.d.mts +4 -0
- package/dist/esm/api/resources/tasks/client/Client.d.mts +14 -14
- package/dist/esm/api/resources/tasks/client/Client.mjs +9 -8
- package/dist/esm/api/resources/workflows/client/Client.d.mts +92 -35
- package/dist/esm/api/resources/workflows/client/Client.mjs +239 -25
- package/dist/esm/api/resources/workflows/client/requests/GetExecutionMediaWorkflowsExecutionsExecutionIdMediaGetRequest.d.mts +9 -0
- package/dist/esm/api/resources/workflows/client/requests/GetExecutionMediaWorkflowsExecutionsExecutionIdMediaGetRequest.mjs +2 -0
- package/dist/esm/api/resources/workflows/client/requests/GetExecutionStateWorkflowsExecutionsExecutionIdStateGetRequest.d.mts +9 -0
- package/dist/esm/api/resources/workflows/client/requests/GetExecutionStateWorkflowsExecutionsExecutionIdStateGetRequest.mjs +2 -0
- package/dist/esm/api/resources/workflows/client/requests/GetWorkflowGenerationStateWorkflowsWorkflowIdGenerationStateGetRequest.d.mts +9 -0
- package/dist/esm/api/resources/workflows/client/requests/GetWorkflowGenerationStateWorkflowsWorkflowIdGenerationStateGetRequest.mjs +2 -0
- package/dist/esm/api/resources/workflows/client/requests/WorkflowExecuteRequest.d.mts +0 -3
- package/dist/esm/api/resources/workflows/client/requests/index.d.mts +3 -0
- package/dist/esm/api/resources/workflows/index.d.mts +0 -1
- package/dist/esm/api/resources/workflows/index.mjs +0 -1
- package/dist/esm/api/types/SupportedLlMs.d.mts +2 -0
- package/dist/esm/api/types/SupportedLlMs.mjs +2 -0
- package/dist/esm/api/types/WorkflowExecutionMediaStepView.d.mts +13 -0
- package/dist/esm/api/types/WorkflowExecutionMediaStepView.mjs +2 -0
- package/dist/esm/api/types/WorkflowExecutionMediaView.d.mts +8 -0
- package/dist/esm/api/types/WorkflowExecutionMediaView.mjs +2 -0
- package/dist/esm/api/types/WorkflowExecutionStateView.d.mts +28 -0
- package/dist/esm/api/types/WorkflowExecutionStateView.mjs +2 -0
- package/dist/esm/api/types/WorkflowExecutionStepView.d.mts +29 -0
- package/dist/esm/api/types/WorkflowExecutionStepView.mjs +2 -0
- package/dist/esm/api/types/WorkflowGenerationStateView.d.mts +18 -0
- package/dist/esm/api/types/WorkflowGenerationStateView.mjs +2 -0
- package/dist/esm/api/types/WorkflowGenerationStepView.d.mts +19 -0
- package/dist/esm/api/types/WorkflowGenerationStepView.mjs +2 -0
- package/dist/esm/api/types/index.d.mts +6 -1
- package/dist/esm/api/types/index.mjs +6 -1
- package/dist/esm/version.d.mts +1 -1
- package/dist/esm/version.mjs +1 -1
- package/dist/esm/wrapper/api/BrowserUseTasks.d.mts +7 -7
- package/dist/esm/wrapper/api/BrowserUseTasks.mjs +2 -2
- package/dist/esm/wrapper/lib/webhooks.d.mts +2 -2
- package/dist/esm/wrapper/lib/webhooks.mjs +3 -3
- package/package.json +82 -83
- package/reference.md +251 -44
|
@@ -19,20 +19,21 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
19
19
|
}
|
|
20
20
|
return t;
|
|
21
21
|
};
|
|
22
|
+
import { normalizeClientOptions } from "../../../../BaseClient.mjs";
|
|
22
23
|
import { mergeHeaders, mergeOnlyDefinedHeaders } from "../../../../core/headers.mjs";
|
|
23
24
|
import * as core from "../../../../core/index.mjs";
|
|
24
25
|
import * as environments from "../../../../environments.mjs";
|
|
25
26
|
import * as errors from "../../../../errors/index.mjs";
|
|
26
27
|
import * as BrowserUse from "../../../index.mjs";
|
|
27
|
-
export class
|
|
28
|
-
constructor(
|
|
29
|
-
this._options =
|
|
28
|
+
export class WorkflowsClient {
|
|
29
|
+
constructor(options) {
|
|
30
|
+
this._options = normalizeClientOptions(options);
|
|
30
31
|
}
|
|
31
32
|
/**
|
|
32
33
|
* Get paginated list of workflows with optional filtering.
|
|
33
34
|
*
|
|
34
35
|
* @param {BrowserUse.ListWorkflowsWorkflowsGetRequest} request
|
|
35
|
-
* @param {
|
|
36
|
+
* @param {WorkflowsClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
36
37
|
*
|
|
37
38
|
* @throws {@link BrowserUse.UnprocessableEntityError}
|
|
38
39
|
*
|
|
@@ -107,7 +108,7 @@ export class Workflows {
|
|
|
107
108
|
* Create a new workflow. The workflow YAML should be uploaded separately via the update endpoint.
|
|
108
109
|
*
|
|
109
110
|
* @param {BrowserUse.WorkflowCreateRequest} request
|
|
110
|
-
* @param {
|
|
111
|
+
* @param {WorkflowsClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
111
112
|
*
|
|
112
113
|
* @throws {@link BrowserUse.UnprocessableEntityError}
|
|
113
114
|
*
|
|
@@ -173,7 +174,7 @@ export class Workflows {
|
|
|
173
174
|
* Get detailed workflow information including presigned URL to download YAML.
|
|
174
175
|
*
|
|
175
176
|
* @param {BrowserUse.GetWorkflowWorkflowsWorkflowIdGetRequest} request
|
|
176
|
-
* @param {
|
|
177
|
+
* @param {WorkflowsClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
177
178
|
*
|
|
178
179
|
* @throws {@link BrowserUse.UnprocessableEntityError}
|
|
179
180
|
*
|
|
@@ -237,7 +238,7 @@ export class Workflows {
|
|
|
237
238
|
* Archive a workflow (soft delete).
|
|
238
239
|
*
|
|
239
240
|
* @param {BrowserUse.DeleteWorkflowWorkflowsWorkflowIdDeleteRequest} request
|
|
240
|
-
* @param {
|
|
241
|
+
* @param {WorkflowsClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
241
242
|
*
|
|
242
243
|
* @throws {@link BrowserUse.UnprocessableEntityError}
|
|
243
244
|
*
|
|
@@ -301,7 +302,7 @@ export class Workflows {
|
|
|
301
302
|
* Update workflow metadata.
|
|
302
303
|
*
|
|
303
304
|
* @param {BrowserUse.WorkflowUpdateRequest} request
|
|
304
|
-
* @param {
|
|
305
|
+
* @param {WorkflowsClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
305
306
|
*
|
|
306
307
|
* @throws {@link BrowserUse.UnprocessableEntityError}
|
|
307
308
|
*
|
|
@@ -364,6 +365,77 @@ export class Workflows {
|
|
|
364
365
|
}
|
|
365
366
|
});
|
|
366
367
|
}
|
|
368
|
+
/**
|
|
369
|
+
* Get workflow generation state with live browser URL for polling.
|
|
370
|
+
*
|
|
371
|
+
* This endpoint returns the current state of workflow generation including
|
|
372
|
+
* the live browser URL (if available). It's designed to be polled every 2 seconds
|
|
373
|
+
* during generation to show real-time browser activity in the frontend.
|
|
374
|
+
*
|
|
375
|
+
* @param {BrowserUse.GetWorkflowGenerationStateWorkflowsWorkflowIdGenerationStateGetRequest} request
|
|
376
|
+
* @param {WorkflowsClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
377
|
+
*
|
|
378
|
+
* @throws {@link BrowserUse.UnprocessableEntityError}
|
|
379
|
+
*
|
|
380
|
+
* @example
|
|
381
|
+
* await client.workflows.getWorkflowGenerationState({
|
|
382
|
+
* workflow_id: "workflow_id"
|
|
383
|
+
* })
|
|
384
|
+
*/
|
|
385
|
+
getWorkflowGenerationState(request, requestOptions) {
|
|
386
|
+
return core.HttpResponsePromise.fromPromise(this.__getWorkflowGenerationState(request, requestOptions));
|
|
387
|
+
}
|
|
388
|
+
__getWorkflowGenerationState(request, requestOptions) {
|
|
389
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
390
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
391
|
+
const { workflow_id: workflowId } = request;
|
|
392
|
+
const _headers = mergeHeaders((_a = this._options) === null || _a === void 0 ? void 0 : _a.headers, mergeOnlyDefinedHeaders(Object.assign({}, (yield this._getCustomAuthorizationHeaders()))), requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers);
|
|
393
|
+
const _response = yield core.fetcher({
|
|
394
|
+
url: core.url.join((_c = (_b = (yield core.Supplier.get(this._options.baseUrl))) !== null && _b !== void 0 ? _b : (yield core.Supplier.get(this._options.environment))) !== null && _c !== void 0 ? _c : environments.BrowserUseEnvironment.Production, `workflows/${core.url.encodePathParam(workflowId)}/generation-state`),
|
|
395
|
+
method: "GET",
|
|
396
|
+
headers: _headers,
|
|
397
|
+
queryParameters: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams,
|
|
398
|
+
timeoutMs: ((_f = (_d = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _d !== void 0 ? _d : (_e = this._options) === null || _e === void 0 ? void 0 : _e.timeoutInSeconds) !== null && _f !== void 0 ? _f : 60) * 1000,
|
|
399
|
+
maxRetries: (_g = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.maxRetries) !== null && _g !== void 0 ? _g : (_h = this._options) === null || _h === void 0 ? void 0 : _h.maxRetries,
|
|
400
|
+
abortSignal: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.abortSignal,
|
|
401
|
+
fetchFn: (_j = this._options) === null || _j === void 0 ? void 0 : _j.fetch,
|
|
402
|
+
logging: this._options.logging,
|
|
403
|
+
});
|
|
404
|
+
if (_response.ok) {
|
|
405
|
+
return {
|
|
406
|
+
data: _response.body,
|
|
407
|
+
rawResponse: _response.rawResponse,
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
if (_response.error.reason === "status-code") {
|
|
411
|
+
switch (_response.error.statusCode) {
|
|
412
|
+
case 422:
|
|
413
|
+
throw new BrowserUse.UnprocessableEntityError(_response.error.body, _response.rawResponse);
|
|
414
|
+
default:
|
|
415
|
+
throw new errors.BrowserUseError({
|
|
416
|
+
statusCode: _response.error.statusCode,
|
|
417
|
+
body: _response.error.body,
|
|
418
|
+
rawResponse: _response.rawResponse,
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
switch (_response.error.reason) {
|
|
423
|
+
case "non-json":
|
|
424
|
+
throw new errors.BrowserUseError({
|
|
425
|
+
statusCode: _response.error.statusCode,
|
|
426
|
+
body: _response.error.rawBody,
|
|
427
|
+
rawResponse: _response.rawResponse,
|
|
428
|
+
});
|
|
429
|
+
case "timeout":
|
|
430
|
+
throw new errors.BrowserUseTimeoutError("Timeout exceeded when calling GET /workflows/{workflow_id}/generation-state.");
|
|
431
|
+
case "unknown":
|
|
432
|
+
throw new errors.BrowserUseError({
|
|
433
|
+
message: _response.error.errorMessage,
|
|
434
|
+
rawResponse: _response.rawResponse,
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
});
|
|
438
|
+
}
|
|
367
439
|
/**
|
|
368
440
|
* Get a presigned URL to upload workflow YAML directly to S3 from the browser.
|
|
369
441
|
*
|
|
@@ -371,7 +443,7 @@ export class Workflows {
|
|
|
371
443
|
* and avoiding KMS permission issues in local development.
|
|
372
444
|
*
|
|
373
445
|
* @param {BrowserUse.WorkflowYamlPresignedUploadRequest} request
|
|
374
|
-
* @param {
|
|
446
|
+
* @param {WorkflowsClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
375
447
|
*
|
|
376
448
|
* @throws {@link BrowserUse.UnprocessableEntityError}
|
|
377
449
|
*
|
|
@@ -439,31 +511,31 @@ export class Workflows {
|
|
|
439
511
|
});
|
|
440
512
|
}
|
|
441
513
|
/**
|
|
442
|
-
* Execute a workflow
|
|
514
|
+
* Execute a workflow asynchronously.
|
|
443
515
|
*
|
|
444
|
-
*
|
|
445
|
-
*
|
|
516
|
+
* Returns execution ID immediately and processes in background via Inngest.
|
|
517
|
+
* Use the GET /workflows/executions/{execution_id} endpoint to check status and retrieve results.
|
|
446
518
|
*
|
|
447
519
|
* @param {BrowserUse.WorkflowExecuteRequest} request
|
|
448
|
-
* @param {
|
|
520
|
+
* @param {WorkflowsClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
449
521
|
*
|
|
450
522
|
* @throws {@link BrowserUse.UnprocessableEntityError}
|
|
451
523
|
*
|
|
452
524
|
* @example
|
|
453
|
-
* await client.workflows.
|
|
525
|
+
* await client.workflows.runWorkflow({
|
|
454
526
|
* workflow_id: "workflow_id"
|
|
455
527
|
* })
|
|
456
528
|
*/
|
|
457
|
-
|
|
458
|
-
return core.HttpResponsePromise.fromPromise(this.
|
|
529
|
+
runWorkflow(request, requestOptions) {
|
|
530
|
+
return core.HttpResponsePromise.fromPromise(this.__runWorkflow(request, requestOptions));
|
|
459
531
|
}
|
|
460
|
-
|
|
532
|
+
__runWorkflow(request, requestOptions) {
|
|
461
533
|
return __awaiter(this, void 0, void 0, function* () {
|
|
462
534
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
463
535
|
const { workflow_id: workflowId } = request, _body = __rest(request, ["workflow_id"]);
|
|
464
536
|
const _headers = mergeHeaders((_a = this._options) === null || _a === void 0 ? void 0 : _a.headers, mergeOnlyDefinedHeaders(Object.assign({}, (yield this._getCustomAuthorizationHeaders()))), requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers);
|
|
465
537
|
const _response = yield core.fetcher({
|
|
466
|
-
url: core.url.join((_c = (_b = (yield core.Supplier.get(this._options.baseUrl))) !== null && _b !== void 0 ? _b : (yield core.Supplier.get(this._options.environment))) !== null && _c !== void 0 ? _c : environments.BrowserUseEnvironment.Production, `workflows/${core.url.encodePathParam(workflowId)}/
|
|
538
|
+
url: core.url.join((_c = (_b = (yield core.Supplier.get(this._options.baseUrl))) !== null && _b !== void 0 ? _b : (yield core.Supplier.get(this._options.environment))) !== null && _c !== void 0 ? _c : environments.BrowserUseEnvironment.Production, `workflows/${core.url.encodePathParam(workflowId)}/run`),
|
|
467
539
|
method: "POST",
|
|
468
540
|
headers: _headers,
|
|
469
541
|
contentType: "application/json",
|
|
@@ -502,7 +574,7 @@ export class Workflows {
|
|
|
502
574
|
rawResponse: _response.rawResponse,
|
|
503
575
|
});
|
|
504
576
|
case "timeout":
|
|
505
|
-
throw new errors.BrowserUseTimeoutError("Timeout exceeded when calling POST /workflows/{workflow_id}/
|
|
577
|
+
throw new errors.BrowserUseTimeoutError("Timeout exceeded when calling POST /workflows/{workflow_id}/run.");
|
|
506
578
|
case "unknown":
|
|
507
579
|
throw new errors.BrowserUseError({
|
|
508
580
|
message: _response.error.errorMessage,
|
|
@@ -523,7 +595,7 @@ export class Workflows {
|
|
|
523
595
|
* The generation happens asynchronously via the workflow_worker Lambda.
|
|
524
596
|
*
|
|
525
597
|
* @param {BrowserUse.WorkflowGenerateRequest} request
|
|
526
|
-
* @param {
|
|
598
|
+
* @param {WorkflowsClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
527
599
|
*
|
|
528
600
|
* @throws {@link BrowserUse.UnprocessableEntityError}
|
|
529
601
|
*
|
|
@@ -591,7 +663,7 @@ export class Workflows {
|
|
|
591
663
|
* Get detailed execution information including status, results, and costs.
|
|
592
664
|
*
|
|
593
665
|
* @param {BrowserUse.GetExecutionWorkflowsExecutionsExecutionIdGetRequest} request
|
|
594
|
-
* @param {
|
|
666
|
+
* @param {WorkflowsClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
595
667
|
*
|
|
596
668
|
* @throws {@link BrowserUse.UnprocessableEntityError}
|
|
597
669
|
*
|
|
@@ -655,7 +727,7 @@ export class Workflows {
|
|
|
655
727
|
* Get paginated list of executions for a specific workflow.
|
|
656
728
|
*
|
|
657
729
|
* @param {BrowserUse.ListWorkflowExecutionsWorkflowsWorkflowIdExecutionsGetRequest} request
|
|
658
|
-
* @param {
|
|
730
|
+
* @param {WorkflowsClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
659
731
|
*
|
|
660
732
|
* @throws {@link BrowserUse.UnprocessableEntityError}
|
|
661
733
|
*
|
|
@@ -735,7 +807,7 @@ export class Workflows {
|
|
|
735
807
|
* Get paginated list of all workflow executions for a project.
|
|
736
808
|
*
|
|
737
809
|
* @param {BrowserUse.ListAllExecutionsWorkflowsExecutionsGetRequest} request
|
|
738
|
-
* @param {
|
|
810
|
+
* @param {WorkflowsClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
739
811
|
*
|
|
740
812
|
* @throws {@link BrowserUse.UnprocessableEntityError}
|
|
741
813
|
*
|
|
@@ -813,7 +885,7 @@ export class Workflows {
|
|
|
813
885
|
* Cancel a pending or running workflow execution.
|
|
814
886
|
*
|
|
815
887
|
* @param {BrowserUse.CancelExecutionWorkflowsExecutionsExecutionIdCancelPatchRequest} request
|
|
816
|
-
* @param {
|
|
888
|
+
* @param {WorkflowsClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
817
889
|
*
|
|
818
890
|
* @throws {@link BrowserUse.UnprocessableEntityError}
|
|
819
891
|
*
|
|
@@ -877,7 +949,7 @@ export class Workflows {
|
|
|
877
949
|
* Get presigned URL to download execution logs.
|
|
878
950
|
*
|
|
879
951
|
* @param {BrowserUse.GetExecutionLogsWorkflowsExecutionsExecutionIdLogsGetRequest} request
|
|
880
|
-
* @param {
|
|
952
|
+
* @param {WorkflowsClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
881
953
|
*
|
|
882
954
|
* @throws {@link BrowserUse.UnprocessableEntityError}
|
|
883
955
|
*
|
|
@@ -940,6 +1012,148 @@ export class Workflows {
|
|
|
940
1012
|
}
|
|
941
1013
|
});
|
|
942
1014
|
}
|
|
1015
|
+
/**
|
|
1016
|
+
* Get workflow execution state with steps for live UI polling.
|
|
1017
|
+
*
|
|
1018
|
+
* This endpoint returns the current state of a workflow execution including all steps
|
|
1019
|
+
* with their details. It's designed to be polled every 2 seconds during execution
|
|
1020
|
+
* to show real-time progress in the frontend.
|
|
1021
|
+
*
|
|
1022
|
+
* @param {BrowserUse.GetExecutionStateWorkflowsExecutionsExecutionIdStateGetRequest} request
|
|
1023
|
+
* @param {WorkflowsClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
1024
|
+
*
|
|
1025
|
+
* @throws {@link BrowserUse.UnprocessableEntityError}
|
|
1026
|
+
*
|
|
1027
|
+
* @example
|
|
1028
|
+
* await client.workflows.getExecutionState({
|
|
1029
|
+
* execution_id: "execution_id"
|
|
1030
|
+
* })
|
|
1031
|
+
*/
|
|
1032
|
+
getExecutionState(request, requestOptions) {
|
|
1033
|
+
return core.HttpResponsePromise.fromPromise(this.__getExecutionState(request, requestOptions));
|
|
1034
|
+
}
|
|
1035
|
+
__getExecutionState(request, requestOptions) {
|
|
1036
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1037
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
1038
|
+
const { execution_id: executionId } = request;
|
|
1039
|
+
const _headers = mergeHeaders((_a = this._options) === null || _a === void 0 ? void 0 : _a.headers, mergeOnlyDefinedHeaders(Object.assign({}, (yield this._getCustomAuthorizationHeaders()))), requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers);
|
|
1040
|
+
const _response = yield core.fetcher({
|
|
1041
|
+
url: core.url.join((_c = (_b = (yield core.Supplier.get(this._options.baseUrl))) !== null && _b !== void 0 ? _b : (yield core.Supplier.get(this._options.environment))) !== null && _c !== void 0 ? _c : environments.BrowserUseEnvironment.Production, `workflows/executions/${core.url.encodePathParam(executionId)}/state`),
|
|
1042
|
+
method: "GET",
|
|
1043
|
+
headers: _headers,
|
|
1044
|
+
queryParameters: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams,
|
|
1045
|
+
timeoutMs: ((_f = (_d = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _d !== void 0 ? _d : (_e = this._options) === null || _e === void 0 ? void 0 : _e.timeoutInSeconds) !== null && _f !== void 0 ? _f : 60) * 1000,
|
|
1046
|
+
maxRetries: (_g = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.maxRetries) !== null && _g !== void 0 ? _g : (_h = this._options) === null || _h === void 0 ? void 0 : _h.maxRetries,
|
|
1047
|
+
abortSignal: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.abortSignal,
|
|
1048
|
+
fetchFn: (_j = this._options) === null || _j === void 0 ? void 0 : _j.fetch,
|
|
1049
|
+
logging: this._options.logging,
|
|
1050
|
+
});
|
|
1051
|
+
if (_response.ok) {
|
|
1052
|
+
return {
|
|
1053
|
+
data: _response.body,
|
|
1054
|
+
rawResponse: _response.rawResponse,
|
|
1055
|
+
};
|
|
1056
|
+
}
|
|
1057
|
+
if (_response.error.reason === "status-code") {
|
|
1058
|
+
switch (_response.error.statusCode) {
|
|
1059
|
+
case 422:
|
|
1060
|
+
throw new BrowserUse.UnprocessableEntityError(_response.error.body, _response.rawResponse);
|
|
1061
|
+
default:
|
|
1062
|
+
throw new errors.BrowserUseError({
|
|
1063
|
+
statusCode: _response.error.statusCode,
|
|
1064
|
+
body: _response.error.body,
|
|
1065
|
+
rawResponse: _response.rawResponse,
|
|
1066
|
+
});
|
|
1067
|
+
}
|
|
1068
|
+
}
|
|
1069
|
+
switch (_response.error.reason) {
|
|
1070
|
+
case "non-json":
|
|
1071
|
+
throw new errors.BrowserUseError({
|
|
1072
|
+
statusCode: _response.error.statusCode,
|
|
1073
|
+
body: _response.error.rawBody,
|
|
1074
|
+
rawResponse: _response.rawResponse,
|
|
1075
|
+
});
|
|
1076
|
+
case "timeout":
|
|
1077
|
+
throw new errors.BrowserUseTimeoutError("Timeout exceeded when calling GET /workflows/executions/{execution_id}/state.");
|
|
1078
|
+
case "unknown":
|
|
1079
|
+
throw new errors.BrowserUseError({
|
|
1080
|
+
message: _response.error.errorMessage,
|
|
1081
|
+
rawResponse: _response.rawResponse,
|
|
1082
|
+
});
|
|
1083
|
+
}
|
|
1084
|
+
});
|
|
1085
|
+
}
|
|
1086
|
+
/**
|
|
1087
|
+
* Get workflow execution media (screenshots) with presigned URLs.
|
|
1088
|
+
*
|
|
1089
|
+
* This endpoint returns media URLs for completed executions. Screenshots
|
|
1090
|
+
* are returned with presigned S3 URLs for direct access from the frontend.
|
|
1091
|
+
* Should be called when execution status is 'completed', 'failed', or 'cancelled'.
|
|
1092
|
+
*
|
|
1093
|
+
* @param {BrowserUse.GetExecutionMediaWorkflowsExecutionsExecutionIdMediaGetRequest} request
|
|
1094
|
+
* @param {WorkflowsClient.RequestOptions} requestOptions - Request-specific configuration.
|
|
1095
|
+
*
|
|
1096
|
+
* @throws {@link BrowserUse.UnprocessableEntityError}
|
|
1097
|
+
*
|
|
1098
|
+
* @example
|
|
1099
|
+
* await client.workflows.getExecutionMedia({
|
|
1100
|
+
* execution_id: "execution_id"
|
|
1101
|
+
* })
|
|
1102
|
+
*/
|
|
1103
|
+
getExecutionMedia(request, requestOptions) {
|
|
1104
|
+
return core.HttpResponsePromise.fromPromise(this.__getExecutionMedia(request, requestOptions));
|
|
1105
|
+
}
|
|
1106
|
+
__getExecutionMedia(request, requestOptions) {
|
|
1107
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1108
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
1109
|
+
const { execution_id: executionId } = request;
|
|
1110
|
+
const _headers = mergeHeaders((_a = this._options) === null || _a === void 0 ? void 0 : _a.headers, mergeOnlyDefinedHeaders(Object.assign({}, (yield this._getCustomAuthorizationHeaders()))), requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers);
|
|
1111
|
+
const _response = yield core.fetcher({
|
|
1112
|
+
url: core.url.join((_c = (_b = (yield core.Supplier.get(this._options.baseUrl))) !== null && _b !== void 0 ? _b : (yield core.Supplier.get(this._options.environment))) !== null && _c !== void 0 ? _c : environments.BrowserUseEnvironment.Production, `workflows/executions/${core.url.encodePathParam(executionId)}/media`),
|
|
1113
|
+
method: "GET",
|
|
1114
|
+
headers: _headers,
|
|
1115
|
+
queryParameters: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams,
|
|
1116
|
+
timeoutMs: ((_f = (_d = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _d !== void 0 ? _d : (_e = this._options) === null || _e === void 0 ? void 0 : _e.timeoutInSeconds) !== null && _f !== void 0 ? _f : 60) * 1000,
|
|
1117
|
+
maxRetries: (_g = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.maxRetries) !== null && _g !== void 0 ? _g : (_h = this._options) === null || _h === void 0 ? void 0 : _h.maxRetries,
|
|
1118
|
+
abortSignal: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.abortSignal,
|
|
1119
|
+
fetchFn: (_j = this._options) === null || _j === void 0 ? void 0 : _j.fetch,
|
|
1120
|
+
logging: this._options.logging,
|
|
1121
|
+
});
|
|
1122
|
+
if (_response.ok) {
|
|
1123
|
+
return {
|
|
1124
|
+
data: _response.body,
|
|
1125
|
+
rawResponse: _response.rawResponse,
|
|
1126
|
+
};
|
|
1127
|
+
}
|
|
1128
|
+
if (_response.error.reason === "status-code") {
|
|
1129
|
+
switch (_response.error.statusCode) {
|
|
1130
|
+
case 422:
|
|
1131
|
+
throw new BrowserUse.UnprocessableEntityError(_response.error.body, _response.rawResponse);
|
|
1132
|
+
default:
|
|
1133
|
+
throw new errors.BrowserUseError({
|
|
1134
|
+
statusCode: _response.error.statusCode,
|
|
1135
|
+
body: _response.error.body,
|
|
1136
|
+
rawResponse: _response.rawResponse,
|
|
1137
|
+
});
|
|
1138
|
+
}
|
|
1139
|
+
}
|
|
1140
|
+
switch (_response.error.reason) {
|
|
1141
|
+
case "non-json":
|
|
1142
|
+
throw new errors.BrowserUseError({
|
|
1143
|
+
statusCode: _response.error.statusCode,
|
|
1144
|
+
body: _response.error.rawBody,
|
|
1145
|
+
rawResponse: _response.rawResponse,
|
|
1146
|
+
});
|
|
1147
|
+
case "timeout":
|
|
1148
|
+
throw new errors.BrowserUseTimeoutError("Timeout exceeded when calling GET /workflows/executions/{execution_id}/media.");
|
|
1149
|
+
case "unknown":
|
|
1150
|
+
throw new errors.BrowserUseError({
|
|
1151
|
+
message: _response.error.errorMessage,
|
|
1152
|
+
rawResponse: _response.rawResponse,
|
|
1153
|
+
});
|
|
1154
|
+
}
|
|
1155
|
+
});
|
|
1156
|
+
}
|
|
943
1157
|
_getCustomAuthorizationHeaders() {
|
|
944
1158
|
return __awaiter(this, void 0, void 0, function* () {
|
|
945
1159
|
const apiKeyValue = yield core.Supplier.get(this._options.apiKey);
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type * as BrowserUse from "../../../../index.mjs";
|
|
2
1
|
/**
|
|
3
2
|
* @example
|
|
4
3
|
* {
|
|
@@ -9,8 +8,6 @@ export interface WorkflowExecuteRequest {
|
|
|
9
8
|
workflow_id: string;
|
|
10
9
|
/** Input parameters for the workflow execution */
|
|
11
10
|
input?: Record<string, unknown> | null;
|
|
12
|
-
/** Execution mode (sync or async) */
|
|
13
|
-
mode?: BrowserUse.ExecutionMode;
|
|
14
11
|
/** Optional metadata for this execution */
|
|
15
12
|
executionMetadata?: Record<string, unknown> | null;
|
|
16
13
|
}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
export type { CancelExecutionWorkflowsExecutionsExecutionIdCancelPatchRequest } from "./CancelExecutionWorkflowsExecutionsExecutionIdCancelPatchRequest.mjs";
|
|
2
2
|
export type { DeleteWorkflowWorkflowsWorkflowIdDeleteRequest } from "./DeleteWorkflowWorkflowsWorkflowIdDeleteRequest.mjs";
|
|
3
3
|
export type { GetExecutionLogsWorkflowsExecutionsExecutionIdLogsGetRequest } from "./GetExecutionLogsWorkflowsExecutionsExecutionIdLogsGetRequest.mjs";
|
|
4
|
+
export type { GetExecutionMediaWorkflowsExecutionsExecutionIdMediaGetRequest } from "./GetExecutionMediaWorkflowsExecutionsExecutionIdMediaGetRequest.mjs";
|
|
5
|
+
export type { GetExecutionStateWorkflowsExecutionsExecutionIdStateGetRequest } from "./GetExecutionStateWorkflowsExecutionsExecutionIdStateGetRequest.mjs";
|
|
4
6
|
export type { GetExecutionWorkflowsExecutionsExecutionIdGetRequest } from "./GetExecutionWorkflowsExecutionsExecutionIdGetRequest.mjs";
|
|
7
|
+
export type { GetWorkflowGenerationStateWorkflowsWorkflowIdGenerationStateGetRequest } from "./GetWorkflowGenerationStateWorkflowsWorkflowIdGenerationStateGetRequest.mjs";
|
|
5
8
|
export type { GetWorkflowWorkflowsWorkflowIdGetRequest } from "./GetWorkflowWorkflowsWorkflowIdGetRequest.mjs";
|
|
6
9
|
export type { ListAllExecutionsWorkflowsExecutionsGetRequest } from "./ListAllExecutionsWorkflowsExecutionsGetRequest.mjs";
|
|
7
10
|
export type { ListWorkflowExecutionsWorkflowsWorkflowIdExecutionsGetRequest } from "./ListWorkflowExecutionsWorkflowsWorkflowIdExecutionsGetRequest.mjs";
|
|
@@ -6,10 +6,12 @@ export declare const SupportedLlMs: {
|
|
|
6
6
|
readonly O3: "o3";
|
|
7
7
|
readonly Gemini25Flash: "gemini-2.5-flash";
|
|
8
8
|
readonly Gemini25Pro: "gemini-2.5-pro";
|
|
9
|
+
readonly Gemini3ProPreview: "gemini-3-pro-preview";
|
|
9
10
|
readonly GeminiFlashLatest: "gemini-flash-latest";
|
|
10
11
|
readonly GeminiFlashLiteLatest: "gemini-flash-lite-latest";
|
|
11
12
|
readonly ClaudeSonnet420250514: "claude-sonnet-4-20250514";
|
|
12
13
|
readonly ClaudeSonnet4520250929: "claude-sonnet-4-5-20250929";
|
|
14
|
+
readonly ClaudeOpus4520251101: "claude-opus-4-5-20251101";
|
|
13
15
|
readonly Gpt4O: "gpt-4o";
|
|
14
16
|
readonly Gpt4OMini: "gpt-4o-mini";
|
|
15
17
|
readonly Llama4Maverick17B128EInstruct: "llama-4-maverick-17b-128e-instruct";
|
|
@@ -7,10 +7,12 @@ export const SupportedLlMs = {
|
|
|
7
7
|
O3: "o3",
|
|
8
8
|
Gemini25Flash: "gemini-2.5-flash",
|
|
9
9
|
Gemini25Pro: "gemini-2.5-pro",
|
|
10
|
+
Gemini3ProPreview: "gemini-3-pro-preview",
|
|
10
11
|
GeminiFlashLatest: "gemini-flash-latest",
|
|
11
12
|
GeminiFlashLiteLatest: "gemini-flash-lite-latest",
|
|
12
13
|
ClaudeSonnet420250514: "claude-sonnet-4-20250514",
|
|
13
14
|
ClaudeSonnet4520250929: "claude-sonnet-4-5-20250929",
|
|
15
|
+
ClaudeOpus4520251101: "claude-opus-4-5-20251101",
|
|
14
16
|
Gpt4O: "gpt-4o",
|
|
15
17
|
Gpt4OMini: "gpt-4o-mini",
|
|
16
18
|
Llama4Maverick17B128EInstruct: "llama-4-maverick-17b-128e-instruct",
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal view of a step for media endpoint (screenshots only).
|
|
3
|
+
*/
|
|
4
|
+
export interface WorkflowExecutionMediaStepView {
|
|
5
|
+
/** Unique identifier for the step */
|
|
6
|
+
id: string;
|
|
7
|
+
/** Description of what this step did */
|
|
8
|
+
nextGoal: string;
|
|
9
|
+
/** Presigned URL for the step screenshot */
|
|
10
|
+
screenshotUrl?: string | null;
|
|
11
|
+
/** Actions taken in this step */
|
|
12
|
+
actions?: Record<string, unknown>[];
|
|
13
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type * as BrowserUse from "../index.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* View model for workflow execution media (screenshots, recordings).
|
|
4
|
+
*/
|
|
5
|
+
export interface WorkflowExecutionMediaView {
|
|
6
|
+
/** List of steps with media URLs */
|
|
7
|
+
steps?: BrowserUse.WorkflowExecutionMediaStepView[];
|
|
8
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type * as BrowserUse from "../index.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* View model for workflow execution state (used for polling during execution).
|
|
4
|
+
*/
|
|
5
|
+
export interface WorkflowExecutionStateView {
|
|
6
|
+
/** Unique identifier for the execution */
|
|
7
|
+
id: string;
|
|
8
|
+
/** ID of the workflow being executed */
|
|
9
|
+
workflowId: string;
|
|
10
|
+
/** Current status of the execution */
|
|
11
|
+
status: BrowserUse.WorkflowExecutionStatus;
|
|
12
|
+
/** When execution started */
|
|
13
|
+
startedAt?: string | null;
|
|
14
|
+
/** When execution finished */
|
|
15
|
+
finishedAt?: string | null;
|
|
16
|
+
/** List of execution steps with details */
|
|
17
|
+
steps?: BrowserUse.WorkflowExecutionStepView[];
|
|
18
|
+
/** LLM costs for this execution */
|
|
19
|
+
llmsCost?: string;
|
|
20
|
+
/** Initialization costs */
|
|
21
|
+
initCost?: string;
|
|
22
|
+
/** Total cost */
|
|
23
|
+
totalCost?: string;
|
|
24
|
+
/** When execution was created */
|
|
25
|
+
createdAt: string;
|
|
26
|
+
/** Live browser view URL (available during and up to 60s after execution) */
|
|
27
|
+
liveUrl?: string | null;
|
|
28
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* View model for a single workflow execution step.
|
|
3
|
+
*/
|
|
4
|
+
export interface WorkflowExecutionStepView {
|
|
5
|
+
/** Unique identifier for the step (execution_id-step-N) */
|
|
6
|
+
id: string;
|
|
7
|
+
/** Sequential step number (1-indexed) */
|
|
8
|
+
stepNumber: number;
|
|
9
|
+
/** Name of the step from workflow definition */
|
|
10
|
+
stepName?: string | null;
|
|
11
|
+
/** Description of what this step is doing */
|
|
12
|
+
nextGoal: string;
|
|
13
|
+
/** Whether the step has completed */
|
|
14
|
+
isDone?: boolean;
|
|
15
|
+
/** Whether the step succeeded (None if in progress) */
|
|
16
|
+
success?: boolean | null;
|
|
17
|
+
/** S3 key for the step screenshot */
|
|
18
|
+
screenshotUrl?: string | null;
|
|
19
|
+
/** Browser URL at the time of this step */
|
|
20
|
+
url?: string;
|
|
21
|
+
/** Actions taken in this step */
|
|
22
|
+
actions?: Record<string, unknown>[];
|
|
23
|
+
/** Content extracted during this step */
|
|
24
|
+
extractedContent?: string | null;
|
|
25
|
+
/** Error message if step failed */
|
|
26
|
+
error?: string | null;
|
|
27
|
+
/** ISO 8601 timestamp when step was executed */
|
|
28
|
+
createdAt: string;
|
|
29
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type * as BrowserUse from "../index.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* View model for workflow generation state (used for polling during generation).
|
|
4
|
+
*/
|
|
5
|
+
export interface WorkflowGenerationStateView {
|
|
6
|
+
/** Unique identifier for the workflow */
|
|
7
|
+
id: string;
|
|
8
|
+
/** Name of the workflow */
|
|
9
|
+
name: string;
|
|
10
|
+
/** Current status of workflow generation */
|
|
11
|
+
generationStatus: BrowserUse.WorkflowGenerationStatus;
|
|
12
|
+
/** Live browser view URL (available only during generation) */
|
|
13
|
+
liveUrl?: string | null;
|
|
14
|
+
/** List of generated workflow steps (available after completion) */
|
|
15
|
+
steps?: BrowserUse.WorkflowGenerationStepView[];
|
|
16
|
+
/** When workflow was created */
|
|
17
|
+
createdAt: string;
|
|
18
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* View model for a generated workflow step summary (from workflow-use callback).
|
|
3
|
+
*/
|
|
4
|
+
export interface WorkflowGenerationStepView {
|
|
5
|
+
/** Step number in the workflow (1-indexed) */
|
|
6
|
+
stepNumber: number;
|
|
7
|
+
/** Type of action (navigation, click, input_text, extract, etc.) */
|
|
8
|
+
actionType: string;
|
|
9
|
+
/** Human-readable description of the step */
|
|
10
|
+
description: string;
|
|
11
|
+
/** Current page URL when step was recorded */
|
|
12
|
+
url: string;
|
|
13
|
+
/** CSS/XPath selector (if applicable) */
|
|
14
|
+
selector?: string | null;
|
|
15
|
+
/** Target element text (if applicable) */
|
|
16
|
+
targetText?: string | null;
|
|
17
|
+
/** ISO 8601 timestamp when step was recorded */
|
|
18
|
+
timestamp: string;
|
|
19
|
+
}
|