UNPKG

wrs-bmkg

Version:

Wrapper tidak resmi yang digunakan untuk mendapatkan informasi gempa dari WRS-BMKG

56 lines (48 loc) 1.65 kB
// wrs.js // Wrapper tidak resmi yang digunakan untuk mendapatkan informasi dari WRS BMKG const miniget = require("miniget"); const events = require("events"); /* * @param object apiURL * return event */ module.exports = function newListener(apiURL = "https://bmkg-content-inatews.storage.googleapis.com") { let event = new events(); let stop = false; event.lastAlert = null; event.lastRealtimeQL = null; function get(t) { if (stop) return; miniget(apiURL, { path: `/datagempa.json?t=${Date.now()}` }).text().then(body => { let msg = JSON.parse(body); event.emit("incommingBody", body); if (!!event.lastAlert && msg.identifier === event.lastAlert.identifier) return get(); event.lastAlert = msg; event.emit(msg.info.event, msg.info); // Then do a polling after request finished. setTimeout(_ => get(t), t); }).catch(err => event.emit('error', err)); miniget(apiURL, { path: `/lastQL.json?t=${Date.now()}` }).text().then(body => { let msg = JSON.parse(body) msg = msg.features[0]; event.emit("incommingBody_lastQL", body); if (!!event.lastRealtimeQL && msg.properties.id === event.lastRealtimeQL.properties.id) return; event.lastRealtimeQL = msg; event.emit('realtime', msg); }).catch(err => event.emit('error', err)); } event.gempaQL = function getGempaQL () { return new Promise((res, rej) => { miniget(apiURL, { path: `/gempaQL.json` }).text().then(body => { let msg = JSON.parse(body); res(msg.features); }).catch(rej); }); } event.startPolling = timeout => { stop = false; get(timeout || 10000); } event.stopPolling = _ => stop = true; return event; }