UNPKG

@spotable/attio-sdk

Version:
48 lines (41 loc) 1.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateBaseFetcher = generateBaseFetcher; const fs_1 = require("../../helpers/fs"); const fileHeader_1 = require("../types/fileHeader"); const FILE_NAME = "base.ts"; function generateBaseFetcher(outputDir) { const content = `${(0, fileHeader_1.generateFileHeader)(FILE_NAME)} import { Response } from "node-fetch"; import { AttioClient } from "../attioClient"; export class HTTPResponseError extends Error { public readonly status: number; public readonly statusText: string; constructor( public readonly response: Response, public readonly body: any = null ) { super(\`HTTP Error Response: $\{response.status} $\{response.statusText}\`); this.status = response.status; this.statusText = response.statusText; } static async create(response: Response): Promise<HTTPResponseError> { const body: any = await response.json().catch(() => response.text()).catch(() => null); return new HTTPResponseError(response, body); } } export abstract class BaseFetcher { constructor(protected readonly client: AttioClient) {} protected abstract createBaseUrl(...args: any[]): string; protected async extractData<R>(responsePromise: Promise<Response>): Promise<R> { const response = await responsePromise; if (response.ok) { return (await response.json() as { data: R; }).data as R; } throw await HTTPResponseError.create(response); } } `; (0, fs_1.writeGeneratedFile)(outputDir, FILE_NAME, content); } //# sourceMappingURL=baseFetcher.js.map