diff --git a/pyproject.toml b/pyproject.toml
index c332105f..584dec1f 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "skyvern"
-version = "1.0.2"
+version = "1.0.3"
description = ""
authors = [{ name = "Skyvern AI", email = "info@skyvern.com" }]
requires-python = ">=3.11,<3.14"
diff --git a/scripts/fern_build_ts_sdk.sh b/scripts/fern_build_ts_sdk.sh
index dd6fdd2d..31007125 100755
--- a/scripts/fern_build_ts_sdk.sh
+++ b/scripts/fern_build_ts_sdk.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-#CURRENT_VERSION=$(grep '^version = ' pyproject.toml | sed 's/version = "\(.*\)"/\1/')
+CURRENT_VERSION=$(grep '^version = ' pyproject.toml | sed 's/version = "\(.*\)"/\1/')
fern generate --group ts-sdk --log-level debug --version "$CURRENT_VERSION" --preview
mkdir -p skyvern-ts/client
diff --git a/skyvern-ts/client/README.md b/skyvern-ts/client/README.md
index 394fb74e..c8ff4998 100644
--- a/skyvern-ts/client/README.md
+++ b/skyvern-ts/client/README.md
@@ -56,7 +56,7 @@ following namespace:
```typescript
import { Skyvern } from "@skyvern/client";
-const request: Skyvern.GetFoldersV1FoldersGetRequest = {
+const request: Skyvern.RunTaskRequest = {
...
};
```
diff --git a/skyvern-ts/client/package-lock.json b/skyvern-ts/client/package-lock.json
index b7f3c57b..2dff4771 100644
--- a/skyvern-ts/client/package-lock.json
+++ b/skyvern-ts/client/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@skyvern/client",
- "version": "1.0.2",
+ "version": "1.0.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@skyvern/client",
- "version": "1.0.2",
+ "version": "1.0.3",
"dependencies": {
"playwright": "^1.48.0"
},
@@ -1589,9 +1589,9 @@
}
},
"node_modules/baseline-browser-mapping": {
- "version": "2.9.5",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.5.tgz",
- "integrity": "sha512-D5vIoztZOq1XM54LUdttJVc96ggEsIfju2JBvht06pSzpckp3C7HReun67Bghzrtdsq9XdMGbSSB3v3GhMNmAA==",
+ "version": "2.9.6",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.6.tgz",
+ "integrity": "sha512-v9BVVpOTLB59C9E7aSnmIF8h7qRsFpx+A2nugVMTszEOMcfjlZMsXRm4LF23I3Z9AJxc8ANpIvzbzONoX9VJlg==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -1860,9 +1860,9 @@
"license": "MIT"
},
"node_modules/enhanced-resolve": {
- "version": "5.18.3",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz",
- "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==",
+ "version": "5.18.4",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz",
+ "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2794,9 +2794,9 @@
}
},
"node_modules/terser-webpack-plugin": {
- "version": "5.3.15",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.15.tgz",
- "integrity": "sha512-PGkOdpRFK+rb1TzVz+msVhw4YMRT9txLF4kRqvJhGhCM324xuR3REBSHALN+l+sAhKUmz0aotnjp5D+P83mLhQ==",
+ "version": "5.3.16",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz",
+ "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3076,9 +3076,9 @@
}
},
"node_modules/vite-node/node_modules/@types/node": {
- "version": "24.10.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.2.tgz",
- "integrity": "sha512-WOhQTZ4G8xZ1tjJTvKOpyEVSGgOTvJAfDK3FNFgELyaTpzhdgHVHeqW8V+UJvzF5BT+/B54T/1S2K6gd9c7bbA==",
+ "version": "25.0.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.0.tgz",
+ "integrity": "sha512-rl78HwuZlaDIUSeUKkmogkhebA+8K1Hy7tddZuJ3D0xV8pZSfsYGTsliGUol1JPzu9EKnTxPC4L1fiWouStRew==",
"dev": true,
"license": "MIT",
"optional": true,
diff --git a/skyvern-ts/client/package.json b/skyvern-ts/client/package.json
index 195e8363..e0b94a25 100644
--- a/skyvern-ts/client/package.json
+++ b/skyvern-ts/client/package.json
@@ -1,6 +1,6 @@
{
"name": "@skyvern/client",
- "version": "1.0.2",
+ "version": "1.0.3",
"private": false,
"repository": {
"type": "git",
diff --git a/skyvern-ts/client/reference.md b/skyvern-ts/client/reference.md
index d92184a3..133f9410 100644
--- a/skyvern-ts/client/reference.md
+++ b/skyvern-ts/client/reference.md
@@ -68,417 +68,6 @@ await client.runSdkAction({
##
-## Workflows
-client.workflows.getFolders({ ...params }) -> Skyvern.Folder[]
-
--
-
-#### 📝 Description
-
-
--
-
-
--
-
-Get all folders for the organization
-
-
-
-
-
-#### 🔌 Usage
-
-
--
-
-
--
-
-```typescript
-await client.workflows.getFolders({
- page: 1,
- page_size: 1,
- search: "search"
-});
-
-```
-
-
-
-
-
-#### ⚙️ Parameters
-
-
--
-
-
--
-
-**request:** `Skyvern.GetFoldersV1FoldersGetRequest`
-
-
-
-
-
--
-
-**requestOptions:** `Workflows.RequestOptions`
-
-
-
-
-
-
-
-
-
-
-
-client.workflows.createFolder({ ...params }) -> Skyvern.Folder
-
--
-
-#### 📝 Description
-
-
--
-
-
--
-
-Create a new folder to organize workflows
-
-
-
-
-
-#### 🔌 Usage
-
-
--
-
-
--
-
-```typescript
-await client.workflows.createFolder({
- title: "title"
-});
-
-```
-
-
-
-
-
-#### ⚙️ Parameters
-
-
--
-
-
--
-
-**request:** `Skyvern.FolderCreate`
-
-
-
-
-
--
-
-**requestOptions:** `Workflows.RequestOptions`
-
-
-
-
-
-
-
-
-
-
-
-client.workflows.getFolder(folderId) -> Skyvern.Folder
-
--
-
-#### 📝 Description
-
-
--
-
-
--
-
-Get a specific folder by ID
-
-
-
-
-
-#### 🔌 Usage
-
-
--
-
-
--
-
-```typescript
-await client.workflows.getFolder("fld_123");
-
-```
-
-
-
-
-
-#### ⚙️ Parameters
-
-
--
-
-
--
-
-**folderId:** `string` — Folder ID
-
-
-
-
-
--
-
-**requestOptions:** `Workflows.RequestOptions`
-
-
-
-
-
-
-
-
-
-
-
-client.workflows.updateFolder(folderId, { ...params }) -> Skyvern.Folder
-
--
-
-#### 📝 Description
-
-
--
-
-
--
-
-Update a folder's title or description
-
-
-
-
-
-#### 🔌 Usage
-
-
--
-
-
--
-
-```typescript
-await client.workflows.updateFolder("fld_123");
-
-```
-
-
-
-
-
-#### ⚙️ Parameters
-
-
--
-
-
--
-
-**folderId:** `string` — Folder ID
-
-
-
-
-
--
-
-**request:** `Skyvern.FolderUpdate`
-
-
-
-
-
--
-
-**requestOptions:** `Workflows.RequestOptions`
-
-
-
-
-
-
-
-
-
-
-
-client.workflows.deleteFolder(folderId, { ...params }) -> Record
-
--
-
-#### 📝 Description
-
-
--
-
-
--
-
-Delete a folder. Optionally delete all workflows in the folder.
-
-
-
-
-
-#### 🔌 Usage
-
-
--
-
-
--
-
-```typescript
-await client.workflows.deleteFolder("fld_123", {
- delete_workflows: true
-});
-
-```
-
-
-
-
-
-#### ⚙️ Parameters
-
-
--
-
-
--
-
-**folderId:** `string` — Folder ID
-
-
-
-
-
--
-
-**request:** `Skyvern.DeleteFolderV1FoldersFolderIdDeleteRequest`
-
-
-
-
-
--
-
-**requestOptions:** `Workflows.RequestOptions`
-
-
-
-
-
-
-
-
-
-
-
-client.workflows.updateWorkflowFolder(workflowPermanentId, { ...params }) -> Skyvern.Workflow
-
--
-
-#### 📝 Description
-
-
--
-
-
--
-
-Update a workflow's folder assignment for the latest version
-
-
-
-
-
-#### 🔌 Usage
-
-
--
-
-
--
-
-```typescript
-await client.workflows.updateWorkflowFolder("wpid_123");
-
-```
-
-
-
-
-
-#### ⚙️ Parameters
-
-
--
-
-
--
-
-**workflowPermanentId:** `string` — Workflow permanent ID
-
-
-
-
-
--
-
-**request:** `Skyvern.UpdateWorkflowFolderRequest`
-
-
-
-
-
--
-
-**requestOptions:** `Workflows.RequestOptions`
-
-
-
-
-
-
-
-
-
-
-
## Scripts
client.scripts.runScript(scriptId) -> unknown
diff --git a/skyvern-ts/client/src/Client.ts b/skyvern-ts/client/src/Client.ts
index 3635e84b..596546e5 100644
--- a/skyvern-ts/client/src/Client.ts
+++ b/skyvern-ts/client/src/Client.ts
@@ -2,7 +2,6 @@
import * as Skyvern from "./api/index.js";
import { Scripts } from "./api/resources/scripts/client/Client.js";
-import { Workflows } from "./api/resources/workflows/client/Client.js";
import type { BaseClientOptions, BaseRequestOptions } from "./BaseClient.js";
import { mergeHeaders, mergeOnlyDefinedHeaders } from "./core/headers.js";
import * as core from "./core/index.js";
@@ -17,7 +16,6 @@ export declare namespace SkyvernClient {
export class SkyvernClient {
protected readonly _options: SkyvernClient.Options;
- protected _workflows: Workflows | undefined;
protected _scripts: Scripts | undefined;
constructor(_options: SkyvernClient.Options = {}) {
@@ -28,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.2",
- "User-Agent": "@skyvern/client/1.0.2",
+ "X-Fern-SDK-Version": "1.0.3",
+ "User-Agent": "@skyvern/client/1.0.3",
"X-Fern-Runtime": core.RUNTIME.type,
"X-Fern-Runtime-Version": core.RUNTIME.version,
},
@@ -38,10 +36,6 @@ export class SkyvernClient {
};
}
- public get workflows(): Workflows {
- return (this._workflows ??= new Workflows(this._options));
- }
-
public get scripts(): Scripts {
return (this._scripts ??= new Scripts(this._options));
}
diff --git a/skyvern-ts/client/src/api/client/requests/CreateCredentialRequest.ts b/skyvern-ts/client/src/api/client/requests/CreateCredentialRequest.ts
index 8df2a356..c08c963c 100644
--- a/skyvern-ts/client/src/api/client/requests/CreateCredentialRequest.ts
+++ b/skyvern-ts/client/src/api/client/requests/CreateCredentialRequest.ts
@@ -27,5 +27,8 @@ export namespace CreateCredentialRequest {
/**
* The credential data to store
*/
- export type Credential = Skyvern.NonEmptyPasswordCredential | Skyvern.NonEmptyCreditCardCredential;
+ export type Credential =
+ | Skyvern.NonEmptyPasswordCredential
+ | Skyvern.NonEmptyCreditCardCredential
+ | Skyvern.SecretCredential;
}
diff --git a/skyvern-ts/client/src/api/resources/index.ts b/skyvern-ts/client/src/api/resources/index.ts
index 9852fa96..7c69f0c4 100644
--- a/skyvern-ts/client/src/api/resources/index.ts
+++ b/skyvern-ts/client/src/api/resources/index.ts
@@ -1,3 +1 @@
export * as scripts from "./scripts/index.js";
-export * from "./workflows/client/requests/index.js";
-export * as workflows from "./workflows/index.js";
diff --git a/skyvern-ts/client/src/api/resources/workflows/client/Client.ts b/skyvern-ts/client/src/api/resources/workflows/client/Client.ts
deleted file mode 100644
index 8089fcae..00000000
--- a/skyvern-ts/client/src/api/resources/workflows/client/Client.ts
+++ /dev/null
@@ -1,540 +0,0 @@
-// This file was auto-generated by Fern from our API Definition.
-
-import type { BaseClientOptions, BaseRequestOptions } from "../../../../BaseClient.js";
-import { mergeHeaders, mergeOnlyDefinedHeaders } from "../../../../core/headers.js";
-import * as core from "../../../../core/index.js";
-import * as environments from "../../../../environments.js";
-import * as errors from "../../../../errors/index.js";
-import * as Skyvern from "../../../index.js";
-
-export declare namespace Workflows {
- export interface Options extends BaseClientOptions {}
-
- export interface RequestOptions extends BaseRequestOptions {}
-}
-
-export class Workflows {
- protected readonly _options: Workflows.Options;
-
- constructor(_options: Workflows.Options = {}) {
- this._options = _options;
- }
-
- /**
- * Get all folders for the organization
- *
- * @param {Skyvern.GetFoldersV1FoldersGetRequest} request
- * @param {Workflows.RequestOptions} requestOptions - Request-specific configuration.
- *
- * @throws {@link Skyvern.UnprocessableEntityError}
- *
- * @example
- * await client.workflows.getFolders({
- * page: 1,
- * page_size: 1,
- * search: "search"
- * })
- */
- public getFolders(
- request: Skyvern.GetFoldersV1FoldersGetRequest = {},
- requestOptions?: Workflows.RequestOptions,
- ): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__getFolders(request, requestOptions));
- }
-
- private async __getFolders(
- request: Skyvern.GetFoldersV1FoldersGetRequest = {},
- requestOptions?: Workflows.RequestOptions,
- ): Promise> {
- const { page, page_size: pageSize, search } = request;
- const _queryParams: Record = {};
- if (page != null) {
- _queryParams.page = page.toString();
- }
-
- if (pageSize != null) {
- _queryParams.page_size = pageSize.toString();
- }
-
- if (search != null) {
- _queryParams.search = search;
- }
-
- 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/folders",
- ),
- 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.Folder[], 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/folders.");
- case "unknown":
- throw new errors.SkyvernError({
- message: _response.error.errorMessage,
- rawResponse: _response.rawResponse,
- });
- }
- }
-
- /**
- * Create a new folder to organize workflows
- *
- * @param {Skyvern.FolderCreate} request
- * @param {Workflows.RequestOptions} requestOptions - Request-specific configuration.
- *
- * @throws {@link Skyvern.BadRequestError}
- * @throws {@link Skyvern.UnprocessableEntityError}
- *
- * @example
- * await client.workflows.createFolder({
- * title: "title"
- * })
- */
- public createFolder(
- request: Skyvern.FolderCreate,
- requestOptions?: Workflows.RequestOptions,
- ): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__createFolder(request, requestOptions));
- }
-
- private async __createFolder(
- request: Skyvern.FolderCreate,
- requestOptions?: Workflows.RequestOptions,
- ): Promise> {
- 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/folders",
- ),
- 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.Folder, rawResponse: _response.rawResponse };
- }
-
- if (_response.error.reason === "status-code") {
- switch (_response.error.statusCode) {
- case 400:
- throw new Skyvern.BadRequestError(_response.error.body as unknown, _response.rawResponse);
- 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/folders.");
- case "unknown":
- throw new errors.SkyvernError({
- message: _response.error.errorMessage,
- rawResponse: _response.rawResponse,
- });
- }
- }
-
- /**
- * Get a specific folder by ID
- *
- * @param {string} folderId - Folder ID
- * @param {Workflows.RequestOptions} requestOptions - Request-specific configuration.
- *
- * @throws {@link Skyvern.NotFoundError}
- * @throws {@link Skyvern.UnprocessableEntityError}
- *
- * @example
- * await client.workflows.getFolder("fld_123")
- */
- public getFolder(
- folderId: string,
- requestOptions?: Workflows.RequestOptions,
- ): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__getFolder(folderId, requestOptions));
- }
-
- private async __getFolder(
- folderId: string,
- requestOptions?: Workflows.RequestOptions,
- ): Promise> {
- 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/folders/${core.url.encodePathParam(folderId)}`,
- ),
- method: "GET",
- headers: _headers,
- queryParameters: 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.Folder, rawResponse: _response.rawResponse };
- }
-
- if (_response.error.reason === "status-code") {
- switch (_response.error.statusCode) {
- case 404:
- throw new Skyvern.NotFoundError(_response.error.body as unknown, _response.rawResponse);
- 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/folders/{folder_id}.");
- case "unknown":
- throw new errors.SkyvernError({
- message: _response.error.errorMessage,
- rawResponse: _response.rawResponse,
- });
- }
- }
-
- /**
- * Update a folder's title or description
- *
- * @param {string} folderId - Folder ID
- * @param {Skyvern.FolderUpdate} request
- * @param {Workflows.RequestOptions} requestOptions - Request-specific configuration.
- *
- * @throws {@link Skyvern.NotFoundError}
- * @throws {@link Skyvern.UnprocessableEntityError}
- *
- * @example
- * await client.workflows.updateFolder("fld_123")
- */
- public updateFolder(
- folderId: string,
- request: Skyvern.FolderUpdate = {},
- requestOptions?: Workflows.RequestOptions,
- ): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__updateFolder(folderId, request, requestOptions));
- }
-
- private async __updateFolder(
- folderId: string,
- request: Skyvern.FolderUpdate = {},
- requestOptions?: Workflows.RequestOptions,
- ): Promise> {
- 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/folders/${core.url.encodePathParam(folderId)}`,
- ),
- method: "PUT",
- 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.Folder, rawResponse: _response.rawResponse };
- }
-
- if (_response.error.reason === "status-code") {
- switch (_response.error.statusCode) {
- case 404:
- throw new Skyvern.NotFoundError(_response.error.body as unknown, _response.rawResponse);
- 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 PUT /v1/folders/{folder_id}.");
- case "unknown":
- throw new errors.SkyvernError({
- message: _response.error.errorMessage,
- rawResponse: _response.rawResponse,
- });
- }
- }
-
- /**
- * Delete a folder. Optionally delete all workflows in the folder.
- *
- * @param {string} folderId - Folder ID
- * @param {Skyvern.DeleteFolderV1FoldersFolderIdDeleteRequest} request
- * @param {Workflows.RequestOptions} requestOptions - Request-specific configuration.
- *
- * @throws {@link Skyvern.NotFoundError}
- * @throws {@link Skyvern.UnprocessableEntityError}
- *
- * @example
- * await client.workflows.deleteFolder("fld_123", {
- * delete_workflows: true
- * })
- */
- public deleteFolder(
- folderId: string,
- request: Skyvern.DeleteFolderV1FoldersFolderIdDeleteRequest = {},
- requestOptions?: Workflows.RequestOptions,
- ): core.HttpResponsePromise> {
- return core.HttpResponsePromise.fromPromise(this.__deleteFolder(folderId, request, requestOptions));
- }
-
- private async __deleteFolder(
- folderId: string,
- request: Skyvern.DeleteFolderV1FoldersFolderIdDeleteRequest = {},
- requestOptions?: Workflows.RequestOptions,
- ): Promise>> {
- const { delete_workflows: deleteWorkflows } = request;
- const _queryParams: Record = {};
- if (deleteWorkflows != null) {
- _queryParams.delete_workflows = deleteWorkflows.toString();
- }
-
- 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/folders/${core.url.encodePathParam(folderId)}`,
- ),
- method: "DELETE",
- 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 Record, rawResponse: _response.rawResponse };
- }
-
- if (_response.error.reason === "status-code") {
- switch (_response.error.statusCode) {
- case 404:
- throw new Skyvern.NotFoundError(_response.error.body as unknown, _response.rawResponse);
- 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 DELETE /v1/folders/{folder_id}.");
- case "unknown":
- throw new errors.SkyvernError({
- message: _response.error.errorMessage,
- rawResponse: _response.rawResponse,
- });
- }
- }
-
- /**
- * Update a workflow's folder assignment for the latest version
- *
- * @param {string} workflowPermanentId - Workflow permanent ID
- * @param {Skyvern.UpdateWorkflowFolderRequest} request
- * @param {Workflows.RequestOptions} requestOptions - Request-specific configuration.
- *
- * @throws {@link Skyvern.BadRequestError}
- * @throws {@link Skyvern.NotFoundError}
- * @throws {@link Skyvern.UnprocessableEntityError}
- *
- * @example
- * await client.workflows.updateWorkflowFolder("wpid_123")
- */
- public updateWorkflowFolder(
- workflowPermanentId: string,
- request: Skyvern.UpdateWorkflowFolderRequest = {},
- requestOptions?: Workflows.RequestOptions,
- ): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(
- this.__updateWorkflowFolder(workflowPermanentId, request, requestOptions),
- );
- }
-
- private async __updateWorkflowFolder(
- workflowPermanentId: string,
- request: Skyvern.UpdateWorkflowFolderRequest = {},
- requestOptions?: Workflows.RequestOptions,
- ): Promise> {
- 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/${core.url.encodePathParam(workflowPermanentId)}/folder`,
- ),
- method: "PUT",
- 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.Workflow, rawResponse: _response.rawResponse };
- }
-
- if (_response.error.reason === "status-code") {
- switch (_response.error.statusCode) {
- case 400:
- throw new Skyvern.BadRequestError(_response.error.body as unknown, _response.rawResponse);
- case 404:
- throw new Skyvern.NotFoundError(_response.error.body as unknown, _response.rawResponse);
- 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 PUT /v1/workflows/{workflow_permanent_id}/folder.",
- );
- case "unknown":
- throw new errors.SkyvernError({
- message: _response.error.errorMessage,
- rawResponse: _response.rawResponse,
- });
- }
- }
-}
diff --git a/skyvern-ts/client/src/api/resources/workflows/client/index.ts b/skyvern-ts/client/src/api/resources/workflows/client/index.ts
deleted file mode 100644
index 195f9aa8..00000000
--- a/skyvern-ts/client/src/api/resources/workflows/client/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from "./requests/index.js";
diff --git a/skyvern-ts/client/src/api/resources/workflows/client/requests/DeleteFolderV1FoldersFolderIdDeleteRequest.ts b/skyvern-ts/client/src/api/resources/workflows/client/requests/DeleteFolderV1FoldersFolderIdDeleteRequest.ts
deleted file mode 100644
index a0b05aa4..00000000
--- a/skyvern-ts/client/src/api/resources/workflows/client/requests/DeleteFolderV1FoldersFolderIdDeleteRequest.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-// This file was auto-generated by Fern from our API Definition.
-
-/**
- * @example
- * {
- * delete_workflows: true
- * }
- */
-export interface DeleteFolderV1FoldersFolderIdDeleteRequest {
- /** If true, also delete all workflows in this folder */
- delete_workflows?: boolean;
-}
diff --git a/skyvern-ts/client/src/api/resources/workflows/client/requests/FolderCreate.ts b/skyvern-ts/client/src/api/resources/workflows/client/requests/FolderCreate.ts
deleted file mode 100644
index 9f8672e6..00000000
--- a/skyvern-ts/client/src/api/resources/workflows/client/requests/FolderCreate.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-// This file was auto-generated by Fern from our API Definition.
-
-/**
- * @example
- * {
- * title: "title"
- * }
- */
-export interface FolderCreate {
- /** Folder title */
- title: string;
- /** Folder description */
- description?: string;
-}
diff --git a/skyvern-ts/client/src/api/resources/workflows/client/requests/FolderUpdate.ts b/skyvern-ts/client/src/api/resources/workflows/client/requests/FolderUpdate.ts
deleted file mode 100644
index a254c120..00000000
--- a/skyvern-ts/client/src/api/resources/workflows/client/requests/FolderUpdate.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-// This file was auto-generated by Fern from our API Definition.
-
-/**
- * @example
- * {}
- */
-export interface FolderUpdate {
- /** Folder title */
- title?: string;
- /** Folder description */
- description?: string;
-}
diff --git a/skyvern-ts/client/src/api/resources/workflows/client/requests/GetFoldersV1FoldersGetRequest.ts b/skyvern-ts/client/src/api/resources/workflows/client/requests/GetFoldersV1FoldersGetRequest.ts
deleted file mode 100644
index 461926b9..00000000
--- a/skyvern-ts/client/src/api/resources/workflows/client/requests/GetFoldersV1FoldersGetRequest.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-// This file was auto-generated by Fern from our API Definition.
-
-/**
- * @example
- * {
- * page: 1,
- * page_size: 1,
- * search: "search"
- * }
- */
-export interface GetFoldersV1FoldersGetRequest {
- /** Page number */
- page?: number;
- /** Number of folders per page */
- page_size?: number;
- /** Search folders by title or description */
- search?: string;
-}
diff --git a/skyvern-ts/client/src/api/resources/workflows/client/requests/UpdateWorkflowFolderRequest.ts b/skyvern-ts/client/src/api/resources/workflows/client/requests/UpdateWorkflowFolderRequest.ts
deleted file mode 100644
index 52a60875..00000000
--- a/skyvern-ts/client/src/api/resources/workflows/client/requests/UpdateWorkflowFolderRequest.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-// This file was auto-generated by Fern from our API Definition.
-
-/**
- * @example
- * {}
- */
-export interface UpdateWorkflowFolderRequest {
- /** Folder ID to assign workflow to. Set to null to remove from folder. */
- folder_id?: string;
-}
diff --git a/skyvern-ts/client/src/api/resources/workflows/client/requests/index.ts b/skyvern-ts/client/src/api/resources/workflows/client/requests/index.ts
deleted file mode 100644
index 521e6501..00000000
--- a/skyvern-ts/client/src/api/resources/workflows/client/requests/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export type { DeleteFolderV1FoldersFolderIdDeleteRequest } from "./DeleteFolderV1FoldersFolderIdDeleteRequest.js";
-export type { FolderCreate } from "./FolderCreate.js";
-export type { FolderUpdate } from "./FolderUpdate.js";
-export type { GetFoldersV1FoldersGetRequest } from "./GetFoldersV1FoldersGetRequest.js";
-export type { UpdateWorkflowFolderRequest } from "./UpdateWorkflowFolderRequest.js";
diff --git a/skyvern-ts/client/src/api/resources/workflows/index.ts b/skyvern-ts/client/src/api/resources/workflows/index.ts
deleted file mode 100644
index 914b8c3c..00000000
--- a/skyvern-ts/client/src/api/resources/workflows/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from "./client/index.js";
diff --git a/skyvern-ts/client/src/api/types/ActionType.ts b/skyvern-ts/client/src/api/types/ActionType.ts
index 595c9050..3c67b65d 100644
--- a/skyvern-ts/client/src/api/types/ActionType.ts
+++ b/skyvern-ts/client/src/api/types/ActionType.ts
@@ -8,6 +8,7 @@ export const ActionType = {
SelectOption: "select_option",
Checkbox: "checkbox",
Wait: "wait",
+ Hover: "hover",
NullAction: "null_action",
SolveCaptcha: "solve_captcha",
Terminate: "terminate",
diff --git a/skyvern-ts/client/src/api/types/CredentialResponse.ts b/skyvern-ts/client/src/api/types/CredentialResponse.ts
index d31e48eb..e1432f9e 100644
--- a/skyvern-ts/client/src/api/types/CredentialResponse.ts
+++ b/skyvern-ts/client/src/api/types/CredentialResponse.ts
@@ -20,5 +20,8 @@ export namespace CredentialResponse {
/**
* The credential data
*/
- export type Credential = Skyvern.PasswordCredentialResponse | Skyvern.CreditCardCredentialResponse;
+ export type Credential =
+ | Skyvern.PasswordCredentialResponse
+ | Skyvern.CreditCardCredentialResponse
+ | Skyvern.SecretCredentialResponse;
}
diff --git a/skyvern-ts/client/src/api/types/CredentialTypeOutput.ts b/skyvern-ts/client/src/api/types/CredentialTypeOutput.ts
index b2abba79..2f799da1 100644
--- a/skyvern-ts/client/src/api/types/CredentialTypeOutput.ts
+++ b/skyvern-ts/client/src/api/types/CredentialTypeOutput.ts
@@ -4,5 +4,6 @@
export const CredentialTypeOutput = {
Password: "password",
CreditCard: "credit_card",
+ Secret: "secret",
} as const;
export type CredentialTypeOutput = (typeof CredentialTypeOutput)[keyof typeof CredentialTypeOutput];
diff --git a/skyvern-ts/client/src/api/types/Folder.ts b/skyvern-ts/client/src/api/types/Folder.ts
deleted file mode 100644
index 57622c34..00000000
--- a/skyvern-ts/client/src/api/types/Folder.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-// This file was auto-generated by Fern from our API Definition.
-
-/**
- * Response model for a folder
- */
-export interface Folder {
- /** Folder title */
- title: string;
- /** Folder description */
- description?: string;
- folder_id: string;
- organization_id: string;
- /** Number of workflows in this folder */
- workflow_count?: number;
- created_at: string;
- modified_at: string;
-}
diff --git a/skyvern-ts/client/src/api/types/HttpRequestBlock.ts b/skyvern-ts/client/src/api/types/HttpRequestBlock.ts
index 704dfeda..fb3bf909 100644
--- a/skyvern-ts/client/src/api/types/HttpRequestBlock.ts
+++ b/skyvern-ts/client/src/api/types/HttpRequestBlock.ts
@@ -16,6 +16,7 @@ export interface HttpRequestBlock {
url?: string;
headers?: Record;
body?: Record;
+ files?: Record;
timeout?: number;
follow_redirects?: boolean;
parameters?: Skyvern.HttpRequestBlockParametersItem[];
diff --git a/skyvern-ts/client/src/api/types/HttpRequestBlockYaml.ts b/skyvern-ts/client/src/api/types/HttpRequestBlockYaml.ts
index b0a7460c..243910c2 100644
--- a/skyvern-ts/client/src/api/types/HttpRequestBlockYaml.ts
+++ b/skyvern-ts/client/src/api/types/HttpRequestBlockYaml.ts
@@ -12,6 +12,7 @@ export interface HttpRequestBlockYaml {
url?: string;
headers?: Record;
body?: Record;
+ files?: Record;
timeout?: number;
follow_redirects?: boolean;
parameter_keys?: string[];
diff --git a/skyvern-ts/client/src/api/types/SecretCredential.ts b/skyvern-ts/client/src/api/types/SecretCredential.ts
new file mode 100644
index 00000000..29b67377
--- /dev/null
+++ b/skyvern-ts/client/src/api/types/SecretCredential.ts
@@ -0,0 +1,11 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * Generic secret credential.
+ */
+export interface SecretCredential {
+ /** The secret value */
+ secret_value: string;
+ /** Optional label describing the secret */
+ secret_label?: string;
+}
diff --git a/skyvern-ts/client/src/api/types/SecretCredentialResponse.ts b/skyvern-ts/client/src/api/types/SecretCredentialResponse.ts
new file mode 100644
index 00000000..5dfed2a6
--- /dev/null
+++ b/skyvern-ts/client/src/api/types/SecretCredentialResponse.ts
@@ -0,0 +1,9 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * Response model for secret credentials.
+ */
+export interface SecretCredentialResponse {
+ /** Optional label for the stored secret */
+ secret_label?: string;
+}
diff --git a/skyvern-ts/client/src/api/types/SkyvernForgeSdkSchemasCredentialsCredentialType.ts b/skyvern-ts/client/src/api/types/SkyvernForgeSdkSchemasCredentialsCredentialType.ts
index bc1f52a3..d54cbc15 100644
--- a/skyvern-ts/client/src/api/types/SkyvernForgeSdkSchemasCredentialsCredentialType.ts
+++ b/skyvern-ts/client/src/api/types/SkyvernForgeSdkSchemasCredentialsCredentialType.ts
@@ -4,6 +4,7 @@
export const SkyvernForgeSdkSchemasCredentialsCredentialType = {
Password: "password",
CreditCard: "credit_card",
+ Secret: "secret",
} as const;
export type SkyvernForgeSdkSchemasCredentialsCredentialType =
(typeof SkyvernForgeSdkSchemasCredentialsCredentialType)[keyof typeof SkyvernForgeSdkSchemasCredentialsCredentialType];
diff --git a/skyvern-ts/client/src/api/types/index.ts b/skyvern-ts/client/src/api/types/index.ts
index 80ac5600..45bf40eb 100644
--- a/skyvern-ts/client/src/api/types/index.ts
+++ b/skyvern-ts/client/src/api/types/index.ts
@@ -59,7 +59,6 @@ export * from "./FileStorageType.js";
export * from "./FileType.js";
export * from "./FileUploadBlock.js";
export * from "./FileUploadBlockYaml.js";
-export * from "./Folder.js";
export * from "./ForLoopBlock.js";
export * from "./ForLoopBlockLoopBlocksItem.js";
export * from "./ForLoopBlockLoopOver.js";
@@ -104,6 +103,8 @@ export * from "./RunStatus.js";
export * from "./Script.js";
export * from "./ScriptFileCreate.js";
export * from "./ScriptRunResponse.js";
+export * from "./SecretCredential.js";
+export * from "./SecretCredentialResponse.js";
export * from "./SelectOption.js";
export * from "./SelectOptionAction.js";
export * from "./SendEmailBlock.js";
diff --git a/skyvern-ts/client/src/version.ts b/skyvern-ts/client/src/version.ts
index 8c6c1420..9add6892 100644
--- a/skyvern-ts/client/src/version.ts
+++ b/skyvern-ts/client/src/version.ts
@@ -1 +1 @@
-export const SDK_VERSION = "1.0.2";
+export const SDK_VERSION = "1.0.3";
diff --git a/skyvern-ts/client/tests/wire/workflows.test.ts b/skyvern-ts/client/tests/wire/workflows.test.ts
deleted file mode 100644
index 4f9dbd7c..00000000
--- a/skyvern-ts/client/tests/wire/workflows.test.ts
+++ /dev/null
@@ -1,517 +0,0 @@
-// This file was auto-generated by Fern from our API Definition.
-
-import * as Skyvern from "../../src/api/index";
-import { SkyvernClient } from "../../src/Client";
-import { mockServerPool } from "../mock-server/MockServerPool";
-
-describe("Workflows", () => {
- test("getFolders (1)", async () => {
- const server = mockServerPool.createServer();
- const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
-
- const rawResponseBody = [
- {
- title: "title",
- description: "description",
- folder_id: "folder_id",
- organization_id: "organization_id",
- workflow_count: 1,
- created_at: "2024-01-15T09:30:00Z",
- modified_at: "2024-01-15T09:30:00Z",
- },
- ];
- server.mockEndpoint().get("/v1/folders").respondWith().statusCode(200).jsonBody(rawResponseBody).build();
-
- const response = await client.workflows.getFolders({
- page: 1,
- page_size: 1,
- search: "search",
- });
- expect(response).toEqual([
- {
- title: "title",
- description: "description",
- folder_id: "folder_id",
- organization_id: "organization_id",
- workflow_count: 1,
- created_at: "2024-01-15T09:30:00Z",
- modified_at: "2024-01-15T09:30:00Z",
- },
- ]);
- });
-
- test("getFolders (2)", async () => {
- const server = mockServerPool.createServer();
- const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
-
- const rawResponseBody = { key: "value" };
- server.mockEndpoint().get("/v1/folders").respondWith().statusCode(422).jsonBody(rawResponseBody).build();
-
- await expect(async () => {
- return await client.workflows.getFolders();
- }).rejects.toThrow(Skyvern.UnprocessableEntityError);
- });
-
- test("createFolder (1)", async () => {
- const server = mockServerPool.createServer();
- const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
- const rawRequestBody = { title: "title" };
- const rawResponseBody = {
- title: "title",
- description: "description",
- folder_id: "folder_id",
- organization_id: "organization_id",
- workflow_count: 1,
- created_at: "2024-01-15T09:30:00Z",
- modified_at: "2024-01-15T09:30:00Z",
- };
- server
- .mockEndpoint()
- .post("/v1/folders")
- .jsonBody(rawRequestBody)
- .respondWith()
- .statusCode(200)
- .jsonBody(rawResponseBody)
- .build();
-
- const response = await client.workflows.createFolder({
- title: "title",
- });
- expect(response).toEqual({
- title: "title",
- description: "description",
- folder_id: "folder_id",
- organization_id: "organization_id",
- workflow_count: 1,
- created_at: "2024-01-15T09:30:00Z",
- modified_at: "2024-01-15T09:30:00Z",
- });
- });
-
- test("createFolder (2)", async () => {
- const server = mockServerPool.createServer();
- const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
- const rawRequestBody = { title: "x" };
- const rawResponseBody = { key: "value" };
- server
- .mockEndpoint()
- .post("/v1/folders")
- .jsonBody(rawRequestBody)
- .respondWith()
- .statusCode(400)
- .jsonBody(rawResponseBody)
- .build();
-
- await expect(async () => {
- return await client.workflows.createFolder({
- title: "x",
- });
- }).rejects.toThrow(Skyvern.BadRequestError);
- });
-
- test("createFolder (3)", async () => {
- const server = mockServerPool.createServer();
- const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
- const rawRequestBody = { title: "x" };
- const rawResponseBody = { key: "value" };
- server
- .mockEndpoint()
- .post("/v1/folders")
- .jsonBody(rawRequestBody)
- .respondWith()
- .statusCode(422)
- .jsonBody(rawResponseBody)
- .build();
-
- await expect(async () => {
- return await client.workflows.createFolder({
- title: "x",
- });
- }).rejects.toThrow(Skyvern.UnprocessableEntityError);
- });
-
- test("getFolder (1)", async () => {
- const server = mockServerPool.createServer();
- const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
-
- const rawResponseBody = {
- title: "title",
- description: "description",
- folder_id: "folder_id",
- organization_id: "organization_id",
- workflow_count: 1,
- created_at: "2024-01-15T09:30:00Z",
- modified_at: "2024-01-15T09:30:00Z",
- };
- server
- .mockEndpoint()
- .get("/v1/folders/fld_123")
- .respondWith()
- .statusCode(200)
- .jsonBody(rawResponseBody)
- .build();
-
- const response = await client.workflows.getFolder("fld_123");
- expect(response).toEqual({
- title: "title",
- description: "description",
- folder_id: "folder_id",
- organization_id: "organization_id",
- workflow_count: 1,
- created_at: "2024-01-15T09:30:00Z",
- modified_at: "2024-01-15T09:30:00Z",
- });
- });
-
- test("getFolder (2)", async () => {
- const server = mockServerPool.createServer();
- const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
-
- const rawResponseBody = { key: "value" };
- server
- .mockEndpoint()
- .get("/v1/folders/folder_id")
- .respondWith()
- .statusCode(404)
- .jsonBody(rawResponseBody)
- .build();
-
- await expect(async () => {
- return await client.workflows.getFolder("folder_id");
- }).rejects.toThrow(Skyvern.NotFoundError);
- });
-
- test("getFolder (3)", async () => {
- const server = mockServerPool.createServer();
- const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
-
- const rawResponseBody = { key: "value" };
- server
- .mockEndpoint()
- .get("/v1/folders/folder_id")
- .respondWith()
- .statusCode(422)
- .jsonBody(rawResponseBody)
- .build();
-
- await expect(async () => {
- return await client.workflows.getFolder("folder_id");
- }).rejects.toThrow(Skyvern.UnprocessableEntityError);
- });
-
- test("updateFolder (1)", async () => {
- const server = mockServerPool.createServer();
- const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
- const rawRequestBody = {};
- const rawResponseBody = {
- title: "title",
- description: "description",
- folder_id: "folder_id",
- organization_id: "organization_id",
- workflow_count: 1,
- created_at: "2024-01-15T09:30:00Z",
- modified_at: "2024-01-15T09:30:00Z",
- };
- server
- .mockEndpoint()
- .put("/v1/folders/fld_123")
- .jsonBody(rawRequestBody)
- .respondWith()
- .statusCode(200)
- .jsonBody(rawResponseBody)
- .build();
-
- const response = await client.workflows.updateFolder("fld_123");
- expect(response).toEqual({
- title: "title",
- description: "description",
- folder_id: "folder_id",
- organization_id: "organization_id",
- workflow_count: 1,
- created_at: "2024-01-15T09:30:00Z",
- modified_at: "2024-01-15T09:30:00Z",
- });
- });
-
- test("updateFolder (2)", async () => {
- const server = mockServerPool.createServer();
- const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
- const rawRequestBody = {};
- const rawResponseBody = { key: "value" };
- server
- .mockEndpoint()
- .put("/v1/folders/folder_id")
- .jsonBody(rawRequestBody)
- .respondWith()
- .statusCode(404)
- .jsonBody(rawResponseBody)
- .build();
-
- await expect(async () => {
- return await client.workflows.updateFolder("folder_id");
- }).rejects.toThrow(Skyvern.NotFoundError);
- });
-
- test("updateFolder (3)", async () => {
- const server = mockServerPool.createServer();
- const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
- const rawRequestBody = {};
- const rawResponseBody = { key: "value" };
- server
- .mockEndpoint()
- .put("/v1/folders/folder_id")
- .jsonBody(rawRequestBody)
- .respondWith()
- .statusCode(422)
- .jsonBody(rawResponseBody)
- .build();
-
- await expect(async () => {
- return await client.workflows.updateFolder("folder_id");
- }).rejects.toThrow(Skyvern.UnprocessableEntityError);
- });
-
- test("deleteFolder (1)", async () => {
- const server = mockServerPool.createServer();
- const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
-
- const rawResponseBody = { key: "value" };
- server
- .mockEndpoint()
- .delete("/v1/folders/fld_123")
- .respondWith()
- .statusCode(200)
- .jsonBody(rawResponseBody)
- .build();
-
- const response = await client.workflows.deleteFolder("fld_123", {
- delete_workflows: true,
- });
- expect(response).toEqual({
- key: "value",
- });
- });
-
- test("deleteFolder (2)", async () => {
- const server = mockServerPool.createServer();
- const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
-
- const rawResponseBody = { key: "value" };
- server
- .mockEndpoint()
- .delete("/v1/folders/folder_id")
- .respondWith()
- .statusCode(404)
- .jsonBody(rawResponseBody)
- .build();
-
- await expect(async () => {
- return await client.workflows.deleteFolder("folder_id");
- }).rejects.toThrow(Skyvern.NotFoundError);
- });
-
- test("deleteFolder (3)", async () => {
- const server = mockServerPool.createServer();
- const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
-
- const rawResponseBody = { key: "value" };
- server
- .mockEndpoint()
- .delete("/v1/folders/folder_id")
- .respondWith()
- .statusCode(422)
- .jsonBody(rawResponseBody)
- .build();
-
- await expect(async () => {
- return await client.workflows.deleteFolder("folder_id");
- }).rejects.toThrow(Skyvern.UnprocessableEntityError);
- });
-
- test("updateWorkflowFolder (1)", async () => {
- const server = mockServerPool.createServer();
- const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
- const rawRequestBody = {};
- const rawResponseBody = {
- workflow_id: "workflow_id",
- organization_id: "organization_id",
- title: "title",
- workflow_permanent_id: "workflow_permanent_id",
- version: 1,
- is_saved_task: true,
- description: "description",
- workflow_definition: {
- version: 1,
- parameters: [
- {
- parameter_type: "aws_secret",
- key: "key",
- aws_secret_parameter_id: "aws_secret_parameter_id",
- workflow_id: "workflow_id",
- aws_key: "aws_key",
- created_at: "2024-01-15T09:30:00Z",
- modified_at: "2024-01-15T09:30:00Z",
- },
- ],
- blocks: [
- {
- block_type: "action",
- label: "label",
- output_parameter: {
- key: "key",
- output_parameter_id: "output_parameter_id",
- workflow_id: "workflow_id",
- created_at: "2024-01-15T09:30:00Z",
- modified_at: "2024-01-15T09:30:00Z",
- },
- },
- ],
- },
- proxy_location: "RESIDENTIAL",
- webhook_callback_url: "webhook_callback_url",
- totp_verification_url: "totp_verification_url",
- totp_identifier: "totp_identifier",
- persist_browser_session: true,
- model: { key: "value" },
- status: "published",
- max_screenshot_scrolls: 1,
- extra_http_headers: { key: "value" },
- run_with: "run_with",
- ai_fallback: true,
- cache_key: "cache_key",
- run_sequentially: true,
- sequential_key: "sequential_key",
- folder_id: "folder_id",
- import_error: "import_error",
- created_at: "2024-01-15T09:30:00Z",
- modified_at: "2024-01-15T09:30:00Z",
- deleted_at: "2024-01-15T09:30:00Z",
- };
- server
- .mockEndpoint()
- .put("/v1/workflows/wpid_123/folder")
- .jsonBody(rawRequestBody)
- .respondWith()
- .statusCode(200)
- .jsonBody(rawResponseBody)
- .build();
-
- const response = await client.workflows.updateWorkflowFolder("wpid_123");
- expect(response).toEqual({
- workflow_id: "workflow_id",
- organization_id: "organization_id",
- title: "title",
- workflow_permanent_id: "workflow_permanent_id",
- version: 1,
- is_saved_task: true,
- description: "description",
- workflow_definition: {
- version: 1,
- parameters: [
- {
- parameter_type: "aws_secret",
- key: "key",
- aws_secret_parameter_id: "aws_secret_parameter_id",
- workflow_id: "workflow_id",
- aws_key: "aws_key",
- created_at: "2024-01-15T09:30:00Z",
- modified_at: "2024-01-15T09:30:00Z",
- },
- ],
- blocks: [
- {
- block_type: "action",
- label: "label",
- output_parameter: {
- key: "key",
- output_parameter_id: "output_parameter_id",
- workflow_id: "workflow_id",
- created_at: "2024-01-15T09:30:00Z",
- modified_at: "2024-01-15T09:30:00Z",
- },
- },
- ],
- },
- proxy_location: "RESIDENTIAL",
- webhook_callback_url: "webhook_callback_url",
- totp_verification_url: "totp_verification_url",
- totp_identifier: "totp_identifier",
- persist_browser_session: true,
- model: {
- key: "value",
- },
- status: "published",
- max_screenshot_scrolls: 1,
- extra_http_headers: {
- key: "value",
- },
- run_with: "run_with",
- ai_fallback: true,
- cache_key: "cache_key",
- run_sequentially: true,
- sequential_key: "sequential_key",
- folder_id: "folder_id",
- import_error: "import_error",
- created_at: "2024-01-15T09:30:00Z",
- modified_at: "2024-01-15T09:30:00Z",
- deleted_at: "2024-01-15T09:30:00Z",
- });
- });
-
- test("updateWorkflowFolder (2)", async () => {
- const server = mockServerPool.createServer();
- const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
- const rawRequestBody = {};
- const rawResponseBody = { key: "value" };
- server
- .mockEndpoint()
- .put("/v1/workflows/workflow_permanent_id/folder")
- .jsonBody(rawRequestBody)
- .respondWith()
- .statusCode(400)
- .jsonBody(rawResponseBody)
- .build();
-
- await expect(async () => {
- return await client.workflows.updateWorkflowFolder("workflow_permanent_id");
- }).rejects.toThrow(Skyvern.BadRequestError);
- });
-
- test("updateWorkflowFolder (3)", async () => {
- const server = mockServerPool.createServer();
- const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
- const rawRequestBody = {};
- const rawResponseBody = { key: "value" };
- server
- .mockEndpoint()
- .put("/v1/workflows/workflow_permanent_id/folder")
- .jsonBody(rawRequestBody)
- .respondWith()
- .statusCode(404)
- .jsonBody(rawResponseBody)
- .build();
-
- await expect(async () => {
- return await client.workflows.updateWorkflowFolder("workflow_permanent_id");
- }).rejects.toThrow(Skyvern.NotFoundError);
- });
-
- test("updateWorkflowFolder (4)", async () => {
- const server = mockServerPool.createServer();
- const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
- const rawRequestBody = {};
- const rawResponseBody = { key: "value" };
- server
- .mockEndpoint()
- .put("/v1/workflows/workflow_permanent_id/folder")
- .jsonBody(rawRequestBody)
- .respondWith()
- .statusCode(422)
- .jsonBody(rawResponseBody)
- .build();
-
- await expect(async () => {
- return await client.workflows.updateWorkflowFolder("workflow_permanent_id");
- }).rejects.toThrow(Skyvern.UnprocessableEntityError);
- });
-});
diff --git a/skyvern/client/__init__.py b/skyvern/client/__init__.py
index d06242ed..2293b30b 100644
--- a/skyvern/client/__init__.py
+++ b/skyvern/client/__init__.py
@@ -137,7 +137,6 @@ if typing.TYPE_CHECKING:
FileType,
FileUploadBlock,
FileUploadBlockYaml,
- Folder,
ForLoopBlock,
ForLoopBlockLoopBlocksItem,
ForLoopBlockLoopBlocksItem_Action,
@@ -300,6 +299,8 @@ if typing.TYPE_CHECKING:
Script,
ScriptFileCreate,
ScriptRunResponse,
+ SecretCredential,
+ SecretCredentialResponse,
SelectOption,
SelectOptionAction,
SelectOptionActionData,
@@ -495,7 +496,7 @@ if typing.TYPE_CHECKING:
WorkflowStatus,
)
from .errors import BadRequestError, ConflictError, ForbiddenError, NotFoundError, UnprocessableEntityError
- from . import scripts, workflows
+ from . import scripts
from .client import AsyncSkyvern, Skyvern
from .environment import SkyvernEnvironment
from .version import __version__
@@ -633,7 +634,6 @@ _dynamic_imports: typing.Dict[str, str] = {
"FileType": ".types",
"FileUploadBlock": ".types",
"FileUploadBlockYaml": ".types",
- "Folder": ".types",
"ForLoopBlock": ".types",
"ForLoopBlockLoopBlocksItem": ".types",
"ForLoopBlockLoopBlocksItem_Action": ".types",
@@ -798,6 +798,8 @@ _dynamic_imports: typing.Dict[str, str] = {
"Script": ".types",
"ScriptFileCreate": ".types",
"ScriptRunResponse": ".types",
+ "SecretCredential": ".types",
+ "SecretCredentialResponse": ".types",
"SelectOption": ".types",
"SelectOptionAction": ".types",
"SelectOptionActionData": ".types",
@@ -996,7 +998,6 @@ _dynamic_imports: typing.Dict[str, str] = {
"WorkflowStatus": ".types",
"__version__": ".version",
"scripts": ".scripts",
- "workflows": ".workflows",
}
@@ -1155,7 +1156,6 @@ __all__ = [
"FileType",
"FileUploadBlock",
"FileUploadBlockYaml",
- "Folder",
"ForLoopBlock",
"ForLoopBlockLoopBlocksItem",
"ForLoopBlockLoopBlocksItem_Action",
@@ -1320,6 +1320,8 @@ __all__ = [
"Script",
"ScriptFileCreate",
"ScriptRunResponse",
+ "SecretCredential",
+ "SecretCredentialResponse",
"SelectOption",
"SelectOptionAction",
"SelectOptionActionData",
@@ -1518,5 +1520,4 @@ __all__ = [
"WorkflowStatus",
"__version__",
"scripts",
- "workflows",
]
diff --git a/skyvern/client/client.py b/skyvern/client/client.py
index 3bc60312..1b77085b 100644
--- a/skyvern/client/client.py
+++ b/skyvern/client/client.py
@@ -39,7 +39,6 @@ from .types.workflow_status import WorkflowStatus
if typing.TYPE_CHECKING:
from .scripts.client import AsyncScriptsClient, ScriptsClient
- from .workflows.client import AsyncWorkflowsClient, WorkflowsClient
# this is used as the default value for optional parameters
OMIT = typing.cast(typing.Any, ...)
@@ -110,7 +109,6 @@ class Skyvern:
timeout=_defaulted_timeout,
)
self._raw_client = RawSkyvern(client_wrapper=self._client_wrapper)
- self._workflows: typing.Optional[WorkflowsClient] = None
self._scripts: typing.Optional[ScriptsClient] = None
@property
@@ -1851,14 +1849,6 @@ class Skyvern:
)
return _response.data
- @property
- def workflows(self):
- if self._workflows is None:
- from .workflows.client import WorkflowsClient # noqa: E402
-
- self._workflows = WorkflowsClient(client_wrapper=self._client_wrapper)
- return self._workflows
-
@property
def scripts(self):
if self._scripts is None:
@@ -1934,7 +1924,6 @@ class AsyncSkyvern:
timeout=_defaulted_timeout,
)
self._raw_client = AsyncRawSkyvern(client_wrapper=self._client_wrapper)
- self._workflows: typing.Optional[AsyncWorkflowsClient] = None
self._scripts: typing.Optional[AsyncScriptsClient] = None
@property
@@ -3937,14 +3926,6 @@ class AsyncSkyvern:
)
return _response.data
- @property
- def workflows(self):
- if self._workflows is None:
- from .workflows.client import AsyncWorkflowsClient # noqa: E402
-
- self._workflows = AsyncWorkflowsClient(client_wrapper=self._client_wrapper)
- return self._workflows
-
@property
def scripts(self):
if self._scripts is None:
diff --git a/skyvern/client/core/client_wrapper.py b/skyvern/client/core/client_wrapper.py
index 250076cb..7513f68e 100644
--- a/skyvern/client/core/client_wrapper.py
+++ b/skyvern/client/core/client_wrapper.py
@@ -22,10 +22,10 @@ class BaseClientWrapper:
def get_headers(self) -> typing.Dict[str, str]:
headers: typing.Dict[str, str] = {
- "User-Agent": "skyvern/1.0.2",
+ "User-Agent": "skyvern/1.0.3",
"X-Fern-Language": "Python",
"X-Fern-SDK-Name": "skyvern",
- "X-Fern-SDK-Version": "1.0.2",
+ "X-Fern-SDK-Version": "1.0.3",
**(self.get_custom_headers() or {}),
}
if self._api_key is not None:
diff --git a/skyvern/client/types/__init__.py b/skyvern/client/types/__init__.py
index c420eb1a..efa99655 100644
--- a/skyvern/client/types/__init__.py
+++ b/skyvern/client/types/__init__.py
@@ -148,7 +148,6 @@ if typing.TYPE_CHECKING:
from .file_type import FileType
from .file_upload_block import FileUploadBlock
from .file_upload_block_yaml import FileUploadBlockYaml
- from .folder import Folder
from .for_loop_block import ForLoopBlock
from .for_loop_block_loop_blocks_item import (
ForLoopBlockLoopBlocksItem,
@@ -329,6 +328,8 @@ if typing.TYPE_CHECKING:
from .script import Script
from .script_file_create import ScriptFileCreate
from .script_run_response import ScriptRunResponse
+ from .secret_credential import SecretCredential
+ from .secret_credential_response import SecretCredentialResponse
from .select_option import SelectOption
from .select_option_action import SelectOptionAction
from .select_option_action_data import SelectOptionActionData
@@ -671,7 +672,6 @@ _dynamic_imports: typing.Dict[str, str] = {
"FileType": ".file_type",
"FileUploadBlock": ".file_upload_block",
"FileUploadBlockYaml": ".file_upload_block_yaml",
- "Folder": ".folder",
"ForLoopBlock": ".for_loop_block",
"ForLoopBlockLoopBlocksItem": ".for_loop_block_loop_blocks_item",
"ForLoopBlockLoopBlocksItem_Action": ".for_loop_block_loop_blocks_item",
@@ -834,6 +834,8 @@ _dynamic_imports: typing.Dict[str, str] = {
"Script": ".script",
"ScriptFileCreate": ".script_file_create",
"ScriptRunResponse": ".script_run_response",
+ "SecretCredential": ".secret_credential",
+ "SecretCredentialResponse": ".secret_credential_response",
"SelectOption": ".select_option",
"SelectOptionAction": ".select_option_action",
"SelectOptionActionData": ".select_option_action_data",
@@ -1182,7 +1184,6 @@ __all__ = [
"FileType",
"FileUploadBlock",
"FileUploadBlockYaml",
- "Folder",
"ForLoopBlock",
"ForLoopBlockLoopBlocksItem",
"ForLoopBlockLoopBlocksItem_Action",
@@ -1345,6 +1346,8 @@ __all__ = [
"Script",
"ScriptFileCreate",
"ScriptRunResponse",
+ "SecretCredential",
+ "SecretCredentialResponse",
"SelectOption",
"SelectOptionAction",
"SelectOptionActionData",
diff --git a/skyvern/client/types/action_type.py b/skyvern/client/types/action_type.py
index a8105938..1a37282c 100644
--- a/skyvern/client/types/action_type.py
+++ b/skyvern/client/types/action_type.py
@@ -11,6 +11,7 @@ ActionType = typing.Union[
"select_option",
"checkbox",
"wait",
+ "hover",
"null_action",
"solve_captcha",
"terminate",
diff --git a/skyvern/client/types/create_credential_request_credential.py b/skyvern/client/types/create_credential_request_credential.py
index 76d78fd4..c521366a 100644
--- a/skyvern/client/types/create_credential_request_credential.py
+++ b/skyvern/client/types/create_credential_request_credential.py
@@ -4,5 +4,8 @@ import typing
from .non_empty_credit_card_credential import NonEmptyCreditCardCredential
from .non_empty_password_credential import NonEmptyPasswordCredential
+from .secret_credential import SecretCredential
-CreateCredentialRequestCredential = typing.Union[NonEmptyPasswordCredential, NonEmptyCreditCardCredential]
+CreateCredentialRequestCredential = typing.Union[
+ NonEmptyPasswordCredential, NonEmptyCreditCardCredential, SecretCredential
+]
diff --git a/skyvern/client/types/credential_response_credential.py b/skyvern/client/types/credential_response_credential.py
index 43e28d3b..c0fa0303 100644
--- a/skyvern/client/types/credential_response_credential.py
+++ b/skyvern/client/types/credential_response_credential.py
@@ -4,5 +4,8 @@ import typing
from .credit_card_credential_response import CreditCardCredentialResponse
from .password_credential_response import PasswordCredentialResponse
+from .secret_credential_response import SecretCredentialResponse
-CredentialResponseCredential = typing.Union[PasswordCredentialResponse, CreditCardCredentialResponse]
+CredentialResponseCredential = typing.Union[
+ PasswordCredentialResponse, CreditCardCredentialResponse, SecretCredentialResponse
+]
diff --git a/skyvern/client/types/credential_type_output.py b/skyvern/client/types/credential_type_output.py
index 324d9238..9202fc12 100644
--- a/skyvern/client/types/credential_type_output.py
+++ b/skyvern/client/types/credential_type_output.py
@@ -2,4 +2,4 @@
import typing
-CredentialTypeOutput = typing.Union[typing.Literal["password", "credit_card"], typing.Any]
+CredentialTypeOutput = typing.Union[typing.Literal["password", "credit_card", "secret"], typing.Any]
diff --git a/skyvern/client/types/for_loop_block_loop_blocks_item.py b/skyvern/client/types/for_loop_block_loop_blocks_item.py
index d7592317..b4507066 100644
--- a/skyvern/client/types/for_loop_block_loop_blocks_item.py
+++ b/skyvern/client/types/for_loop_block_loop_blocks_item.py
@@ -355,6 +355,7 @@ class ForLoopBlockLoopBlocksItem_HttpRequest(UniversalBaseModel):
url: typing.Optional[str] = None
headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None
body: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
+ files: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None
timeout: typing.Optional[int] = None
follow_redirects: typing.Optional[bool] = None
parameters: typing.Optional[typing.List[HttpRequestBlockParametersItem]] = None
diff --git a/skyvern/client/types/for_loop_block_yaml_loop_blocks_item.py b/skyvern/client/types/for_loop_block_yaml_loop_blocks_item.py
index ac242e6d..ad16d4f9 100644
--- a/skyvern/client/types/for_loop_block_yaml_loop_blocks_item.py
+++ b/skyvern/client/types/for_loop_block_yaml_loop_blocks_item.py
@@ -532,6 +532,7 @@ class ForLoopBlockYamlLoopBlocksItem_HttpRequest(UniversalBaseModel):
url: typing.Optional[str] = None
headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None
body: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
+ files: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None
timeout: typing.Optional[int] = None
follow_redirects: typing.Optional[bool] = None
parameter_keys: typing.Optional[typing.List[str]] = None
diff --git a/skyvern/client/types/http_request_block.py b/skyvern/client/types/http_request_block.py
index f9a9257d..f9b05e15 100644
--- a/skyvern/client/types/http_request_block.py
+++ b/skyvern/client/types/http_request_block.py
@@ -30,6 +30,7 @@ class HttpRequestBlock(UniversalBaseModel):
url: typing.Optional[str] = None
headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None
body: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
+ files: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None
timeout: typing.Optional[int] = None
follow_redirects: typing.Optional[bool] = None
parameters: typing.Optional[typing.List[HttpRequestBlockParametersItem]] = None
diff --git a/skyvern/client/types/http_request_block_yaml.py b/skyvern/client/types/http_request_block_yaml.py
index b3d93566..01544979 100644
--- a/skyvern/client/types/http_request_block_yaml.py
+++ b/skyvern/client/types/http_request_block_yaml.py
@@ -24,6 +24,7 @@ class HttpRequestBlockYaml(UniversalBaseModel):
url: typing.Optional[str] = None
headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None
body: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
+ files: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None
timeout: typing.Optional[int] = None
follow_redirects: typing.Optional[bool] = None
parameter_keys: typing.Optional[typing.List[str]] = None
diff --git a/skyvern/client/types/folder.py b/skyvern/client/types/secret_credential.py
similarity index 52%
rename from skyvern/client/types/folder.py
rename to skyvern/client/types/secret_credential.py
index c3e4ae78..7411b012 100644
--- a/skyvern/client/types/folder.py
+++ b/skyvern/client/types/secret_credential.py
@@ -1,37 +1,26 @@
# This file was auto-generated by Fern from our API Definition.
-import datetime as dt
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
-class Folder(UniversalBaseModel):
+class SecretCredential(UniversalBaseModel):
"""
- Response model for a folder
+ Generic secret credential.
"""
- title: str = pydantic.Field()
+ secret_value: str = pydantic.Field()
"""
- Folder title
+ The secret value
"""
- description: typing.Optional[str] = pydantic.Field(default=None)
+ secret_label: typing.Optional[str] = pydantic.Field(default=None)
"""
- Folder description
+ Optional label describing the secret
"""
- folder_id: str
- organization_id: str
- workflow_count: typing.Optional[int] = pydantic.Field(default=None)
- """
- Number of workflows in this folder
- """
-
- created_at: dt.datetime
- modified_at: dt.datetime
-
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
else:
diff --git a/skyvern/client/types/secret_credential_response.py b/skyvern/client/types/secret_credential_response.py
new file mode 100644
index 00000000..39ee4440
--- /dev/null
+++ b/skyvern/client/types/secret_credential_response.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SecretCredentialResponse(UniversalBaseModel):
+ """
+ Response model for secret credentials.
+ """
+
+ secret_label: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Optional label for the stored secret
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/skyvern/client/types/skyvern_forge_sdk_schemas_credentials_credential_type.py b/skyvern/client/types/skyvern_forge_sdk_schemas_credentials_credential_type.py
index 54351d73..735d67e7 100644
--- a/skyvern/client/types/skyvern_forge_sdk_schemas_credentials_credential_type.py
+++ b/skyvern/client/types/skyvern_forge_sdk_schemas_credentials_credential_type.py
@@ -2,4 +2,6 @@
import typing
-SkyvernForgeSdkSchemasCredentialsCredentialType = typing.Union[typing.Literal["password", "credit_card"], typing.Any]
+SkyvernForgeSdkSchemasCredentialsCredentialType = typing.Union[
+ typing.Literal["password", "credit_card", "secret"], typing.Any
+]
diff --git a/skyvern/client/types/workflow_definition_blocks_item.py b/skyvern/client/types/workflow_definition_blocks_item.py
index 05f5403e..fd18267c 100644
--- a/skyvern/client/types/workflow_definition_blocks_item.py
+++ b/skyvern/client/types/workflow_definition_blocks_item.py
@@ -356,6 +356,7 @@ class WorkflowDefinitionBlocksItem_HttpRequest(UniversalBaseModel):
url: typing.Optional[str] = None
headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None
body: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
+ files: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None
timeout: typing.Optional[int] = None
follow_redirects: typing.Optional[bool] = None
parameters: typing.Optional[typing.List[HttpRequestBlockParametersItem]] = None
diff --git a/skyvern/client/types/workflow_definition_yaml_blocks_item.py b/skyvern/client/types/workflow_definition_yaml_blocks_item.py
index 2d616041..86d04e01 100644
--- a/skyvern/client/types/workflow_definition_yaml_blocks_item.py
+++ b/skyvern/client/types/workflow_definition_yaml_blocks_item.py
@@ -267,6 +267,7 @@ class WorkflowDefinitionYamlBlocksItem_HttpRequest(UniversalBaseModel):
url: typing.Optional[str] = None
headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None
body: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
+ files: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None
timeout: typing.Optional[int] = None
follow_redirects: typing.Optional[bool] = None
parameter_keys: typing.Optional[typing.List[str]] = None
diff --git a/skyvern/client/workflows/__init__.py b/skyvern/client/workflows/__init__.py
deleted file mode 100644
index 5cde0202..00000000
--- a/skyvern/client/workflows/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-# This file was auto-generated by Fern from our API Definition.
-
-# isort: skip_file
-
diff --git a/skyvern/client/workflows/client.py b/skyvern/client/workflows/client.py
deleted file mode 100644
index b091a973..00000000
--- a/skyvern/client/workflows/client.py
+++ /dev/null
@@ -1,596 +0,0 @@
-# This file was auto-generated by Fern from our API Definition.
-
-import typing
-
-from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
-from ..core.request_options import RequestOptions
-from ..types.folder import Folder
-from ..types.workflow import Workflow
-from .raw_client import AsyncRawWorkflowsClient, RawWorkflowsClient
-
-# this is used as the default value for optional parameters
-OMIT = typing.cast(typing.Any, ...)
-
-
-class WorkflowsClient:
- def __init__(self, *, client_wrapper: SyncClientWrapper):
- self._raw_client = RawWorkflowsClient(client_wrapper=client_wrapper)
-
- @property
- def with_raw_response(self) -> RawWorkflowsClient:
- """
- Retrieves a raw implementation of this client that returns raw responses.
-
- Returns
- -------
- RawWorkflowsClient
- """
- return self._raw_client
-
- def get_folders(
- self,
- *,
- page: typing.Optional[int] = None,
- page_size: typing.Optional[int] = None,
- search: typing.Optional[str] = None,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> typing.List[Folder]:
- """
- Get all folders for the organization
-
- Parameters
- ----------
- page : typing.Optional[int]
- Page number
-
- page_size : typing.Optional[int]
- Number of folders per page
-
- search : typing.Optional[str]
- Search folders by title or description
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- typing.List[Folder]
- Successfully retrieved folders
-
- Examples
- --------
- from skyvern import Skyvern
-
- client = Skyvern(
- api_key="YOUR_API_KEY",
- )
- client.workflows.get_folders(
- page=1,
- page_size=1,
- search="search",
- )
- """
- _response = self._raw_client.get_folders(
- page=page, page_size=page_size, search=search, request_options=request_options
- )
- return _response.data
-
- def create_folder(
- self,
- *,
- title: str,
- description: typing.Optional[str] = OMIT,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> Folder:
- """
- Create a new folder to organize workflows
-
- Parameters
- ----------
- title : str
- Folder title
-
- description : typing.Optional[str]
- Folder description
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- Folder
- Successfully created folder
-
- Examples
- --------
- from skyvern import Skyvern
-
- client = Skyvern(
- api_key="YOUR_API_KEY",
- )
- client.workflows.create_folder(
- title="title",
- )
- """
- _response = self._raw_client.create_folder(
- title=title, description=description, request_options=request_options
- )
- return _response.data
-
- def get_folder(self, folder_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Folder:
- """
- Get a specific folder by ID
-
- Parameters
- ----------
- folder_id : str
- Folder ID
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- Folder
- Successfully retrieved folder
-
- Examples
- --------
- from skyvern import Skyvern
-
- client = Skyvern(
- api_key="YOUR_API_KEY",
- )
- client.workflows.get_folder(
- folder_id="fld_123",
- )
- """
- _response = self._raw_client.get_folder(folder_id, request_options=request_options)
- return _response.data
-
- def update_folder(
- self,
- folder_id: str,
- *,
- title: typing.Optional[str] = OMIT,
- description: typing.Optional[str] = OMIT,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> Folder:
- """
- Update a folder's title or description
-
- Parameters
- ----------
- folder_id : str
- Folder ID
-
- title : typing.Optional[str]
- Folder title
-
- description : typing.Optional[str]
- Folder description
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- Folder
- Successfully updated folder
-
- Examples
- --------
- from skyvern import Skyvern
-
- client = Skyvern(
- api_key="YOUR_API_KEY",
- )
- client.workflows.update_folder(
- folder_id="fld_123",
- )
- """
- _response = self._raw_client.update_folder(
- folder_id, title=title, description=description, request_options=request_options
- )
- return _response.data
-
- def delete_folder(
- self,
- folder_id: str,
- *,
- delete_workflows: typing.Optional[bool] = None,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> typing.Dict[str, typing.Optional[typing.Any]]:
- """
- Delete a folder. Optionally delete all workflows in the folder.
-
- Parameters
- ----------
- folder_id : str
- Folder ID
-
- delete_workflows : typing.Optional[bool]
- If true, also delete all workflows in this folder
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- typing.Dict[str, typing.Optional[typing.Any]]
- Successfully deleted folder
-
- Examples
- --------
- from skyvern import Skyvern
-
- client = Skyvern(
- api_key="YOUR_API_KEY",
- )
- client.workflows.delete_folder(
- folder_id="fld_123",
- delete_workflows=True,
- )
- """
- _response = self._raw_client.delete_folder(
- folder_id, delete_workflows=delete_workflows, request_options=request_options
- )
- return _response.data
-
- def update_workflow_folder(
- self,
- workflow_permanent_id: str,
- *,
- folder_id: typing.Optional[str] = OMIT,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> Workflow:
- """
- Update a workflow's folder assignment for the latest version
-
- Parameters
- ----------
- workflow_permanent_id : str
- Workflow permanent ID
-
- folder_id : typing.Optional[str]
- Folder ID to assign workflow to. Set to null to remove from folder.
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- Workflow
- Successfully updated workflow folder
-
- Examples
- --------
- from skyvern import Skyvern
-
- client = Skyvern(
- api_key="YOUR_API_KEY",
- )
- client.workflows.update_workflow_folder(
- workflow_permanent_id="wpid_123",
- )
- """
- _response = self._raw_client.update_workflow_folder(
- workflow_permanent_id, folder_id=folder_id, request_options=request_options
- )
- return _response.data
-
-
-class AsyncWorkflowsClient:
- def __init__(self, *, client_wrapper: AsyncClientWrapper):
- self._raw_client = AsyncRawWorkflowsClient(client_wrapper=client_wrapper)
-
- @property
- def with_raw_response(self) -> AsyncRawWorkflowsClient:
- """
- Retrieves a raw implementation of this client that returns raw responses.
-
- Returns
- -------
- AsyncRawWorkflowsClient
- """
- return self._raw_client
-
- async def get_folders(
- self,
- *,
- page: typing.Optional[int] = None,
- page_size: typing.Optional[int] = None,
- search: typing.Optional[str] = None,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> typing.List[Folder]:
- """
- Get all folders for the organization
-
- Parameters
- ----------
- page : typing.Optional[int]
- Page number
-
- page_size : typing.Optional[int]
- Number of folders per page
-
- search : typing.Optional[str]
- Search folders by title or description
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- typing.List[Folder]
- Successfully retrieved folders
-
- Examples
- --------
- import asyncio
-
- from skyvern import AsyncSkyvern
-
- client = AsyncSkyvern(
- api_key="YOUR_API_KEY",
- )
-
-
- async def main() -> None:
- await client.workflows.get_folders(
- page=1,
- page_size=1,
- search="search",
- )
-
-
- asyncio.run(main())
- """
- _response = await self._raw_client.get_folders(
- page=page, page_size=page_size, search=search, request_options=request_options
- )
- return _response.data
-
- async def create_folder(
- self,
- *,
- title: str,
- description: typing.Optional[str] = OMIT,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> Folder:
- """
- Create a new folder to organize workflows
-
- Parameters
- ----------
- title : str
- Folder title
-
- description : typing.Optional[str]
- Folder description
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- Folder
- Successfully created folder
-
- Examples
- --------
- import asyncio
-
- from skyvern import AsyncSkyvern
-
- client = AsyncSkyvern(
- api_key="YOUR_API_KEY",
- )
-
-
- async def main() -> None:
- await client.workflows.create_folder(
- title="title",
- )
-
-
- asyncio.run(main())
- """
- _response = await self._raw_client.create_folder(
- title=title, description=description, request_options=request_options
- )
- return _response.data
-
- async def get_folder(self, folder_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Folder:
- """
- Get a specific folder by ID
-
- Parameters
- ----------
- folder_id : str
- Folder ID
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- Folder
- Successfully retrieved folder
-
- Examples
- --------
- import asyncio
-
- from skyvern import AsyncSkyvern
-
- client = AsyncSkyvern(
- api_key="YOUR_API_KEY",
- )
-
-
- async def main() -> None:
- await client.workflows.get_folder(
- folder_id="fld_123",
- )
-
-
- asyncio.run(main())
- """
- _response = await self._raw_client.get_folder(folder_id, request_options=request_options)
- return _response.data
-
- async def update_folder(
- self,
- folder_id: str,
- *,
- title: typing.Optional[str] = OMIT,
- description: typing.Optional[str] = OMIT,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> Folder:
- """
- Update a folder's title or description
-
- Parameters
- ----------
- folder_id : str
- Folder ID
-
- title : typing.Optional[str]
- Folder title
-
- description : typing.Optional[str]
- Folder description
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- Folder
- Successfully updated folder
-
- Examples
- --------
- import asyncio
-
- from skyvern import AsyncSkyvern
-
- client = AsyncSkyvern(
- api_key="YOUR_API_KEY",
- )
-
-
- async def main() -> None:
- await client.workflows.update_folder(
- folder_id="fld_123",
- )
-
-
- asyncio.run(main())
- """
- _response = await self._raw_client.update_folder(
- folder_id, title=title, description=description, request_options=request_options
- )
- return _response.data
-
- async def delete_folder(
- self,
- folder_id: str,
- *,
- delete_workflows: typing.Optional[bool] = None,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> typing.Dict[str, typing.Optional[typing.Any]]:
- """
- Delete a folder. Optionally delete all workflows in the folder.
-
- Parameters
- ----------
- folder_id : str
- Folder ID
-
- delete_workflows : typing.Optional[bool]
- If true, also delete all workflows in this folder
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- typing.Dict[str, typing.Optional[typing.Any]]
- Successfully deleted folder
-
- Examples
- --------
- import asyncio
-
- from skyvern import AsyncSkyvern
-
- client = AsyncSkyvern(
- api_key="YOUR_API_KEY",
- )
-
-
- async def main() -> None:
- await client.workflows.delete_folder(
- folder_id="fld_123",
- delete_workflows=True,
- )
-
-
- asyncio.run(main())
- """
- _response = await self._raw_client.delete_folder(
- folder_id, delete_workflows=delete_workflows, request_options=request_options
- )
- return _response.data
-
- async def update_workflow_folder(
- self,
- workflow_permanent_id: str,
- *,
- folder_id: typing.Optional[str] = OMIT,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> Workflow:
- """
- Update a workflow's folder assignment for the latest version
-
- Parameters
- ----------
- workflow_permanent_id : str
- Workflow permanent ID
-
- folder_id : typing.Optional[str]
- Folder ID to assign workflow to. Set to null to remove from folder.
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- Workflow
- Successfully updated workflow folder
-
- Examples
- --------
- import asyncio
-
- from skyvern import AsyncSkyvern
-
- client = AsyncSkyvern(
- api_key="YOUR_API_KEY",
- )
-
-
- async def main() -> None:
- await client.workflows.update_workflow_folder(
- workflow_permanent_id="wpid_123",
- )
-
-
- asyncio.run(main())
- """
- _response = await self._raw_client.update_workflow_folder(
- workflow_permanent_id, folder_id=folder_id, request_options=request_options
- )
- return _response.data
diff --git a/skyvern/client/workflows/raw_client.py b/skyvern/client/workflows/raw_client.py
deleted file mode 100644
index 23c97c2c..00000000
--- a/skyvern/client/workflows/raw_client.py
+++ /dev/null
@@ -1,909 +0,0 @@
-# This file was auto-generated by Fern from our API Definition.
-
-import typing
-from json.decoder import JSONDecodeError
-
-from ..core.api_error import ApiError
-from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
-from ..core.http_response import AsyncHttpResponse, HttpResponse
-from ..core.jsonable_encoder import jsonable_encoder
-from ..core.pydantic_utilities import parse_obj_as
-from ..core.request_options import RequestOptions
-from ..errors.bad_request_error import BadRequestError
-from ..errors.not_found_error import NotFoundError
-from ..errors.unprocessable_entity_error import UnprocessableEntityError
-from ..types.folder import Folder
-from ..types.workflow import Workflow
-
-# this is used as the default value for optional parameters
-OMIT = typing.cast(typing.Any, ...)
-
-
-class RawWorkflowsClient:
- def __init__(self, *, client_wrapper: SyncClientWrapper):
- self._client_wrapper = client_wrapper
-
- def get_folders(
- self,
- *,
- page: typing.Optional[int] = None,
- page_size: typing.Optional[int] = None,
- search: typing.Optional[str] = None,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> HttpResponse[typing.List[Folder]]:
- """
- Get all folders for the organization
-
- Parameters
- ----------
- page : typing.Optional[int]
- Page number
-
- page_size : typing.Optional[int]
- Number of folders per page
-
- search : typing.Optional[str]
- Search folders by title or description
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- HttpResponse[typing.List[Folder]]
- Successfully retrieved folders
- """
- _response = self._client_wrapper.httpx_client.request(
- "v1/folders",
- method="GET",
- params={
- "page": page,
- "page_size": page_size,
- "search": search,
- },
- request_options=request_options,
- )
- try:
- if 200 <= _response.status_code < 300:
- _data = typing.cast(
- typing.List[Folder],
- parse_obj_as(
- type_=typing.List[Folder], # type: ignore
- object_=_response.json(),
- ),
- )
- return HttpResponse(response=_response, data=_data)
- if _response.status_code == 422:
- raise UnprocessableEntityError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- _response_json = _response.json()
- except JSONDecodeError:
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
-
- def create_folder(
- self,
- *,
- title: str,
- description: typing.Optional[str] = OMIT,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> HttpResponse[Folder]:
- """
- Create a new folder to organize workflows
-
- Parameters
- ----------
- title : str
- Folder title
-
- description : typing.Optional[str]
- Folder description
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- HttpResponse[Folder]
- Successfully created folder
- """
- _response = self._client_wrapper.httpx_client.request(
- "v1/folders",
- method="POST",
- json={
- "title": title,
- "description": description,
- },
- headers={
- "content-type": "application/json",
- },
- request_options=request_options,
- omit=OMIT,
- )
- try:
- if 200 <= _response.status_code < 300:
- _data = typing.cast(
- Folder,
- parse_obj_as(
- type_=Folder, # type: ignore
- object_=_response.json(),
- ),
- )
- return HttpResponse(response=_response, data=_data)
- if _response.status_code == 400:
- raise BadRequestError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- if _response.status_code == 422:
- raise UnprocessableEntityError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- _response_json = _response.json()
- except JSONDecodeError:
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
-
- def get_folder(
- self, folder_id: str, *, request_options: typing.Optional[RequestOptions] = None
- ) -> HttpResponse[Folder]:
- """
- Get a specific folder by ID
-
- Parameters
- ----------
- folder_id : str
- Folder ID
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- HttpResponse[Folder]
- Successfully retrieved folder
- """
- _response = self._client_wrapper.httpx_client.request(
- f"v1/folders/{jsonable_encoder(folder_id)}",
- method="GET",
- request_options=request_options,
- )
- try:
- if 200 <= _response.status_code < 300:
- _data = typing.cast(
- Folder,
- parse_obj_as(
- type_=Folder, # type: ignore
- object_=_response.json(),
- ),
- )
- return HttpResponse(response=_response, data=_data)
- if _response.status_code == 404:
- raise NotFoundError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- if _response.status_code == 422:
- raise UnprocessableEntityError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- _response_json = _response.json()
- except JSONDecodeError:
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
-
- def update_folder(
- self,
- folder_id: str,
- *,
- title: typing.Optional[str] = OMIT,
- description: typing.Optional[str] = OMIT,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> HttpResponse[Folder]:
- """
- Update a folder's title or description
-
- Parameters
- ----------
- folder_id : str
- Folder ID
-
- title : typing.Optional[str]
- Folder title
-
- description : typing.Optional[str]
- Folder description
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- HttpResponse[Folder]
- Successfully updated folder
- """
- _response = self._client_wrapper.httpx_client.request(
- f"v1/folders/{jsonable_encoder(folder_id)}",
- method="PUT",
- json={
- "title": title,
- "description": description,
- },
- headers={
- "content-type": "application/json",
- },
- request_options=request_options,
- omit=OMIT,
- )
- try:
- if 200 <= _response.status_code < 300:
- _data = typing.cast(
- Folder,
- parse_obj_as(
- type_=Folder, # type: ignore
- object_=_response.json(),
- ),
- )
- return HttpResponse(response=_response, data=_data)
- if _response.status_code == 404:
- raise NotFoundError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- if _response.status_code == 422:
- raise UnprocessableEntityError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- _response_json = _response.json()
- except JSONDecodeError:
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
-
- def delete_folder(
- self,
- folder_id: str,
- *,
- delete_workflows: typing.Optional[bool] = None,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> HttpResponse[typing.Dict[str, typing.Optional[typing.Any]]]:
- """
- Delete a folder. Optionally delete all workflows in the folder.
-
- Parameters
- ----------
- folder_id : str
- Folder ID
-
- delete_workflows : typing.Optional[bool]
- If true, also delete all workflows in this folder
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- HttpResponse[typing.Dict[str, typing.Optional[typing.Any]]]
- Successfully deleted folder
- """
- _response = self._client_wrapper.httpx_client.request(
- f"v1/folders/{jsonable_encoder(folder_id)}",
- method="DELETE",
- params={
- "delete_workflows": delete_workflows,
- },
- request_options=request_options,
- )
- try:
- if 200 <= _response.status_code < 300:
- _data = typing.cast(
- typing.Dict[str, typing.Optional[typing.Any]],
- parse_obj_as(
- type_=typing.Dict[str, typing.Optional[typing.Any]], # type: ignore
- object_=_response.json(),
- ),
- )
- return HttpResponse(response=_response, data=_data)
- if _response.status_code == 404:
- raise NotFoundError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- if _response.status_code == 422:
- raise UnprocessableEntityError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- _response_json = _response.json()
- except JSONDecodeError:
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
-
- def update_workflow_folder(
- self,
- workflow_permanent_id: str,
- *,
- folder_id: typing.Optional[str] = OMIT,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> HttpResponse[Workflow]:
- """
- Update a workflow's folder assignment for the latest version
-
- Parameters
- ----------
- workflow_permanent_id : str
- Workflow permanent ID
-
- folder_id : typing.Optional[str]
- Folder ID to assign workflow to. Set to null to remove from folder.
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- HttpResponse[Workflow]
- Successfully updated workflow folder
- """
- _response = self._client_wrapper.httpx_client.request(
- f"v1/workflows/{jsonable_encoder(workflow_permanent_id)}/folder",
- method="PUT",
- json={
- "folder_id": folder_id,
- },
- headers={
- "content-type": "application/json",
- },
- request_options=request_options,
- omit=OMIT,
- )
- try:
- if 200 <= _response.status_code < 300:
- _data = typing.cast(
- Workflow,
- parse_obj_as(
- type_=Workflow, # type: ignore
- object_=_response.json(),
- ),
- )
- return HttpResponse(response=_response, data=_data)
- if _response.status_code == 400:
- raise BadRequestError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- if _response.status_code == 404:
- raise NotFoundError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- if _response.status_code == 422:
- raise UnprocessableEntityError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- _response_json = _response.json()
- except JSONDecodeError:
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
-
-
-class AsyncRawWorkflowsClient:
- def __init__(self, *, client_wrapper: AsyncClientWrapper):
- self._client_wrapper = client_wrapper
-
- async def get_folders(
- self,
- *,
- page: typing.Optional[int] = None,
- page_size: typing.Optional[int] = None,
- search: typing.Optional[str] = None,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[typing.List[Folder]]:
- """
- Get all folders for the organization
-
- Parameters
- ----------
- page : typing.Optional[int]
- Page number
-
- page_size : typing.Optional[int]
- Number of folders per page
-
- search : typing.Optional[str]
- Search folders by title or description
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- AsyncHttpResponse[typing.List[Folder]]
- Successfully retrieved folders
- """
- _response = await self._client_wrapper.httpx_client.request(
- "v1/folders",
- method="GET",
- params={
- "page": page,
- "page_size": page_size,
- "search": search,
- },
- request_options=request_options,
- )
- try:
- if 200 <= _response.status_code < 300:
- _data = typing.cast(
- typing.List[Folder],
- parse_obj_as(
- type_=typing.List[Folder], # type: ignore
- object_=_response.json(),
- ),
- )
- return AsyncHttpResponse(response=_response, data=_data)
- if _response.status_code == 422:
- raise UnprocessableEntityError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- _response_json = _response.json()
- except JSONDecodeError:
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
-
- async def create_folder(
- self,
- *,
- title: str,
- description: typing.Optional[str] = OMIT,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[Folder]:
- """
- Create a new folder to organize workflows
-
- Parameters
- ----------
- title : str
- Folder title
-
- description : typing.Optional[str]
- Folder description
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- AsyncHttpResponse[Folder]
- Successfully created folder
- """
- _response = await self._client_wrapper.httpx_client.request(
- "v1/folders",
- method="POST",
- json={
- "title": title,
- "description": description,
- },
- headers={
- "content-type": "application/json",
- },
- request_options=request_options,
- omit=OMIT,
- )
- try:
- if 200 <= _response.status_code < 300:
- _data = typing.cast(
- Folder,
- parse_obj_as(
- type_=Folder, # type: ignore
- object_=_response.json(),
- ),
- )
- return AsyncHttpResponse(response=_response, data=_data)
- if _response.status_code == 400:
- raise BadRequestError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- if _response.status_code == 422:
- raise UnprocessableEntityError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- _response_json = _response.json()
- except JSONDecodeError:
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
-
- async def get_folder(
- self, folder_id: str, *, request_options: typing.Optional[RequestOptions] = None
- ) -> AsyncHttpResponse[Folder]:
- """
- Get a specific folder by ID
-
- Parameters
- ----------
- folder_id : str
- Folder ID
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- AsyncHttpResponse[Folder]
- Successfully retrieved folder
- """
- _response = await self._client_wrapper.httpx_client.request(
- f"v1/folders/{jsonable_encoder(folder_id)}",
- method="GET",
- request_options=request_options,
- )
- try:
- if 200 <= _response.status_code < 300:
- _data = typing.cast(
- Folder,
- parse_obj_as(
- type_=Folder, # type: ignore
- object_=_response.json(),
- ),
- )
- return AsyncHttpResponse(response=_response, data=_data)
- if _response.status_code == 404:
- raise NotFoundError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- if _response.status_code == 422:
- raise UnprocessableEntityError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- _response_json = _response.json()
- except JSONDecodeError:
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
-
- async def update_folder(
- self,
- folder_id: str,
- *,
- title: typing.Optional[str] = OMIT,
- description: typing.Optional[str] = OMIT,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[Folder]:
- """
- Update a folder's title or description
-
- Parameters
- ----------
- folder_id : str
- Folder ID
-
- title : typing.Optional[str]
- Folder title
-
- description : typing.Optional[str]
- Folder description
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- AsyncHttpResponse[Folder]
- Successfully updated folder
- """
- _response = await self._client_wrapper.httpx_client.request(
- f"v1/folders/{jsonable_encoder(folder_id)}",
- method="PUT",
- json={
- "title": title,
- "description": description,
- },
- headers={
- "content-type": "application/json",
- },
- request_options=request_options,
- omit=OMIT,
- )
- try:
- if 200 <= _response.status_code < 300:
- _data = typing.cast(
- Folder,
- parse_obj_as(
- type_=Folder, # type: ignore
- object_=_response.json(),
- ),
- )
- return AsyncHttpResponse(response=_response, data=_data)
- if _response.status_code == 404:
- raise NotFoundError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- if _response.status_code == 422:
- raise UnprocessableEntityError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- _response_json = _response.json()
- except JSONDecodeError:
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
-
- async def delete_folder(
- self,
- folder_id: str,
- *,
- delete_workflows: typing.Optional[bool] = None,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[typing.Dict[str, typing.Optional[typing.Any]]]:
- """
- Delete a folder. Optionally delete all workflows in the folder.
-
- Parameters
- ----------
- folder_id : str
- Folder ID
-
- delete_workflows : typing.Optional[bool]
- If true, also delete all workflows in this folder
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- AsyncHttpResponse[typing.Dict[str, typing.Optional[typing.Any]]]
- Successfully deleted folder
- """
- _response = await self._client_wrapper.httpx_client.request(
- f"v1/folders/{jsonable_encoder(folder_id)}",
- method="DELETE",
- params={
- "delete_workflows": delete_workflows,
- },
- request_options=request_options,
- )
- try:
- if 200 <= _response.status_code < 300:
- _data = typing.cast(
- typing.Dict[str, typing.Optional[typing.Any]],
- parse_obj_as(
- type_=typing.Dict[str, typing.Optional[typing.Any]], # type: ignore
- object_=_response.json(),
- ),
- )
- return AsyncHttpResponse(response=_response, data=_data)
- if _response.status_code == 404:
- raise NotFoundError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- if _response.status_code == 422:
- raise UnprocessableEntityError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- _response_json = _response.json()
- except JSONDecodeError:
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
-
- async def update_workflow_folder(
- self,
- workflow_permanent_id: str,
- *,
- folder_id: typing.Optional[str] = OMIT,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[Workflow]:
- """
- Update a workflow's folder assignment for the latest version
-
- Parameters
- ----------
- workflow_permanent_id : str
- Workflow permanent ID
-
- folder_id : typing.Optional[str]
- Folder ID to assign workflow to. Set to null to remove from folder.
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- AsyncHttpResponse[Workflow]
- Successfully updated workflow folder
- """
- _response = await self._client_wrapper.httpx_client.request(
- f"v1/workflows/{jsonable_encoder(workflow_permanent_id)}/folder",
- method="PUT",
- json={
- "folder_id": folder_id,
- },
- headers={
- "content-type": "application/json",
- },
- request_options=request_options,
- omit=OMIT,
- )
- try:
- if 200 <= _response.status_code < 300:
- _data = typing.cast(
- Workflow,
- parse_obj_as(
- type_=Workflow, # type: ignore
- object_=_response.json(),
- ),
- )
- return AsyncHttpResponse(response=_response, data=_data)
- if _response.status_code == 400:
- raise BadRequestError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- if _response.status_code == 404:
- raise NotFoundError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- if _response.status_code == 422:
- raise UnprocessableEntityError(
- headers=dict(_response.headers),
- body=typing.cast(
- typing.Optional[typing.Any],
- parse_obj_as(
- type_=typing.Optional[typing.Any], # type: ignore
- object_=_response.json(),
- ),
- ),
- )
- _response_json = _response.json()
- except JSONDecodeError:
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/uv.lock b/uv.lock
index cc64a2e7..c381eebb 100644
--- a/uv.lock
+++ b/uv.lock
@@ -5029,7 +5029,7 @@ wheels = [
[[package]]
name = "skyvern"
-version = "1.0.2"
+version = "1.0.3"
source = { editable = "." }
dependencies = [
{ name = "aioboto3" },