{"_id":"@bayar-sdk/xendit","_rev":"3-bb07cde30627af1a79a8255a0df46d87","name":"@bayar-sdk/xendit","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.0":{"name":"@bayar-sdk/xendit","version":"0.0.0","license":"MIT","_id":"@bayar-sdk/xendit@0.0.0","maintainers":[{"name":"cakfan","email":"cakfangaming@gmail.com"}],"homepage":"https://github.com/cakfan/bayar-sdk#readme","bugs":{"url":"https://github.com/cakfan/bayar-sdk/issues"},"dist":{"shasum":"c31c8e0bc2079654576ec5133dfeab74b7dec6a2","tarball":"https://registry.npmjs.org/@bayar-sdk/xendit/-/xendit-0.0.0.tgz","fileCount":8,"integrity":"sha512-g7Hr1oqpZvt8zvVDybxHnUYw8l/EugF6ZxMp+o6+NuRVvc81iWnlFc8ebqTQ90eQ2InNrPe32pxBqqe3GGiDQg==","signatures":[{"sig":"MEUCIQDAFiaLMQRjlNCROJL2pX/e2ovglbIu6/jGcUzl4/Pr+QIgef9ewOpUVncYSACOmHreD2KEXXLyWInSVWa93RmRxTk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":120735},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"1acdcac83399f01175f702c55f0f55ad0708b762","scripts":{"test":"bun test","build":"tsup","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json"},"_npmUser":{"name":"cakfan","email":"cakfangaming@gmail.com"},"repository":{"url":"git+https://github.com/cakfan/bayar-sdk.git","type":"git"},"_npmVersion":"11.6.2","description":"Xendit provider adapter for bayar-sdk","directories":{},"sideEffects":false,"_nodeVersion":"26.5.0","dependencies":{"@bayar-sdk/core":"^0.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","@types/bun":"^1.3.14","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/xendit_0.0.0_1785705055423_0.29105313600196725","host":"s3://npm-registry-packages-npm-production"}},"0.0.1":{"name":"@bayar-sdk/xendit","version":"0.0.1","license":"MIT","_id":"@bayar-sdk/xendit@0.0.1","maintainers":[{"name":"cakfan","email":"cakfangaming@gmail.com"}],"homepage":"https://github.com/cakfan/bayar-sdk#readme","bugs":{"url":"https://github.com/cakfan/bayar-sdk/issues"},"dist":{"shasum":"0f85779d0101fa67d593e5589ab7879167745758","tarball":"https://registry.npmjs.org/@bayar-sdk/xendit/-/xendit-0.0.1.tgz","fileCount":8,"integrity":"sha512-pPEamiflGMzPlbSK/oFjMC24IHOWk4JajE2HJQaVMrXVJyldRuQMtODIfnQlFyK8ctxLnlqBcj8ZVk/UMLRSjg==","signatures":[{"sig":"MEYCIQCKD9HUKo3CNGj0MacHRUCrHwr56/Yp0SIOpBpBnf15WQIhAIrE3pDneBO72Sgi7UPVaHFjQ+zBPS7824it/2SwLTjx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bayar-sdk%2fxendit@0.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":120159},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"5250d089c60d1acfc25286ef32313e73fba0c625","scripts":{"test":"bun test","build":"tsup","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c9bd363c-3d68-4d76-b476-986b862a7148"}},"repository":{"url":"git+https://github.com/cakfan/bayar-sdk.git","type":"git"},"_npmVersion":"12.0.2","description":"Xendit provider adapter for bayar-sdk","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"@bayar-sdk/core":"^0.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","@types/bun":"^1.3.14","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/xendit_0.0.1_1785714450204_0.42295240913135923","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@bayar-sdk/xendit","version":"0.0.2","description":"Xendit provider adapter for bayar-sdk — create charges, check status, refund and verify webhooks via Xendit Payment Request API (virtual account, QRIS, OVO, DANA, ShopeePay, credit card).","keywords":["xendit","payment","payment-gateway","sdk","payment-request-api","virtual-account","qris","ovo","dana","shopeepay","e-wallet","credit-card","indonesia","typescript"],"homepage":"https://github.com/cakfan/bayar-sdk/blob/main/packages/provider-xendit/README.md","bugs":{"url":"https://github.com/cakfan/bayar-sdk/issues"},"author":{"name":"cakfan"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/cakfan/bayar-sdk.git"},"type":"module","sideEffects":false,"main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"publishConfig":{"access":"public"},"scripts":{"build":"tsup","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","test":"bun test"},"dependencies":{"@bayar-sdk/core":"^0.0.1"},"devDependencies":{"@types/bun":"^1.3.14","tsup":"^8.5.1","typescript":"^5.9.3"},"gitHead":"2ced780ecf3eca910e0bc52c7e7b340aa91b93a9","_id":"@bayar-sdk/xendit@0.0.2","_nodeVersion":"22.23.1","_npmVersion":"12.0.2","dist":{"integrity":"sha512-BwRSUNJSeuJWIwE0Bm57WxHkHGJ+8SkW/EaUF8QPUmPyE/JYQ+hXhcJK5bfuAVnypeH6hyLs7CTYtfYDuzYx/Q==","shasum":"89bcda734bbaf376ce723e9f4c1c727e0e6d5e5d","tarball":"https://registry.npmjs.org/@bayar-sdk/xendit/-/xendit-0.0.2.tgz","fileCount":8,"unpackedSize":120723,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bayar-sdk%2fxendit@0.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDZB3TIf2ywPiwIdSXLd2NqaT9PhFzgcdDzLHOhtGQ45AIgBIgNXkfQoEOlCer17StjzHL8QPwqqLhfk0o6ssp5Gsw="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c9bd363c-3d68-4d76-b476-986b862a7148"}},"directories":{},"maintainers":[{"name":"cakfan","email":"cakfangaming@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/xendit_0.0.2_1785717719944_0.9142356143351502"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-02T21:10:55.206Z","modified":"2026-08-03T00:42:00.440Z","0.0.0":"2026-08-02T21:10:55.594Z","0.0.1":"2026-08-02T23:47:30.346Z","0.0.2":"2026-08-03T00:42:00.089Z"},"bugs":{"url":"https://github.com/cakfan/bayar-sdk/issues"},"license":"MIT","homepage":"https://github.com/cakfan/bayar-sdk/blob/main/packages/provider-xendit/README.md","repository":{"type":"git","url":"git+https://github.com/cakfan/bayar-sdk.git"},"description":"Xendit provider adapter for bayar-sdk — create charges, check status, refund and verify webhooks via Xendit Payment Request API (virtual account, QRIS, OVO, DANA, ShopeePay, credit card).","maintainers":[{"name":"cakfan","email":"cakfangaming@gmail.com"}],"readme":"# @bayar-sdk/xendit\n\nAdapter Xendit (Payments API / Payment Request) untuk `@bayar-sdk/core`. Provider ini\nmengikuti contract `PaymentProvider` dan lolos `runProviderContractTests()`.\n\nDibangun di atas **Payment Request API** (`POST /v3/payment_requests`, header\n`api-version: 2024-11-11`) — bukan hosted Invoice API — karena contract SDK ini\nmembutuhkan request body spesifik per metode pembayaran (VA, QRIS, e-wallet,\ncard), yang tidak bisa diekspresikan lewat satu halaman checkout Invoice.\n\n## Instalasi\n\n```bash\nbun add @bayar-sdk/core @bayar-sdk/xendit\n```\n\n## Quick start\n\n```ts\nimport { XenditProvider } from \"@bayar-sdk/xendit\";\nimport type { ChargeRequest, RefundRequest } from \"@bayar-sdk/core\";\n\nconst provider = new XenditProvider({\n\tsecretKey: process.env.XENDIT_SECRET_KEY,\n\tcallbackToken: process.env.XENDIT_CALLBACK_TOKEN,\n\thttpClient: { fetch }, // inject httpClient agar mudah di-mock/test\n});\n\nconst req: ChargeRequest = {\n\tamount: 50000, // integer minor unit (Rp50.000)\n\tcurrency: \"IDR\",\n\tpaymentMethod: { type: \"virtual_account\", bank: \"BCA\" },\n\treferenceId: \"order-123\",\n};\n\nconst result = await provider.createCharge(req, {\n\tidempotencyKey: \"idem-001\", // wajib\n});\nconsole.log(result.chargeId, result.actions);\n```\n\n> Xendit memakai satu host (`api.xendit.co`) untuk test dan live — environment\n> ditentukan oleh secret key itu sendiri (test key vs live key), bukan oleh\n> host/option. Karena itu adapter tidak punya opsi `environment`.\n\n### Cek status charge\n\n```ts\nconst charge = await provider.getCharge(result.chargeId);\nconsole.log(charge.normalizedStatus); // \"pending\" | \"paid\" | ...\n```\n\n### Refund (full & partial)\n\n```ts\nconst refundReq: RefundRequest = {\n\tchargeId: result.chargeId,\n\t// amount: 25000, // opsional — isi untuk partial refund\n\t// reason: \"REQUESTED_BY_CUSTOMER\", // opsional, punya default\n};\n\nconst refund = await provider.refund(refundReq, {\n\tidempotencyKey: \"idem-refund-001\", // wajib\n});\nconsole.log(refund.refundId, refund.normalizedStatus);\n```\n\nRefund hanya diizinkan saat charge berstatus `paid`; selain itu provider melempar\n`PaymentSDKError` dengan kode `REFUND_NOT_ALLOWED`. `reason` di Xendit wajib —\nkalau tidak diberikan, adapter memakai `REQUESTED_BY_CUSTOMER`.\n\n### Webhook\n\n```ts\n// Contoh handler Hono:\napp.post(\"/webhook/xendit\", async (c) => {\n\tconst event = await provider.parseWebhook(\n\t\tawait c.req.json(),\n\t\tc.req.raw.headers,\n\t);\n\t// Header x-callback-token sudah diverifikasi constant-time sebelum event\n\t// dikembalikan. Header invalid → WEBHOOK_SIGNATURE_INVALID.\n\tconsole.log(event.normalizedStatus);\n\treturn c.text(\"ok\");\n});\n```\n\n`parseWebhook` membaca header `x-callback-token` dan membandingkannya dengan\n`callbackToken` yang dikonfigurasi di dashboard Xendit.\n\n> **Ambil callback token di**: Dashboard Xendit → **Settings → Webhook**\n> (section Callbacks) → klik **\"View Webhook Verification Token\"** (masukkan\n> password). URL langsung: `https://dashboard.xendit.co/settings/developers#callbacks`.\n> Token unik per akun dan berlaku untuk test & live.\n\n## Metode pembayaran yang didukung (v1)\n\n| Metode SDK           | `channel_code` Xendit |\n| -------------------- | --------------------- |\n| `virtual_account`    | `BCA`, `BNI`, `BRI`, `MANDIRI`, `PERMATA`, `CIMB`, `BSI`, `DANAMON`, `SEABANK`, `SAQU` |\n| `qris`               | `QRIS`                |\n| `ewallet`            | `OVO`, `DANA`, `SHOPEEPAY`, `GOJEK`, `LINKAJA` |\n| `card` (token-based) | `CARDS`               |\n\nBank virtual account yang didukung: `bca`, `bni`, `bri`, `mandiri`, `permata`,\n`cimb`, `bsi`, `danamon`, `seabank`, `saqu` (input dinormalisasi ke lowercase,\ndipetakan ke `channel_code` Xendit uppercase; bank lain melempar `INVALID_REQUEST`).\n\nChannel e-wallet yang didukung: `ovo`, `dana`, `shopeepay`, `gopay` (channel code\n`GOJEK`), `linkaja` (channel lain melempar `INVALID_REQUEST`).\n\n## Keterbatasan\n\n- **Card** menerima `token` hasil tokenisasi client-side Xendit — raw card data\n  (PAN/CVV) tidak pernah diproses di repo ini.\n- `capturePayment()` tidak didukung (charge selalu `AUTOMATIC` capture) —\n  melempar `CAPTURE_NOT_SUPPORTED`.\n- Idempotency dikelola in-memory per instance provider — untuk multi-instance,\n  integrasikan dengan storage eksternal (di luar scope v1).\n- Semua amount dalam integer minor unit (IDR default untuk currency; `country`\n  diisi `ID` hanya untuk currency `IDR`).\n- Mapping error mengikuti pola error Xendit (`error_code` + HTTP status), lihat\n  `src/errors.ts` untuk daftar lengkap.\n","readmeFilename":"README.md","keywords":["xendit","payment","payment-gateway","sdk","payment-request-api","virtual-account","qris","ovo","dana","shopeepay","e-wallet","credit-card","indonesia","typescript"],"author":{"name":"cakfan"}}