UNPKG

@solufy/evolution-sdk

Version:

Unofficial SDK for the Evolution Whatsapp API v2

1 lines 7.05 kB
{"version":3,"sources":["../../src/api/errors.ts","../../src/api/service.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport class EvolutionApiError extends Error {\n\tconstructor(message: string, cause?: unknown) {\n\t\tconst error = getErrorMessage(cause);\n\n\t\tsuper(message, error ? undefined : { cause });\n\n\t\tthis.name = EvolutionApiError.name;\n\t\tthis.message = error ?? message;\n\t}\n}\n\nconst ErrorMessages = [\n\tErrorMessage(\n\t\tz.object({\n\t\t\tmessage: z.array(\n\t\t\t\tz.object({\n\t\t\t\t\texists: z.literal(false),\n\t\t\t\t\tjid: z.string(),\n\t\t\t\t\tnumber: z.string(),\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\t\"Provided number is not a valid WhatsApp number\",\n\t),\n\tErrorMessage(\n\t\tz.object({\n\t\t\tmessage: z.array(z.string().includes(\"Media upload failed on all hosts\")),\n\t\t}),\n\t\t\"Media upload failed on all hosts\",\n\t),\n\tErrorMessage(\n\t\tz.object({\n\t\t\tmessage: z.array(z.string().includes(\"AxiosError\")),\n\t\t}),\n\t\t(response) => response.message[0],\n\t),\n\tErrorMessage(\n\t\tz.object({\n\t\t\tmessage: z.array(z.string().includes(\"No session\")),\n\t\t}),\n\t\t\"No session found, try restarting your instance\",\n\t),\n\tErrorMessage(\n\t\tz.object({\n\t\t\tmessage: z.array(z.string().includes(\"AggregateError\")),\n\t\t}),\n\t\t\"AggregateError\",\n\t),\n];\n\nfunction getErrorMessage(response: unknown) {\n\tconst error = ErrorMessages.find(\n\t\t(message) => message.schema.safeParse(response).success,\n\t);\n\n\treturn error\n\t\t? typeof error.message === \"string\"\n\t\t\t? error.message\n\t\t\t: // biome-ignore lint/suspicious/noExplicitAny: Generic\n\t\t\t\terror.message(response as any)\n\t\t: undefined;\n}\n\nfunction ErrorMessage<T extends z.ZodType>(\n\tschema: T,\n\tmessage: string | ((data: z.infer<T>) => string),\n) {\n\treturn { schema, message };\n}\n","import type { ClientOptions } from \"@/schemas/client\";\nimport type { APIRequestInit } from \"@/types/api\";\n\nimport { EvolutionApiError } from \"./errors\";\n\nexport class ApiService {\n\tconstructor(private readonly options: ClientOptions) {}\n\n\tasync get<T>(path: string, options: Omit<APIRequestInit, \"method\"> = {}) {\n\t\treturn this.request<T>(path, { ...options, method: \"GET\" });\n\t}\n\n\tasync post<T>(path: string, options: Omit<APIRequestInit, \"method\"> = {}) {\n\t\treturn this.request<T>(path, { ...options, method: \"POST\" });\n\t}\n\n\tasync put<T>(path: string, options: Omit<APIRequestInit, \"method\"> = {}) {\n\t\treturn this.request<T>(path, { ...options, method: \"PUT\" });\n\t}\n\n\tasync patch<T>(path: string, options: Omit<APIRequestInit, \"method\"> = {}) {\n\t\treturn this.request<T>(path, { ...options, method: \"PATCH\" });\n\t}\n\n\tasync delete<T>(path: string, options: Omit<APIRequestInit, \"method\"> = {}) {\n\t\treturn this.request<T>(path, { ...options, method: \"DELETE\" });\n\t}\n\n\tasync request<T = unknown>(\n\t\tpath: string,\n\t\toptions: APIRequestInit = {},\n\t): Promise<T> {\n\t\tconst { init, params } = this.makeInit(options);\n\t\tconst url = new URL(\n\t\t\t`/${path}/${this.options.instance}/?${params}`,\n\t\t\tthis.options.serverUrl,\n\t\t);\n\n\t\tconst response = await fetch(url, init);\n\t\tconst data = await response.json();\n\n\t\tif (!response.ok || \"error\" in data) {\n\t\t\tthrow new EvolutionApiError(\n\t\t\t\t`${this.options.instance} ${data.error || \"Unknown Error\"}`,\n\t\t\t\tdata.response,\n\t\t\t);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tprivate makeInit(options: APIRequestInit) {\n\t\tconst { params: _, headers, body, ...rest } = options;\n\n\t\tconst paramsInit =\n\t\t\toptions.params &&\n\t\t\tObject.entries(options.params)\n\t\t\t\t.filter(([, value]) => Boolean(value))\n\t\t\t\t.map(([key, value]) => [key, String(value)]);\n\t\tconst params = new URLSearchParams(paramsInit);\n\n\t\tconst init: RequestInit & { headers: Record<string, string> } = {\n\t\t\t...rest,\n\t\t\theaders: { ...(headers || {}), apikey: this.options.token },\n\t\t};\n\n\t\tif (body) {\n\t\t\tinit.headers[\"Content-Type\"] =\n\t\t\t\tbody instanceof FormData ? \"multipart/form-data\" : \"application/json\";\n\t\t\tinit.body = body instanceof FormData ? body : JSON.stringify(body);\n\t\t}\n\n\t\treturn { init, params };\n\t}\n}\n"],"mappings":"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","names":[]}