@papra/webhooks
Version:
Webhooks helper library for Papra, the document archiving platform.
123 lines (122 loc) • 3.74 kB
TypeScript
import { EventEmitter } from "tsee";
//#region src/webhooks.constants.d.ts
declare const EVENT_NAMES: readonly ["document:created", "document:deleted", "document:updated", "document:tag:added", "document:tag:removed"];
type EventName = (typeof EVENT_NAMES)[number];
//#endregion
//#region src/webhooks.types.d.ts
type WebhookPayload<T extends EventName, D extends Record<string, unknown>> = {
event: T;
payload: D;
};
type DocumentCreatedPayload = WebhookPayload<'document:created', {
documentId: string;
organizationId: string;
name: string;
createdAt: Date;
updatedAt: Date;
}>;
type DocumentDeletedPayload = WebhookPayload<'document:deleted', {
documentId: string;
organizationId: string;
}>;
type DocumentUpdatedPayload = WebhookPayload<'document:updated', {
documentId: string;
organizationId: string;
name?: string;
content?: string;
}>;
type DocumentTagAddedPayload = WebhookPayload<'document:tag:added', {
documentId: string;
organizationId: string;
tagId: string;
tagName: string;
}>;
type DocumentTagRemovedPayload = WebhookPayload<'document:tag:removed', {
documentId: string;
organizationId: string;
tagId: string;
tagName: string;
}>;
type WebhookPayloads = DocumentCreatedPayload | DocumentDeletedPayload | DocumentUpdatedPayload | DocumentTagAddedPayload | DocumentTagRemovedPayload;
type ExtractEventName<T> = T extends WebhookPayload<infer E, any> ? E : never;
type BuildStandardWebhookEventPayload<T extends WebhookPayloads> = {
type: T['event'];
timestamp: string;
data: T['payload'];
};
type BuildWebhookEvents<T extends WebhookPayloads> = { [K in ExtractEventName<T>]: (args: BuildStandardWebhookEventPayload<Extract<T, WebhookPayload<K, any>>>) => void };
type WebhookEvents = BuildWebhookEvents<WebhookPayloads>;
type StandardWebhookEventPayload = BuildStandardWebhookEventPayload<WebhookPayloads>;
//#endregion
//#region src/handler/handler.services.d.ts
declare function createWebhooksHandler({
secret,
onError
}: {
secret: string;
onError?: (args: {
body: string;
signature: string;
webhookId: string;
timestamp: string;
error: unknown;
}) => void | Promise<void>;
}): {
on: <EventKey extends "document:created" | "document:deleted" | "document:updated" | "document:tag:added" | "document:tag:removed" | "*" = string>(event: EventKey, listener: (WebhookEvents & {
'*': (payload: StandardWebhookEventPayload) => void;
})[EventKey]) => EventEmitter<WebhookEvents & {
'*': (payload: StandardWebhookEventPayload) => void;
}>;
ee: EventEmitter<WebhookEvents & {
'*': (payload: StandardWebhookEventPayload) => void;
}>;
handle: ({
body,
signature,
webhookId,
timestamp
}: {
body: string;
signature: string;
webhookId: string;
timestamp: string;
}) => Promise<void>;
};
//#endregion
//#region src/webhooks.services.d.ts
declare function webhookHttpClient({
url,
...options
}: {
url: string;
method: string;
body: string;
headers: Record<string, string>;
}): Promise<{
responseStatus: number;
responseData: unknown;
}>;
declare function triggerWebhook<T extends WebhookPayloads>({
webhookUrl,
webhookSecret,
httpClient,
now,
payload,
event,
webhookId
}: {
webhookUrl: string;
webhookSecret?: string | null;
httpClient?: typeof webhookHttpClient;
payload: T['payload'];
now?: Date;
event: T['event'];
webhookId?: string;
}): Promise<{
responseData: unknown;
responseStatus: number;
requestPayload: string;
}>;
//#endregion
export { EVENT_NAMES, type EventName, type StandardWebhookEventPayload, type WebhookEvents, type WebhookPayload, type WebhookPayloads, createWebhooksHandler, triggerWebhook };
//# sourceMappingURL=index.d.ts.map