UNPKG

snowflake-api

Version:
249 lines (248 loc) 7.73 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Constants = exports.Client = void 0; const fs_1 = require("fs"); const node_fetch_1 = __importDefault(require("node-fetch")); const Constants_1 = require("./Constants"); Object.defineProperty(exports, "Constants", { enumerable: true, get: function () { return Constants_1.Constants; } }); class Client { /** * Creates new api client * @param token API key */ constructor(token) { /** * API base url */ this.BASE_URL = Constants_1.Constants.BASE_URL; if (!token && typeof process.env.SNOWAPI_TOKEN === "string") { Object.defineProperty(this, "token", { value: process.env.SNOWAPI_TOKEN }); } else if (!token) { throw new Error("Token was not provided to the client!"); } else { Object.defineProperty(this, "token", { value: token }); } } setBaseURL(url) { this.BASE_URL = url; } /** * Returns meme object * @param sbr Subreddit */ async meme(sbr) { const response = await this._request(`meme${!!sbr && typeof sbr === "string" ? `?sbr=${encodeURIComponent(sbr)}` : ""}`, "JSON"); const data = { ...response, createdAt: response.createdAt instanceof Date ? response.createdAt : new Date(response.createdAt) }; return data; } /** * Returns fake discord bot token */ async discordToken() { const response = await this._request("token", "JSON"); return response.token || ""; } /** * AI chatbot */ async chatbot(options) { const { name, gender, message, user } = options; if (!message) throw new Error("missing message for chatbot"); const chatbotparams = () => { let u = ""; if (!!name) u += `&name=${encodeURIComponent(name)}`; if (!!gender) u += `&gender=${encodeURIComponent(gender)}`; if (!!user) u += `&user=${encodeURIComponent(user)}`; return u; }; const response = await this._request(`chatbot?message=${encodeURIComponent(message)}${chatbotparams()}`, "JSON"); return response.message || "sorry, I can't understand."; } /** * Random cat image */ async cat() { const res = await this._request("cat", "BUFFER"); return res; } /** * Random dog image */ async dog() { const res = await this._request("dog", "BUFFER"); return res; } /** * Random duck image */ async duck() { const res = await this._request("duck", "BUFFER"); return res; } /** * Random fox image */ async fox() { const res = await this._request("fox", "BUFFER"); return res; } /** * Random roast */ async roast() { const res = await this._request("roast", "JSON"); return res.roast || ""; } /** * Pokemon info * @param name Pokemon name or id */ async pokemon(name) { const res = await this._request(`pokemon?name=${name}`, "JSON"); return res; } /** * Morse code encoder/decoder * @param data message to encode/decode * @param type ENCODE or DECODE */ async morseCode(data, type) { const res = await this._request(`morse/${type === "DECODE" ? "decode" : "encode"}?text=${data}`, "JSON"); return res.data || ""; } /** * get package information from deno registry * @param moduleName Module name */ async deno(moduleName) { const res = await this._request(`/registry/deno?module=${moduleName}`, "JSON"); return res; } /** * get package information from npm registry * @param moduleName Module name */ async npm(moduleName) { const res = await this._request(`/registry/npm?module=${moduleName}`, "JSON"); return res; } /** * get package information from pypi registry * @param moduleName Module name */ async pypi(moduleName) { const res = await this._request(`/registry/pypi?module=${moduleName}`, "JSON"); return res; } /** * Reverse a message * @param message Message to reverse */ async reverse(message) { const res = await this._request(`/reverse?message=${message}`, "JSON"); return res.message || ""; } /** * Returns discord bot token information * @param token Discord bot token */ async tokeninfo(token) { const res = await this._request(`/tokeninfo?token=${token}`, "JSON"); return res; } /** * Returns API stats */ async stats() { const res = await this._request("/stats", "JSON"); return res; } /** * Returns current user info */ async me() { const res = await this._request("/me", "JSON"); return res; } /** * Base64 encoder/decoder * @param data message to encode/decode * @param type ENCODE or DECODE */ async base64(data, type) { const res = await this._request(`base64/${type === "DECODE" ? "decode" : "encode"}?data=${data}`, "JSON"); return res.data || ""; } /** * Returns basic github stats of a user * @param username GitHub username */ async githubStats(username) { const res = await this._request(`githubstats?username=${username}`, "JSON"); return res; } /** * Returns basic youtube stats of a channel * @param channelID YouTube channel id */ async youtube(channelID) { const res = await this._request(`youtube?channel=${channelID}`, "JSON"); return res; } _request(path, type) { return node_fetch_1.default(`${this.BASE_URL}/api/${path}`, { headers: { "Authorization": this.token } }) .then(async (res) => { if (res.status !== 200) { let json; try { json = await res.json(); } catch (e) { } if (res.status >= 500) throw new Error(`[API_INTERNAL_ERROR_${res.status}] ${json && json.error || res.statusText}`); switch (res.status) { case 400: case 401: case 403: case 404: case 429: throw new Error(`[API_ERROR_${res.status}] ${json && json.error || res.statusText}`); } } return type === "BUFFER" ? res.buffer() : res.json(); }) .then(res => { if (res.error) throw new Error(`[API_ERROR] ${res.error}`); return res; }); } static get version() { const path = `${__dirname}/../package.json`; const raw = fs_1.readFileSync(path, "utf-8"); const json = JSON.parse(raw); return json["version"]; } } exports.Client = Client; exports.default = Client;