UNPKG

@sodiumlabs/plume-api

Version:
1 lines 33.7 kB
{"version":3,"sources":["../src/PlumeAPIError.ts","../package.json","../src/PlumeAPIREST.ts","../src/utils.ts","../src/PlumeAPI.ts"],"sourcesContent":["export default class PlumeAPIError 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-api\",\n \"version\": \"1.5.0\",\n \"description\": \"The official Plume API 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 \"sodium\",\n \"sodiumlabs\"\n ],\n \"homepage\": \"https://github.com/sodium-labs/plume-api.js#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/sodium-labs/plume-api.js/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/sodium-labs/plume-api.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 PlumeAPIError from \"./PlumeAPIError\";\nimport { version } from \"@/../package.json\";\n\nexport interface PlumeAPIRESTOptions {\n userAgent?: string;\n}\n\nexport default class PlumeAPIREST {\n public static readonly baseURL = \"https://plume.sodiumlabs.xyz/api\";\n public static readonly defaultUserAgent = `plume-api.js/${version}`;\n\n public constructor(public readonly options: PlumeAPIRESTOptions = {}) {\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\": `${PlumeAPIREST.defaultUserAgent} ${this.options.userAgent || \"\"}`.trim(),\n });\n\n const url = `${PlumeAPIREST.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 PlumeAPIError(`Failed to fetch ${url}`, { cause: err });\n }\n\n if (!res.ok) {\n throw new PlumeAPIError(`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 file(path: string): Promise<Buffer> {\n const res = await this.request(\"GET\", path);\n return Buffer.from(await res.arrayBuffer());\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 PlumeAPIREST, { PlumeAPIRESTOptions } from \"./PlumeAPIREST\";\nimport {\n AdviceData,\n AgifyData,\n AsciiData,\n AsciiFont,\n CryptoData,\n DecodeData,\n DecodeType,\n DefinitionData,\n EmojifyData,\n EmojiMixData,\n EncodeData,\n EncodeType,\n ExecData,\n ExecLanguage,\n FortniteMapData,\n FreeGamesData,\n FunFactData,\n GitHubRepository,\n GitHubUser,\n HeightBallData,\n InteractionData,\n InteractionType,\n IPInfoData,\n ISSData,\n JokeData,\n MathData,\n MemeData,\n MinecraftIDData,\n MinecraftNameData,\n MinecraftSkinData,\n NasaAPOD,\n NPMData,\n QuoteData,\n RandomEmojiMixData,\n ReverseTextData,\n TranslateData,\n UpsideDownTextData,\n UrbanData,\n UUIDData,\n WeatherData,\n WikipediaData,\n} from \"./routes\";\nimport { ColorData, Locale } from \"./shared\";\nimport { queryfy } from \"./utils\";\n\nexport interface PlumeAPIOptions extends PlumeAPIRESTOptions {}\n\n/**\n * The client to interact with Plume API\n */\nexport default class PlumeAPI {\n public readonly rest: PlumeAPIREST;\n\n public constructor(options?: PlumeAPIOptions) {\n this.rest = new PlumeAPIREST(options);\n }\n\n // Fun\n\n public async eightBall(locale?: Locale): Promise<HeightBallData> {\n const params = queryfy({ locale });\n return await this.rest.get(`/8ball${params}`);\n }\n\n public async advice(locale?: Locale): Promise<AdviceData> {\n const params = queryfy({ locale });\n return await this.rest.get(`/advice${params}`);\n }\n\n public async agify(name: string): Promise<AgifyData> {\n const params = queryfy({ name });\n return await this.rest.get(`/agify${params}`);\n }\n\n public async asciiImage(text: string, font?: AsciiFont): Promise<Buffer> {\n const params = queryfy({ text, font });\n return await this.rest.file(`/ascii-image${params}`);\n }\n\n public async asciiText(text: string): Promise<AsciiData> {\n const params = queryfy({ text });\n return await this.rest.get(`/ascii-text${params}`);\n }\n\n /**\n * @deprecated Use `eightBall` instead\n */\n public async heightBall(locale?: Locale): Promise<HeightBallData> {\n const params = queryfy({ locale });\n return await this.rest.get(`/8ball${params}`);\n }\n\n public async emojiMix(left: string, right: string): Promise<EmojiMixData> {\n const params = queryfy({ left, right });\n return await this.rest.get(`/emoji-mix${params}`);\n }\n\n public async emojify(text: string): Promise<EmojifyData> {\n const params = queryfy({ text });\n return await this.rest.get(`/emojify${params}`);\n }\n\n public async funFact(locale?: Locale): Promise<FunFactData> {\n const params = queryfy({ locale });\n return await this.rest.get(`/funfact${params}`);\n }\n\n public async issImage(circle?: boolean): Promise<Buffer> {\n const params = queryfy({ circle });\n return await this.rest.file(`/iss-image${params}`);\n }\n\n public async iss(): Promise<ISSData> {\n return await this.rest.get(\"/iss\");\n }\n\n public async joke(locale?: Locale): Promise<JokeData> {\n const params = queryfy({ locale });\n return await this.rest.get(`/joke${params}`);\n }\n\n public async math(expr: string): Promise<MathData> {\n const params = queryfy({ expr });\n return await this.rest.get(`/math${params}`);\n }\n\n public async meme(): Promise<MemeData> {\n return await this.rest.get(\"/meme\");\n }\n\n public async nasaAPOD(): Promise<NasaAPOD> {\n return await this.rest.get(\"/nasa-apod\");\n }\n\n public async npm(name: string): Promise<NPMData> {\n const params = queryfy({ name });\n return await this.rest.get(`/npm${params}`);\n }\n\n public async quote(locale?: Locale): Promise<QuoteData> {\n const params = queryfy({ locale });\n return await this.rest.get(`/quote${params}`);\n }\n\n public async randomEmojiMix(): Promise<RandomEmojiMixData> {\n return await this.rest.get(\"/random-emoji-mix\");\n }\n\n public async upsideDown(text: string): Promise<UpsideDownTextData> {\n const params = queryfy({ text });\n return await this.rest.get(`/upside-down${params}`);\n }\n\n public async urban(word: string): Promise<UrbanData> {\n const params = queryfy({ word });\n return await this.rest.get(`/urban${params}`);\n }\n\n public async color(hex: string): Promise<ColorData> {\n const params = queryfy({ hex });\n return await this.rest.get(`/color${params}`);\n }\n\n public async colorImage(hex: string): Promise<Buffer> {\n return await this.rest.file(`/color/image/${hex}`);\n }\n\n public async randomColor(): Promise<ColorData> {\n return await this.rest.get(\"/color/random\");\n }\n\n public async githubRepository(name: string): Promise<GitHubRepository> {\n const params = queryfy({ name });\n return await this.rest.get(`/github/repository${params}`);\n }\n\n public async githubUser(name: string): Promise<GitHubUser> {\n const params = queryfy({ name });\n return await this.rest.get(`/github/user${params}`);\n }\n\n // Utility\n\n public async captcha(): Promise<{ code: string; image: Buffer }> {\n const res = await this.rest.request(\"GET\", \"/captcha\");\n\n const code = res.headers.get(\"X-Captcha-Code\");\n if (!code) throw new Error(\"X-Captcha-Code missing in response\");\n\n const image = Buffer.from(await res.arrayBuffer());\n\n return { code, image };\n }\n\n public async crypto(name: string, currency: \"usd\" | \"eur\"): Promise<CryptoData> {\n const params = queryfy({ name, currency });\n return await this.rest.get(`/crypto${params}`);\n }\n\n public async definition(locale: Locale, word: string): Promise<DefinitionData> {\n const params = queryfy({ locale, word });\n return await this.rest.get(`/definition${params}`);\n }\n\n public async exec(language: ExecLanguage, code: string): Promise<ExecData> {\n const params = queryfy({ language, code });\n return await this.rest.get(`/exec${params}`);\n }\n\n public async freeGames(locale?: Locale): Promise<FreeGamesData> {\n const params = queryfy({ locale });\n return await this.rest.get(`/free-games${params}`);\n }\n\n public async ipInfo(ip: string): Promise<IPInfoData> {\n const params = queryfy({ ip });\n return await this.rest.get(`/ipinfo${params}`);\n }\n\n public async latex(expr: string): Promise<Buffer> {\n const params = queryfy({ expr });\n return await this.rest.file(`/latex${params}`);\n }\n\n public async qrcode(text: string): Promise<Buffer> {\n const params = queryfy({ text });\n return await this.rest.file(`/qrcode${params}`);\n }\n\n public async reverseText(text: string): Promise<ReverseTextData> {\n const params = queryfy({ text });\n return await this.rest.get(`/reverse-text${params}`);\n }\n\n public async screenshot(url: string): Promise<Buffer> {\n const params = queryfy({ url });\n return await this.rest.file(`/screenshot${params}`);\n }\n\n public async translate(text: string, to: string): Promise<TranslateData> {\n const params = queryfy({ text, to });\n return await this.rest.get(`/translate${params}`);\n }\n\n public async uuid(): Promise<UUIDData> {\n return await this.rest.get(\"/uuid\");\n }\n\n public async weather(city: string): Promise<WeatherData> {\n const params = queryfy({ city });\n return await this.rest.get(`/weather${params}`);\n }\n\n public async wikipedia(page: string, locale?: Locale): Promise<WikipediaData> {\n const params = queryfy({ page, locale });\n return await this.rest.get(`/wikipedia${params}`);\n }\n\n // Animals\n\n public async duck(): Promise<Buffer> {\n return await this.rest.file(\"/animals/duck\");\n }\n\n public async fox(): Promise<Buffer> {\n return await this.rest.file(\"/animals/fox\");\n }\n\n // Encode\n\n public async encode(type: EncodeType, text: string): Promise<EncodeData> {\n const params = queryfy({ text });\n return await this.rest.get(`/encode/${type}${params}`);\n }\n\n // Decode\n\n public async decode(type: DecodeType, text: string): Promise<DecodeData> {\n const params = queryfy({ text });\n return await this.rest.get(`/decode/${type}${params}`);\n }\n\n // Fortnite\n\n public async fortniteMapImagePois(locale?: Locale): Promise<Buffer> {\n const params = queryfy({ locale });\n return await this.rest.file(`/fortnite/map/image-pois${params}`);\n }\n\n public async fortniteMapImage(): Promise<Buffer> {\n return await this.rest.file(\"/fortnite/map/image\");\n }\n\n public async fortniteMap(locale?: Locale): Promise<FortniteMapData> {\n const params = queryfy({ locale });\n return await this.rest.get(`/fortnite/map${params}`);\n }\n\n // Minecraft\n\n public async minecraftAvatar(name: string): Promise<Buffer> {\n const params = queryfy({ name });\n return await this.rest.get(`/minecraft/avatar${params}`);\n }\n\n public async minecraftBody(name: string): Promise<Buffer> {\n const params = queryfy({ name });\n return await this.rest.get(`/minecraft/body${params}`);\n }\n\n public async minecraftID(name: string): Promise<MinecraftIDData> {\n const params = queryfy({ name });\n return await this.rest.get(`/minecraft/id${params}`);\n }\n\n public async minecraftName(id: string): Promise<MinecraftNameData> {\n const params = queryfy({ id });\n return await this.rest.get(`/minecraft/name${params}`);\n }\n\n public async minecraftSkin(name: string): Promise<MinecraftSkinData> {\n const params = queryfy({ name });\n return await this.rest.get(`/minecraft/skin${params}`);\n }\n\n // Interactions\n\n public async interaction(type: InteractionType): Promise<InteractionData> {\n return await this.rest.get(`/interactions/${type}`);\n }\n\n // Image Creation\n\n public async achievement(text: string): Promise<Buffer> {\n const params = queryfy({ text });\n return await this.rest.file(`/images/achievement${params}`);\n }\n\n public async alert(text: string): Promise<Buffer> {\n const params = queryfy({ text });\n return await this.rest.file(`/images/alert${params}`);\n }\n\n public async caution(text: string): Promise<Buffer> {\n const params = queryfy({ text });\n return await this.rest.file(`/images/caution${params}`);\n }\n\n public async challenge(text: string): Promise<Buffer> {\n const params = queryfy({ text });\n return await this.rest.file(`/images/challenge${params}`);\n }\n\n public async jail(avatar: string): Promise<Buffer> {\n const params = queryfy({ avatar });\n return await this.rest.file(`/images/jail${params}`);\n }\n\n public async nokia(url: string): Promise<Buffer> {\n const params = queryfy({ url });\n return await this.rest.file(`/images/nokia${params}`);\n }\n\n public async tweet(\n avatar: string,\n name: string,\n username: string,\n text: string,\n retweets?: number,\n quote_tweets?: number,\n likes?: number,\n ): Promise<Buffer> {\n const params = queryfy({ avatar, name, username, text, retweets, quote_tweets, likes });\n return await this.rest.file(`/images/tweet${params}`);\n }\n\n public async wanted(avatar: string): Promise<Buffer> {\n const params = queryfy({ avatar });\n return await this.rest.file(`/images/wanted${params}`);\n }\n\n // Image Manipulation\n\n public async blur(url: string): Promise<Buffer> {\n const params = queryfy({ url });\n return await this.rest.file(`/images/blur${params}`);\n }\n\n public async colorify(url: string, color: string): Promise<Buffer> {\n const params = queryfy({ url, color });\n return await this.rest.file(`/images/colorify${params}`);\n }\n\n public async grayscale(url: string): Promise<Buffer> {\n const params = queryfy({ url });\n return await this.rest.file(`/images/grayscale${params}`);\n }\n\n public async invert(url: string): Promise<Buffer> {\n const params = queryfy({ url });\n return await this.rest.file(`/images/invert${params}`);\n }\n\n public async rotate(url: string, deg: number): Promise<Buffer> {\n const params = queryfy({ url, deg });\n return await this.rest.file(`/images/rotate${params}`);\n }\n\n // Meme Creation\n\n public async changeMyMind(text: string): Promise<Buffer> {\n const params = queryfy({ text });\n return await this.rest.file(`/memes/changemymind${params}`);\n }\n\n public async didYouMean(search: string, correction: string): Promise<Buffer> {\n const params = queryfy({ search, correction });\n return await this.rest.file(`/memes/didyoumean${params}`);\n }\n\n public async drake(top: string, bottom: string): Promise<Buffer> {\n const params = queryfy({ top, bottom });\n return await this.rest.file(`/memes/drake${params}`);\n }\n\n public async duolingo(text: string): Promise<Buffer> {\n const params = queryfy({ text });\n return await this.rest.file(`/memes/duolingo${params}`);\n }\n\n public async facts(text: string): Promise<Buffer> {\n const params = queryfy({ text });\n return await this.rest.file(`/memes/facts${params}`);\n }\n\n public async fuze3(text: string): Promise<Buffer> {\n const params = queryfy({ text });\n return await this.rest.file(`/memes/fuze3${params}`);\n }\n\n public async hugo(text: string): Promise<Buffer> {\n const params = queryfy({ text });\n return await this.rest.file(`/memes/hugo${params}`);\n }\n\n public async nothing(text: string): Promise<Buffer> {\n const params = queryfy({ text });\n return await this.rest.file(`/memes/nothing${params}`);\n }\n\n public async oogway(text: string): Promise<Buffer> {\n const params = queryfy({ text });\n return await this.rest.file(`/memes/oogway${params}`);\n }\n\n public async pepeHug(avatar: string): Promise<Buffer> {\n const params = queryfy({ avatar });\n return await this.rest.file(`/memes/pepe-hug${params}`);\n }\n\n public async sadcat(top: string, bottom: string): Promise<Buffer> {\n const params = queryfy({ top, bottom });\n return await this.rest.file(`/memes/sadcat${params}`);\n }\n\n public async stonks(avatar: string, stonks?: boolean): Promise<Buffer> {\n const params = queryfy({ avatar, stonks });\n return await this.rest.file(`/memes/stonks${params}`);\n }\n\n public async tableFlip(avatar: string): Promise<Buffer> {\n const params = queryfy({ avatar });\n return await this.rest.file(`/memes/tableflip${params}`);\n }\n\n public async water(text: string): Promise<Buffer> {\n const params = queryfy({ text });\n return await this.rest.file(`/memes/water${params}`);\n }\n\n public async woosh(avatar: string): Promise<Buffer> {\n const params = queryfy({ avatar });\n return await this.rest.file(`/memes/woosh${params}`);\n }\n\n // Cards\n\n public async boost(avatar: string, username: string, text?: string): Promise<Buffer> {\n const params = queryfy({ avatar, username, text });\n return await this.rest.file(`/cards/boost${params}`);\n }\n\n public async couple(\n avatar1: string,\n avatar2: string,\n percentage?: number,\n primary_color?: string,\n ): Promise<Buffer> {\n const params = queryfy({ avatar1, avatar2, percentage, primary_color });\n return await this.rest.file(`/cards/couple${params}`);\n }\n\n public async rank(\n avatar: string,\n global_name: string,\n username: string,\n level: number,\n xp: number,\n max_xp: number,\n rank?: number,\n bg_url?: string,\n bg_color?: string,\n blur?: boolean,\n color?: string,\n ): Promise<Buffer> {\n const params = queryfy({\n avatar,\n global_name,\n username,\n level,\n xp,\n max_xp,\n rank,\n bg_url,\n bg_color,\n blur,\n color,\n });\n return await this.rest.file(`/cards/rank${params}`);\n }\n\n public async welcome(\n avatar: string,\n text1: string,\n text2?: string,\n text3?: string,\n bg_url?: string,\n bg_color?: string,\n font_color?: string,\n blur?: boolean,\n avatar_border?: boolean,\n avatar_border_color?: string,\n ): Promise<Buffer> {\n const params = queryfy({\n avatar,\n text1,\n text2,\n text3,\n bg_url,\n bg_color,\n font_color,\n blur,\n avatar_border,\n avatar_border_color,\n });\n return await this.rest.file(`/cards/welcome${params}`);\n }\n}\n"],"mappings":"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","names":[]}