UNPKG

@papra/webhooks

Version:

Webhooks helper library for Papra, the document archiving platform.

123 lines (122 loc) 3.74 kB
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