This commit is contained in:
Shuchang Zheng
2026-02-17 20:30:55 -08:00
committed by GitHub
parent fd8c33e0af
commit fc41285f96
30 changed files with 4013 additions and 2733 deletions

View File

@@ -1,12 +1,12 @@
{
"name": "@skyvern/client",
"version": "1.0.13",
"version": "1.0.14",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@skyvern/client",
"version": "1.0.13",
"version": "1.0.14",
"dependencies": {
"playwright": "^1.48.0"
},
@@ -1547,9 +1547,9 @@
}
},
"node_modules/ajv": {
"version": "8.17.1",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"version": "8.18.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
"integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1705,9 +1705,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001769",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz",
"integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==",
"version": "1.0.30001770",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz",
"integrity": "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==",
"dev": true,
"funding": [
{
@@ -3121,9 +3121,9 @@
}
},
"node_modules/vite-node/node_modules/@types/node": {
"version": "25.2.2",
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.2.tgz",
"integrity": "sha512-BkmoP5/FhRYek5izySdkOneRyXYN35I860MFAGupTdebyE66uZaR+bXLHq8k4DirE5DwQi3NuhvRU1jqTVwUrQ==",
"version": "25.2.3",
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz",
"integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -3498,9 +3498,9 @@
}
},
"node_modules/webpack": {
"version": "5.105.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.0.tgz",
"integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==",
"version": "5.105.2",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.2.tgz",
"integrity": "sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3547,9 +3547,9 @@
}
},
"node_modules/webpack-sources": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz",
"integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==",
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz",
"integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==",
"dev": true,
"license": "MIT",
"engines": {

View File

@@ -1,6 +1,6 @@
{
"name": "@skyvern/client",
"version": "1.0.13",
"version": "1.0.14",
"private": false,
"repository": {
"type": "git",
@@ -50,7 +50,7 @@
"playwright": "^1.48.0"
},
"devDependencies": {
"webpack": "^5.104.1",
"webpack": "^5.97.1",
"ts-loader": "^9.5.1",
"vitest": "^3.2.4",
"msw": "2.11.2",

View File

@@ -20,7 +20,7 @@ importers:
version: 2.11.2(@types/node@18.19.130)(typescript@5.7.3)
ts-loader:
specifier: ^9.5.1
version: 9.5.4(typescript@5.7.3)(webpack@5.105.0)
version: 9.5.4(typescript@5.7.3)(webpack@5.102.1)
typescript:
specifier: ~5.7.2
version: 5.7.3
@@ -28,8 +28,8 @@ importers:
specifier: ^3.2.4
version: 3.2.4(@types/node@18.19.130)(msw@2.11.2(@types/node@18.19.130)(typescript@5.7.3))(terser@5.44.0)
webpack:
specifier: ^5.104.1
version: 5.105.0
specifier: ^5.97.1
version: 5.102.1
packages:
'@biomejs/biome@2.2.5':
resolution: {integrity: sha512-zcIi+163Rc3HtyHbEO7CjeHq8DjQRs40HsGbW6vx2WI0tg8mYQOPouhvHSyEnCBAorfYNnKdR64/IxO7xQ5faw==}
@@ -452,14 +452,14 @@ packages:
assertion-error@2.0.1:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
baseline-browser-mapping@2.9.19:
resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==}
baseline-browser-mapping@2.8.19:
resolution: {integrity: sha512-zoKGUdu6vb2jd3YOq0nnhEDQVbPcHhco3UImJrv5dSkvxTc2pl2WjOPsjZXDwPDSl5eghIMuY3R6J9NDKF3KcQ==}
hasBin: true
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
browserslist@4.28.1:
resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
browserslist@4.27.0:
resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
buffer-from@1.1.2:
@@ -467,8 +467,8 @@ packages:
cac@6.7.14:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
caniuse-lite@1.0.30001769:
resolution: {integrity: sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==}
caniuse-lite@1.0.30001751:
resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==}
chai@5.3.3:
resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==}
engines: {node: '>=18'}
@@ -508,20 +508,15 @@ packages:
deep-eql@5.0.2:
resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
engines: {node: '>=6'}
electron-to-chromium@1.5.286:
resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==}
electron-to-chromium@1.5.238:
resolution: {integrity: sha512-khBdc+w/Gv+cS8e/Pbnaw/FXcBUeKrRVik9IxfXtgREOWyJhR4tj43n3amkVogJ/yeQUqzkrZcFhtIxIdqmmcQ==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
enhanced-resolve@5.18.3:
resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
engines: {node: '>=10.13.0'}
enhanced-resolve@5.19.0:
resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==}
engines: {node: '>=10.13.0'}
es-module-lexer@1.7.0:
resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
es-module-lexer@2.0.0:
resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==}
esbuild@0.25.11:
resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==}
engines: {node: '>=18'}
@@ -642,8 +637,8 @@ packages:
hasBin: true
neo-async@2.6.2:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
node-releases@2.0.27:
resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
node-releases@2.0.26:
resolution: {integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==}
outvariant@1.4.3:
resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==}
path-to-regexp@6.3.0:
@@ -739,8 +734,8 @@ packages:
tapable@2.3.0:
resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
engines: {node: '>=6'}
terser-webpack-plugin@5.3.16:
resolution: {integrity: sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==}
terser-webpack-plugin@5.3.14:
resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==}
engines: {node: '>= 10.13.0'}
peerDependencies:
'@swc/core': '*'
@@ -800,8 +795,8 @@ packages:
hasBin: true
undici-types@5.26.5:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
update-browserslist-db@1.2.3:
resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
update-browserslist-db@1.1.4:
resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
@@ -875,14 +870,14 @@ packages:
optional: true
jsdom:
optional: true
watchpack@2.5.1:
resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==}
watchpack@2.4.4:
resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==}
engines: {node: '>=10.13.0'}
webpack-sources@3.3.3:
resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==}
engines: {node: '>=10.13.0'}
webpack@5.105.0:
resolution: {integrity: sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==}
webpack@5.102.1:
resolution: {integrity: sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==}
engines: {node: '>=10.13.0'}
hasBin: true
peerDependencies:
@@ -1233,20 +1228,20 @@ snapshots:
dependencies:
color-convert: 2.0.1
assertion-error@2.0.1: {}
baseline-browser-mapping@2.9.19: {}
baseline-browser-mapping@2.8.19: {}
braces@3.0.3:
dependencies:
fill-range: 7.1.1
browserslist@4.28.1:
browserslist@4.27.0:
dependencies:
baseline-browser-mapping: 2.9.19
caniuse-lite: 1.0.30001769
electron-to-chromium: 1.5.286
node-releases: 2.0.27
update-browserslist-db: 1.2.3(browserslist@4.28.1)
baseline-browser-mapping: 2.8.19
caniuse-lite: 1.0.30001751
electron-to-chromium: 1.5.238
node-releases: 2.0.26
update-browserslist-db: 1.1.4(browserslist@4.27.0)
buffer-from@1.1.2: {}
cac@6.7.14: {}
caniuse-lite@1.0.30001769: {}
caniuse-lite@1.0.30001751: {}
chai@5.3.3:
dependencies:
assertion-error: 2.0.1
@@ -1276,18 +1271,13 @@ snapshots:
dependencies:
ms: 2.1.3
deep-eql@5.0.2: {}
electron-to-chromium@1.5.286: {}
electron-to-chromium@1.5.238: {}
emoji-regex@8.0.0: {}
enhanced-resolve@5.18.3:
dependencies:
graceful-fs: 4.2.11
tapable: 2.3.0
enhanced-resolve@5.19.0:
dependencies:
graceful-fs: 4.2.11
tapable: 2.3.0
es-module-lexer@1.7.0: {}
es-module-lexer@2.0.0: {}
esbuild@0.25.11:
optionalDependencies:
'@esbuild/aix-ppc64': 0.25.11
@@ -1403,7 +1393,7 @@ snapshots:
mute-stream@2.0.0: {}
nanoid@3.3.11: {}
neo-async@2.6.2: {}
node-releases@2.0.27: {}
node-releases@2.0.26: {}
outvariant@1.4.3: {}
path-to-regexp@6.3.0: {}
pathe@2.0.3: {}
@@ -1497,14 +1487,14 @@ snapshots:
dependencies:
has-flag: 4.0.0
tapable@2.3.0: {}
terser-webpack-plugin@5.3.16(webpack@5.105.0):
terser-webpack-plugin@5.3.14(webpack@5.102.1):
dependencies:
'@jridgewell/trace-mapping': 0.3.31
jest-worker: 27.5.1
schema-utils: 4.3.3
serialize-javascript: 6.0.2
terser: 5.44.0
webpack: 5.105.0
webpack: 5.102.1
terser@5.44.0:
dependencies:
'@jridgewell/source-map': 0.3.11
@@ -1530,7 +1520,7 @@ snapshots:
tough-cookie@6.0.0:
dependencies:
tldts: 7.0.17
ts-loader@9.5.4(typescript@5.7.3)(webpack@5.105.0):
ts-loader@9.5.4(typescript@5.7.3)(webpack@5.102.1):
dependencies:
chalk: 4.1.2
enhanced-resolve: 5.18.3
@@ -1538,13 +1528,13 @@ snapshots:
semver: 7.7.3
source-map: 0.7.6
typescript: 5.7.3
webpack: 5.105.0
webpack: 5.102.1
type-fest@4.41.0: {}
typescript@5.7.3: {}
undici-types@5.26.5: {}
update-browserslist-db@1.2.3(browserslist@4.28.1):
update-browserslist-db@1.1.4(browserslist@4.27.0):
dependencies:
browserslist: 4.28.1
browserslist: 4.27.0
escalade: 3.2.0
picocolors: 1.1.1
vite-node@3.2.4(@types/node@18.19.130)(terser@5.44.0):
@@ -1619,12 +1609,12 @@ snapshots:
- terser
- tsx
- yaml
watchpack@2.5.1:
watchpack@2.4.4:
dependencies:
glob-to-regexp: 0.4.1
graceful-fs: 4.2.11
webpack-sources@3.3.3: {}
webpack@5.105.0:
webpack@5.102.1:
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.8
@@ -1634,10 +1624,10 @@ snapshots:
'@webassemblyjs/wasm-parser': 1.14.1
acorn: 8.15.0
acorn-import-phases: 1.0.4(acorn@8.15.0)
browserslist: 4.28.1
browserslist: 4.27.0
chrome-trace-event: 1.0.4
enhanced-resolve: 5.19.0
es-module-lexer: 2.0.0
enhanced-resolve: 5.18.3
es-module-lexer: 1.7.0
eslint-scope: 5.1.1
events: 3.3.0
glob-to-regexp: 0.4.1
@@ -1648,8 +1638,8 @@ snapshots:
neo-async: 2.6.2
schema-utils: 4.3.3
tapable: 2.3.0
terser-webpack-plugin: 5.3.16(webpack@5.105.0)
watchpack: 2.5.1
terser-webpack-plugin: 5.3.14(webpack@5.102.1)
watchpack: 2.4.4
webpack-sources: 3.3.3
transitivePeerDependencies:
- '@swc/core'

