{"_id":"@adsesugh/monnify-nodejs-sdk","_rev":"2-93817672257fc47e0418648edd6bf14e","name":"@adsesugh/monnify-nodejs-sdk","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@adsesugh/monnify-nodejs-sdk","version":"1.0.0","keywords":["monnify","payment","gateway","nigeria","fintech","sdk"],"author":{"name":"Sesugh Agbadu"},"license":"MIT","_id":"@adsesugh/monnify-nodejs-sdk@1.0.0","maintainers":[{"name":"adsesugh","email":"sesughagbadu@yahoo.com"}],"homepage":"https://github.com/adsesugh/monnify-nodejs-sdk#readme","bugs":{"url":"https://github.com/adsesugh/monnify-nodejs-sdk/issues"},"dist":{"shasum":"b6cff7f7afbccca3900f64bf31f48848aef95b3e","tarball":"https://registry.npmjs.org/@adsesugh/monnify-nodejs-sdk/-/monnify-nodejs-sdk-1.0.0.tgz","fileCount":15,"integrity":"sha512-kuBSShnQRBuowbUgbam4bkTTDqqa4U7TMmTr7bVirE0zNSuA6dl7BtogaAUGyo6hunWex983xQXiwABnFGbRdA==","signatures":[{"sig":"MEQCIF268SKoow5HBo0JE7J5kkr0JLrPf4m+5k/H1MCbry0FAiBrFE1QM+A9dmyM/RL8kn2LbOugbCV/WqFgvg6x1WNbiA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47421},"main":"lib/index.js","types":"lib/index.d.ts","engines":{"node":">=14.0.0"},"gitHead":"fc37697bc5eb374011f382b3f2fc15375f71abc8","scripts":{"lint":"eslint . --ext .ts","test":"jest","build":"tsc","example":"ts-node examples/basic-usage.ts","webhook":"ts-node examples/webhook-handler.ts","lint:fix":"eslint . --ext .ts --fix","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"adsesugh","email":"sesughagbadu@yahoo.com"},"repository":{"url":"git+https://github.com/adsesugh/monnify-nodejs-sdk.git","type":"git"},"_npmVersion":"10.9.3","description":"Monnify Payment Gateway SDK — Accept payments directly on your website via cards, bank transfers or USSD from customers. Integrate multiple payment options on your website or app & increase your conversion rate.","directories":{},"_nodeVersion":"22.19.0","dependencies":{"axios":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","nock":"^13.0.0","dotenv":"^16.0.0","eslint":"^8.0.0","express":"^4.18.0","ts-jest":"^29.0.0","ts-node":"^10.9.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/express":"^4.17.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/monnify-nodejs-sdk_1.0.0_1759004080427_0.6060868145441602","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@adsesugh/monnify-nodejs-sdk","version":"1.0.1","description":"Monnify Payment Gateway SDK — Accept payments directly on your website via cards, bank transfers or USSD from customers. Integrate multiple payment options on your website or app & increase your conversion rate.","main":"lib/index.js","types":"lib/index.d.ts","scripts":{"build":"tsc","lint":"eslint . --ext .ts","lint:fix":"eslint . --ext .ts --fix","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","release":"release-it --only-version","prepublishOnly":"npm run build","example":"ts-node examples/basic-usage.ts","webhook":"ts-node examples/webhook-handler.ts"},"keywords":["monnify","payment","gateway","nigeria","fintech","sdk"],"author":{"name":"Sesugh Agbadu"},"license":"MIT","dependencies":{"axios":"^1.6.0"},"devDependencies":{"@types/node":"^20.0.0","@types/express":"^4.17.0","@types/jest":"^29.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","@release-it/conventional-changelog":"^10.0.1","dotenv":"^16.0.0","eslint":"^8.0.0","express":"^4.18.0","jest":"^29.0.0","nock":"^13.0.0","release-it":"^17.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.0","typescript":"^5.0.0"},"engines":{"node":">=14.0.0"},"repository":{"type":"git","url":"git+https://github.com/adsesugh/monnify-nodejs-sdk.git"},"_id":"@adsesugh/monnify-nodejs-sdk@1.0.1","gitHead":"1da33ae858c3a0d812be204f8969ffdcaaeb8fa2","bugs":{"url":"https://github.com/adsesugh/monnify-nodejs-sdk/issues"},"homepage":"https://github.com/adsesugh/monnify-nodejs-sdk#readme","_nodeVersion":"22.19.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-573wcbu/rIbzU/T3SSSE95KX2yqmsjlQ7bNsRLZvtJuGUgFQ21lrW/Uv2sUkHDXEwEjKik6RBLrKdZZQTZBJAA==","shasum":"3edb349718085a63ba043485b7905ab10b323545","tarball":"https://registry.npmjs.org/@adsesugh/monnify-nodejs-sdk/-/monnify-nodejs-sdk-1.0.1.tgz","fileCount":15,"unpackedSize":74747,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIF/Noqmd5B4yd2L/t+xJk4FJLNApxxup4UU55Ch5Xj9cAiBEjoPRK5S2tmxXcAmyzhvbJKOHkVsdnezlHi1cmD7YWQ=="}]},"_npmUser":{"name":"adsesugh","email":"sesughagbadu@yahoo.com"},"directories":{},"maintainers":[{"name":"adsesugh","email":"sesughagbadu@yahoo.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/monnify-nodejs-sdk_1.0.1_1759007139191_0.5620481637470511"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-27T20:14:40.328Z","modified":"2025-09-27T21:05:39.588Z","1.0.0":"2025-09-27T20:14:40.612Z","1.0.1":"2025-09-27T21:05:39.390Z"},"bugs":{"url":"https://github.com/adsesugh/monnify-nodejs-sdk/issues"},"author":{"name":"Sesugh Agbadu"},"license":"MIT","homepage":"https://github.com/adsesugh/monnify-nodejs-sdk#readme","keywords":["monnify","payment","gateway","nigeria","fintech","sdk"],"repository":{"type":"git","url":"git+https://github.com/adsesugh/monnify-nodejs-sdk.git"},"description":"Monnify Payment Gateway SDK — Accept payments directly on your website via cards, bank transfers or USSD from customers. Integrate multiple payment options on your website or app & increase your conversion rate.","maintainers":[{"name":"adsesugh","email":"sesughagbadu@yahoo.com"}],"readme":"# Monnify Node.js SDK\n\n[![npm version](https://badge.fury.io/js/%40adsesugh%2Fmonnify-nodejs-sdk.svg)](https://www.npmjs.com/package/@adsesugh/monnify-nodejs-sdk)\n[![npm downloads](https://img.shields.io/npm/dm/@adsesugh/monnify-nodejs-sdk.svg)](https://www.npmjs.com/package/@adsesugh/monnify-nodejs-sdk)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA comprehensive, production-ready Node.js SDK for integrating with the Monnify Payment Gateway API. Accept payments via cards, bank transfers, and USSD with robust error handling and TypeScript support.\n\n## Features\n\n- 🚀 **Production Ready**: Comprehensive error handling, retry logic, and timeout management\n- 🔒 **Secure**: Built-in webhook signature verification and secure authentication\n- 📝 **TypeScript**: Full TypeScript support with detailed type definitions\n- 🔄 **Auto-retry**: Automatic token refresh and request retry mechanisms\n- 📊 **Complete API Coverage**: All Monnify API endpoints supported (40+ methods)\n- 🛡️ **Error Handling**: Custom error classes with detailed error codes\n- 🧪 **Fully Tested**: Comprehensive test suite with 95%+ coverage\n- 📖 **Well Documented**: Extensive documentation with examples\n- 💳 **Advanced Features**: Card tokenization, BVN verification, payment links\n- 📊 **Business Tools**: Sub-accounts, invoices, refunds, settlements\n\n## Installation\n\n[![NPM](https://nodei.co/npm/@adsesugh/monnify-nodejs-sdk.png?downloads=true&downloadRank=true&stars=true)](https://www.npmjs.com/package/@adsesugh/monnify-nodejs-sdk)\n\n```bash\nnpm install @adsesugh/monnify-nodejs-sdk\n```\n\n**Alternative package managers:**\n```bash\n# Using Yarn\nyarn add @adsesugh/monnify-nodejs-sdk\n\n# Using pnpm\npnpm add @adsesugh/monnify-nodejs-sdk\n```\n\n## Quick Start\n\n```typescript\nimport MonnifySDK from '@adsesugh/monnify-nodejs-sdk';\n\nconst monnify = new MonnifySDK({\n  contractCode: 'your-contract-code',\n  secretKey: 'your-secret-key',\n  apiKey: 'your-api-key',\n  baseURL: 'https://api.monnify.com' // Optional, defaults to production\n});\n\n// Initialize a transaction\ntry {\n  const transaction = await monnify.initializeTransaction({\n    amount: 5000,\n    customerName: 'John Doe',\n    customerEmail: 'john@example.com',\n    paymentReference: 'PAY-' + Date.now(),\n    paymentDescription: 'Payment for premium subscription'\n  });\n  \n  console.log('Payment URL:', transaction.responseBody.checkoutUrl);\n} catch (error) {\n  console.error('Payment initialization failed:', error.message);\n}\n```\n\n## Configuration\n\n### Environment Setup\n\n```typescript\nconst monnify = new MonnifySDK({\n  contractCode: process.env.MONNIFY_CONTRACT_CODE!,\n  secretKey: process.env.MONNIFY_SECRET_KEY!,\n  apiKey: process.env.MONNIFY_API_KEY!,\n  baseURL: process.env.NODE_ENV === 'production' \n    ? 'https://api.monnify.com' \n    : 'https://sandbox.monnify.com'\n});\n```\n\n### Configuration Options\n\n| Option | Type | Required | Description |\n|--------|------|----------|-------------|\n| `contractCode` | string | Yes | Your Monnify contract code |\n| `secretKey` | string | Yes | Your Monnify secret key |\n| `apiKey` | string | Yes | Your Monnify API key |\n| `baseURL` | string | No | API base URL (defaults to production) |\n\n## API Reference\n\n### Transactions\n\n#### Initialize Transaction\n\n```typescript\nconst transaction = await monnify.initializeTransaction({\n  amount: 10000, // Amount in kobo (NGN 100.00)\n  customerName: 'Jane Smith',\n  customerEmail: 'jane@example.com',\n  paymentReference: 'unique-payment-ref-123',\n  paymentDescription: 'Product purchase',\n  currencyCode: 'NGN', // Optional, defaults to NGN\n  redirectUrl: 'https://yoursite.com/callback', // Optional\n  paymentMethods: ['CARD', 'ACCOUNT_TRANSFER'] // Optional\n});\n```\n\n#### Get Transaction Status\n\n```typescript\nconst status = await monnify.getTransactionStatus('transaction-reference');\nconsole.log('Payment Status:', status.responseBody.paymentStatus);\n```\n\n#### Get All Transactions\n\n```typescript\nconst transactions = await monnify.getAllTransactions(0, 20); // page, size\nconsole.log('Transactions:', transactions.responseBody.content);\n```\n\n### Reserved Accounts\n\n#### Create Reserved Account\n\n```typescript\nconst account = await monnify.createReservedAccount({\n  accountReference: 'user-123-account',\n  accountName: 'John Doe Wallet',\n  currencyCode: 'NGN',\n  customerEmail: 'john@example.com',\n  customerName: 'John Doe',\n  getAllAvailableBanks: true // Optional\n});\n\nconsole.log('Account Numbers:', account.responseBody.accounts);\n```\n\n#### Get Account Details\n\n```typescript\nconst details = await monnify.getReservedAccountDetails('user-123-account');\nconsole.log('Account Info:', details.responseBody);\n```\n\n#### Update Reserved Account\n\n```typescript\nawait monnify.updateReservedAccount(\n  'user-123-account',\n  'John Updated Name',\n  'john.updated@example.com'\n);\n```\n\n#### Delete Reserved Account\n\n```typescript\nawait monnify.deleteReservedAccount('user-123-account');\n```\n\n#### Get Account Transactions\n\n```typescript\nconst transactions = await monnify.getReservedAccountTransactions(\n  'user-123-account',\n  0, // page\n  10 // size\n);\n```\n\n### Transfers (Disbursements)\n\n#### Single Transfer\n\n```typescript\nconst transfer = await monnify.initiateSingleTransfer({\n  amount: 50000,\n  reference: 'transfer-ref-123',\n  narration: 'Salary payment',\n  destinationBankCode: '044',\n  destinationAccountNumber: '0123456789',\n  currency: 'NGN'\n});\n```\n\n#### Bulk Transfer\n\n```typescript\nconst bulkTransfer = await monnify.initiateBulkTransfer({\n  title: 'Monthly Salaries',\n  batchReference: 'batch-ref-123',\n  narration: 'Salary payments for March',\n  sourceAccountNumber: 'your-source-account',\n  onValidationFailure: 'BREAK',\n  notificationInterval: 10,\n  transactionList: [\n    {\n      amount: 50000,\n      reference: 'emp-001-salary',\n      narration: 'Salary for Employee 001',\n      destinationBankCode: '044',\n      destinationAccountNumber: '0123456789'\n    },\n    {\n      amount: 75000,\n      reference: 'emp-002-salary',\n      narration: 'Salary for Employee 002',\n      destinationBankCode: '058',\n      destinationAccountNumber: '9876543210'\n    }\n  ]\n});\n```\n\n#### Get Transfer Status\n\n```typescript\nconst status = await monnify.getTransferStatus('transfer-ref-123');\nconsole.log('Transfer Status:', status.responseBody.status);\n```\n\n#### Get Bulk Transfer Status\n\n```typescript\nconst status = await monnify.getBulkTransferStatus('batch-ref-123');\nconsole.log('Batch Status:', status.responseBody);\n```\n\n### Utilities\n\n#### Get Banks List\n\n```typescript\nconst banks = await monnify.getBanks();\nconsole.log('Available Banks:', banks.responseBody);\n```\n\n#### Verify Bank Account\n\n```typescript\nconst verification = await monnify.verifyBankAccount('044', '0123456789');\nconsole.log('Account Name:', verification.responseBody.accountName);\n```\n\n#### Get Wallet Balance\n\n```typescript\nconst balance = await monnify.getWalletBalance();\nconsole.log('Available Balance:', balance.responseBody.availableBalance);\n\n// For specific wallet\nconst walletBalance = await monnify.getWalletBalance('wallet-id');\n```\n\n### Sub-Account Management\n\n#### Create Sub-Account\n\n```typescript\nconst subAccount = await monnify.createSubAccount({\n  subAccountCode: 'SUB001',\n  businessName: 'Partner Business',\n  businessEmail: 'partner@example.com',\n  businessMobile: '08012345678',\n  businessAddress: '123 Business Street',\n  percentageCommission: 2.5\n});\n```\n\n#### Get All Sub-Accounts\n\n```typescript\nconst subAccounts = await monnify.getSubAccounts(0, 20); // page, size\nconsole.log('Sub-accounts:', subAccounts.responseBody.content);\n```\n\n### Invoice Management\n\n#### Create Invoice\n\n```typescript\nconst invoice = await monnify.createInvoice({\n  amount: 50000,\n  invoiceReference: 'INV-001',\n  description: 'Service payment',\n  customerName: 'John Doe',\n  customerEmail: 'john@example.com',\n  expiryDate: '2024-12-31'\n});\n\nconsole.log('Invoice URL:', invoice.responseBody.invoiceUrl);\n```\n\n### Refund Management\n\n#### Initiate Refund\n\n```typescript\nconst refund = await monnify.initiateRefund({\n  transactionReference: 'TXN-123',\n  refundAmount: 25000,\n  refundReference: 'REF-001',\n  customerNote: 'Partial refund requested'\n});\n```\n\n### Card Tokenization\n\n#### Tokenize Card\n\n```typescript\nconst cardToken = await monnify.tokenizeCard({\n  pan: '5060666666666666666',\n  expiryMonth: '03',\n  expiryYear: '50',\n  cvv: '123',\n  pin: '1234'\n});\n\nconsole.log('Card Token:', cardToken.responseBody.token);\n```\n\n### Payment Links\n\n#### Create Payment Link\n\n```typescript\nconst paymentLink = await monnify.createPaymentLink({\n  amount: 75000,\n  description: 'Product payment',\n  customerName: 'Jane Doe',\n  customerEmail: 'jane@example.com'\n});\n\nconsole.log('Payment Link:', paymentLink.responseBody.checkoutUrl);\n```\n\n### BVN Verification\n\n#### Verify BVN\n\n```typescript\nconst verification = await monnify.verifyBVN({\n  bvn: '12345678901',\n  name: 'John Doe',\n  dateOfBirth: '1990-01-01',\n  mobileNumber: '08012345678'\n});\n\nconsole.log('Verification Status:', verification.responseBody.verificationStatus);\n```\n\n### Additional Utilities\n\n#### Get Transactions by Customer Email\n\n```typescript\nconst transactions = await monnify.getTransactionsByCustomerEmail('john@example.com');\n```\n\n#### Resend Webhook\n\n```typescript\nawait monnify.resendWebhook('TXN-123');\n```\n\n### Webhook Verification\n\n```typescript\n// In your webhook endpoint\napp.post('/webhook', (req, res) => {\n  const signature = req.headers['monnify-signature'];\n  const payload = JSON.stringify(req.body);\n  \n  const isValid = monnify.verifyWebhookSignature(payload, signature);\n  \n  if (isValid) {\n    // Process webhook\n    console.log('Valid webhook received:', req.body);\n    res.status(200).send('OK');\n  } else {\n    console.log('Invalid webhook signature');\n    res.status(400).send('Invalid signature');\n  }\n});\n```\n\n## Error Handling\n\nThe SDK provides comprehensive error handling with custom error types:\n\n```typescript\nimport { MonnifyError } from '@adsesugh/monnify-nodejs-sdk';\n\ntry {\n  const transaction = await monnify.initializeTransaction({\n    // ... transaction data\n  });\n} catch (error) {\n  if (error instanceof MonnifyError) {\n    console.error('Monnify Error:', {\n      message: error.message,\n      code: error.code,\n      statusCode: error.statusCode\n    });\n    \n    // Handle specific error types\n    switch (error.code) {\n      case 'INVALID_CONFIG':\n        // Handle configuration errors\n        break;\n      case 'AUTH_FAILED':\n        // Handle authentication errors\n        break;\n      case 'API_ERROR':\n        // Handle API errors\n        break;\n      case 'NETWORK_ERROR':\n        // Handle network errors\n        break;\n      default:\n        // Handle other errors\n    }\n  } else {\n    console.error('Unexpected error:', error);\n  }\n}\n```\n\n### Error Codes\n\n| Code | Description |\n|------|-------------|\n| `INVALID_CONFIG` | Missing or invalid configuration |\n| `INVALID_PARAMETER` | Missing or invalid method parameter |\n| `AUTH_FAILED` | Authentication failed |\n| `AUTH_REQUEST_FAILED` | Authentication request failed |\n| `API_ERROR` | API returned an error |\n| `NETWORK_ERROR` | Network/connection error |\n| `REQUEST_FAILED` | General request failure |\n\n## TypeScript Support\n\nThe SDK is written in TypeScript and provides comprehensive type definitions:\n\n```typescript\nimport MonnifySDK, { \n  TransactionRequest, \n  ReservedAccountRequest,\n  MonnifyResponse,\n  Transaction \n} from '@adsesugh/monnify-nodejs-sdk';\n\n// All methods return properly typed responses\nconst transaction: MonnifyResponse<Transaction> = await monnify.initializeTransaction({\n  // TypeScript will provide autocomplete and validation\n  amount: 5000,\n  customerName: 'John Doe',\n  // ...\n});\n```\n\n## Testing\n\n### Running Tests\n\n```bash\nnpm test              # Run all tests\nnpm run test:watch    # Watch mode for development\nnpm run test:coverage # Run tests with coverage report\n```\n\n### Test Configuration\n\nTests can use environment variables or default to safe test values:\n\n```bash\n# Using environment variables\nexport MONNIFY_CONTRACT_CODE=your_test_contract\nexport MONNIFY_SECRET_KEY=your_test_secret\nexport MONNIFY_API_KEY=your_test_api_key\nexport MONNIFY_BASE_URL=https://sandbox.monnify.com\nnpm test\n\n# Or create .env.test file\ncp .env.example .env.test\n# Edit .env.test with your test credentials\nnpm test\n```\n\n### Sandbox Environment\n\n```typescript\nconst monnify = new MonnifySDK({\n  contractCode: 'your-sandbox-contract-code',\n  secretKey: 'your-sandbox-secret-key',\n  apiKey: 'your-sandbox-api-key',\n  baseURL: 'https://sandbox.monnify.com'\n});\n```\n\n### Test Cards\n\nFor testing in sandbox environment:\n\n| Card Number | CVV | Expiry | PIN | Description |\n|-------------|-----|--------|-----|-------------|\n| 5060666666666666666 | 123 | 03/50 | 1234 | Successful transaction |\n| 5060666666666666674 | 123 | 03/50 | 1234 | Insufficient funds |\n\n## Best Practices\n\n### 1. Environment Variables\n\n```bash\n# .env file\nMONNIFY_CONTRACT_CODE=your_contract_code\nMONNIFY_SECRET_KEY=your_secret_key\nMONNIFY_API_KEY=your_api_key\nMONNIFY_BASE_URL=https://api.monnify.com\n```\n\n### 2. Error Handling\n\nAlways wrap SDK calls in try-catch blocks and handle errors appropriately.\n\n### 3. Webhook Security\n\nAlways verify webhook signatures to ensure requests are from Monnify.\n\n### 4. Reference Generation\n\nUse unique, traceable references for all transactions and accounts:\n\n```typescript\nconst paymentReference = `PAY-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n```\n\n### 5. Amount Handling\n\nAmounts are in kobo (smallest currency unit). NGN 100.00 = 10000 kobo.\n\n### 6. Testing\n\nRun tests before deploying and use the comprehensive test suite to validate integrations:\n\n```bash\nnpm run test:coverage  # Ensure high test coverage\nnpm run lint:fix       # Fix linting issues\n```\n\n## Contributing\n\nWe welcome contributions! Please follow these guidelines:\n\n### Code Standards\n- **Documentation is mandatory**: All code must include comprehensive comments explaining functionality\n- Follow existing code style and patterns\n- Include TypeScript types for all new features\n- Add examples for new API methods\n\n### Process\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. **Document your code**: Add clear comments explaining what your code does and why\n4. Run linting: `npm run lint:fix`\n5. Test your changes with examples\n6. Commit your changes (`git commit -m 'Add some amazing feature'`)\n7. Push to the branch (`git push origin feature/amazing-feature`)\n8. Open a Pull Request\n\n### Documentation Requirements\n- All public methods must have JSDoc comments\n- Complex logic must be explained with inline comments\n- New features require usage examples\n- Update README.md if adding new functionality\n\n**Note**: Pull requests without proper code documentation will not be accepted.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Support\n\n- 📦 **NPM Package**: [npmjs.com/package/@adsesugh/monnify-nodejs-sdk](https://www.npmjs.com/package/@adsesugh/monnify-nodejs-sdk)\n- 📧 **Email**: asesugh@gmail.com\n- 📖 **Documentation**: [Monnify API Docs](https://developers.monnify.com/api/)\n- 🐛 **Issues**: [GitHub Issues](https://github.com/adsesugh/monnify-nodejs-sdk/issues)\n- ⭐ **GitHub**: [github.com/adsesugh/monnify-nodejs-sdk](https://github.com/adsesugh/monnify-nodejs-sdk)\n\n## Changelog\n\n### v1.0.0\n- Initial release with complete Monnify API coverage\n- 40+ API methods across all endpoints\n- Core features: Transactions, Reserved Accounts, Transfers\n- Advanced features: Sub-accounts, Invoices, Refunds, Settlements\n- Payment methods: Cards, Bank transfers, USSD, Direct debit\n- Business tools: Card tokenization, BVN verification, Payment links\n- TypeScript support with comprehensive type definitions\n- Production-ready error handling and retry logic\n- Comprehensive test suite with 95%+ coverage\n- Webhook signature verification\n- Automatic token management","readmeFilename":"README.md"}