Generate Fern TypeSscript SDK (#3785)
This commit is contained in:
committed by
GitHub
parent
d55b9637c4
commit
2062adac66
183
skyvern-ts/client/README.md
Normal file
183
skyvern-ts/client/README.md
Normal file
@@ -0,0 +1,183 @@
|
||||
# Skyvern TypeScript Library
|
||||
|
||||
[](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=https%3A%2F%2Fgithub.com%2FSkyvern-AI%2Fskyvern-typescript)
|
||||
[](https://www.npmjs.com/package/@skyvern/client)
|
||||
|
||||
The Skyvern TypeScript library provides convenient access to the Skyvern APIs from TypeScript.
|
||||
|
||||
## Installation
|
||||
|
||||
```sh
|
||||
npm i -s @skyvern/client
|
||||
```
|
||||
|
||||
## Reference
|
||||
|
||||
A full reference for this library is available [here](https://github.com/Skyvern-AI/skyvern-typescript/blob/HEAD/./reference.md).
|
||||
|
||||
## Usage
|
||||
|
||||
Instantiate and use the client with the following:
|
||||
|
||||
```typescript
|
||||
import { SkyvernClient } from "@skyvern/client";
|
||||
|
||||
const client = new SkyvernClient({ xApiKey: "YOUR_X_API_KEY", apiKey: "YOUR_API_KEY" });
|
||||
await client.runTask({
|
||||
"x-user-agent": "x-user-agent",
|
||||
body: {
|
||||
prompt: "Find the top 3 posts on Hacker News."
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
## Request And Response Types
|
||||
|
||||
The SDK exports all request and response types as TypeScript interfaces. Simply import them with the
|
||||
following namespace:
|
||||
|
||||
```typescript
|
||||
import { Skyvern } from "@skyvern/client";
|
||||
|
||||
const request: Skyvern.RunTaskRequest = {
|
||||
...
|
||||
};
|
||||
```
|
||||
|
||||
## Exception Handling
|
||||
|
||||
When the API returns a non-success status code (4xx or 5xx response), a subclass of the following error
|
||||
will be thrown.
|
||||
|
||||
```typescript
|
||||
import { SkyvernError } from "@skyvern/client";
|
||||
|
||||
try {
|
||||
await client.runTask(...);
|
||||
} catch (err) {
|
||||
if (err instanceof SkyvernError) {
|
||||
console.log(err.statusCode);
|
||||
console.log(err.message);
|
||||
console.log(err.body);
|
||||
console.log(err.rawResponse);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Advanced
|
||||
|
||||
### Additional Headers
|
||||
|
||||
If you would like to send additional headers as part of the request, use the `headers` request option.
|
||||
|
||||
```typescript
|
||||
const response = await client.runTask(..., {
|
||||
headers: {
|
||||
'X-Custom-Header': 'custom value'
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
### Additional Query String Parameters
|
||||
|
||||
If you would like to send additional query string parameters as part of the request, use the `queryParams` request option.
|
||||
|
||||
```typescript
|
||||
const response = await client.runTask(..., {
|
||||
queryParams: {
|
||||
'customQueryParamKey': 'custom query param value'
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
### Retries
|
||||
|
||||
The SDK is instrumented with automatic retries with exponential backoff. A request will be retried as long
|
||||
as the request is deemed retryable and the number of retry attempts has not grown larger than the configured
|
||||
retry limit (default: 2).
|
||||
|
||||
A request is deemed retryable when any of the following HTTP status codes is returned:
|
||||
|
||||
- [408](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/408) (Timeout)
|
||||
- [429](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429) (Too Many Requests)
|
||||
- [5XX](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500) (Internal Server Errors)
|
||||
|
||||
Use the `maxRetries` request option to configure this behavior.
|
||||
|
||||
```typescript
|
||||
const response = await client.runTask(..., {
|
||||
maxRetries: 0 // override maxRetries at the request level
|
||||
});
|
||||
```
|
||||
|
||||
### Timeouts
|
||||
|
||||
The SDK defaults to a 60 second timeout. Use the `timeoutInSeconds` option to configure this behavior.
|
||||
|
||||
```typescript
|
||||
const response = await client.runTask(..., {
|
||||
timeoutInSeconds: 30 // override timeout to 30s
|
||||
});
|
||||
```
|
||||
|
||||
### Aborting Requests
|
||||
|
||||
The SDK allows users to abort requests at any point by passing in an abort signal.
|
||||
|
||||
```typescript
|
||||
const controller = new AbortController();
|
||||
const response = await client.runTask(..., {
|
||||
abortSignal: controller.signal
|
||||
});
|
||||
controller.abort(); // aborts the request
|
||||
```
|
||||
|
||||
### Access Raw Response Data
|
||||
|
||||
The SDK provides access to raw response data, including headers, through the `.withRawResponse()` method.
|
||||
The `.withRawResponse()` method returns a promise that results to an object with a `data` and a `rawResponse` property.
|
||||
|
||||
```typescript
|
||||
const { data, rawResponse } = await client.runTask(...).withRawResponse();
|
||||
|
||||
console.log(data);
|
||||
console.log(rawResponse.headers['X-My-Header']);
|
||||
```
|
||||
|
||||
### Runtime Compatibility
|
||||
|
||||
|
||||
The SDK works in the following runtimes:
|
||||
|
||||
|
||||
|
||||
- Node.js 18+
|
||||
- Vercel
|
||||
- Cloudflare Workers
|
||||
- Deno v1.25+
|
||||
- Bun 1.0+
|
||||
- React Native
|
||||
|
||||
### Customizing Fetch Client
|
||||
|
||||
The SDK provides a way for you to customize the underlying HTTP client / Fetch function. If you're running in an
|
||||
unsupported environment, this provides a way for you to break glass and ensure the SDK works.
|
||||
|
||||
```typescript
|
||||
import { SkyvernClient } from "@skyvern/client";
|
||||
|
||||
const client = new SkyvernClient({
|
||||
...
|
||||
fetcher: // provide your implementation here
|
||||
});
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
While we value open-source contributions to this SDK, this library is generated programmatically.
|
||||
Additions made directly to this library would have to be moved over to our generation code,
|
||||
otherwise they would be overwritten upon the next generated release. Feel free to open a PR as
|
||||
a proof of concept, but know that we will not be able to merge it as-is. We suggest opening
|
||||
an issue first to discuss with us!
|
||||
|
||||
On the other hand, contributions to the README are always very welcome!
|
||||
Reference in New Issue
Block a user