View File

@@ -26,8 +26,8 @@ export class SkyvernClient {
"x-api-key": _options?.apiKey,
"X-Fern-Language": "JavaScript",
"X-Fern-SDK-Name": "@skyvern/client",
"X-Fern-SDK-Version": "1.0.13",
"User-Agent": "@skyvern/client/1.0.13",
"X-Fern-SDK-Version": "1.0.14",
"User-Agent": "@skyvern/client/1.0.14",
"X-Fern-Runtime": core.RUNTIME.type,
"X-Fern-Runtime-Version": core.RUNTIME.version,
},
@@ -1102,6 +1102,139 @@ export class SkyvernClient {
}
}
/**
* List workflow runs across all workflows for the current organization.
*
* Results are paginated and can be filtered by **status**, **search_key**, and **error_code**. All filters are combined with **AND** logic — a run must match every supplied filter to be returned.
*
* ### search_key
*
* A case-insensitive substring search that matches against **any** of the following fields:
*
* | Searched field | Description |
* |---|---|
* | `workflow_run_id` | The unique run identifier (e.g. `wr_123…`) |
* | Parameter **key** | The `key` of any workflow parameter definition associated with the run |
* | Parameter **description** | The `description` of any workflow parameter definition |
* | Run parameter **value** | The actual value supplied for any parameter when the run was created |
* | `extra_http_headers` | Extra HTTP headers attached to the run (searched as raw JSON text) |
*
* Soft-deleted parameter definitions are excluded from key/description matching. A run is returned if **any** of the fields above contain the search term.
*
* ### error_code
*
* An **exact-match** filter against the `error_code` field inside each task's `errors` JSON array. A run matches if **any** of its tasks contains an error object with a matching `error_code` value. Error codes are user-defined strings set during workflow execution (e.g. `INVALID_CREDENTIALS`, `LOGIN_FAILED`, `CAPTCHA_DETECTED`).
*
* ### Combining filters
*
* All query parameters use AND logic:
* - `?status=failed` — only failed runs
* - `?status=failed&error_code=LOGIN_FAILED` — failed runs **and** have a LOGIN_FAILED error
* - `?status=failed&error_code=LOGIN_FAILED&search_key=prod_credential` — all three conditions must match
*
* @param {Skyvern.GetWorkflowRunsRequest} request
* @param {SkyvernClient.RequestOptions} requestOptions - Request-specific configuration.
*
* @throws {@link Skyvern.UnprocessableEntityError}
*
* @example
* await client.getWorkflowRuns({
* page: 1,
* page_size: 1,
* search_key: "search_key",
* error_code: "error_code"
* })
*/
public getWorkflowRuns(
request: Skyvern.GetWorkflowRunsRequest = {},
requestOptions?: SkyvernClient.RequestOptions,
): core.HttpResponsePromise<Skyvern.WorkflowRun[]> {
return core.HttpResponsePromise.fromPromise(this.__getWorkflowRuns(request, requestOptions));
}
private async __getWorkflowRuns(
request: Skyvern.GetWorkflowRunsRequest = {},
requestOptions?: SkyvernClient.RequestOptions,
): Promise<core.WithRawResponse<Skyvern.WorkflowRun[]>> {
const { page, page_size: pageSize, status, search_key: searchKey, error_code: errorCode } = request;
const _queryParams: Record<string, string | string[] | object | object[] | null> = {};
if (page != null) {
_queryParams.page = page.toString();
}
if (pageSize != null) {
_queryParams.page_size = pageSize.toString();
}
if (status != null) {
if (Array.isArray(status)) {
_queryParams.status = status.map((item) => item);
} else {
_queryParams.status = status;
}
}
if (searchKey != null) {
_queryParams.search_key = searchKey;
}
if (errorCode != null) {
_queryParams.error_code = errorCode;
}
const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
this._options?.headers,
mergeOnlyDefinedHeaders({ "x-api-key": requestOptions?.apiKey ?? this._options?.apiKey }),
requestOptions?.headers,
);
const _response = await core.fetcher({
url: core.url.join(
(await core.Supplier.get(this._options.baseUrl)) ??
(await core.Supplier.get(this._options.environment)) ??
environments.SkyvernEnvironment.Cloud,
"v1/workflows/runs",
),
method: "GET",
headers: _headers,
queryParameters: { ..._queryParams, ...requestOptions?.queryParams },
timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1000,
maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
abortSignal: requestOptions?.abortSignal,
});
if (_response.ok) {
return { data: _response.body as Skyvern.WorkflowRun[], rawResponse: _response.rawResponse };
}
if (_response.error.reason === "status-code") {
switch (_response.error.statusCode) {
case 422:
throw new Skyvern.UnprocessableEntityError(_response.error.body as unknown, _response.rawResponse);
default:
throw new errors.SkyvernError({
statusCode: _response.error.statusCode,
body: _response.error.body,
rawResponse: _response.rawResponse,
});
}
}
switch (_response.error.reason) {
case "non-json":
throw new errors.SkyvernError({
statusCode: _response.error.statusCode,
body: _response.error.rawBody,
rawResponse: _response.rawResponse,
});
case "timeout":
throw new errors.SkyvernTimeoutError("Timeout exceeded when calling GET /v1/workflows/runs.");
case "unknown":
throw new errors.SkyvernError({
message: _response.error.errorMessage,
rawResponse: _response.rawResponse,
});
}
}
/**
* @param {string} workflowPermanentId
* @param {Skyvern.GetWorkflowRequest} request
@@ -2271,6 +2404,96 @@ export class SkyvernClient {
}
}
/**
* Overwrites the stored credential data (e.g. username/password) while keeping the same credential_id.
*
* @param {string} credentialId - The unique identifier of the credential to update
* @param {Skyvern.CreateCredentialRequest} request
* @param {SkyvernClient.RequestOptions} requestOptions - Request-specific configuration.
*
* @throws {@link Skyvern.UnprocessableEntityError}
*
* @example
* await client.updateCredential("cred_1234567890", {
* name: "My Credential",
* credential_type: "password",
* credential: {
* password: "newpassword123",
* username: "user@example.com"
* }
* })
*/
public updateCredential(
credentialId: string,
request: Skyvern.CreateCredentialRequest,
requestOptions?: SkyvernClient.RequestOptions,
): core.HttpResponsePromise<Skyvern.CredentialResponse> {
return core.HttpResponsePromise.fromPromise(this.__updateCredential(credentialId, request, requestOptions));
}
private async __updateCredential(
credentialId: string,
request: Skyvern.CreateCredentialRequest,
requestOptions?: SkyvernClient.RequestOptions,
): Promise<core.WithRawResponse<Skyvern.CredentialResponse>> {
const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
this._options?.headers,
mergeOnlyDefinedHeaders({ "x-api-key": requestOptions?.apiKey ?? this._options?.apiKey }),
requestOptions?.headers,
);
const _response = await core.fetcher({
url: core.url.join(
(await core.Supplier.get(this._options.baseUrl)) ??
(await core.Supplier.get(this._options.environment)) ??
environments.SkyvernEnvironment.Cloud,
`v1/credentials/${core.url.encodePathParam(credentialId)}/update`,
),
method: "POST",
headers: _headers,
contentType: "application/json",
queryParameters: requestOptions?.queryParams,
requestType: "json",
body: request,
timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1000,
maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
abortSignal: requestOptions?.abortSignal,
});
if (_response.ok) {
return { data: _response.body as Skyvern.CredentialResponse, rawResponse: _response.rawResponse };
}
if (_response.error.reason === "status-code") {
switch (_response.error.statusCode) {
case 422:
throw new Skyvern.UnprocessableEntityError(_response.error.body as unknown, _response.rawResponse);
default:
throw new errors.SkyvernError({
statusCode: _response.error.statusCode,
body: _response.error.body,
rawResponse: _response.rawResponse,
});
}
}
switch (_response.error.reason) {
case "non-json":
throw new errors.SkyvernError({
statusCode: _response.error.statusCode,
body: _response.error.rawBody,
rawResponse: _response.rawResponse,
});
case "timeout":
throw new errors.SkyvernTimeoutError(
"Timeout exceeded when calling POST /v1/credentials/{credential_id}/update.",
);
case "unknown":
throw new errors.SkyvernError({
message: _response.error.errorMessage,
rawResponse: _response.rawResponse,
});
}
}
/**
* Deletes a specific credential by its ID
*

View File

@@ -0,0 +1,25 @@
// This file was auto-generated by Fern from our API Definition.
import type * as Skyvern from "../../index.js";
/**
* @example
* {
* page: 1,
* page_size: 1,
* search_key: "search_key",
* error_code: "error_code"
* }
*/
export interface GetWorkflowRunsRequest {
/** Page number for pagination. */
page?: number;
/** Number of runs to return per page. */
page_size?: number;
/** Filter by one or more run statuses. */
status?: Skyvern.WorkflowRunStatus | Skyvern.WorkflowRunStatus[];
/** Case-insensitive substring search across: workflow run ID, parameter key, parameter description, run parameter value, and extra HTTP headers. A run is returned if any of these fields match. Soft-deleted parameter definitions are excluded from key/description matching. */
search_key?: string;
/** Exact-match filter on the error_code field inside each task's errors JSON array. A run matches if any of its tasks contains an error with a matching error_code. Error codes are user-defined strings set during workflow execution. */
error_code?: string;
}

