UNPKG

@whizzes/linx

Version:
1 lines 2.79 kB
{"version":3,"file":"index.mjs","sources":["../src/errors/APIError.ts","../src/Client.ts"],"sourcesContent":["export class APIError extends Error {\n public statusCode: number;\n\n constructor(message: string, statusCode: number) {\n super(message);\n\n this.name = ' APIError';\n this.statusCode = statusCode;\n }\n}\n","import type { Link } from '@whizzes/linx';\nimport { APIError } from './errors/APIError';\n\nconst DEFAULT_HTTP_HEADERS: Record<string, string> = {\n 'content-type': 'application/json',\n};\n\nexport class Client {\n private prefixUrl: URL;\n\n constructor(prefixUrl: URL) {\n this.prefixUrl = prefixUrl;\n }\n\n /**\n * Creates a new Link through Linx with the provided URL.\n *\n * Internally validates the `originalUrl` to be a valid URL instance.\n */\n public async new(originalUrl: string): Promise<Link> {\n new URL(originalUrl);\n\n return await this.post('new', {\n url: originalUrl,\n });\n }\n\n private uri(path: string): string {\n return `${this.prefixUrl.toString()}${path}`;\n }\n\n private async post<T, U>(\n path: string,\n body: T,\n options: RequestInit = {},\n ): Promise<U> {\n const extendedOptions: RequestInit = {\n ...options,\n headers: {\n ...DEFAULT_HTTP_HEADERS,\n ...options.headers,\n },\n method: 'POST',\n body: JSON.stringify(body),\n };\n\n const response = await fetch(this.uri(path), extendedOptions);\n const responseBody = await response.json();\n\n if (response.ok) {\n return responseBody as U;\n }\n\n const message = (responseBody as { message: string })?.message;\n\n // As of today we don't have enough use cases to implement\n // dedicated errors. Instead we just take the error message\n // and provide it as a `Error.message` value.\n throw new APIError(message, response.status);\n }\n}\n"],"names":["APIError","message","statusCode","DEFAULT_HTTP_HEADERS","Client","prefixUrl","originalUrl","path","body","options","extendedOptions","response","responseBody"],"mappings":"AAAO,MAAMA,UAAiB,KAAM,CAC3B,WAEP,YAAYC,EAAiBC,EAAoB,CAC/C,MAAMD,CAAO,EAEb,KAAK,KAAO,YACZ,KAAK,WAAaC,CACpB,CACF,CCNA,MAAMC,EAA+C,CACnD,eAAgB,kBAClB,EAEO,MAAMC,CAAO,CACV,UAER,YAAYC,EAAgB,CAC1B,KAAK,UAAYA,CACnB,CAOA,MAAa,IAAIC,EAAoC,CACnD,OAAI,IAAA,IAAIA,CAAW,EAEZ,MAAM,KAAK,KAAK,MAAO,CAC5B,IAAKA,CACP,CAAC,CACH,CAEQ,IAAIC,EAAsB,CAChC,MAAO,GAAG,KAAK,UAAU,SAAS,IAAIA,GACxC,CAEA,MAAc,KACZA,EACAC,EACAC,EAAuB,CACX,EAAA,CACZ,MAAMC,EAA+B,CACnC,GAAGD,EACH,QAAS,CACP,GAAGN,EACH,GAAGM,EAAQ,OACb,EACA,OAAQ,OACR,KAAM,KAAK,UAAUD,CAAI,CAC3B,EAEMG,EAAW,MAAM,MAAM,KAAK,IAAIJ,CAAI,EAAGG,CAAe,EACtDE,EAAe,MAAMD,EAAS,KAAK,EAEzC,GAAIA,EAAS,GACX,OAAOC,EAGT,MAAMX,EAAWW,GAAsC,QAKvD,MAAM,IAAIZ,EAASC,EAASU,EAAS,MAAM,CAC7C,CACF"}