{"id":47605325,"url":"https://github.com/ssecd/jkn","last_synced_at":"2026-04-01T19:11:15.242Z","repository":{"id":174338048,"uuid":"649404427","full_name":"ssecd/jkn","owner":"ssecd","description":"Bridging BPJS di Node.js, Deno, dan Bun lebih mudah dan cepat ⚡","archived":false,"fork":false,"pushed_at":"2026-03-07T04:17:04.000Z","size":1103,"stargazers_count":42,"open_issues_count":2,"forks_count":27,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-07T12:54:15.221Z","etag":null,"topics":["antrean-bpjs","bpjs","bpjs-bridging","bun","bunjs","deno","denojs","icare","jkn","mobile-jkn","nodejs","pcare","rekam-medis","vclaim","vclaim-encrypted","vclaim-rest"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/@ssecd/jkn","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ssecd.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-06-04T18:29:37.000Z","updated_at":"2026-03-07T04:17:07.000Z","dependencies_parsed_at":"2023-12-23T03:19:25.602Z","dependency_job_id":"7f930bf2-bccc-466b-917d-4d956a4fda31","html_url":"https://github.com/ssecd/jkn","commit_stats":null,"previous_names":["ssec-llg/jkn","ssecd/jkn"],"tags_count":35,"template":false,"template_full_name":null,"purl":"pkg:github/ssecd/jkn","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssecd%2Fjkn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssecd%2Fjkn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssecd%2Fjkn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssecd%2Fjkn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ssecd","download_url":"https://codeload.github.com/ssecd/jkn/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssecd%2Fjkn/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31291099,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["antrean-bpjs","bpjs","bpjs-bridging","bun","bunjs","deno","denojs","icare","jkn","mobile-jkn","nodejs","pcare","rekam-medis","vclaim","vclaim-encrypted","vclaim-rest"],"created_at":"2026-04-01T19:11:14.632Z","updated_at":"2026-04-01T19:11:15.233Z","avatar_url":"https://github.com/ssecd.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# JKN\n\nJKN (BPJS) Bridging API untuk NodeJS\n\n## Fitur\n\n- ✅ Aplicares\n- ✅ VClaim\n- ✅ Antrean\n- ✅ Apotek\n- ✅ i-Care\n- ✅ Rekam Medis\n- 🧩 PCare _([partial](https://github.com/ssecd/jkn/pull/26))_\n\n## Demo\n\nhttps://github.com/user-attachments/assets/02809ccd-30ea-48a8-bbb3-1e0df687175a\n\n## Instalasi\n\nInstalasi paket dapat dilakukan dengan perintah berikut:\n\n```bash\n# Node\nnpm install @ssecd/jkn\n\n# Bun\nbun install @ssecd/jkn\n\n# Deno\ndeno install npm:@ssecd/jkn\n```\n\nUntuk dukungan _type_ pada API Rekam Medis, perlu menambahkan development dependensi `@types/fhir` dengan perintah:\n\n```bash\nnpm install --save-dev @types/fhir\n```\n\n\u003e Instalasi paket NodeJS juga dapat dilakukan menggunakan `PNPM` atau `YARN`\n\n## Penggunaan\n\nPenggunaan paket ini sangatlah sederhana, cukup menginisialisasi global instansi pada sebuah modul atau file seperti berikut:\n\n```ts\n// file: jkn.ts atau jkn.js\n\nimport JKN from '@ssecd/jkn';\n\nconst jkn = new JKN();\n\nexport default jkn;\n```\n\nSecara default konfigurasi seperti cons id atau cons secret akan dibaca melalui environment variable namun konfigurasi juga dapat diatur pada constructor class JKN seperti berikut:\n\n```ts\n// file: jkn.ts atau jkn.js\n\nimport JKN from '@ssecd/jkn';\n\nconst jkn = new JKN({\n\tconsId: '\u003ccons id dari bpjs\u003e'\n\t// dan seterusnya ...\n});\n\nexport default jkn;\n```\n\nSelain menggunakan objek, konfigurasi juga dapat diatur menggunakan fungsi, misalnya pada kasus membaca atau mendapatkan konfigurasi dari database:\n\n```ts\n// file: jkn.ts atau jkn.js\n\nimport JKN from '@ssecd/jkn';\n\nconst jkn = new JKN(async () =\u003e {\n\tconst result = await sql`select * from config`;\n\treturn {\n\t\tconsId: result.consId\n\t\t// dan seterusnya ...\n\t};\n});\n\nexport default jkn;\n```\n\nPerlu diperhatikan bahwa fungsi pada constructor parameter tersebut hanya akan dipanggil satu kali. Bila terjadi perubahan konfigurasi harap memanggil fungsi `await invalidateConfig()` pada instansi JKN untuk memperbaharui atau menerapkan perubahan konfigurasi.\n\nKemudian cukup impor module `jkn` tersebut di mana pun saat akan menggunakannya:\n\n```ts\nimport jkn from './path/to/jkn.js';\n\nconst result = await jkn.vclaim.referensi.faskes({\n\tkeyword: 'silampari',\n\tjenis: 2\n});\n\nconsole.log(result);\n/*\n{\n\tresponse: {\n\t\tfaskes: [\n\t\t\t{\n\t\t\t\tkode: \"0089S002\",\n\t\t\t\tnama: \"Silampari Sriwijaya Eye Centre\"\n\t\t\t}\n\t\t]\n\t};\n\tmetaData: {\n\t\tcode: \"200\";\n\t\tmessage: \"OK\";\n\t};\n}\n*/\n```\n\nSetiap parameter dan response objek memiliki type TypeScript dan komentar dokumentasi yang dibentuk sesuai dengan dokumentasi API BPJS Kesehatan pada [TrustMark](https://dvlp.bpjs-kesehatan.go.id:8888/trust-mark/main.html) dengan demikian developer dapat membaca langsung dokumentasi cepat dari kode tanpa harus bolak-balik halaman TrustMark yang tentunya akan sangat mempersingkat proses development.\n\n## Tipe Request \u0026 Response\n\nPada kasus tertentu, type dari request atau response diperlukan di luar pemanggilan API method misalnya saat ingin mendefinisikan variable request pada global scope variable atau bahkan pada module berbeda dengan tetap mempertahankan keakuratan type atau menjadikan response sebagai parameter fungsi yang menyimpan response tersebut ke database, hal tersebut dapat dilakukan seperti berikut:\n\n```ts\nimport type { AntreanParams, VClaimResponse } from '@ssecd/jkn';\nimport jkn from './path/to/jkn.js';\n\nconst jadwal: AntreanParams\u003c'refJadwalDokter'\u003e[0] = {\n\tpoli: 'MAT',\n\ttanggal: '2023-05-01'\n};\n\nconst result = await jkn.antrean.refJadwalDokter(jadwal);\nconsole.log(result);\n\n// ...\n\nfunction persistSep(sep: VClaimResponse\u003c'sep', 'insertV2'\u003e) {\n\t/* simpan SEP ke database */\n}\n```\n\n## Events\n\n- `onRequest`\n\n```ts\nonRequest: ((info: SendOption \u0026 { type: Type }) =\u003e MaybePromise\u003cvoid\u003e) | undefined = undefined;\n```\n\n- `onResponse`\n\n```ts\nonResponse: (\u003cT extends Type = Type\u003e(info: SendOption \u0026 { duration: number; type: T; }, result: SendResponse\u003cunknown, unknown\u003e[T]) =\u003e MaybePromise\u003cvoid\u003e) | undefined = undefined;\n```\n\n- `onError`\n\n```ts\nonError: ((error: Error) =\u003e MaybePromise\u003cvoid\u003e) | undefined = undefined;\n```\n\nContoh penggunaan event:\n\n```ts\njkn.onResponse = (info, result) =\u003e {\n\tconsole.log('\u003e', Math.round(info.duration) + 'ms', info.type, info.name);\n\t// \u003e 279ms vclaim Peserta -\u003e NIK\n};\n```\n\n## Konfigurasi\n\nKonfigurasi mengikuti interface berikut:\n\n````ts\ninterface Config {\n\t/**\n\t * Kode PPK yang diberikan BPJS.\n\t *\n\t * Diperlukan untuk melakukan proses enkripsi\n\t * pada service eRekamMedis and request pada\n\t * service Aplicares\n\t *\n\t * @default process.env.JKN_PPK_CODE\n\t */\n\tppkCode: string;\n\n\t/**\n\t * Cons ID dari BPJS\n\t *\n\t * @default process.env.JKN_CONS_ID\n\t */\n\tconsId: string;\n\n\t/**\n\t * Secret key dari BPJS\n\t *\n\t * @default process.env.JKN_CONS_SECRET\n\t */\n\tconsSecret: string;\n\n\t/**\n\t * User key Aplicares dari BPJS atau gunakan user key vclaim\n\t *\n\t * @default process.env.JKN_VCLAIM_USER_KEY || process.env.JKN_APLICARES_USER_KEY\n\t */\n\taplicaresUserKey?: string;\n\n\t/**\n\t * User key VClaim dari BPJS\n\t *\n\t * @default process.env.JKN_VCLAIM_USER_KEY\n\t */\n\tvclaimUserKey: string;\n\n\t/**\n\t * User key Antrean dari BPJS\n\t *\n\t * @default process.env.JKN_ANTREAN_USER_KEY\n\t */\n\tantreanUserKey: string;\n\n\t/**\n\t * User key Apotek dari BPJS atau gunakan user key vclaim\n\t *\n\t * @default process.env.JKN_VCLAIM_USER_KEY || process.env.JKN_APOTEK_USER_KEY\n\t */\n\tapotekUserKey?: string;\n\n\t/**\n\t * User key PCare dari BPJS\n\t *\n\t * @default process.env.JKN_PCARE_USER_KEY\n\t */\n\tpcareUserKey: string;\n\n\t/**\n\t * User key i-Care dari BPJS\n\t *\n\t * Umumnya user key i-Care ini nilai sama dengan user key VClaim\n\t * untuk FKRTL dan PCare untuk FKTP\n\t *\n\t * @default process.env.JKN_VCLAIM_USER_KEY || process.env.JKN_ICARE_USER_KEY\n\t */\n\ticareUserKey?: string;\n\n\t/**\n\t * User key eRekam Medis dari BPJS atau gunakan user key vclaim\n\t *\n\t * @default process.env.JKN_VCLAIM_USER_KEY || process.env.JKN_REKAM_MEDIS_USER_KEY\n\t */\n\trekamMedisUserKey?: string;\n\n\t/**\n\t * Berupa mode \"development\" dan \"production\". Secara default akan\n\t * membaca nilai environment variable NODE_ENV atau \"development\"\n\t * jika NODE_ENV tidak terdapat nilai. Mode ini berpengaruh pada\n\t * nilai konfigurasi yang digunakan dan JKN API base url.\n\t *\n\t * @default process.env.NODE_ENV || \"development\"\n\t */\n\tmode: Mode;\n\n\t/**\n\t * Secara default bernilai `false` sehingga setiap terjadi kesalahan\n\t * saat mengirim permintaan ke server JKN menggunakan method `send()`,\n\t * pesan kesalahan akan dikembalikan sebagai pesan response dan log\n\t * error akan dicetak pada konsol atau terminal. Jika bernilai true,\n\t * maka kesalahan akan di-throw.\n\t *\n\t * @default false\n\t */\n\tthrow: boolean;\n\n\t/**\n\t * Base URL web service dari BPJS. Secara default sudah diatur\n\t * berdasarkan base url yang ada di TrustMark. Nilai dapat diatur\n\t * secara partial, misalnya:\n\t *\n\t * ```\n\t * baseUrls: {\n\t * \tvclaim: {\n\t * \t\tdevelopment: 'http://dev.example.com',\n\t * \t\tproduction: 'http://prod.example.com'\n\t * \t}\n\t * }\n\t * ```\n\t */\n\tbaseUrls: Partial\u003cRecord\u003cType, Record\u003cMode, string\u003e\u003e\u003e;\n}\n````\n\n## Kontribusi\n\nKontribusi sangat dipersilakan dan dapat dilakukan dengan berbagai cara seperti melaporkan masalah, membuat permintaan atau menambahkan fitur melalui PR, atau sekedar memperbaiki kesalahan ketikan.\n\n## Lisensi\n\n[MIT](./LICENSE)\n\n## Lainnya\n\n- [Consent](https://github.com/ssecd/jkn/issues/6)\n- [Pemecahan Masalah](https://github.com/ssecd/jkn/issues?q=is%3Aissue)\n- [Laporkan Bug](https://github.com/ssecd/jkn/issues/new)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fssecd%2Fjkn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fssecd%2Fjkn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fssecd%2Fjkn/lists"}