UNPKG

node-groupme

Version:

The only GroupMe API library that isn't a million years old.

93 lines 3.72 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const node_fetch_1 = __importStar(require("node-fetch")); const url_1 = require("url"); const util_1 = require("util"); function assertDefined(val, err) { if (val === undefined || val === null) throw err; } function createAPIError(message, endpoint, options, response) { return new Error(`${message}\n-- Endpoint: ${endpoint}\n-- Options: ${(0, util_1.inspect)(options)}\n-- Response: ${(0, util_1.inspect)(response)}`); } function* i() { let i = 1; while (true) { i = (i + 1) % 10000000; yield i; } } class RESTManager { constructor(client) { this.client = client; this.generator = i(); } async api(method, path, data = {}, { skipJsonParse = false, allowNull = false, version = 'v3', } = {}) { const url = new url_1.URL(path, RESTManager.URLS[version]); if (data?.query) { for (const key in data.query) { if (Object.prototype.hasOwnProperty.call(data.query, key)) { const value = data.query[key]; url.searchParams.set(key, String(value)); } } } const init = {}; init.headers = new node_fetch_1.Headers(); init.headers.set('X-Access-Token', this.client.token); init.method = method; if (data?.body) { init.headers.set('Content-Type', 'application/json'); init.body = JSON.stringify(data.body); } const response = await (0, node_fetch_1.default)(url, init); // console.log(`-----\nAPI request\nurl: ${url}\n-----`) if (skipJsonParse) return response; // for (const header of response.headers.entries()) // console.log(header) if (response.headers.get('content-length') === '0') { if (allowNull) return null; else throw createAPIError('Received a response with Content-Length: 0, but expected content', url, data, {}); } const json = await response.json(); assertDefined(json, createAPIError('Invalid API response', url, data, json)); assertDefined(json.meta, createAPIError('Response is missing "meta" field', url, data, json)); if (json.meta.errors) throw createAPIError(json.meta.errors.join('; '), url, data, json); const result = json.response; return result; } guid() { return `node-groupme_${this.generator.next().value}_${Math.floor(Math.random() * 16 ** 6) .toString(16) .padEnd(6, '0')}`; } } exports.default = RESTManager; RESTManager.URLS = { v4: 'https://api.groupme.com/v4/', v3: 'https://api.groupme.com/v3/', v2: 'https://v2.groupme.com/', }; //# sourceMappingURL=rest.js.map