npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@devnovaa-id/bmkg

v1.0.0

Published

Professional BMKG library for weather and earthquake data - ESM, TypeScript, fetch

Downloads

43

Readme

@devnovaa-id/bmkg

BMKG npm version npm bundle size license node version

Professional BMKG library for weather and earthquake data - ESM, TypeScript, fetch

FiturInstalasiPenggunaan CepatAPIContoh


✨ Fitur

  • Cepat & Ringan – Tanpa dependensi eksternal, menggunakan native fetch
  • 🌍 Universal – Bekerja di Node.js 18+, browser modern, React, Next.js, dan Deno
  • 📦 Dual Format – Mendukung ESM dan CommonJS
  • 🔄 Retry & Timeout – Exponential backoff dan timeout configurable
  • 💾 Caching – In-memory cache opsional untuk performa lebih baik
  • 🛡️ TypeScript – Full type definitions untuk autocomplete dan keamanan tipe
  • 🧩 Modular – Import hanya yang dibutuhkan (/cuaca, /gempa)
  • 🧪 Real API Tested – Diuji langsung dengan endpoint BMKG resmi

📦 Instalasi

npm install @devnovaa-id/bmkg

Atau menggunakan yarn/pnpm:

yarn add @devnovaa-id/bmkg
pnpm add @devnovaa-id/bmkg

🚀 Penggunaan Cepat

Wilayah (Provinsi, Kabupaten, Kecamatan, Desa)

import { getProvinsi, getKabupaten, getKecamatan, getDesa } from '@devnovaa-id/bmkg';

// Dapatkan semua provinsi
const provinsi = await getProvinsi();
console.log(provinsi[0]); // { id: "11", name: "ACEH" }

// Dapatkan kabupaten di Lampung (id=18)
const kabupaten = await getKabupaten('18');

// Dapatkan kecamatan di Way Kanan (id=1808)
const kecamatan = await getKecamatan('1808');

// Dapatkan desa di Negara Batin (id=180811)
const desa = await getDesa('180811');

Cuaca

import { getCuacaByAdm4, searchDesa, getCuacaByQuery } from '@devnovaa-id/bmkg/cuaca';

// Cari desa berdasarkan nama
const hasilPencarian = await searchDesa('marga jaya');
console.log(hasilPencarian.results);

// Prakiraan cuaca menggunakan kode ADM4
const cuaca = await getCuacaByAdm4('18.08.11.2009');
console.log(cuaca.data.data[0].cuaca[0][0].weather_desc);

// Prakiraan cuaca dengan pencarian otomatis
const cuaca2 = await getCuacaByQuery('marga jaya');

Gempa

import { getGempaTerkini, getGempaList, getGempaDirasakan, getGempaByMagnitude } from '@devnovaa-id/bmkg/gempa';

// Gempa terkini
const gempaTerkini = await getGempaTerkini();
console.log(`${gempaTerkini.Magnitude} - ${gempaTerkini.Wilayah}`);

// Daftar gempa terbaru
const daftarGempa = await getGempaList();

// Gempa yang dirasakan
const gempaDirasakan = await getGempaDirasakan();

// Filter gempa dengan magnitude >= 5.0
const gempaBesar = await getGempaByMagnitude(5.0);

⚙️ Konfigurasi

Anda dapat mengatur perilaku library secara global:

import { configure } from '@devnovaa-id/bmkg';

configure({
  timeout: 10000,        // Timeout 10 detik (default: 15000)
  retries: 3,            // Jumlah percobaan ulang (default: 2)
  enableCache: true,     // Aktifkan cache (default: false)
  cacheTTL: 120000,      // Masa berlaku cache 2 menit (default: 60000)
  logErrors: true,       // Log error ke console (default: true)
});

📚 API Reference

Wilayah

| Fungsi | Parameter | Kembalian | Deskripsi | |--------|-----------|-----------|------------| | getProvinsi() | - | Promise<Provinsi[]> | Semua provinsi | | getKabupaten(provinceId) | string (2 digit) | Promise<Kabupaten[]> | Kabupaten/kota dalam provinsi | | getKecamatan(regencyId) | string (4 digit) | Promise<Kecamatan[]> | Kecamatan dalam kabupaten | | getDesa(districtId) | string (6 digit) | Promise<Desa[]> | Desa dalam kecamatan |

