Skip to main content

Contexts

A context object encapsulates everything related to the current request. A context can take multiple shapes depending on the operation being handled.

Shared Properties​

By default, all context objects inherits from these properties;

credentials​

The parsed credentials associated with the request through the X-Unito-Credentials header. Will contain the keys for the variables defined in the corresponding configuration's authorization. Note that unauthenticated endpoints don't have access to that property.

signal​

An AbortSignal instantiated with the X-Unito-Operation-Deadline header. This header contains the timestamp after which Unito will consider the operation to be timed out. You can use this signal to abort any operation that would exceed this time frame.

logger​

The logger pre decorated with the correlation ID and the additionnal metadata provided through the request headers.

params​

The params extracted from the provided path. Given a path defined as /users/:userId/notes/:noteId, a call to /users/123/notes/456 will yield the following;

{
userId: '123',
noteId: '456'
}

This is a generic property that can be narrowed down on a per handler basis.

const context: GetItemContext<{ foo: string }, {}>) {
// `context.params.foo` readily available as a string.
}

query​

The raw query string parsed as an object. All values are strings. A call to /?page=2 will yield the following;

{
page: '2',
}

This is a generic property that can be narrowed down on a per handler basis.

const context: GetItemContext<{}, { limit?: string, offset?: string }>) {
// `context.query.limit` and `context.query.offset` readily available as potentially undefined strings.
}

Specific Properties​

In addition to the above shared properties, some handlers receive some more specialized properties.

filters​

Available with the GetCollectionContext. Returns the parsed filter query param, as defined per the specification. Given /items?filter=name=John,department.name=R&D, the filters property would yield the following;

[
{ field: 'name', operator: 'EQUAL', values: ['John'] },
{ field: 'department.name', operator: 'EQUAL', values: ['Engineering'] }
]

selects​

Available with the GetCollectionContext. Returns the parsed select query param, as defined per the specification. Given /items?select=name,department.name, the selects property would yield the following;

['name', 'department.name']

Available with the GetCollectionContext for relations that supports it. Returns the parsed search query param, as defined per the specification. Given /items?search=pikac, the search property would yield the following;

'pikac'

body​

Available on all contexts associated with handlers expecting an incoming payload, such as CreateItemHandler and UpdateItemHandler, the body property exposes the body of the incoming request. This is a generic property that can be narrowed down on a per handler basis.

export type ItemType = {
id: string;
name: string;
address: {
street: string;
doorNumber: string;
city: string
}
};

const context: CreateItemContext<{}, {}, ItemType>) {
// `context.body` is now available and typed as ItemType
}

Types​

Context​

Base Context type listing fields available in all the specific contexts. Provides access to the Credentials, an initialized logger, the request's params and the request's query (both of the later can be typed through the context's generics).

type Context<P, Q> = {
credentials: Credentials;
logger: Logger;
params: P;
query: Q;
}

GetItemContext​

The GetItemContext has access to the base context properties only.

GetCollectionContext​

The GetCollectionContext provides access to the filters and selects that are parse from the queryParams for you, in addition to the base context properties.

export type GetCollectionContext<P, Q> = Context<P, Q> & {
filters: Filter[];
selects: string[];
search: string | null;
};

CreateItemContext​

The CreateItemContext provides access to the request's body (can be typed through the context's generics).

export type CreateItemContext<P, Q, B extends API.CreateItemRequestPayload>
= Context<P, Q> & { body: B };

UpdateItemContext​

The UpdateItemContext also provides access to the request's body (can be typed through the context's generics).

export type UpdateItemContext<P, Q, B extends API.UpdateItemRequestPayload>
= Context<P, Q> & { body: B };

DeleteContext​

The DeleteItemContext has access to the base context properties only.

GetCredentialAccountContext​

The GetItemContext has access to the base context properties only.

ParseWebhooksContext​

The ParseWebhooksContext provides access to the request's body (can be typed through the context's generics), and omit the Credentials since the call is unauthenticated.

export type ParseWebhooksContext<P, Q, B extends API.WebhookParseRequestPayload>
= Omit<Context<P, Q>, 'credentials'> & { body: B };

UpdateWebhookSubscriptionsContext​

The UpdateWebhookSubscriptionsContext provides access to the request's body (can be typed through the context's generics).

export type UpdateWebhookSubscriptionsContext<P, Q, B extends API.WebhookSubscriptionRequestPayload>
= Context<P, Q> & { body: B };

AcknowledgeWebhooksContext​

The AcknowledgeWebhooksContext provides access to the request's body (can be typed through the context's generics), and omit the Credentials since the call is unauthenticated.

export type AcknowledgeWebhooksContext<P, Q, B extends API.WebhookParseRequestPayload>
= Omit<Context<P, Q>, 'credentials'> & { body: B };