@spotable/attio-sdk
Version:
Client for Attio REST API
108 lines (95 loc) • 2.94 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateWebhookFetcher = generateWebhookFetcher;
const fs_1 = require("../../helpers/fs");
const fileHeader_1 = require("../types/fileHeader");
const FILE_NAME = "webhook.ts";
function generateWebhookFetcher(outputDir) {
const content = `${(0, fileHeader_1.generateFileHeader)(FILE_NAME)}
import { AttioClient } from "./attioClient";
import { BaseFetcher } from "./base";
import {
AttioWebhook,
AttioWebhookEventType,
CreateWebhookInput,
WebhookEventData,
WebhookQueryParams,
} from "../types";
export type AttioWebhookEventListener<T = any> = (data: T) => void | Promise<void>;
export type AttioWebhookEventPopulatedListener<P = any, D = any> = (params: { payload: P; data: D }) => void | Promise<void>;
export class AttioWebhookFetcher extends BaseFetcher {
private readonly eventListeners = new Map<
AttioWebhookEventType,
AttioWebhookEventListener[]
>();
constructor(client: AttioClient) {
super(client);
}
protected createBaseUrl(): string {
return "/webhooks";
}
async getAll(query: WebhookQueryParams = {}): Promise<AttioWebhook[]> {
return this.extractData<AttioWebhook[]>(
this.client.doFetch(this.createBaseUrl(), {
query,
})
);
}
async getById(id: string): Promise<AttioWebhook> {
return this.extractData<AttioWebhook>(
this.client.doFetch(\`\${this.createBaseUrl()}/\${id}\`)
);
}
async create(data: CreateWebhookInput): Promise<AttioWebhook> {
return this.extractData<AttioWebhook>(
this.client.doFetch(this.createBaseUrl(), {
method: "POST",
body: data,
})
);
}
async update(id: string, data: Partial<CreateWebhookInput>): Promise<AttioWebhook> {
return this.extractData<AttioWebhook>(
this.client.doFetch(\`\${this.createBaseUrl()}/\${id}\`, {
method: "PUT",
body: data,
})
);
}
async delete(id: string): Promise<void> {
await this.client.doFetch(\`\${this.createBaseUrl()}/\${id}\`, {
method: "DELETE",
});
}
on(
event: AttioWebhookEventType,
eventHandler: AttioWebhookEventListener
): void {
if (!this.eventListeners.has(event)) {
this.eventListeners.set(event, []);
}
this.eventListeners.get(event)!.push(eventHandler);
}
removeAllListeners(
event: AttioWebhookEventType,
): void {
if (this.eventListeners.has(event)) {
this.eventListeners.set(event, []);
}
}
async handleWebhookEvent(
data: WebhookEventData,
): Promise<void> {
if (!this.eventListeners.has(data.event_type)) {
return;
}
const listeners = this.eventListeners.get(data.event_type)!;
await Promise.allSettled(
listeners.map((listener) => listener(data))
);
}
}
`;
(0, fs_1.writeGeneratedFile)(outputDir, FILE_NAME, content);
}
//# sourceMappingURL=webhookFetcher.js.map