{"_id":"@digitalmedika/bpjs-apotek","_rev":"6-a3e3c461a5e433e908c16e1f5fae3077","name":"@digitalmedika/bpjs-apotek","dist-tags":{"latest":"1.0.5"},"versions":{"1.0.0":{"name":"@digitalmedika/bpjs-apotek","version":"1.0.0","_id":"@digitalmedika/bpjs-apotek@1.0.0","maintainers":[{"name":"digitalmedika","email":"info@digitalmedika.co.id"}],"dist":{"shasum":"73e3d35ef8e3ac05485df2b59e9f2df3048a1570","tarball":"https://registry.npmjs.org/@digitalmedika/bpjs-apotek/-/bpjs-apotek-1.0.0.tgz","fileCount":24,"integrity":"sha512-QAu0V4BtYnqxFVGPMWqYT6mz9iq+831UPQ4FrNRhyG1n80ZV9YIig8TmaM4bWcJwB1XHGrg00E6EYfGeSyhlTA==","signatures":[{"sig":"MEUCIQDoAX4bceWW0I1wkFEoqBuEm6FGzVKsJfxSNvlyeWq7TQIgZKCJArlWoWQbw4wWn9I46mZAmra8dmr5Ogd+TSu27CQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20294},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"81f1b846e2c5e8d329a55581171d50a702730128","scripts":{"test":"bun test","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"digitalmedika","email":"info@digitalmedika.co.id"},"_npmVersion":"11.6.2","description":"Unofficial BPJS Apotek Online Bridging Library","directories":{},"_nodeVersion":"24.12.0","dependencies":{"lz-string":"^1.5.0"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^1.3.6","typescript":"^5.9.3","@types/node":"^25.0.10"},"_npmOperationalInternal":{"tmp":"tmp/bpjs-apotek_1.0.0_1769183362477_0.45536955926310396","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@digitalmedika/bpjs-apotek","version":"1.0.1","_id":"@digitalmedika/bpjs-apotek@1.0.1","maintainers":[{"name":"digitalmedika","email":"info@digitalmedika.co.id"}],"dist":{"shasum":"4b8b635c87ae850cc8c0d8836c09b2d71f99e8e0","tarball":"https://registry.npmjs.org/@digitalmedika/bpjs-apotek/-/bpjs-apotek-1.0.1.tgz","fileCount":24,"integrity":"sha512-47V9lZOmgPZX9zhPzgW8qv5RSAJ9ZY0JmJua1zp56aPuLiIP3yrILfEwFoKMpCos2FRAe7ln6MBy51CcXqGsjw==","signatures":[{"sig":"MEQCIH63QhPqTOPQxF7+seL3XJOaQBrKQz9seoA9dVEKRnmuAiBq2GB5/0G/OnlK44HzOy++yx9h1CmOxK7UC9k9rVdr3w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20355},"main":"dist/index.js","types":"dist/index.d.ts","shasum":"4b8b635c87ae850cc8c0d8836c09b2d71f99e8e0","scripts":{"test":"bun test","build":"tsc","prepublishOnly":"bun run build"},"_npmUser":{"name":"digitalmedika","email":"info@digitalmedika.co.id"},"_integrity":"sha512-47V9lZOmgPZX9zhPzgW8qv5RSAJ9ZY0JmJua1zp56aPuLiIP3yrILfEwFoKMpCos2FRAe7ln6MBy51CcXqGsjw==","_npmVersion":"10.8.3","description":"Unofficial BPJS Apotek Online Bridging Library","directories":{},"_nodeVersion":"24.3.0","dependencies":{"lz-string":"^1.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^1.3.6","typescript":"^5.9.3","@types/node":"^25.0.10"},"_npmOperationalInternal":{"tmp":"tmp/bpjs-apotek_1.0.1_1773719950496_0.8774629566665706","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@digitalmedika/bpjs-apotek","version":"1.0.2","_id":"@digitalmedika/bpjs-apotek@1.0.2","maintainers":[{"name":"digitalmedika","email":"info@digitalmedika.co.id"}],"homepage":"https://github.com/digitalmedika/bpjs-apotek#readme","bugs":{"url":"https://github.com/digitalmedika/bpjs-apotek/issues"},"dist":{"shasum":"570322893edaf017394411a910387209f743ee2a","tarball":"https://registry.npmjs.org/@digitalmedika/bpjs-apotek/-/bpjs-apotek-1.0.2.tgz","fileCount":24,"integrity":"sha512-BassnRLkpejdInJnGL7u8tTkz5Bc3eYLeKEEjEEln6mAb4mOC5QEvVbvIqMVF2xK2LCfU7L879jNokZ2aH+0Bg==","signatures":[{"sig":"MEQCIFcCcjcNTjLQpeL0DRSNnv4vgO0LmPJePwrpDuOfF9noAiBO2Z/ReZCHXoQxdtyDwUMb5YAZxJjRYnYtVmSefJnV5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@digitalmedika%2fbpjs-apotek@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":20884},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"252e0a044704b75f8c6fda37f61d5c2d49eebed7","scripts":{"test":"bun test","build":"tsc","release":"bun run build && changeset publish","version":"changeset version","changeset":"changeset","test:unit":"bun test tests/*.unit.test.ts","prepublishOnly":"bun run build"},"_npmUser":{"name":"digitalmedika","email":"info@digitalmedika.co.id"},"repository":{"url":"git+https://github.com/digitalmedika/bpjs-apotek.git","type":"git"},"_npmVersion":"10.9.7","description":"Unofficial BPJS Apotek Online Bridging Library","directories":{},"_nodeVersion":"22.22.2","dependencies":{"lz-string":"^1.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^1.3.6","typescript":"^5.9.3","@types/node":"^25.0.10","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/bpjs-apotek_1.0.2_1776933000721_0.9134946241819961","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@digitalmedika/bpjs-apotek","version":"1.0.3","_id":"@digitalmedika/bpjs-apotek@1.0.3","maintainers":[{"name":"digitalmedika","email":"info@digitalmedika.co.id"}],"homepage":"https://github.com/digitalmedika/bpjs-apotek#readme","bugs":{"url":"https://github.com/digitalmedika/bpjs-apotek/issues"},"dist":{"shasum":"6132ce66c46307eba4182e8c6aba2d46e04eac1c","tarball":"https://registry.npmjs.org/@digitalmedika/bpjs-apotek/-/bpjs-apotek-1.0.3.tgz","fileCount":24,"integrity":"sha512-LTuhuWTvwsGaDIwiUNaZlOL7+AvfS3FbgN7nLaT280lk6OKj22tnKte5OAlgo4Sws26srbdl+dfSwqBE8/Jwlg==","signatures":[{"sig":"MEQCIBT3fyx6edR+Vt/RjHP2DVSqPHoShZTtRqGNPGzkLhALAiBOYiaEqQ5s99/4qefwL93YZqJ8OW5Gg+za+n4hax/ulg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@digitalmedika%2fbpjs-apotek@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":23818},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"dc4182547f062c24981b2fe28729870bbd97b354","scripts":{"test":"bun test","build":"tsc","release":"bun run build && changeset publish","version":"changeset version","changeset":"changeset","test:unit":"bun test tests/*.unit.test.ts","prepublishOnly":"bun run build"},"_npmUser":{"name":"digitalmedika","email":"info@digitalmedika.co.id"},"repository":{"url":"git+https://github.com/digitalmedika/bpjs-apotek.git","type":"git"},"_npmVersion":"10.9.7","description":"Unofficial BPJS Apotek Online Bridging Library","directories":{},"_nodeVersion":"22.22.2","dependencies":{"lz-string":"^1.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^1.3.6","typescript":"^5.9.3","@types/node":"^25.0.10","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/bpjs-apotek_1.0.3_1776948570523_0.20062054455455502","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@digitalmedika/bpjs-apotek","version":"1.0.4","_id":"@digitalmedika/bpjs-apotek@1.0.4","maintainers":[{"name":"digitalmedika","email":"info@digitalmedika.co.id"}],"homepage":"https://github.com/digitalmedika/bpjs-apotek#readme","bugs":{"url":"https://github.com/digitalmedika/bpjs-apotek/issues"},"dist":{"shasum":"3ed47a421ca6146c894ab084bbe1d3581a10058d","tarball":"https://registry.npmjs.org/@digitalmedika/bpjs-apotek/-/bpjs-apotek-1.0.4.tgz","fileCount":24,"integrity":"sha512-svyLBMlWk753KUmp3qTJiAWWdYxeEMgBtiCEvsMjO3mvRpSm9cGmvs8rEy+Tme0l0gFmop7eGWZkAWqf9q9u7A==","signatures":[{"sig":"MEUCIQCai84er91YgPbqJg6jpyl9jZVvpZzXGKUwdFcgzowzhQIgSz5cZUHdcFf1Yvf+M0xb97ba+KudFXoDNiCzQRUSeDc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@digitalmedika%2fbpjs-apotek@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24676},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"1d9e8d90a926a7edc176eea4ab10e5f7a3124efc","scripts":{"test":"bun test","build":"tsc","release":"bun run build && changeset publish","version":"changeset version","changeset":"changeset","test:unit":"bun test tests/*.unit.test.ts","prepublishOnly":"bun run build"},"_npmUser":{"name":"digitalmedika","email":"info@digitalmedika.co.id"},"repository":{"url":"git+https://github.com/digitalmedika/bpjs-apotek.git","type":"git"},"_npmVersion":"10.9.7","description":"Unofficial BPJS Apotek Online Bridging Library","directories":{},"_nodeVersion":"22.22.2","dependencies":{"lz-string":"^1.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^1.3.6","typescript":"^5.9.3","@types/node":"^25.0.10","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/bpjs-apotek_1.0.4_1776999565761_0.6567248129148997","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@digitalmedika/bpjs-apotek","version":"1.0.5","description":"Unofficial BPJS Apotek Online Bridging Library","repository":{"type":"git","url":"git+https://github.com/digitalmedika/bpjs-apotek.git"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","test":"bun test","test:unit":"bun test tests/*.unit.test.ts","changeset":"changeset","version":"changeset version","release":"bun run build && changeset publish","prepublishOnly":"bun run build"},"publishConfig":{"access":"public"},"dependencies":{"lz-string":"^1.5.0"},"devDependencies":{"@changesets/cli":"^2.31.0","@types/node":"^25.0.10","bun-types":"^1.3.6","typescript":"^5.9.3"},"_id":"@digitalmedika/bpjs-apotek@1.0.5","gitHead":"b12c7790a1b68c944934025197900b456185f1d3","bugs":{"url":"https://github.com/digitalmedika/bpjs-apotek/issues"},"homepage":"https://github.com/digitalmedika/bpjs-apotek#readme","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-1M2Vp6YoBryte9vLsHhFmCIKj+JYeKU1FgDduAY5lm0jexRyHWGHaOv/tBoCb1UHBnrVaq/6UG+spkdwSES7dw==","shasum":"ee8ecfdbdf109a495f482a313eca9099f6221784","tarball":"https://registry.npmjs.org/@digitalmedika/bpjs-apotek/-/bpjs-apotek-1.0.5.tgz","fileCount":24,"unpackedSize":25734,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@digitalmedika%2fbpjs-apotek@1.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGWpt+DcVqD0M+t7rAxS/GA10KqcKJ/RUyoHWHsvnJxVAiEAgn9a1OVdPK5K1T7pziRHc2r+vOWEBhr0qF9ebPAbEgg="}]},"_npmUser":{"name":"digitalmedika","email":"info@digitalmedika.co.id"},"directories":{},"maintainers":[{"name":"digitalmedika","email":"info@digitalmedika.co.id"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bpjs-apotek_1.0.5_1777198423397_0.9422008192686333"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-23T15:49:22.096Z","modified":"2026-04-26T10:13:43.815Z","1.0.0":"2026-01-23T15:49:22.617Z","1.0.1":"2026-03-17T03:59:10.642Z","1.0.2":"2026-04-23T08:30:00.870Z","1.0.3":"2026-04-23T12:49:30.682Z","1.0.4":"2026-04-24T02:59:25.901Z","1.0.5":"2026-04-26T10:13:43.543Z"},"bugs":{"url":"https://github.com/digitalmedika/bpjs-apotek/issues"},"homepage":"https://github.com/digitalmedika/bpjs-apotek#readme","repository":{"type":"git","url":"git+https://github.com/digitalmedika/bpjs-apotek.git"},"description":"Unofficial BPJS Apotek Online Bridging Library","maintainers":[{"name":"digitalmedika","email":"info@digitalmedika.co.id"}],"readme":"# BPJS Apotek Online Bridging API (Unofficial)\n\nLibrary TypeScript/Bun untuk melakukan bridging dengan layanan **Apotek Online (Apon)** dari BPJS Kesehatan. Library ini menangani seluruh proses otentikasi (Signature), enkripsi/dekripsi data, dan kompresi (LZ-String) secara otomatis.\n\n## Fitur Utama\n\n*   ✅ **Otentikasi Otomatis**: Generate `X-cons-id`, `X-timestamp`, `X-signature` secara otomatis.\n*   ✅ **Auto Decryption**: Respon terenkripsi dari BPJS langsung didekripsi (AES + LZ-String) sehingga siap pakai.\n*   ✅ **Type-Safe**: Menggunakan TypeScript dengan interface yang didefinisikan untuk response API.\n*   ✅ **Modular**: Terbagi berdasarkan modul fungsi (Referensi, Resep, SEP, dll).\n*   ✅ **Tests Included**: Dilengkapi dengan Integration Test menggunakan Bun Test Runner.\n\n## Prasyarat\n\n*   [Bun](https://bun.sh/) runtime environment.\n\n## Instalasi\n\nInstall package dari npm registry:\n\n```bash\nbun add @digitalmedika/bpjs-apotek\n```\n\n## Konfigurasi\n\nBuat file `.env` pada root project Anda dan isi dengan kredensial bridging Apotek Online:\n\n```env\nAPOTEK_CONS_ID=no_cons_id_anda\nAPOTEK_SECRET_KEY=secret_key_anda\nAPOTEK_USER_KEY=user_key_anda\nAPOTEK_BASE_URL=https://apijkn-dev.bpjs-kesehatan.go.id/apotek-rest-dev\nAPOTEK_KDPPK=kode_ppk_anda\n```\n\n## Cara Penggunaan\n\nLibrary ini dirancang agar mudah digunakan tanpa perlu memikirkan proses enkripsi/dekripsi.\n\n### Inisialisasi\n\n```typescript\nimport { ApotekOnline } from \"@digitalmedika/bpjs-apotek\";\n\n// Opsi 1: Otomatis load dari .env\nconst apotek = new ApotekOnline();\n\n// Opsi 2: Manual Configuration\nconst apotek = new ApotekOnline({\n    consId: \"12345\",\n    secretKey: \"secret\",\n    userKey: \"userkey\",\n    baseUrl: \"https://api.bpjs...\",\n    kdppk: \"0112A017\",\n});\n```\n\n### Contoh Request\n\nSetiap method mengembalikan Promise yang berisi object response BPJS yang sudah didekripsi.\n\n```typescript\n// 1. Cek Referensi Poli\nconst response = await apotek.referensi.poli(\"ICU\");\n\nif (response.metaData.code === \"200\") {\n    console.log(\"Daftar Poli:\", response.response.list);\n} else {\n    console.error(\"Error:\", response.metaData.message);\n}\n\n// 2. Cek Referensi DPHO\nconst dpho = await apotek.referensi.dpho();\n\n// 3. Cari SEP\nconst sep = await apotek.sep.cari(\"1234567890123456789\");\n```\n\n## Daftar Modul API\n\nLibrary ini mencakup modul-modul berikut sesuai dokumentasi BPJS Apotek Online:\n\n### 1. Referensi (`apotek.referensi`)\n*   `dpho()`: Ambil daftar obat DPHO.\n*   `poli(keyword)`: Cari poli.\n*   `faskes(jenis, nama)`: Cari Faskes 1 atau RS.\n*   `settingApotek(kodeApotek)`: Baca setting PPK.\n*   `spesialistik()`: Referensi spesialistik.\n*   `obat(jenis, tanggal, filter)`: Cari referensi obat (Jadi/Racikan).\n\n### 2. Resep (`apotek.resep`)\n*   `simpan(data: ResepSimpanRequest)`: Bridging simpan resep.\n*   `hapus(data: ResepHapusRequest)`: Hapus resep (DELETE, Content-Type: application/x-www-form-urlencoded).\n*   `daftar(data: ResepDaftarRequest)`: Lihat daftar resep.\n\nContoh simpan resep:\n\n```typescript\nconst response = await apotek.resep.simpan({\n    TGLSJP: \"2021-08-05 18:13:11\",\n    REFASALSJP: \"1202R0010318V000092\",\n    POLIRSP: \"IPD\",\n    KDJNSOBAT: \"2\",\n    NORESEP: \"12346\",\n    IDUSERSJP: \"USR-01\",\n    TGLRSP: \"2021-08-05 00:00:00\",\n    TGLPELRSP: \"2021-08-05 00:00:00\",\n    KdDokter: \"0\",\n    iterasi: \"0\",\n});\n```\n\nContoh hapus resep:\n\n```typescript\nconst response = await apotek.resep.hapus({\n    nosjp: \"1202A00201210000032\",\n    refasalsjp: \"1202R0010121V000325\",\n    noresep: \"0SI44\",\n});\n```\n\n### 3. Obat (`apotek.obat`)\n*   `simpanNonRacikan(data: ObatNonRacikanSimpanRequest)`: Simpan obat non racikan.\n*   `simpanRacikan(data: ObatRacikanSimpanRequest)`: Simpan obat racikan.\n*   `updateStok(data: ObatUpdateStokRequest)`: Update stok obat.\n\n### 4. Pelayanan Obat (`apotek.pelayananObat`)\n*   `daftar(nomorSep)`: Daftar pelayanan obat by SEP.\n*   `hapus(data: PelayananObatHapusRequest)`: Hapus pelayanan obat.\n*   `riwayat(awal, akhir, noKartu)`: Riwayat obat pasien.\n\n### 5. SEP (`apotek.sep`)\n*   `cari(nomorSep)`: Cari data SEP, mengembalikan `BpjsResponse<SepData>`.\n\n### 6. Monitoring (`apotek.monitoring`)\n*   `dataKlaim(bulan, tahun, jenisObat, status)`: Monitoring data klaim.\n\n### 7. PRB (`apotek.prb`)\n*   `rekapPeserta(tahun, bulan)`: Rekap Peserta PRB yang baru dilakukan PRB oleh RS.\n\n## Testing\n\nProject ini menggunakan library testing bawaan **Bun**.\n\nPastikan dependencies sudah terpasang dan file `.env` terisi dengan kredensial Development (Dev) yang valid sebelum menjalankan test.\n\n```bash\nbun install\nbun test\n```\n\n## Struktur Project\n\n```\n├── src/\n│   ├── core/           # Logic utama (Signature, HTTP Client, Decryption)\n│   ├── features/       # Modul API individual (Referensi, Resep, dll)\n│   ├── types/          # TypeScript Interfaces\n│   └── ApotekOnline.ts # Class utama (Main entry point)\n├── tests/              # Integration tests\n├── .env                # File konfigurasi (credential)\n└── README.md           # Dokumentasi\n```\n","readmeFilename":"README.md"}