UNPKG

@sodiumlabs/plume-url

Version:
1 lines 7.79 kB
{"version":3,"sources":["../src/PlumeURLError.ts","../package.json","../src/PlumeURLREST.ts","../src/utils.ts","../src/PlumeURL.ts"],"sourcesContent":["export default class PlumeURLError extends Error {\n public constructor(\n message: string,\n options?: ErrorOptions | undefined,\n public res?: Response | null,\n ) {\n super(message, options);\n this.res = res || null;\n }\n}\n","{\n \"$schema\": \"https://json.schemastore.org/package.json\",\n \"name\": \"@sodiumlabs/plume-url\",\n \"version\": \"1.0.4\",\n \"description\": \"The official Plume URL wrapper\",\n \"license\": \"MIT\",\n \"author\": \"SodiumLabs\",\n \"scripts\": {\n \"build\": \"tsc --noEmit && tsup\",\n \"lint\": \"tsc --noEmit && prettier . --check\",\n \"format\": \"prettier . --write\",\n \"test\": \"vitest\"\n },\n \"exports\": {\n \"require\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"import\": {\n \"types\": \"./dist/index.d.mts\",\n \"default\": \"./dist/index.mjs\"\n }\n },\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\"\n ],\n \"keywords\": [\n \"api\",\n \"discord\",\n \"bot\",\n \"plume\",\n \"wrapper\",\n \"plumeapi\",\n \"plume-api\",\n \"plumeurl\",\n \"plume-url\",\n \"sodium\",\n \"sodiumlabs\"\n ],\n \"homepage\": \"https://github.com/sodium-labs/plume-url.js#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/sodium-labs/plume-url.js/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/sodium-labs/plume-url.js.git\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.13.8\",\n \"prettier\": \"^3.5.2\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.8.2\",\n \"vitest\": \"^3.0.7\"\n }\n}\n","import PlumeURLError from \"./PlumeURLError\";\nimport { version } from \"@/../package.json\";\n\nexport interface PlumeURLRESTOptions {\n apiKey?: string;\n userAgent?: string;\n}\n\nexport default class PlumeURLREST {\n public static readonly baseURL = \"https://url.sodiumlabs.xyz/api\";\n public static readonly defaultUserAgent = `plume-url.js/${version}`;\n\n public constructor(public readonly options: PlumeURLRESTOptions = {}) {\n this.options = options;\n }\n\n public async request(method: string, path: string, body?: object): Promise<Response> {\n if (!path.startsWith(\"/\")) {\n throw new Error(`Invalid path: ${path}`);\n }\n \n const headers = new Headers({\n \"User-Agent\": `${PlumeURLREST.defaultUserAgent} ${this.options.userAgent || \"\"}`.trim(),\n });\n if (this.options.apiKey) {\n headers.set(\"Authorization\", this.options.apiKey);\n }\n if (body) {\n headers.append(\"Content-Type\", \"application/json\");\n }\n\n const url = `${PlumeURLREST.baseURL}${path}`;\n\n let res;\n try {\n res = await fetch(url, { method, headers, body: body ? JSON.stringify(body) : undefined });\n } catch (err) {\n throw new PlumeURLError(`Failed to fetch ${url}`, { cause: err });\n }\n\n if (!res.ok) {\n throw new PlumeURLError(`Invalid response ${url}: ${res.statusText}`, undefined, res);\n }\n\n return res;\n }\n\n public async get<T = unknown>(path: string): Promise<T> {\n const res = await this.request(\"GET\", path);\n return (await res.json()) as T;\n }\n\n public async post<T = unknown>(path: string, body?: object): Promise<T> {\n const res = await this.request(\"POST\", path, body);\n return (await res.json()) as T;\n }\n}\n","export const queryfy = (options: Record<string, unknown>): string => {\n const params = new URLSearchParams(\n Object.entries(options)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => [k, `${v}`]),\n );\n const encoded = params.toString();\n return encoded ? `?${encoded}` : \"\";\n};\n","import PlumeURLREST, { PlumeURLRESTOptions } from \"./PlumeURLREST\";\nimport { SearchURLOptions, SearchURLResults, URLData, CreateURLOptions, EditURLOptions } from \"./routes\";\nimport { queryfy } from \"./utils\";\n\nexport interface PlumeURLOptions extends PlumeURLRESTOptions {}\n\n/**\n * The client to interact with Plume URL\n */\nexport default class PlumeURL {\n public readonly rest: PlumeURLREST;\n\n public constructor(options?: PlumeURLOptions) {\n this.rest = new PlumeURLREST(options);\n }\n\n public async createURL(options: CreateURLOptions): Promise<URLData> {\n return await this.rest.post(\"/create\", options);\n }\n\n public async search({ customId, limit, page, expired }: SearchURLOptions): Promise<SearchURLResults> {\n const params = queryfy({ customId, limit, page, expired });\n return await this.rest.get(`/search${params}`);\n }\n\n public async getURL(id: string): Promise<URLData> {\n return await this.rest.get(`/urls/${id}`);\n }\n\n public async editURL(id: string, options: EditURLOptions) {\n await this.rest.request(\"PATCH\", `/urls/${id}`, options);\n }\n\n public async deleteURL(id: string) {\n await this.rest.request(\"DELETE\", `/urls/${id}`);\n }\n}\n"],"mappings":"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","names":[]}