{"_id":"@bagibagi/partner-integration","_rev":"2-78aaee505b37165a9f315646f8620a86","name":"@bagibagi/partner-integration","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@bagibagi/partner-integration","version":"0.1.0","keywords":["bagibagi","qris","payment","sdk","typescript"],"author":"","license":"MIT","_id":"@bagibagi/partner-integration@0.1.0","maintainers":[{"name":"binaryl0ver","email":"endra.rocks@gmail.com"}],"dist":{"shasum":"d62279318d30686293f15e49df3c0bb76ece8b8c","tarball":"https://registry.npmjs.org/@bagibagi/partner-integration/-/partner-integration-0.1.0.tgz","fileCount":60,"integrity":"sha512-V7v5CnqKZ1PnUaz09fXBMri7xvJyGlr2ItivJPoQay/DuLLS1KjFS65ELS64JHSKgXElDLaGNJVy4417+ahXJw==","signatures":[{"sig":"MEUCIQC66gihxeL49RBJ7P6Wv310vz84fxoeaLvF6ZFpZAbNBQIgEgtJrhKP7909J+5YAKOCoZqHxOcXcXJGttANAEt+FzM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40961},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./express":{"types":"./dist/express/index.d.ts","import":"./dist/express/index.js"}},"gitHead":"1beddfdce5cbb98ee5ab6f895fcf57c4096eaf47","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"binaryl0ver","email":"endra.rocks@gmail.com"},"_npmVersion":"11.6.0","description":"TypeScript SDK for BagiBagi Partner QRIS integration","directories":{},"_nodeVersion":"24.10.0","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.0","vitest":"^3.0.5","globals":"^15.15.0","@eslint/js":"^9.20.0","typescript":"^5.7.3","@types/node":"^22.13.0","@types/express":"^4.17.21","@typescript-eslint/parser":"^8.24.0","@typescript-eslint/eslint-plugin":"^8.24.0"},"_npmOperationalInternal":{"tmp":"tmp/partner-integration_0.1.0_1770698404491_0.3215478504095326","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@bagibagi/partner-integration","version":"0.1.1","description":"TypeScript SDK for BagiBagi Partner QRIS integration","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./express":{"types":"./dist/express/index.d.ts","import":"./dist/express/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","test":"vitest run","lint":"eslint .","typecheck":"tsc -p tsconfig.json --noEmit"},"keywords":["bagibagi","qris","payment","sdk","typescript"],"author":"","license":"MIT","engines":{"node":">=18"},"devDependencies":{"@eslint/js":"^9.20.0","@types/express":"^4.17.21","@types/node":"^22.13.0","@typescript-eslint/eslint-plugin":"^8.24.0","@typescript-eslint/parser":"^8.24.0","eslint":"^9.20.0","globals":"^15.15.0","typescript":"^5.7.3","vitest":"^3.0.5"},"_id":"@bagibagi/partner-integration@0.1.1","gitHead":"ea13f72028d3fd571e6ecdc561f13cfa1318270b","_nodeVersion":"24.10.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-Yh60V5DuwNNiPGo1UUPEaTmgDekbcGgGWgqUJTfMCliNsYHH48dZpCXteHsCUk745hD6/Z2k7DmeW7/5k6yDMw==","shasum":"db4cf202520004eb64ca4b0e38b25943b530837c","tarball":"https://registry.npmjs.org/@bagibagi/partner-integration/-/partner-integration-0.1.1.tgz","fileCount":60,"unpackedSize":41158,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEunuL0CskpDQt8RVGboWSUP0kEFt0bDEZjhSiDAUA9OAiEA/7I3wOEfDpQcQr3yT6T4gHoeN1ZwH9JX0VXJLFnskzQ="}]},"_npmUser":{"name":"binaryl0ver","email":"endra.rocks@gmail.com"},"directories":{},"maintainers":[{"name":"binaryl0ver","email":"endra.rocks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/partner-integration_0.1.1_1770701618243_0.14200778524027635"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-10T04:40:04.362Z","modified":"2026-02-10T05:33:38.537Z","0.1.0":"2026-02-10T04:40:04.651Z","0.1.1":"2026-02-10T05:33:38.400Z"},"license":"MIT","keywords":["bagibagi","qris","payment","sdk","typescript"],"description":"TypeScript SDK for BagiBagi Partner QRIS integration","maintainers":[{"name":"binaryl0ver","email":"endra.rocks@gmail.com"}],"readme":"# @bagibagi/partner-integration\n\nTypeScript SDK for BagiBagi Partner QRIS integration.\n\n## Features\n\n- Create QRIS transaction\n- Verify callback token\n\n## Installation\n\n```bash\nnpm install @bagibagi/partner-integration\n```\n\n## Information\n\n- You must have a BagiBagi account to use this SDK.\n- To get your `merchantCode` and `apiKey`, request access via our Discord server: [Join BagiBagi Discord](https://discord.com/invite/nX4S5hNvdD)\n\n## Quick Start (SDK Only)\n\n```ts\nimport { BagiBagiClient } from \"@bagibagi/partner-integration\";\n\nconst client = new BagiBagiClient({\n  merchantCode: process.env.BAGIBAGI_MERCHANT_CODE!,\n  apiKey: process.env.BAGIBAGI_API_KEY!,\n  baseUrl: \"https://bagibagi.co\",\n  timeoutMs: 10000,\n});\n\nconst result = await client.createQrisTransaction({\n  name: \"test\",\n  message: \"testt\",\n  amount: 100000,\n  email: \"test@gmail.com\",\n  webhookUrl: \"https://partner.example.com/webhooks/bagibagi\",\n});\n\nconsole.log(result);\n```\n\n## Express Example (Optional)\n\nFull runnable example app: [`examples/express/README.md`](examples/express/README.md)\n\n```ts\nimport express from \"express\";\nimport {\n  BagiBagiClient,\n  createQrisRoute,\n  callbackVerifierMiddleware,\n} from \"@bagibagi/partner-integration/express\";\n\nconst app = express();\napp.use(express.json());\n\nconst client = new BagiBagiClient({\n  merchantCode: process.env.BAGIBAGI_MERCHANT_CODE!,\n  apiKey: process.env.BAGIBAGI_API_KEY!,\n});\n\napp.post(\"/payments/qris\", createQrisRoute(client));\napp.post(\"/webhooks/bagibagi\", callbackVerifierMiddleware(client), (req, res) => {\n  res.status(200).json({ success: true });\n});\n\napp.listen(3000);\n```\n\n## Configuration\n\n| Field          | Required | Default               | Description                     |\n| -------------- | -------- | --------------------- | ------------------------------- |\n| `merchantCode` | Yes      | -                     | Merchant code from BagiBagi     |\n| `apiKey`       | Yes      | -                     | Secret key from BagiBagi        |\n| `baseUrl`      | No       | `https://bagibagi.co` | Base URL for API                |\n| `timeoutMs`    | No       | `10000`               | Request timeout in milliseconds |\n\n## API\n\n### `createQrisTransaction(input)`\n\nInput:\n\n- `name`\n- `message`\n- `amount`\n- `email`\n- `webhookUrl`\n\nReturns:\n\n- `qrisCode`\n- `donationId`\n- `amount`\n- `email`\n- `expiredAt`\n\n### `verifyCallbackToken(payload)`\n\nValidate callback token using:\n\n`MD5(merchantCode + apiKey + donationId + amount)`\n\nReturns:\n\n- `true` if valid\n- `false` if invalid\n\n## Callback Payload Example\n\n```json\n{\n  \"OrderId\": \"bagibagi-0aedc19e-b75d-4b11-8d2d-d34b8b905795\",\n  \"Status\": true,\n  \"Token\": \"86bb978f6b6f067c5e99fd8d7c0a7259\",\n  \"DonationId\": \"0aedc19e-b75d-4b11-8d2d-d34b8b905795\",\n  \"Amount\": 100000,\n  \"CallbackAt\": \"2025-12-11T21:59:39.836634+07:00\"\n}\n```\n\n## Error Handling\n\nExpected error classes:\n\n- `ValidationError`\n- `ApiError`\n- `NetworkError`\n- `AuthError`\n\nExample:\n\n```ts\nimport {\n  ValidationError,\n  ApiError,\n  NetworkError,\n  AuthError,\n} from \"@bagibagi/partner-integration\";\n\ntry {\n  await client.createQrisTransaction(input);\n} catch (err) {\n  if (err instanceof ValidationError) {\n    // Invalid input\n  } else if (err instanceof ApiError) {\n    // Non-2xx provider response\n  } else if (err instanceof NetworkError) {\n    // Timeout or network issue\n  } else if (err instanceof AuthError) {\n    // Callback token/auth issue\n  }\n}\n```\n\n## Security Best Practices\n\n- Store `apiKey` in env vars or secret manager\n- Do not log secrets or full tokens\n- Always verify callback token before processing business logic\n- Use server-side environments only\n\n## Development\n\n```bash\nnpm run build\nnpm test\nnpm run lint\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}