svix
Version:
Svix webhooks API client and webhook verification library
199 lines (175 loc) • 7.4 kB
text/typescript
// this file is @generated
import {
ExpungeAllContentsOut,
ExpungeAllContentsOutSerializer,
} from "../models/expungeAllContentsOut";
import {
ListResponseMessageOut,
ListResponseMessageOutSerializer,
} from "../models/listResponseMessageOut";
import { MessageIn, MessageInSerializer } from "../models/messageIn";
import { MessageOut, MessageOutSerializer } from "../models/messageOut";
import { HttpMethod, SvixRequest, SvixRequestContext } from "../request";
import { MessagePoller } from "./messagePoller";
export interface MessageListOptions {
/** Limit the number of returned items */
limit?: number;
/** The iterator returned from a prior invocation */
iterator?: string | null;
/** Filter response based on the channel. */
channel?: string;
/** Only include items created before a certain date. */
before?: Date | null;
/** Only include items created after a certain date. */
after?: Date | null;
/** When `true` message payloads are included in the response. */
withContent?: boolean;
/** Filter messages matching the provided tag. */
tag?: string;
/** Filter response based on the event type */
eventTypes?: string[];
}
export interface MessageCreateOptions {
/** When `true`, message payloads are included in the response. */
withContent?: boolean;
idempotencyKey?: string;
}
export interface MessageExpungeAllContentsOptions {
idempotencyKey?: string;
}
export interface MessageGetOptions {
/** When `true` message payloads are included in the response. */
withContent?: boolean;
}
export class Message {
public constructor(private readonly requestCtx: SvixRequestContext) {}
public get poller() {
return new MessagePoller(this.requestCtx);
}
/**
* List all of the application's messages.
*
* The `before` and `after` parameters let you filter all items created before or after a certain date. These can be used alongside an iterator to paginate over results
* within a certain window.
*
* Note that by default this endpoint is limited to retrieving 90 days' worth of data
* relative to now or, if an iterator is provided, 90 days before/after the time indicated
* by the iterator ID. If you require data beyond those time ranges, you will need to explicitly
* set the `before` or `after` parameter as appropriate.
*/
public list(
appId: string,
options?: MessageListOptions
): Promise<ListResponseMessageOut> {
const request = new SvixRequest(HttpMethod.GET, "/api/v1/app/{app_id}/msg");
request.setPathParam("app_id", appId);
request.setQueryParam("limit", options?.limit);
request.setQueryParam("iterator", options?.iterator);
request.setQueryParam("channel", options?.channel);
request.setQueryParam("before", options?.before);
request.setQueryParam("after", options?.after);
request.setQueryParam("with_content", options?.withContent);
request.setQueryParam("tag", options?.tag);
request.setQueryParam("event_types", options?.eventTypes);
return request.send(
this.requestCtx,
ListResponseMessageOutSerializer._fromJsonObject
);
}
/**
* Creates a new message and dispatches it to all of the application's endpoints.
*
* The `eventId` is an optional custom unique ID. It's verified to be unique only up to a day, after that no verification will be made.
* If a message with the same `eventId` already exists for the application, a 409 conflict error will be returned.
*
* The `eventType` indicates the type and schema of the event. All messages of a certain `eventType` are expected to have the same schema. Endpoints can choose to only listen to specific event types.
* Messages can also have `channels`, which similar to event types let endpoints filter by them. Unlike event types, messages can have multiple channels, and channels don't imply a specific message content or schema.
*
* The `payload` property is the webhook's body (the actual webhook message). Svix supports payload sizes of up to 1MiB, though it's generally a good idea to keep webhook payloads small, probably no larger than 40kb.
*/
public create(
appId: string,
messageIn: MessageIn,
options?: MessageCreateOptions
): Promise<MessageOut> {
const request = new SvixRequest(HttpMethod.POST, "/api/v1/app/{app_id}/msg");
request.setPathParam("app_id", appId);
request.setQueryParam("with_content", options?.withContent);
request.setHeaderParam("idempotency-key", options?.idempotencyKey);
request.setBody(MessageInSerializer._toJsonObject(messageIn));
return request.send(this.requestCtx, MessageOutSerializer._fromJsonObject);
}
/**
* Delete all message payloads for the application.
*
* This operation is only available in the <a href="https://svix.com/pricing" target="_blank">Enterprise</a> plan.
*/
public expungeAllContents(
appId: string,
options?: MessageExpungeAllContentsOptions
): Promise<ExpungeAllContentsOut> {
const request = new SvixRequest(
HttpMethod.POST,
"/api/v1/app/{app_id}/msg/expunge-all-contents"
);
request.setPathParam("app_id", appId);
request.setHeaderParam("idempotency-key", options?.idempotencyKey);
return request.send(this.requestCtx, ExpungeAllContentsOutSerializer._fromJsonObject);
}
/** Get a message by its ID or eventID. */
public get(
appId: string,
msgId: string,
options?: MessageGetOptions
): Promise<MessageOut> {
const request = new SvixRequest(HttpMethod.GET, "/api/v1/app/{app_id}/msg/{msg_id}");
request.setPathParam("app_id", appId);
request.setPathParam("msg_id", msgId);
request.setQueryParam("with_content", options?.withContent);
return request.send(this.requestCtx, MessageOutSerializer._fromJsonObject);
}
/**
* Delete the given message's payload.
*
* Useful in cases when a message was accidentally sent with sensitive content.
* The message can't be replayed or resent once its payload has been deleted or expired.
*/
public expungeContent(appId: string, msgId: string): Promise<void> {
const request = new SvixRequest(
HttpMethod.DELETE,
"/api/v1/app/{app_id}/msg/{msg_id}/content"
);
request.setPathParam("app_id", appId);
request.setPathParam("msg_id", msgId);
return request.sendNoResponseBody(this.requestCtx);
}
}
/**
* Creates a `MessageIn` with a raw string payload.
*
* The payload is not normalized on the server. Normally, payloads are
* required to be JSON, and Svix will minify the payload before sending the
* webhooks (for example, by removing extraneous whitespace or unnecessarily
* escaped characters in strings). With this function, the payload will be
* sent "as is", without any minification or other processing.
*
* @param payload Serialized message payload
* @param contentType The value to use for the Content-Type header of the webhook sent by Svix, overwriting the default of `application/json` if specified
*
* See the class documentation for details about the other parameters.
*/
export function messageInRaw(
eventType: string,
payload: string,
contentType?: string
): MessageIn {
const headers = contentType ? { "content-type": contentType } : undefined;
return {
eventType,
payload: {},
transformationsParams: {
rawPayload: payload,
headers,
},
};
}