@vercel/functions API Reference
Learn about available APIs when working with Vercel Functions.- Install the
@vercel/functions
package:
pnpm i @vercel/functions
- Import the
@vercel/functions
package:
import { waitUntil } from '@vercel/functions';
export function GET() {
...
}
For OIDC methods, import @vercel/functions/oidc
Description: Extends the lifetime of the request handler for the lifetime of the given Promise. The waitUntil()
method enqueues an asynchronous task to be performed during the lifecycle of the request. You can use it for anything that can be done after the response is sent, such as logging, sending analytics, or updating a cache, without blocking the response from being sent. waitUntil()
is available in the Node.js and Edge Runtime. Promises passed to waitUntil()
will have the same timeout as the function itself. If the function times out, the promises will be cancelled.
Name | Type | Description |
---|---|---|
promise | Promise | The promise to wait for. |
To use waitUntil()
in your function, import the waitUntil()
method from @vercel/functions
package:
When using waitUntil()
with Edge Runtime, be aware that it only allows you
to extend the function's execution for another 30 seconds following a client
disconnection. If your task takes longer than that to complete, the function
will be terminated.
// Use the @vercel/functions package to import waitUntil
import { waitUntil } from '@vercel/functions';
export function GET() {
const country = request.headers.get('x-vercel-ip-country');
// Returns a response immediately while keeping the function alive
waitUntil(fetch(`https://api.vercel.app/countries/?incr=${country}`));
return new Response(`You're visiting from beautiful ${country}`);
}
Description: Gets the System Environment Variables exposed by Vercel.
import { getEnv } from '@vercel/functions';
export function GET(request) {
const { VERCEL_REGION } = getEnv();
return new Response(`Hello from ${VERCEL_REGION}`);
}
Description: Returns the location information for the incoming request, in the following way:
{
"city": "New York",
"country": "US",
"flag": "πΊπΈ",
"countryRegion": "NY",
"region": "iad1",
"latitude": "40.7128",
"longitude": "-74.0060",
"postalCode": "10001"
}
Name | Type | Description |
---|---|---|
request | Request | The incoming request object which provides the IP |
import { geolocation } from '@vercel/functions';
export function GET(request) {
const details = geolocation(request);
return Response.json(details);
}
Description: Returns the IP address of the request from the headers.
Name | Type | Description |
---|---|---|
request | Request | The incoming request object which provides the IP |
import { ipAddress } from '@vercel/functions';
export function GET(request) {
const ip = ipAddress(request)
return new Response('Your ip is' ${ip});
}
To use OIDC methods, import the @vercel/functions/oidc
package:
import { awsCredentialsProvider } from '@vercel/functions/oidc'
export function GET() {
...
}
Description: Obtains the Vercel OIDC token and creates an AWS credential provider function that gets AWS credentials by calling the STS AssumeRoleWithWebIdentity
API.
Name | Type | Description |
---|---|---|
roleArn | string | ARN of the role that the caller is assuming. |
clientConfig | Object | Custom STS client configurations overriding the default ones. |
clientPlugins | Array | Custom STS client middleware plugin to modify the client default behavior. |
roleAssumerWithWebIdentity | Function | A function that assumes a role with web identity and returns a promise fulfilled with credentials for the assumed role. |
roleSessionName | string | An identifier for the assumed role session. |
providerId | string | The fully qualified host component of the domain name of the identity provider. |
policyArns | Array | ARNs of the IAM managed policies that you want to use as managed session policies. |
policy | string | An IAM policy in JSON format that you want to use as an inline session policy. |
durationSeconds | number | The duration, in seconds, of the role session. Defaults to 3600 seconds. |
import * as s3 from '@aws-sdk/client-s3';
import { awsCredentialsProvider } from '@vercel/functions/oidc';
const s3Client = new s3.S3Client({
credentials: awsCredentialsProvider({
roleArn: process.env.AWS_ROLE_ARN,
}),
});
Description: Returns the OIDC token from the request context or the environment variable. This function first checks if the OIDC token is available in the environment variable
VERCEL_OIDC_TOKEN
. If it is not found there, it retrieves the token from the request context headers.
import { ClientAssertionCredential } from '@azure/identity';
import { CosmosClient } from '@azure/cosmos';
import { getVercelOidcToken } from '@vercel/functions/oidc';
const credentialsProvider = new ClientAssertionCredential(
process.env.AZURE_TENANT_ID,
process.env.AZURE_CLIENT_ID,
getVercelOidcToken,
);
const cosmosClient = new CosmosClient({
endpoint: process.env.COSMOS_DB_ENDPOINT,
aadCredentials: credentialsProvider,
});
export const GET = () => {
const container = cosmosClient
.database(process.env.COSMOS_DB_NAME)
.container(process.env.COSMOS_DB_CONTAINER);
const items = await container.items.query('SELECT * FROM f').fetchAll();
return Response.json({ items: items.resources });
};
Was this helpful?