{"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":[]}