client.defineJob({
  id: "background-poll-job",
  name: "Background Poll Job",
  version: "0.0.1",
  trigger: invokeTrigger({
    schema: z.object({ url: z.string().url() }),
  }),
  run: async (payload, io, ctx) => {
    const result = await io.backgroundPoll<{ foo: string }>("poll", {
      url: payload.url,
      interval: 10, // every 10 seconds
      timeout: 300, // stop polling after 5 minutes
      responseFilter: {
        // stop polling once this filter matches
        status: [200],
        body: {
          status: ["SUCCESS"],
        },
      },
    });
  },
});

Parameters

cacheKey
string
required
Should be a stable and unique cache key inside the run(). See resumability for more information.
url
string
required
The url to fetch.
interval
number
required
The interval in seconds to wait between requests. Minimum interval is 10 seconds and maximum is 5 minutes.
timeout
number
required
The timeout in seconds before aborting the polling. Minimum timeout is 30 seconds and maximum is 1 hour.
requestInit
RequestInit
Options for the fetch request
responseFilter
ResponseFilter
Allows you to filter the response to determine when to stop polling.
requestTimeout
object
An optional object to specify a timeout for each individual request.

Returns

A Promise that resolves with the JSON response body of the matching background fetch request. You can specify the type of the response body as a generic parameter.
client.defineJob({
  id: "background-poll-job",
  name: "Background Poll Job",
  version: "0.0.1",
  trigger: invokeTrigger({
    schema: z.object({ url: z.string().url() }),
  }),
  run: async (payload, io, ctx) => {
    const result = await io.backgroundPoll<{ foo: string }>("poll", {
      url: payload.url,
      interval: 10, // every 10 seconds
      timeout: 300, // stop polling after 5 minutes
      responseFilter: {
        // stop polling once this filter matches
        status: [200],
        body: {
          status: ["SUCCESS"],
        },
      },
    });
  },
});