UNPKG

@spotable/attio-sdk

Version:
189 lines (168 loc) 5.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateAttributeFetcher = generateAttributeFetcher; const fs_1 = require("../../helpers/fs"); const fileHeader_1 = require("../types/fileHeader"); const webhookEventFactory_1 = require("../webhookEventFactory"); const FILE_NAME = "attribute.ts"; function generateAttributeFetcher(outputDir) { const content = `${(0, fileHeader_1.generateFileHeader)(FILE_NAME)} import { AttioClient } from "./attioClient"; import { BaseFetcher } from "./base"; import { AttioWebhookEventPopulatedListener } from "./webhook"; import { AttioAttribute, AttioSelectOption, AttioStatus, WebhookEventDataByType } from "../types"; export interface AttioAttributeInput { data: { api_slug: string; title: string; description: string | null; type: string; is_required?: boolean; is_unique?: boolean; is_multiselect?: boolean; default_value: Record<string, any> | null; config?: Record<string, any>; }; } export interface AttioSelectOptionInput { title: string; } export interface AttioStatusInput { data: { title: string; celebration_enabled?: boolean; target_time_in_status: string | null; }; } export interface AttributeBasePathParams { target: "objects" | "lists"; identifier: string; } export interface AttributeGetAllQueryParams { limit?: number; offset?: number; showArchived?: boolean; } export interface AttributeGetByIdParams extends AttributeBasePathParams { attributeId: string; } export interface AttributeGetSelectOptionByIdParams extends AttributeGetByIdParams { selectOptionId: string; } export interface AttributeGetStatusByIdParams extends AttributeGetByIdParams { statusId: string; } export class AttioAttributeFetcher extends BaseFetcher { constructor(client: AttioClient) { super(client); } createBaseUrl({ target, identifier }: AttributeBasePathParams): string { return \`/$\{target}/$\{identifier}/attributes\`; } async getAll(params: AttributeBasePathParams, query?: AttributeGetAllQueryParams): Promise<AttioAttribute[]> { return this.extractData( this.client.doFetch(this.createBaseUrl(params), { query: { ...query, show_archived: query?.showArchived, }, }) ); } async getById({ attributeId, ...params }: AttributeGetByIdParams): Promise<AttioAttribute> { return this.extractData( this.client.doFetch(\`\${this.createBaseUrl(params)}/\${attributeId}\`) ); } async create(params: AttributeBasePathParams, data: AttioAttributeInput): Promise<AttioAttribute> { return this.extractData( this.client.doFetch(this.createBaseUrl(params), { method: "POST", body: data, }) ); } async update({ attributeId, ...params }: AttributeGetByIdParams, data: AttioAttributeInput): Promise<AttioAttribute> { return this.extractData( this.client.doFetch(\`\${this.createBaseUrl(params)}/\${attributeId}\`, { method: "PUT", body: data, }) ); } async getAllSelectOptions({ attributeId, ...params }: AttributeGetByIdParams, query?: { showArchived?: boolean }): Promise<AttioSelectOption[]> { return this.extractData( this.client.doFetch(\`\${this.createBaseUrl(params)}/\${attributeId}/options\`, { query: { show_archived: query?.showArchived, }, }) ); } async createSelectOption({ attributeId, ...params }: AttributeGetByIdParams, data: AttioSelectOptionInput): Promise<AttioSelectOption> { return this.extractData( this.client.doFetch(\`\${this.createBaseUrl(params)}/\${attributeId}/options\`, { method: "POST", body: data, }) ); } async updateSelectOption({ attributeId, selectOptionId, ...params }: AttributeGetSelectOptionByIdParams, data: AttioSelectOptionInput): Promise<AttioSelectOption> { return this.extractData( this.client.doFetch(\`$\{this.createBaseUrl(params)}/$\{attributeId}/options/$\{selectOptionId}\`, { method: "PUT", body: data, }) ); } async getAllStatuses({ attributeId, ...params }: AttributeGetByIdParams, query?: { showArchived?: boolean }): Promise<AttioStatus[]> { return this.extractData( this.client.doFetch(\`$\{this.createBaseUrl(params)}/$\{attributeId}/statuses\`, { query, }) ); } async createStatus({ attributeId, ...params }: AttributeGetByIdParams, data: AttioStatusInput): Promise<AttioStatus> { return this.extractData( this.client.doFetch(\`$\{this.createBaseUrl(params)}/$\{attributeId}/statuses\`, { method: "POST", body: data, }) ); } async updateStatus({ attributeId, statusId, ...params }: AttributeGetStatusByIdParams, data: AttioStatusInput): Promise<AttioStatus> { return this.extractData( this.client.doFetch(\`$\{this.createBaseUrl(params)}/$\{attributeId}/statuses/$\{statusId}\`, { method: "PUT", body: data, }) ); } ${(0, webhookEventFactory_1.generateWebhookEventFunctionForList)({ eventNames: ["list-attribute.created", "list-attribute.updated"], fetchCode: ` this.getById({ attributeId: payload.id.attribute_id, target: "lists", identifier: payload.id.list_id, }) `.trim(), customPrefix: "onListAttribute", populatedType: "AttioAttribute", })} ${(0, webhookEventFactory_1.generateWebhookEventFunctionForList)({ eventNames: ["object-attribute.created", "object-attribute.updated"], fetchCode: ` this.getById({ attributeId: payload.id.attribute_id, target: "objects", identifier: payload.id.object_id, }) `.trim(), customPrefix: "onObjectAttribute", populatedType: "AttioAttribute", })} }`; (0, fs_1.writeGeneratedFile)(outputDir, FILE_NAME, content); } //# sourceMappingURL=attributeFetcher.js.map