{"_id":"@dungxa27/tori-acb","_rev":"2-dde4135371e06aa5f84290f6a16cc3da","name":"@dungxa27/tori-acb","dist-tags":{"latest":"0.3.1"},"versions":{"0.2.3":{"name":"@dungxa27/tori-acb","version":"0.2.3","license":"UNLICENSED","_id":"@dungxa27/tori-acb@0.2.3","maintainers":[{"name":"dungxa27","email":"1stnguyendung@gmail.com"}],"dist":{"shasum":"8822f7951a15509791ad2f1df4e12931228c1ff1","tarball":"https://registry.npmjs.org/@dungxa27/tori-acb/-/tori-acb-0.2.3.tgz","fileCount":19,"integrity":"sha512-dGTxp1MMl/GNl4nqoF+SGPT8pVclVLx1WDHwJ7zrx5L5wb40ViB5DQJLX7tvy3wy2oxep3UyasklTy9wXy1NAg==","signatures":[{"sig":"MEUCIQCWmbMbJZBl79Eg8FiafkaL9M5jBHpXHCf191vEp+e2eQIgMjkePMRlhnBtV24YPJZz6IHW9FKEFw0Mlx2RsECnK5o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43578},"main":"dist/index.js","types":"dist/index.d.ts","private":false,"scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"dungxa27","email":"1stnguyendung@gmail.com"},"_npmVersion":"10.9.4","description":"ToriACB payment package","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.0","axios":"^1.6.0","mongoose":"^9.6.2","typescript":"^5.9.3","@types/node":"^25.8.0","@nestjs/axios":"^3.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","@nestjs/mongoose":"^10.0.0","reflect-metadata":"^0.1.13","class-transformer":"^0.5.0"},"peerDependencies":{"axios":"^1.6.0","@nestjs/axios":"^3.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/tori-acb_0.2.3_1778910367307_0.04715051106296375","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@dungxa27/tori-acb","version":"0.3.1","description":"ToriACB payment package","main":"dist/index.js","types":"dist/index.d.ts","license":"UNLICENSED","private":false,"scripts":{"build":"tsc","prepublishOnly":"npm run build"},"peerDependencies":{"@nestjs/axios":"^3.0.0","@nestjs/common":"^11.0.0","axios":"^1.6.0","class-transformer":"^0.5.0","class-validator":"^0.14.0"},"devDependencies":{"@nestjs/axios":"^3.0.0","@nestjs/common":"^11.0.0","@nestjs/mongoose":"^10.0.0","@types/node":"^25.8.0","axios":"^1.6.0","class-transformer":"^0.5.0","class-validator":"^0.14.0","mongoose":"^9.6.2","reflect-metadata":"^0.1.13","rxjs":"^7.8.0","typescript":"^5.9.3"},"_id":"@dungxa27/tori-acb@0.3.1","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-AxHaSyi9tIMy42uCBhaPjto2GNoUcmtwbZsy+im716fYvDn29YyvbODi+pPJQC6v0l0/O2GCSYsS+jdkOTTnyw==","shasum":"0497d67181b4280d02c6cd78e92e835d2017daeb","tarball":"https://registry.npmjs.org/@dungxa27/tori-acb/-/tori-acb-0.3.1.tgz","fileCount":19,"unpackedSize":45679,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICZSDcveb8V4zeGKyTa3O0uhohthlcVy4EdDoYXm3Q4WAiEAgX9U3CML4tOgYk8W0OkNkRSRLyYs0pEgzKZPURVkluk="}]},"_npmUser":{"name":"dungxa27","email":"1stnguyendung@gmail.com"},"directories":{},"maintainers":[{"name":"dungxa27","email":"1stnguyendung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tori-acb_0.3.1_1778911363553_0.5174280793250206"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-16T05:46:07.193Z","modified":"2026-05-16T06:02:43.789Z","0.2.3":"2026-05-16T05:46:07.497Z","0.3.1":"2026-05-16T06:02:43.685Z"},"license":"UNLICENSED","description":"ToriACB payment package","maintainers":[{"name":"dungxa27","email":"1stnguyendung@gmail.com"}],"readme":"# Tori ACB Integration\n\nNestJS module for ACB (Asia Commercial Bank) integration - Login, Balance, and Transaction History.\n\n## Installation\n\n```bash\nnpm install @tori/tori-acb\n```\n\n## Usage\n\n### Import Module\n\n```typescript\nimport { Module } from '@nestjs/common';\nimport { ACBModule } from '@tori/tori-acb';\n\n@Module({\n  imports: [\n    ACBModule.forRoot({\n      router: 'acb', // Custom router path (default: 'acb')\n      timeout: 30000,\n      retryAttempts: 3,\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n### Async Configuration (with MongoDB Settings)\n\n```typescript\nimport { MongoService } from './mongo.service';\n\n@Module({\n  imports: [\n    ACBModule.forRootAsync({\n      useFactory: async (mongoService: MongoService) => {\n        const settings = await mongoService.getSettings();\n        \n        return {\n          router: settings.acbRouter || 'acb', // Dynamic router from DB\n          timeout: 30000,\n        };\n      },\n      inject: [MongoService],\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n## MongoDB Schemas\n\nPackage này cung cấp schemas để dự án khác tự connect MongoDB:\n\n### ACBSession Schema\n```typescript\nimport { ACBSessionSchema } from '@tori/tori-acb';\nimport { MongooseModule } from '@nestjs/mongoose';\n\nMongooseModule.forFeature([\n  { name: 'ACBSession', schema: ACBSessionSchema }\n])\n```\n\nFields:\n- `sessionId` - Unique session identifier\n- `username` - User's username\n- `accountNumber` - Bank account number\n- `accountName` - Account holder name\n- `expiresAt` - Session expiration time\n- `isActive` - Session status\n- `lastAccessedAt` - Last access timestamp\n\n### ACBTransaction Schema\n```typescript\nimport { ACBTransactionSchemaFactory } from '@tori/tori-acb';\nimport { MongooseModule } from '@nestjs/mongoose';\n\nMongooseModule.forFeature([\n  { name: 'ACBTransaction', schema: ACBTransactionSchemaFactory }\n])\n```\n\nFields:\n- `transactionId` - Unique transaction ID\n- `accountNumber` - Account number\n- `transactionDate` - Transaction date\n- `description` - Transaction description\n- `amount` - Transaction amount\n- `type` - CREDIT or DEBIT\n- `balance` - Balance after transaction\n- `referenceNumber` - Reference number\n- `isProcessed` - Processing status\n\n### ACBConfig Schema\n```typescript\nimport { ACBConfigSchemaFactory } from '@tori/tori-acb';\nimport { MongooseModule } from '@nestjs/mongoose';\n\nMongooseModule.forFeature([\n  { name: 'ACBConfig', schema: ACBConfigSchemaFactory }\n])\n```\n\nFields:\n- `key` - Configuration key\n- `router` - Router path\n- `timeout` - Request timeout\n- `retryAttempts` - Retry attempts\n- `isActive` - Config status\n\n## API Endpoints\n\nThe endpoints will be available under the configured router path (default: `/acb`).\n\n### Login\n```\nPOST /acb/login\n```\n\nRequest body:\n```json\n{\n  \"username\": \"your_username\",\n  \"password\": \"your_password\",\n  \"accountNumber\": \"1234567890\"\n}\n```\n\nResponse:\n```json\n{\n  \"success\": true,\n  \"message\": \"Login successful\",\n  \"data\": {\n    \"sessionId\": \"SESSION_xxx\",\n    \"accountNumber\": \"1234567890\",\n    \"accountName\": \"Account Holder\",\n    \"expiresAt\": \"2026-05-16T11:30:00Z\"\n  }\n}\n```\n\n### Get Balance\n```\nGET /acb/balance?sessionId=SESSION_xxx&accountNumber=1234567890\n```\n\nResponse:\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"accountNumber\": \"1234567890\",\n    \"accountName\": \"Account Holder Name\",\n    \"availableBalance\": 10000000,\n    \"currentBalance\": 10500000,\n    \"currency\": \"VND\"\n  }\n}\n```\n\n### Get Transaction History\n```\nGET /acb/history?sessionId=SESSION_xxx&fromDate=2026-05-01&toDate=2026-05-16&page=1&limit=20\n```\n\nResponse:\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"accountNumber\": \"1234567890\",\n    \"transactions\": [\n      {\n        \"transactionId\": \"TXN001\",\n        \"transactionDate\": \"2026-05-16T10:30:00Z\",\n        \"description\": \"Transfer from John Doe\",\n        \"amount\": 500000,\n        \"type\": \"CREDIT\",\n        \"balance\": 10500000,\n        \"referenceNumber\": \"REF001\"\n      }\n    ],\n    \"fromDate\": \"2026-05-01\",\n    \"toDate\": \"2026-05-16\",\n    \"totalRecords\": 1\n  }\n}\n```\n\n### Health Check\n```\nGET /acb/health\n```\n\n## Service Usage\n\n```typescript\nimport { Injectable } from '@nestjs/common';\nimport { ACBService } from '@tori/tori-acb';\n\n@Injectable()\nexport class BankingService {\n  constructor(private readonly acbService: ACBService) {}\n\n  async checkBalance(sessionId: string) {\n    return await this.acbService.getBalance({ sessionId });\n  }\n\n  async getTransactions(sessionId: string, fromDate: string, toDate: string) {\n    return await this.acbService.getHistory({\n      sessionId,\n      fromDate,\n      toDate,\n    });\n  }\n}\n```\n\n## License\n\nUNLICENSED\n","readmeFilename":"README.md"}