{"_id":"@borapesa/azampay","_rev":"2-cf9173bd17f9e7af7ef0458e4ff9387a","name":"@borapesa/azampay","dist-tags":{"latest":"0.1.21"},"versions":{"0.1.4":{"name":"@borapesa/azampay","version":"0.1.4","keywords":["azampay","payments","tanzania","mobile-money"],"author":{"name":"Bora Pesa contributors"},"license":"MIT","_id":"@borapesa/azampay@0.1.4","maintainers":[{"name":"kimjisena","email":"pjohmaths@gmail.com"}],"dist":{"shasum":"99fb3bc6926a6bcd12247c8823cce79c33012c35","tarball":"https://registry.npmjs.org/@borapesa/azampay/-/azampay-0.1.4.tgz","fileCount":14,"integrity":"sha512-FvK6/eRjRuGfCvdHN4taSSQIsWPH2dktz2xl0iXZJ2lryF4ctzWlOHkFIdME3mQiqk6JbpV/BfoJa/VGQdyp/A==","signatures":[{"sig":"MEUCIEwv/huFy6PCT6iFxFxZhbiLSuyhb9NrEjIbjshZvPP+AiEAtXkC/Xmbd7WXti70ROGCoBrcFWg0fCm/2MJe7sJy9As=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95627},"main":"./dist/index.js","type":"module","_from":"file:borapesa-azampay-0.1.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","coverage":"vitest run --coverage","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kimjisena","email":"pjohmaths@gmail.com"},"_resolved":"/private/var/folders/qn/j5lyvf6s7fn36rhjfbnwx6qh0000gn/T/6cca978cf2477775eccc8c85a40e43c4/borapesa-azampay-0.1.4.tgz","_integrity":"sha512-FvK6/eRjRuGfCvdHN4taSSQIsWPH2dktz2xl0iXZJ2lryF4ctzWlOHkFIdME3mQiqk6JbpV/BfoJa/VGQdyp/A==","_npmVersion":"11.5.1","description":"AzamPay provider adapter for Bora Pesa","directories":{},"_nodeVersion":"24.6.0","dependencies":{"uuid":"^14.0.1","@borapesa/pesa":"0.5.0"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.1","@vitest/coverage-v8":"^4.1.9"},"_npmOperationalInternal":{"tmp":"tmp/azampay_0.1.4_1783678905866_0.8675040686758135","host":"s3://npm-registry-packages-npm-production"}},"0.1.21":{"name":"@borapesa/azampay","version":"0.1.21","description":"AzamPay provider adapter for Bora Pesa","license":"MIT","author":{"name":"Bora Pesa contributors"},"repository":{"type":"git","url":"git+https://github.com/borapesa/pesa.git","directory":"providers/azampay"},"homepage":"https://borapesa.dev","bugs":{"url":"https://github.com/borapesa/pesa/issues"},"type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"tsc","dev":"tsc --watch","test":"vitest run","coverage":"vitest run --coverage","typecheck":"tsc --noEmit","clean":"rm -rf dist"},"keywords":["azampay","payments","tanzania","mobile-money"],"packageManager":"pnpm@10.33.3","dependencies":{"@borapesa/pesa":"workspace:*","uuid":"^14.0.1"},"devDependencies":{"@types/node":"^26.0.1","@vitest/coverage-v8":"^4.1.9","typescript":"^6.0.3","vitest":"^4.1.9"},"publishConfig":{"registry":"https://registry.npmjs.org","provenance":true},"_id":"@borapesa/azampay@0.1.21","gitHead":"9a277315ab536342b78b1efee99b4846df8c9d71","_nodeVersion":"24.6.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-BX8ibGYWslrBozfvQMBG6laD0uhOxUPqiHosyeMi3u9c7RuAbJaO5KLUk39fPw4VAjViniOvw/o+CiuC+w49bA==","shasum":"8225250422a144ed124d22730b18c4bf7929cb1f","tarball":"https://registry.npmjs.org/@borapesa/azampay/-/azampay-0.1.21.tgz","fileCount":14,"unpackedSize":95933,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHcUaZ1ILuRiwjkxGJfyMR6YT54aMYfK2BDE8ATSCQZEAiEAl4HfmWaFm529ri2kExZs3xRzOKRc2lfE8QWM1qyw/zs="}]},"_npmUser":{"name":"kimjisena","email":"pjohmaths@gmail.com"},"directories":{},"maintainers":[{"name":"kimjisena","email":"pjohmaths@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/azampay_0.1.21_1784294413655_0.8882562328140717"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-10T10:21:45.662Z","modified":"2026-07-17T13:20:13.995Z","0.1.4":"2026-07-10T10:21:46.004Z","0.1.21":"2026-07-17T13:20:13.804Z"},"author":{"name":"Bora Pesa contributors"},"license":"MIT","keywords":["azampay","payments","tanzania","mobile-money"],"description":"AzamPay provider adapter for Bora Pesa","maintainers":[{"name":"kimjisena","email":"pjohmaths@gmail.com"}],"readme":"# @borapesa/azampay\n\nAzamPay provider adapter for Bora Pesa.\n\n[AzamPay](https://azampay.com) is a Tanzanian payment platform offering mobile money checkout, bank checkout, hosted checkout pages, cross-border disbursement, and name lookup.\n\n## Install\n\n```bash\npnpm add @borapesa/pesa @borapesa/azampay\n```\n\n## Quick Start\n\n```ts\nimport { createPesa } from '@borapesa/pesa';\nimport { AzamPayPaymentProvider } from '@borapesa/azampay';\n\nconst pesa = createPesa({\n  provider: new AzamPayPaymentProvider({\n    appName:     process.env.AZAMPAY_APP_NAME!,\n    clientId:    process.env.AZAMPAY_CLIENT_ID!,\n    clientSecret: process.env.AZAMPAY_CLIENT_SECRET!,\n    apiKey:      process.env.AZAMPAY_API_KEY!,\n    senderName:   'Bora Pesa Ltd',\n    sandbox:     true,          // false for production\n  }),\n});\n\n// MNO checkout — phone prefix auto-maps to provider\nconst order = await pesa.createOrder({\n  amount:    5000,\n  currency:  'TZS',\n  reference: 'order_001',\n  customer:  { name: 'Juma Ali', phone: '255712345678' },\n});\n\n// Name lookup\nconst lookup = await pesa.getNameLookup!('255712345678');\n\n// Disburse to mobile wallet\nawait pesa.disburse({\n  amount:    50000,\n  currency:  'TZS',\n  reference: 'payout_001',\n  recipient: { phone: '255754321098', name: 'Jane Doe' },\n});\n```\n\n## Auth\n\nBearer token — credentials sent to `POST /AppRegistration/GenerateToken`. Token cached for 55 minutes. All checkout calls include `Authorization: Bearer <token>` and `X-API-Key` header.\n\nSeparate base URLs for auth (`authenticator.azampay.co.tz`) and API (`checkout.azampay.co.tz`), each with sandbox variants.\n\n## Config\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `appName` | `string` | ✅ | App name from AzamPay dashboard |\n| `clientId` | `string` | ✅ | Client ID from AzamPay dashboard |\n| `clientSecret` | `string` | ✅ | Client secret from AzamPay dashboard |\n| `apiKey` | `string` | ✅ | API key from AzamPay dashboard |\n| `senderName` | `string` | ✅ | Merchant display name for disbursement transfers |\n| `senderBank` | `string` | ❌ | Bank name for disbursement source (default: `\"AzamPay\"`) |\n| `sandbox` | `boolean` | ❌ | Target sandbox (default: `true`) |\n| `authBaseUrl` | `string` | ❌ | Override auth base URL |\n| `checkoutBaseUrl` | `string` | ❌ | Override checkout base URL |\n\n## Supported Operations\n\n| Operation | Supported | Notes |\n|---|---|---|\n| `createOrder` | ✅ | MNO checkout. Phone prefix auto-maps to provider (Airtel, Tigo, M-Pesa, etc.) |\n| `getPaymentStatus` | ✅ | Query by transaction ID with tracked provider |\n| `disburse` | ✅ | Cross-border transfer with source/destination shape |\n| `handleWebhook` | ✅ | Callback parsing |\n| `getNameLookup` | ✅ | Namelookup endpoint |\n| `validateCredentials` | ✅ | Health check via token endpoint |\n| `cancelOrder` | ❌ | Not exposed by AzamPay API |\n| `listOrders` | ❌ | Not exposed by AzamPay API |\n| `getBalance` | ❌ | Not exposed by AzamPay API |\n| `previewOrder` | ❌ | Not exposed by AzamPay API |\n| `previewDisburse` | ❌ | Not exposed by AzamPay API |\n| `refund` | ❌ | Not exposed by AzamPay API |\n\n## Provider-Specific Methods\n\n**Bank checkout** — two-step OTP flow. Customer obtains OTP via USSD (`*150*03#` for CRDB, `*150*66#` for NMB), provides it to your app:\n\n```ts\nconst result = await provider.createBankCheckout({\n  amount: '50000',\n  merchantAccountNumber: '1234567890',\n  merchantMobileNumber: '255712345678',\n  otp: '123456',          // from customer's USSD session\n  provider: 'CRDB',        // 'CRDB' | 'NMB'\n  referenceId: 'ref_001',\n});\n```\n\n**Post checkout** — hosted checkout page (returns a URL to redirect to):\n\n```ts\nconst url = await provider.createPostCheckout({\n  amount: '5000',\n  currency: 'TZS',\n  externalId: 'ext_001',\n  vendorName: 'My Store',\n  vendorId: 'v_001',\n  redirectSuccessURL: 'https://mysite.com/success',\n  redirectFailURL: 'https://mysite.com/fail',\n});\n// Redirect customer to `url`\n```\n\n**Payment partners** — list available payment providers:\n\n```ts\nconst partners = await provider.getPaymentPartners();\n```\n\n## Phone → Provider Mapping\n\n`createOrder` auto-detects the MNO from the phone prefix:\n\n| Prefix | Provider |\n|---|---|\n| `25578`, `25568` | Airtel |\n| `25576`, `25565` | Tigo |\n| `25562` | HaloPesa |\n| `25574`, `25575` | M-Pesa |\n| Other | AzamPesa |\n\n## Credentials\n\nRegister on the [AzamPay Developer Portal](https://developers.azampay.co.tz) to get your `appName`, `clientId`, `clientSecret`, and `apiKey`.\n","readmeFilename":"README.md","homepage":"https://borapesa.dev","repository":{"type":"git","url":"git+https://github.com/borapesa/pesa.git","directory":"providers/azampay"},"bugs":{"url":"https://github.com/borapesa/pesa/issues"}}