Cuaca

| Fungsi | Parameter | Kembalian | Deskripsi | |--------|-----------|-----------|------------| | getCuacaByAdm4(adm4) | string (format: XX.XX.XX.XXXX) | Promise<CuacaResponse> | Prakiraan cuaca berdasarkan kode ADM4 | | searchDesa(query) | string | Promise<SearchDesaResponse> | Mencari desa berdasarkan kata kunci | | getCuacaByQuery(query) | string | Promise<CuacaResponse> | Prakiraan cuaca untuk desa pertama yang cocok |

Gempa

| Fungsi | Parameter | Kembalian | Deskripsi | |--------|-----------|-----------|------------| | getGempaTerkini() | - | Promise<GempaTerkini> | Gempa bumi terkini | | getGempaList() | - | Promise<GempaListItem[]> | Daftar 15-20 gempa terbaru | | getGempaDirasakan() | - | Promise<GempaDirasakan[]> | Gempa yang dirasakan masyarakat | | getGempaByMagnitude(magnitude, source?) | number, 'list' \| 'dirasakan' | Promise<GempaListItem[]> | Filter gempa berdasarkan magnitude |

Konfigurasi & Utility

| Fungsi | Parameter | Deskripsi | |--------|-----------|------------| | configure(config) | Partial<ClientConfig> | Mengatur timeout, retry, cache, dll | | clearCache() | - | Membersihkan semua cache |

🧩 Contoh Lengkap

React (Next.js)

'use client';
import { useEffect, useState } from 'react';
import { getGempaList, GempaListItem } from '@devnovaa-id/bmkg/gempa';

export default function GempaPage() {
  const [gempa, setGempa] = useState<GempaListItem[]>([]);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    getGempaList()
      .then(setGempa)
      .finally(() => setLoading(false));
  }, []);

  if (loading) return <div>Memuat data gempa...</div>;

  return (
    <ul>
      {gempa.map((g, idx) => (
        <li key={idx}>
          {g.Tanggal} - M{g.Magnitude} - {g.Wilayah}
        </li>
      ))}
    </ul>
  );
}

Node.js CLI

#!/usr/bin/env node
import { getCuacaByQuery } from '@devnovaa-id/bmkg/cuaca';

const query = process.argv[2];
if (!query) {
  console.error('Gunakan: node cuaca.js <nama_desa>');
  process.exit(1);
}

const cuaca = await getCuacaByQuery(query);
const data = cuaca.data.data[0].cuaca[0][0];
console.log(`
Lokasi: ${cuaca.data.lokasi.desa}, ${cuaca.data.lokasi.kecamatan}
Cuaca: ${data.weather_desc}
Suhu: ${data.t}°C
Kelembaban: ${data.hu}%
Angin: ${data.ws} m/s (${data.wd})
`);

Browser (ESM)

<script type="module">
  import { getGempaTerkini } from 'https://unpkg.com/@devnovaa-id/bmkg/dist/gempa/index.js';
  const gempa = await getGempaTerkini();
  document.body.innerHTML = `<h1>Gempa: ${gempa.Magnitude} - ${gempa.Wilayah}</h1>`;
</script>

🛠️ Error Handling

Library menggunakan custom error classes untuk memudahkan debugging:

import { BMKGError, ValidationError, NotFoundError } from '@devnovaa-id/bmkg';

try {
  await getCuacaByAdm4('invalid');
} catch (err) {
  if (err instanceof ValidationError) {
    console.log('Format input salah:', err.message);
  } else if (err instanceof NotFoundError) {
    console.log('Data tidak ditemukan');
  } else if (err instanceof BMKGError) {
    console.log(`Error BMKG: ${err.code} - ${err.message}`);
  }
}

📄 Lisensi

MIT © Devnova ID

🙏 Sumber Data

Data disediakan oleh Badan Meteorologi, Klimatologi, dan Geofisika (BMKG) melalui API devnova.icu.