View File

@@ -22,9 +22,9 @@ export interface GetWorkflowsRequest {
only_saved_tasks?: boolean;
only_workflows?: boolean;
only_templates?: boolean;
/** Unified search across workflow title, folder name, and parameter metadata (key, description, default_value). */
/** Case-insensitive substring search across: workflow title, folder name, and parameter metadata (key, description, default_value). A workflow is returned if any of these fields match. Soft-deleted parameter definitions are excluded. Takes precedence over the deprecated `title` parameter. */
search_key?: string;
/** Deprecated: use search_key instead. */
/** Deprecated: use search_key instead. Falls back to title-only search if search_key is not provided. */
title?: string;
/** Filter workflows by folder ID */
folder_id?: string;

View File

@@ -3,7 +3,6 @@ export type { ChangeTierRequest } from "./ChangeTierRequest.js";
export type { CheckoutSubscriptionRequest } from "./CheckoutSubscriptionRequest.js";
export type { CreateBrowserProfileRequest } from "./CreateBrowserProfileRequest.js";
export type { CreateBrowserSessionRequest } from "./CreateBrowserSessionRequest.js";
export type { CreateCredentialRequest } from "./CreateCredentialRequest.js";
export type { CreateScriptRequest } from "./CreateScriptRequest.js";
export type { CreateWorkflowRequest } from "./CreateWorkflowRequest.js";
export type { DeployScriptRequest } from "./DeployScriptRequest.js";
@@ -12,6 +11,7 @@ export type { GetCredentialsRequest } from "./GetCredentialsRequest.js";
export type { GetRunArtifactsRequest } from "./GetRunArtifactsRequest.js";
export type { GetScriptsRequest } from "./GetScriptsRequest.js";
export type { GetWorkflowRequest } from "./GetWorkflowRequest.js";
export type { GetWorkflowRunsRequest } from "./GetWorkflowRunsRequest.js";
export type { GetWorkflowsRequest } from "./GetWorkflowsRequest.js";
export type { GetWorkflowVersionsRequest } from "./GetWorkflowVersionsRequest.js";
export type { ListBrowserProfilesRequest } from "./ListBrowserProfilesRequest.js";

View File

@@ -40,6 +40,7 @@ export interface Action {
click_context?: Skyvern.ClickContext;
totp_timing_info?: Record<string, unknown>;
has_mini_agent?: boolean;
skip_auto_complete_tab?: boolean;
created_at?: string;
modified_at?: string;
created_by?: string;

View File

@@ -1,18 +1,9 @@
// This file was auto-generated by Fern from our API Definition.
import type * as Skyvern from "../../index.js";
import type * as Skyvern from "../index.js";
/**
* @example
* {
* name: "My Credential",
* credential_type: "password",
* credential: {
* password: "securepassword123",
* username: "user@example.com",
* totp: "JBSWY3DPEHPK3PXP"
* }
* }
* Request model for creating a new credential.
*/
export interface CreateCredentialRequest {
/** Name of the credential */

View File

@@ -5,5 +5,6 @@ export const FileType = {
Excel: "excel",
Pdf: "pdf",
Image: "image",
Docx: "docx",
} as const;
export type FileType = (typeof FileType)[keyof typeof FileType];

View File

@@ -4,6 +4,8 @@ export interface ValidationError {
loc: ValidationError.Loc.Item[];
msg: string;
type: string;
input?: unknown;
ctx?: Record<string, unknown>;
}
export namespace ValidationError {

View File

@@ -0,0 +1,41 @@
// This file was auto-generated by Fern from our API Definition.
import type * as Skyvern from "../index.js";
export interface WorkflowRun {
workflow_run_id: string;
workflow_id: string;
workflow_permanent_id: string;
organization_id: string;
browser_session_id?: string;
browser_profile_id?: string;
debug_session_id?: string;
status: Skyvern.WorkflowRunStatus;
extra_http_headers?: Record<string, string | undefined>;
proxy_location?: WorkflowRun.ProxyLocation;
webhook_callback_url?: string;
webhook_failure_reason?: string;
totp_verification_url?: string;
totp_identifier?: string;
failure_reason?: string;
parent_workflow_run_id?: string;
workflow_title?: string;
max_screenshot_scrolls?: number;
browser_address?: string;
run_with?: string;
script_run?: Skyvern.ScriptRunResponse;
job_id?: string;
depends_on_workflow_run_id?: string;
sequential_key?: string;
ai_fallback?: boolean;
code_gen?: boolean;
queued_at?: string;
started_at?: string;
finished_at?: string;
created_at: string;
modified_at: string;
}
export namespace WorkflowRun {
export type ProxyLocation = Skyvern.ProxyLocation | Skyvern.GeoTarget | Record<string, unknown>;
}

View File

@@ -0,0 +1,14 @@
// This file was auto-generated by Fern from our API Definition.
export const WorkflowRunStatus = {
Created: "created",
Queued: "queued",
Running: "running",
Failed: "failed",
Terminated: "terminated",
Canceled: "canceled",
TimedOut: "timed_out",
Completed: "completed",
Paused: "paused",
} as const;
export type WorkflowRunStatus = (typeof WorkflowRunStatus)[keyof typeof WorkflowRunStatus];

View File

@@ -38,6 +38,7 @@ export * from "./ConditionalBlockYaml.js";
export * from "./ContextParameter.js";
export * from "./ContextParameterSource.js";
export * from "./ContextParameterYaml.js";
export * from "./CreateCredentialRequest.js";
export * from "./CreateScriptResponse.js";
export * from "./CredentialParameter.js";
export * from "./CredentialParameterYaml.js";
@@ -166,9 +167,11 @@ export * from "./WorkflowParameter.js";
export * from "./WorkflowParameterType.js";
export * from "./WorkflowParameterYaml.js";
export * from "./WorkflowRequest.js";
export * from "./WorkflowRun.js";
export * from "./WorkflowRunBlock.js";
export * from "./WorkflowRunRequest.js";
export * from "./WorkflowRunResponse.js";
export * from "./WorkflowRunStatus.js";
export * from "./WorkflowRunTimeline.js";
export * from "./WorkflowRunTimelineType.js";
export * from "./WorkflowStatus.js";

View File

@@ -1 +1 @@
export const SDK_VERSION = "1.0.13";
export const SDK_VERSION = "1.0.14";

View File

@@ -1452,6 +1452,106 @@ describe("SkyvernClient", () => {
}).rejects.toThrow(Skyvern.UnprocessableEntityError);
});
test("get_workflow_runs (1)", async () => {
const server = mockServerPool.createServer();
const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
const rawResponseBody = [
{
workflow_run_id: "workflow_run_id",
workflow_id: "workflow_id",
workflow_permanent_id: "workflow_permanent_id",
organization_id: "organization_id",
browser_session_id: "browser_session_id",
browser_profile_id: "browser_profile_id",
debug_session_id: "debug_session_id",
status: "created",
extra_http_headers: { key: "value" },
proxy_location: "RESIDENTIAL",
webhook_callback_url: "webhook_callback_url",
webhook_failure_reason: "webhook_failure_reason",
totp_verification_url: "totp_verification_url",
totp_identifier: "totp_identifier",
failure_reason: "failure_reason",
parent_workflow_run_id: "parent_workflow_run_id",
workflow_title: "workflow_title",
max_screenshot_scrolls: 1,
browser_address: "browser_address",
run_with: "run_with",
script_run: { ai_fallback_triggered: true },
job_id: "job_id",
depends_on_workflow_run_id: "depends_on_workflow_run_id",
sequential_key: "sequential_key",
ai_fallback: true,
code_gen: true,
queued_at: "2024-01-15T09:30:00Z",
started_at: "2024-01-15T09:30:00Z",
finished_at: "2024-01-15T09:30:00Z",
created_at: "2024-01-15T09:30:00Z",
modified_at: "2024-01-15T09:30:00Z",
},
];
server.mockEndpoint().get("/v1/workflows/runs").respondWith().statusCode(200).jsonBody(rawResponseBody).build();
const response = await client.getWorkflowRuns({
page: 1,
page_size: 1,
search_key: "search_key",
error_code: "error_code",
});
expect(response).toEqual([
{
workflow_run_id: "workflow_run_id",
workflow_id: "workflow_id",
workflow_permanent_id: "workflow_permanent_id",
organization_id: "organization_id",
browser_session_id: "browser_session_id",
browser_profile_id: "browser_profile_id",
debug_session_id: "debug_session_id",
status: "created",
extra_http_headers: {
key: "value",
},
proxy_location: "RESIDENTIAL",
webhook_callback_url: "webhook_callback_url",
webhook_failure_reason: "webhook_failure_reason",
totp_verification_url: "totp_verification_url",
totp_identifier: "totp_identifier",
failure_reason: "failure_reason",
parent_workflow_run_id: "parent_workflow_run_id",
workflow_title: "workflow_title",
max_screenshot_scrolls: 1,
browser_address: "browser_address",
run_with: "run_with",
script_run: {
ai_fallback_triggered: true,
},
job_id: "job_id",
depends_on_workflow_run_id: "depends_on_workflow_run_id",
sequential_key: "sequential_key",
ai_fallback: true,
code_gen: true,
queued_at: "2024-01-15T09:30:00Z",
started_at: "2024-01-15T09:30:00Z",
finished_at: "2024-01-15T09:30:00Z",
created_at: "2024-01-15T09:30:00Z",
modified_at: "2024-01-15T09:30:00Z",
},
]);
});
test("get_workflow_runs (2)", async () => {
const server = mockServerPool.createServer();
const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
const rawResponseBody = { key: "value" };
server.mockEndpoint().get("/v1/workflows/runs").respondWith().statusCode(422).jsonBody(rawResponseBody).build();
await expect(async () => {
return await client.getWorkflowRuns();
}).rejects.toThrow(Skyvern.UnprocessableEntityError);
});
test("get_workflow (1)", async () => {
const server = mockServerPool.createServer();
const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
@@ -2639,6 +2739,83 @@ describe("SkyvernClient", () => {
}).rejects.toThrow(Skyvern.UnprocessableEntityError);
});
test("update_credential (1)", async () => {
const server = mockServerPool.createServer();
const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
const rawRequestBody = {
name: "My Credential",
credential_type: "password",
credential: { password: "newpassword123", username: "user@example.com" },
};
const rawResponseBody = {
credential_id: "cred_1234567890",
credential: {
username: "user@example.com",
totp_type: "authenticator",
totp_identifier: "totp_identifier",
},
credential_type: "password",
name: "Amazon Login",
};
server
.mockEndpoint()
.post("/v1/credentials/cred_1234567890/update")
.jsonBody(rawRequestBody)
.respondWith()
.statusCode(200)
.jsonBody(rawResponseBody)
.build();
const response = await client.updateCredential("cred_1234567890", {
name: "My Credential",
credential_type: "password",
credential: {
password: "newpassword123",
username: "user@example.com",
},
});
expect(response).toEqual({
credential_id: "cred_1234567890",
credential: {
username: "user@example.com",
totp_type: "authenticator",
totp_identifier: "totp_identifier",
},
credential_type: "password",
name: "Amazon Login",
});
});
test("update_credential (2)", async () => {
const server = mockServerPool.createServer();
const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
const rawRequestBody = {
name: "name",
credential_type: "password",
credential: { password: "x", username: "x" },
};
const rawResponseBody = { key: "value" };
server
.mockEndpoint()
.post("/v1/credentials/credential_id/update")
.jsonBody(rawRequestBody)
.respondWith()
.statusCode(422)
.jsonBody(rawResponseBody)
.build();
await expect(async () => {
return await client.updateCredential("credential_id", {
name: "name",
credential_type: "password",
credential: {
password: "x",
username: "x",
},
});
}).rejects.toThrow(Skyvern.UnprocessableEntityError);
});
test("delete_credential (1)", async () => {
const server = mockServerPool.createServer();
const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });