Files
triggerdotdev--trigger.dev/docs/sdk/io/backgroundfetch.mdx
2023-08-03 09:53:15 +01:00

147 lines
4.5 KiB
Plaintext

---
title: "io.backgroundFetch()"
sidebarTitle: "backgroundFetch()"
description: "`io.backgroundFetch()` allows you to fetch data from a URL that can take longer that the serverless timeout. The actual `fetch` request is performed on the Trigger.dev platform, and the response is sent back to you. An example use case is fetching data from a slow API, like some AI endpoints."
---
This is used inside the OpenAI Integration for Tasks like `backgroundCreateChatCompletion` and `backgroundCreateCompletion`.
## Parameters
<Snippet file="stable-key-param.mdx" />
<ResponseField name="url" type="string" required>
The url to fetch.
</ResponseField>
<ResponseField name="options" type="object">
Options for the request
<Expandable title="options" defaultOpen>
<ResponseField name="method" type="string">
The HTTP method to use for the request.
</ResponseField>
<ResponseField name="headers" type="object">
Any headers to send with the request. Note that you can use [redactString](sdk/redactString) to
prevent sensitive information from being stored (e.g. in the logs), like API keys and tokens.
</ResponseField>
<ResponseField name="body" type="string | ArrayBuffer">
The body of the request.
</ResponseField>
</Expandable>
<ResponseField name="retry options" type="object">
An object where the key is a status code pattern and the value is a retrying strategy. Supported patterns are:
- Specific status codes: 429
- Ranges: 500-599
- Wildcards: 2xx, 3xx, 4xx, 5xx
```ts
{
"500-599": {
strategy: "backoff",
limit: 5,
minTimeoutInMs: 1000,
maxTimeoutInMs: 30000,
factor: 1.8,
randomize: true,
},
"429": {
strategy: "backoff",
limit: 10,
minTimeoutInMs: 1000,
maxTimeoutInMs: 60000,
factor: 2,
randomize: true,
},
}
```
An individual retrying strategy can be one of two types:
- `backoff`: Retries the request with an exponential backoff.
- `headers`: Retries the request using info from the response headers.
<Expandable title="backoff strategy">
<ResponseField name="type" type="backoff" required>
The `backoff` strategy retries the request with an exponential backoff.
</ResponseField>
<ResponseField name="limit" type="number">
The maximum number of times to retry the request.
</ResponseField>
<ResponseField name="minTimeoutInMs" type="number">
The minimum amount of time to wait before retrying the request.
</ResponseField>
<ResponseField name="maxTimeoutInMs" type="number">
The maximum amount of time to wait before retrying the request.
</ResponseField>
<ResponseField name="factor" type="number">
The exponential factor to use when calculating the next retry time.
</ResponseField>
<ResponseField name="randomize" type="boolean">
Whether to randomize the retry time.
</ResponseField>
</Expandable>
<Expandable title="headers strategy">
<ResponseField name="type" type="headers" required>
The `headers` strategy retries the request using info from the response headers.
</ResponseField>
<ResponseField name="limitHeader" type="string">
The header to use to determine the maximum number of times to retry the request.
</ResponseField>
<ResponseField name="remainingHeader" type="string">
The header to use to determine the number of remaining retries.
</ResponseField>
<ResponseField name="resetHeader" type="string">
The header to use to determine the time when the number of remaining retries will be reset.
</ResponseField>
</Expandable>
</ResponseField>
</ResponseField>
## Returns
A `Promise` that resolves after the specified amount of time.
<RequestExample>
```typescript backgroundFetch example
client.defineJob({
id: "background-fetch-job",
name: "Background fetch Job",
version: "0.0.1",
trigger: eventTrigger({
name: "example.event",
}),
run: async (payload, io, ctx) => {
const response = io.backgroundFetch<CreateChatCompetionResponseData>(
"fetch-some-data",
"https://example.com/api/endpoint",
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: redactString`Bearer ${auth.apiKey}`,
},
body: JSON.stringify({ foo: "bar" }),
},
{
"429": {
strategy: "backoff",
limit: 10,
minTimeoutInMs: 1000,
maxTimeoutInMs: 60000,
factor: 2,
randomize: true,
},
}
);
return response;
},
});
```
</RequestExample>