UNPKG

flamesshield-sdk

Version:

Flames Shield Smart rate limiting for Firebase Cloud Functions to protect your services from excessive requests

62 lines (61 loc) 2.91 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.remotePost = void 0; const axios_1 = __importDefault(require("axios")); const version_1 = require("./version"); // Import from the auto-generated version file const remotePost = (data_1, apiKey_1, remoteUrl_1, ...args_1) => __awaiter(void 0, [data_1, apiKey_1, remoteUrl_1, ...args_1], void 0, function* (data, apiKey, remoteUrl, options = {}) { const url = remoteUrl || process.env.REMOTE_URL || "https://ratelimit.flamesshield.com"; if (!url) { throw new Error('REMOTE_URL not set'); } if (!apiKey) { throw new Error('API key not provided'); } const postData = Object.assign(Object.assign({}, data), { version: version_1.VERSION // Use the hard-coded version from our provider }); if (options.verbose) { console.log(`[FlameShield] Making remote API call to ${url}`); console.log(`[FlameShield] Request data:`, JSON.stringify(postData, null, 2)); } try { const response = yield axios_1.default.post(url, postData, { headers: { 'x-api-key': apiKey, 'Content-Type': 'application/json' } }); const responseData = response.data; if (options.verbose) { console.log(`[FlameShield] Remote API response:`, JSON.stringify(responseData, null, 2)); } return responseData.quotaExcdeeded; } catch (error) { if (options.verbose) { if (axios_1.default.isAxiosError(error)) { console.error(`[FlameShield] Remote API error:`, error.message); if (error.response) { console.error(`[FlameShield] Response status: ${error.response.status}`); console.error(`[FlameShield] Response data:`, error.response.data); } } else { console.error(`[FlameShield] Error during remote API call:`, error); } } throw error; } }); exports.remotePost = remotePost;