UNPKG

@dfansyah/scammer-api-reader

Version:

Package Node.js untuk membaca data dari API publik Database Scammer Indonesia.

75 lines (68 loc) 2.5 kB
/** * Class untuk membaca data dari Scammer DB API. */ class ScammerApiReader { /** * @param {string} apiBaseUrl Base URL dari API Anda. Contoh: 'https://anti-ripper.my.id/api' */ constructor(apiBaseUrl) { if (!apiBaseUrl) { throw new Error('Base URL API wajib disediakan.'); } this.baseUrl = apiBaseUrl.endsWith('/') ? apiBaseUrl.slice(0, -1) : apiBaseUrl; if (typeof fetch === 'undefined') { console.warn("Global 'fetch' tidak ditemukan. Jika Anda menggunakan Node.js <18, install 'node-fetch'."); } } // Helper internal untuk melakukan request async #fetch(endpoint) { try { const response = await fetch(`${this.baseUrl}${endpoint}`); if (!response.ok) { const errorText = await response.text(); throw new Error(`API request failed with status ${response.status}: ${errorText}`); } return response.json(); } catch (error) { console.error(`SDK Error - Gagal fetch dari ${endpoint}:`, error); throw error; } } /** * Mengambil semua data scammer. * @returns {Promise<object[]>} Array data scammer. */ async getAll() { return this.#fetch('/scammers'); } /** * Mencari data scammer berdasarkan kata kunci. * @param {string} term Kata kunci pencarian. * @returns {Promise<object[]>} Array hasil pencarian. */ async search(term) { if (!term) { throw new Error('Kata kunci pencarian tidak boleh kosong.'); } const lowercasedTerm = term.toLowerCase(); const allData = await this.getAll(); return allData.filter(scammer => scammer.name.toLowerCase().includes(lowercasedTerm) || scammer.reason.toLowerCase().includes(lowercasedTerm) || (scammer.contact && scammer.contact.toLowerCase().includes(lowercasedTerm)) ); } /** * Mengambil satu data scammer berdasarkan ID-nya. * @param {number} id ID unik dari data scammer. * @returns {Promise<object|null>} Objek data scammer atau null. */ async getById(id) { if (!id || typeof id !== 'number') { throw new Error('ID harus berupa angka.'); } const allData = await this.getAll(); return allData.find(scammer => scammer.id === id) || null; } } module.exports = ScammerApiReader;