@dfansyah/scammer-api-reader
Version:
Package Node.js untuk membaca data dari API publik Database Scammer Indonesia.
75 lines (68 loc) • 2.5 kB
JavaScript
/**
* 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;