snowflake-api
Version:
Official api wrapper for snowflake api.
249 lines (248 loc) • 7.73 kB
JavaScript
;
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;