@traxionpay/cbsmiddleware 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierrc +4 -0
- package/Dockerfile +26 -0
- package/README.md +109 -0
- package/dist/app.module.d.ts +3 -0
- package/dist/app.module.d.ts.map +1 -0
- package/dist/app.module.js +44 -0
- package/dist/app.module.js.map +1 -0
- package/dist/auth/apikey.guard.d.ts +9 -0
- package/dist/auth/apikey.guard.d.ts.map +1 -0
- package/dist/auth/apikey.guard.js +86 -0
- package/dist/auth/apikey.guard.js.map +1 -0
- package/dist/auth/auth.controller.d.ts +10 -0
- package/dist/auth/auth.controller.d.ts.map +1 -0
- package/dist/auth/auth.controller.js +65 -0
- package/dist/auth/auth.controller.js.map +1 -0
- package/dist/auth/auth.interface.d.ts +8 -0
- package/dist/auth/auth.interface.d.ts.map +1 -0
- package/dist/auth/auth.interface.js +3 -0
- package/dist/auth/auth.interface.js.map +1 -0
- package/dist/auth/auth.module.d.ts +6 -0
- package/dist/auth/auth.module.d.ts.map +1 -0
- package/dist/auth/auth.module.js +81 -0
- package/dist/auth/auth.module.js.map +1 -0
- package/dist/auth/constant.d.ts +2 -0
- package/dist/auth/constant.d.ts.map +1 -0
- package/dist/auth/constant.js +5 -0
- package/dist/auth/constant.js.map +1 -0
- package/dist/auth/jwt-constant.d.ts +8 -0
- package/dist/auth/jwt-constant.d.ts.map +1 -0
- package/dist/auth/jwt-constant.js +60 -0
- package/dist/auth/jwt-constant.js.map +1 -0
- package/dist/auth/jwt-guard.d.ts +5 -0
- package/dist/auth/jwt-guard.d.ts.map +1 -0
- package/dist/auth/jwt-guard.js +18 -0
- package/dist/auth/jwt-guard.js.map +1 -0
- package/dist/auth/jwt-strategy.d.ts +16 -0
- package/dist/auth/jwt-strategy.d.ts.map +1 -0
- package/dist/auth/jwt-strategy.js +59 -0
- package/dist/auth/jwt-strategy.js.map +1 -0
- package/dist/auth/services/auth.service.d.ts +14 -0
- package/dist/auth/services/auth.service.d.ts.map +1 -0
- package/dist/auth/services/auth.service.js +56 -0
- package/dist/auth/services/auth.service.js.map +1 -0
- package/dist/auth/services/encryption.service.d.ts +11 -0
- package/dist/auth/services/encryption.service.d.ts.map +1 -0
- package/dist/auth/services/encryption.service.js +49 -0
- package/dist/auth/services/encryption.service.js.map +1 -0
- package/dist/auth.config.d.ts +29 -0
- package/dist/auth.config.d.ts.map +1 -0
- package/dist/auth.config.js +71 -0
- package/dist/auth.config.js.map +1 -0
- package/dist/banking/banking.controller.d.ts +18 -0
- package/dist/banking/banking.controller.d.ts.map +1 -0
- package/dist/banking/banking.controller.js +146 -0
- package/dist/banking/banking.controller.js.map +1 -0
- package/dist/banking/banking.module.d.ts +6 -0
- package/dist/banking/banking.module.d.ts.map +1 -0
- package/dist/banking/banking.module.js +90 -0
- package/dist/banking/banking.module.js.map +1 -0
- package/dist/banking/dto/account-transfer.dto.d.ts +17 -0
- package/dist/banking/dto/account-transfer.dto.d.ts.map +1 -0
- package/dist/banking/dto/account-transfer.dto.js +101 -0
- package/dist/banking/dto/account-transfer.dto.js.map +1 -0
- package/dist/banking/dto/account.dto.d.ts +19 -0
- package/dist/banking/dto/account.dto.d.ts.map +1 -0
- package/dist/banking/dto/account.dto.js +104 -0
- package/dist/banking/dto/account.dto.js.map +1 -0
- package/dist/banking/dto/fetch-bank-balance.dto.d.ts +12 -0
- package/dist/banking/dto/fetch-bank-balance.dto.d.ts.map +1 -0
- package/dist/banking/dto/fetch-bank-balance.dto.js +71 -0
- package/dist/banking/dto/fetch-bank-balance.dto.js.map +1 -0
- package/dist/banking/dto/transaction-history.dto.d.ts +15 -0
- package/dist/banking/dto/transaction-history.dto.d.ts.map +1 -0
- package/dist/banking/dto/transaction-history.dto.js +89 -0
- package/dist/banking/dto/transaction-history.dto.js.map +1 -0
- package/dist/banking/factory/bank-strategy.factory.d.ts +9 -0
- package/dist/banking/factory/bank-strategy.factory.d.ts.map +1 -0
- package/dist/banking/factory/bank-strategy.factory.js +48 -0
- package/dist/banking/factory/bank-strategy.factory.js.map +1 -0
- package/dist/banking/interfaces/bank-config.interface.d.ts +22 -0
- package/dist/banking/interfaces/bank-config.interface.d.ts.map +1 -0
- package/dist/banking/interfaces/bank-config.interface.js +3 -0
- package/dist/banking/interfaces/bank-config.interface.js.map +1 -0
- package/dist/banking/interfaces/bank-service.interface.d.ts +19 -0
- package/dist/banking/interfaces/bank-service.interface.d.ts.map +1 -0
- package/dist/banking/interfaces/bank-service.interface.js +3 -0
- package/dist/banking/interfaces/bank-service.interface.js.map +1 -0
- package/dist/banking/services/ASPAC.service.d.ts +25 -0
- package/dist/banking/services/ASPAC.service.d.ts.map +1 -0
- package/dist/banking/services/ASPAC.service.js +498 -0
- package/dist/banking/services/ASPAC.service.js.map +1 -0
- package/dist/banking/services/BankGateway.service.d.ts +18 -0
- package/dist/banking/services/BankGateway.service.d.ts.map +1 -0
- package/dist/banking/services/BankGateway.service.js +71 -0
- package/dist/banking/services/BankGateway.service.js.map +1 -0
- package/dist/banking/services/MBWIN.service.d.ts +25 -0
- package/dist/banking/services/MBWIN.service.d.ts.map +1 -0
- package/dist/banking/services/MBWIN.service.js +655 -0
- package/dist/banking/services/MBWIN.service.js.map +1 -0
- package/dist/banking/services/WelcomeBank.service.d.ts +29 -0
- package/dist/banking/services/WelcomeBank.service.d.ts.map +1 -0
- package/dist/banking/services/WelcomeBank.service.js +840 -0
- package/dist/banking/services/WelcomeBank.service.js.map +1 -0
- package/dist/banking/services/sms.service.d.ts +10 -0
- package/dist/banking/services/sms.service.d.ts.map +1 -0
- package/dist/banking/services/sms.service.js +97 -0
- package/dist/banking/services/sms.service.js.map +1 -0
- package/dist/banking/tokens/bank-service.tokens.d.ts +5 -0
- package/dist/banking/tokens/bank-service.tokens.d.ts.map +1 -0
- package/dist/banking/tokens/bank-service.tokens.js +8 -0
- package/dist/banking/tokens/bank-service.tokens.js.map +1 -0
- package/dist/banking/types.d.ts +10 -0
- package/dist/banking/types.d.ts.map +1 -0
- package/dist/banking/types.js +3 -0
- package/dist/banking/types.js.map +1 -0
- package/dist/decorators/response_message.decorator.d.ts +2 -0
- package/dist/decorators/response_message.decorator.d.ts.map +1 -0
- package/dist/decorators/response_message.decorator.js +7 -0
- package/dist/decorators/response_message.decorator.js.map +1 -0
- package/dist/helpers/axios-error.helper.d.ts +6 -0
- package/dist/helpers/axios-error.helper.d.ts.map +1 -0
- package/dist/helpers/axios-error.helper.js +78 -0
- package/dist/helpers/axios-error.helper.js.map +1 -0
- package/dist/helpers/response-format.helper.d.ts +4 -0
- package/dist/helpers/response-format.helper.d.ts.map +1 -0
- package/dist/helpers/response-format.helper.js +15 -0
- package/dist/helpers/response-format.helper.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/interceptors/response.interceptor.d.ts +16 -0
- package/dist/interceptors/response.interceptor.d.ts.map +1 -0
- package/dist/interceptors/response.interceptor.js +80 -0
- package/dist/interceptors/response.interceptor.js.map +1 -0
- package/dist/logger/logger-interceptor.d.ts +14 -0
- package/dist/logger/logger-interceptor.d.ts.map +1 -0
- package/dist/logger/logger-interceptor.js +60 -0
- package/dist/logger/logger-interceptor.js.map +1 -0
- package/dist/logger/logger-option.d.ts +6 -0
- package/dist/logger/logger-option.d.ts.map +1 -0
- package/dist/logger/logger-option.js +103 -0
- package/dist/logger/logger-option.js.map +1 -0
- package/dist/logger/logger.config.d.ts +3 -0
- package/dist/logger/logger.config.d.ts.map +1 -0
- package/dist/logger/logger.config.js +31 -0
- package/dist/logger/logger.config.js.map +1 -0
- package/dist/logger/logger.module.d.ts +3 -0
- package/dist/logger/logger.module.d.ts.map +1 -0
- package/dist/logger/logger.module.js +76 -0
- package/dist/logger/logger.module.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +13 -0
- package/dist/main.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/docker-compose.yml +14 -0
- package/ecosystem.config.js +35 -0
- package/eslint.config.mjs +34 -0
- package/nest-cli.json +8 -0
- package/package.json +102 -0
- package/src/app.module.ts +33 -0
- package/src/auth/apikey.guard.ts +42 -0
- package/src/auth/auth.controller.ts +41 -0
- package/src/auth/auth.interface.ts +7 -0
- package/src/auth/auth.module.ts +125 -0
- package/src/auth/constant.ts +1 -0
- package/src/auth/jwt-constant.ts +31 -0
- package/src/auth/jwt-guard.ts +5 -0
- package/src/auth/jwt-strategy.ts +43 -0
- package/src/auth/services/auth.service.ts +33 -0
- package/src/auth/services/encryption.service.ts +35 -0
- package/src/auth.config.ts +42 -0
- package/src/banking/banking.controller.ts +142 -0
- package/src/banking/banking.module.ts +142 -0
- package/src/banking/dto/account-transfer.dto.ts +66 -0
- package/src/banking/dto/account.dto.ts +70 -0
- package/src/banking/dto/fetch-bank-balance.dto.ts +46 -0
- package/src/banking/dto/transaction-history.dto.ts +58 -0
- package/src/banking/factory/bank-strategy.factory.ts +25 -0
- package/src/banking/interfaces/bank-config.interface.ts +25 -0
- package/src/banking/interfaces/bank-service.interface.ts +164 -0
- package/src/banking/services/ASPAC.service.ts +574 -0
- package/src/banking/services/BankGateway.service.ts +64 -0
- package/src/banking/services/MBWIN.service.ts +779 -0
- package/src/banking/services/WelcomeBank.service.ts +990 -0
- package/src/banking/services/sms.service.ts +50 -0
- package/src/banking/tokens/bank-service.tokens.ts +4 -0
- package/src/banking/types.ts +10 -0
- package/src/decorators/response_message.decorator.ts +4 -0
- package/src/helpers/axios-error.helper.ts +63 -0
- package/src/helpers/response-format.helper.ts +15 -0
- package/src/index.ts +15 -0
- package/src/interceptors/response.interceptor.ts +53 -0
- package/src/logger/logger-interceptor.ts +55 -0
- package/src/logger/logger-option.ts +119 -0
- package/src/logger/logger.config.ts +31 -0
- package/src/logger/logger.module.ts +31 -0
- package/src/main.ts +10 -0
- package/src/types/pino-daily-rotate-file.d.ts +31 -0
- package/tsconfig.build.json +11 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/tsconfig.json +22 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { Controller, Post, Body, UseGuards } from '@nestjs/common';
|
|
2
|
+
import { FetchBankBalanceDto } from './dto/fetch-bank-balance.dto';
|
|
3
|
+
import { BankStrategyFactory } from './factory/bank-strategy.factory';
|
|
4
|
+
import { JwtAuthGuard } from '../auth/jwt-guard';
|
|
5
|
+
import { ResponseMessage } from '../decorators/response_message.decorator';
|
|
6
|
+
import { AccountDto, ValidateOtp } from './dto/account.dto';
|
|
7
|
+
import { TransactionHistoryDto } from './dto/transaction-history.dto'
|
|
8
|
+
import { AccountTransferDto } from './dto/account-transfer.dto'
|
|
9
|
+
|
|
10
|
+
@Controller('banking')
|
|
11
|
+
@UseGuards(JwtAuthGuard)
|
|
12
|
+
export class BankingController {
|
|
13
|
+
constructor(private readonly factory: BankStrategyFactory) { }
|
|
14
|
+
|
|
15
|
+
@Post('token')
|
|
16
|
+
@ResponseMessage("Tokens")
|
|
17
|
+
async getAccessToken(@Body() body: any) {
|
|
18
|
+
|
|
19
|
+
const bankid = body.bankId;
|
|
20
|
+
|
|
21
|
+
const service = this.factory.getBankService(bankid);
|
|
22
|
+
|
|
23
|
+
const token = await service.generateToken();
|
|
24
|
+
|
|
25
|
+
return token;
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@Post('refresh-token')
|
|
31
|
+
@ResponseMessage("Refresh Token")
|
|
32
|
+
async getRefreshToken(@Body() body: any) {
|
|
33
|
+
|
|
34
|
+
const service = this.factory.getBankService(body.bankId);
|
|
35
|
+
|
|
36
|
+
const response = await service.refreshToken(body.refreshToken);
|
|
37
|
+
|
|
38
|
+
return response;
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@Post('link')
|
|
43
|
+
@ResponseMessage("Generate OTP from Mobile No.:")
|
|
44
|
+
async linkAccount(@Body() accountDto: AccountDto) {
|
|
45
|
+
// async linkAccount(@Query('acc') acc: string, @Query('br') br?: string) {
|
|
46
|
+
const { bankId } = accountDto;
|
|
47
|
+
//let send_otp!: string;
|
|
48
|
+
// let otp!: string;
|
|
49
|
+
/* if (!userid ) {
|
|
50
|
+
return { success: false, message: 'Account No. is required' };
|
|
51
|
+
} */
|
|
52
|
+
const service = this.factory.getBankService(bankId);
|
|
53
|
+
|
|
54
|
+
const response = await service.linkAccount(accountDto);
|
|
55
|
+
|
|
56
|
+
return response;
|
|
57
|
+
//const response = await service.findAccountDetailsRaw(token.token, userid);
|
|
58
|
+
|
|
59
|
+
//const { id, username, mobileNumber, ...rest } = response;
|
|
60
|
+
|
|
61
|
+
/* if (response) {
|
|
62
|
+
const otp = service.generateOtp(mobileNumber, id.toString(), bankid);
|
|
63
|
+
send_otp = otp;
|
|
64
|
+
return { success: true, send_otp, message: 'OTP Sent. Kindly verify your OTP' };
|
|
65
|
+
} else {
|
|
66
|
+
return { success: false, send_otp: {}, message: 'Account Not Found' };
|
|
67
|
+
} */
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@Post('validate')
|
|
71
|
+
@ResponseMessage("OTP Validation")
|
|
72
|
+
async validateOtp(@Body() validateOtp: ValidateOtp) {
|
|
73
|
+
const { bankId } = validateOtp;
|
|
74
|
+
|
|
75
|
+
const service = this.factory.getBankService(bankId);
|
|
76
|
+
|
|
77
|
+
/* if (!acc || !otp) {
|
|
78
|
+
return { success: false, message: 'Mobile No. and OTP are required' };
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const isValid = service.validateOtp(acc.toString(), otp);
|
|
82
|
+
*/
|
|
83
|
+
|
|
84
|
+
const response = service.validateOtp(validateOtp);
|
|
85
|
+
/* return {
|
|
86
|
+
success: isValid,
|
|
87
|
+
message: isValid ? 'OTP is valid' : 'Invalid or expired OTP',
|
|
88
|
+
}; */
|
|
89
|
+
|
|
90
|
+
return response;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
@Post('balance-inquiry')
|
|
95
|
+
async fetchBankBalance(@Body() fetchBankBalanceDto: FetchBankBalanceDto) {
|
|
96
|
+
|
|
97
|
+
const { bankId } = fetchBankBalanceDto
|
|
98
|
+
|
|
99
|
+
const service = this.factory.getBankService(bankId);
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
const balance = await service.processBalanceTransaction(fetchBankBalanceDto);
|
|
103
|
+
|
|
104
|
+
return balance;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@Post('wallet-cash-in')
|
|
108
|
+
@ResponseMessage("Account Cash In")
|
|
109
|
+
async accountCashIn(@Body() accountTransaferDto: AccountTransferDto) {
|
|
110
|
+
const { bankId } = accountTransaferDto;
|
|
111
|
+
|
|
112
|
+
const service = this.factory.getBankService(bankId);
|
|
113
|
+
|
|
114
|
+
const response = await service.accountCashIn(accountTransaferDto);
|
|
115
|
+
|
|
116
|
+
return response;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
@Post('bank-deposit')
|
|
120
|
+
@ResponseMessage("Account Deposit")
|
|
121
|
+
async accountDeposit(@Body() accountTransaferDto: AccountTransferDto) {
|
|
122
|
+
const { bankId } = accountTransaferDto;
|
|
123
|
+
|
|
124
|
+
const service = this.factory.getBankService(bankId);
|
|
125
|
+
|
|
126
|
+
const response = await service.accountDeposit(accountTransaferDto);
|
|
127
|
+
|
|
128
|
+
return response;
|
|
129
|
+
}
|
|
130
|
+
@Post('transaction-history')
|
|
131
|
+
@ResponseMessage("Transaction History")
|
|
132
|
+
async getTranHisto(@Body() transactionHistoryDto: TransactionHistoryDto) {
|
|
133
|
+
const { bankId } = transactionHistoryDto;
|
|
134
|
+
|
|
135
|
+
const service = this.factory.getBankService(bankId);
|
|
136
|
+
|
|
137
|
+
const response = await service.getTransactionHistory(transactionHistoryDto);
|
|
138
|
+
|
|
139
|
+
return response;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { DynamicModule, Module, Provider } from '@nestjs/common';
|
|
2
|
+
import { BankingModuleOptions } from './types';
|
|
3
|
+
import { ASPAC_SERVICE_TOKEN, BANKING_CONFIG, MBWIN_SERVICE_TOKEN, WELCOMEBANK_SERVICE_TOKEN } from './tokens/bank-service.tokens';
|
|
4
|
+
import { SmsService } from './services/sms.service';
|
|
5
|
+
import { BankStrategyFactory } from './factory/bank-strategy.factory';
|
|
6
|
+
import { BankingController } from './banking.controller';
|
|
7
|
+
import { AppLoggerModule } from '../logger/logger.module';
|
|
8
|
+
import { ConfigModule } from '@nestjs/config';
|
|
9
|
+
import { ASPACService } from './services/ASPAC.service';
|
|
10
|
+
import { WelcomeBankService } from './services/WelcomeBank.service';
|
|
11
|
+
import { MBWINService } from './services/MBWIN.service';
|
|
12
|
+
import { BankingGatewayService } from './services/BankGateway.service';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The `BankingModule` provides dynamic registration for bank service integrations.
|
|
16
|
+
*
|
|
17
|
+
* This module allows you to inject custom implementations of bank services (e.g., Bank1, Bank2)
|
|
18
|
+
* and configuration options for flexible banking-related operations such as balance checks,
|
|
19
|
+
* OTP generation, and transaction history retrieval.
|
|
20
|
+
*
|
|
21
|
+
* It uses the strategy pattern internally to switch between bank service implementations at runtime.
|
|
22
|
+
*
|
|
23
|
+
* @export
|
|
24
|
+
* @class BankingModule
|
|
25
|
+
* @typedef {BankingModule}
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* // Register with custom service implementations
|
|
29
|
+
* BankingModule.register({
|
|
30
|
+
* bank1Service: CustomBank1Service,
|
|
31
|
+
* bank2Service: CustomBank2Service,
|
|
32
|
+
* config: {
|
|
33
|
+
* BANK1_AUTH_KEY: 'abc123',
|
|
34
|
+
* BANK1_URL: 'https://bank1.api',
|
|
35
|
+
* BANK1_DATA_PORT: 3001,
|
|
36
|
+
* ...
|
|
37
|
+
* },
|
|
38
|
+
* });
|
|
39
|
+
*/
|
|
40
|
+
@Module({})
|
|
41
|
+
export class BankingModule {
|
|
42
|
+
/**
|
|
43
|
+
* Registers the `BankingModule` dynamically with optional overrides for services and config.
|
|
44
|
+
*
|
|
45
|
+
* @static
|
|
46
|
+
* @param {BankingModuleOptions} [options={}] - Configuration options for banking integration.
|
|
47
|
+
* @returns {DynamicModule} A configured `DynamicModule` to be imported in the main AppModule or feature module.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* import { BankingModule } from './banking/banking.module';
|
|
51
|
+
*
|
|
52
|
+
* `@`Module({
|
|
53
|
+
* imports: [
|
|
54
|
+
* BankingModule.register({
|
|
55
|
+
* bank1Service: CustomBank1Service,
|
|
56
|
+
* config: {
|
|
57
|
+
* BANK1_AUTH_KEY: process.env.BANK1_KEY,
|
|
58
|
+
* BANK1_URL: 'https://api.bank1.com',
|
|
59
|
+
* BANK1_DATA_PORT: 443,
|
|
60
|
+
* BANK1_MESSAGE_ID: 'MSG1234'
|
|
61
|
+
* },
|
|
62
|
+
* })
|
|
63
|
+
* ],
|
|
64
|
+
* })
|
|
65
|
+
* export class AppModule {}
|
|
66
|
+
*/
|
|
67
|
+
static register(options: BankingModuleOptions = {}): DynamicModule {
|
|
68
|
+
// Provide default configuration if none is passed
|
|
69
|
+
const configProvider: Provider = {
|
|
70
|
+
provide: BANKING_CONFIG,
|
|
71
|
+
useValue: options.config ?? {
|
|
72
|
+
BANK1_DATA_KEY: '',
|
|
73
|
+
BANK1_AUTH_KEY: '',
|
|
74
|
+
BANK2_AUTH_KEY: '',
|
|
75
|
+
BANK1_URL: '',
|
|
76
|
+
BANK2_URL: '',
|
|
77
|
+
BANK1_DATA_PORT: 0,
|
|
78
|
+
BANK2_DATA_PORT: 0,
|
|
79
|
+
BANK1_MESSAGE_ID: '',
|
|
80
|
+
|
|
81
|
+
//ASPAC
|
|
82
|
+
ASPAC_URL: '',
|
|
83
|
+
ASPAC_API_KEY: '',
|
|
84
|
+
ASPAC_VERSION_KEY: '',
|
|
85
|
+
|
|
86
|
+
//WelcomeBank
|
|
87
|
+
WELCOMEBANK_URL: '',
|
|
88
|
+
WELCOMEBANK_PORT: 0,
|
|
89
|
+
WELCOMEBANK_API_KEY: '',
|
|
90
|
+
WELCOMEBANK_VERSION_KEY: '',
|
|
91
|
+
WELCOMBANK_ENABLEENCRYPTION: false,
|
|
92
|
+
|
|
93
|
+
//MBWIN
|
|
94
|
+
MBWIN_URL: '',
|
|
95
|
+
MBWIN_PORT: 0,
|
|
96
|
+
MBWIN_API_KEY: '',
|
|
97
|
+
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
// Core providers including injectable services and strategy factory
|
|
102
|
+
const providers: Provider[] = [
|
|
103
|
+
configProvider,
|
|
104
|
+
{
|
|
105
|
+
provide: ASPAC_SERVICE_TOKEN,
|
|
106
|
+
useClass: options.ASPACService ?? ASPACService,
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
provide: WELCOMEBANK_SERVICE_TOKEN,
|
|
110
|
+
useClass: options.WelcomeBankService ?? WelcomeBankService,
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
provide: MBWIN_SERVICE_TOKEN,
|
|
114
|
+
useClass: options.MBWINService ?? MBWINService,
|
|
115
|
+
},
|
|
116
|
+
BankStrategyFactory,
|
|
117
|
+
ASPACService,
|
|
118
|
+
WelcomeBankService,
|
|
119
|
+
SmsService,
|
|
120
|
+
MBWINService,
|
|
121
|
+
BankingGatewayService,
|
|
122
|
+
];
|
|
123
|
+
|
|
124
|
+
// Return the dynamic module definition
|
|
125
|
+
return {
|
|
126
|
+
module: BankingModule,
|
|
127
|
+
imports: [
|
|
128
|
+
AppLoggerModule, // Custom application logger
|
|
129
|
+
ConfigModule, // NestJS config module for env vars
|
|
130
|
+
],
|
|
131
|
+
controllers: [BankingController], // Controller to expose routes
|
|
132
|
+
providers, // Registered providers
|
|
133
|
+
exports: [
|
|
134
|
+
BankStrategyFactory,
|
|
135
|
+
ASPACService,
|
|
136
|
+
BankingGatewayService,
|
|
137
|
+
|
|
138
|
+
configProvider, // Export config for downstream modules
|
|
139
|
+
],
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IsDefined,
|
|
3
|
+
IsNotEmpty,
|
|
4
|
+
IsNumber,
|
|
5
|
+
IsOptional,
|
|
6
|
+
IsString
|
|
7
|
+
} from "class-validator";
|
|
8
|
+
|
|
9
|
+
export class AccountTransferDto {
|
|
10
|
+
|
|
11
|
+
@IsDefined()
|
|
12
|
+
@IsString()
|
|
13
|
+
bankId: string
|
|
14
|
+
|
|
15
|
+
@IsOptional()
|
|
16
|
+
@IsString()
|
|
17
|
+
token?: string
|
|
18
|
+
|
|
19
|
+
@IsOptional()
|
|
20
|
+
@IsString()
|
|
21
|
+
permissionKey?: string
|
|
22
|
+
|
|
23
|
+
@IsOptional()
|
|
24
|
+
@IsString()
|
|
25
|
+
sourceAccount?: string;
|
|
26
|
+
|
|
27
|
+
@IsOptional()
|
|
28
|
+
@IsString()
|
|
29
|
+
sourceBranch?: string;
|
|
30
|
+
|
|
31
|
+
@IsOptional()
|
|
32
|
+
@IsString()
|
|
33
|
+
sourceAccountType?: string;
|
|
34
|
+
|
|
35
|
+
@IsOptional()
|
|
36
|
+
@IsString()
|
|
37
|
+
destinationAccount?: string;
|
|
38
|
+
|
|
39
|
+
@IsOptional()
|
|
40
|
+
@IsString()
|
|
41
|
+
destinationBranch?: string;
|
|
42
|
+
|
|
43
|
+
@IsOptional()
|
|
44
|
+
@IsString()
|
|
45
|
+
destinationAccountType?: string;
|
|
46
|
+
|
|
47
|
+
@IsOptional()
|
|
48
|
+
@IsNumber()
|
|
49
|
+
amount?: number;
|
|
50
|
+
|
|
51
|
+
@IsOptional()
|
|
52
|
+
@IsString()
|
|
53
|
+
particulars?: string;
|
|
54
|
+
|
|
55
|
+
@IsOptional()
|
|
56
|
+
@IsNumber()
|
|
57
|
+
mobile?: number
|
|
58
|
+
|
|
59
|
+
@IsOptional()
|
|
60
|
+
@IsString()
|
|
61
|
+
fullName?: string;
|
|
62
|
+
|
|
63
|
+
@IsOptional()
|
|
64
|
+
@IsString()
|
|
65
|
+
birthDate?: string;
|
|
66
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IsDefined,
|
|
3
|
+
IsNotEmpty,
|
|
4
|
+
IsNumber,
|
|
5
|
+
IsString,
|
|
6
|
+
IsOptional
|
|
7
|
+
} from "class-validator";
|
|
8
|
+
|
|
9
|
+
export class AccountDto {
|
|
10
|
+
|
|
11
|
+
@IsDefined()
|
|
12
|
+
@IsString()
|
|
13
|
+
bankId: string
|
|
14
|
+
|
|
15
|
+
@IsOptional()
|
|
16
|
+
@IsString()
|
|
17
|
+
token?: string
|
|
18
|
+
|
|
19
|
+
@IsDefined()
|
|
20
|
+
@IsString()
|
|
21
|
+
account?: string
|
|
22
|
+
|
|
23
|
+
@IsOptional()
|
|
24
|
+
@IsString()
|
|
25
|
+
branch?: string;
|
|
26
|
+
|
|
27
|
+
@IsOptional()
|
|
28
|
+
@IsString()
|
|
29
|
+
accountType?: string;
|
|
30
|
+
|
|
31
|
+
@IsOptional()
|
|
32
|
+
@IsNumber()
|
|
33
|
+
mobile?: number
|
|
34
|
+
|
|
35
|
+
@IsOptional()
|
|
36
|
+
@IsString()
|
|
37
|
+
fullName?: string;
|
|
38
|
+
|
|
39
|
+
@IsOptional()
|
|
40
|
+
@IsString()
|
|
41
|
+
birthDate?: string;
|
|
42
|
+
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export class ValidateOtp {
|
|
46
|
+
|
|
47
|
+
@IsDefined()
|
|
48
|
+
@IsString()
|
|
49
|
+
bankId: string
|
|
50
|
+
|
|
51
|
+
@IsDefined()
|
|
52
|
+
@IsString()
|
|
53
|
+
token?: string
|
|
54
|
+
|
|
55
|
+
@IsDefined()
|
|
56
|
+
@IsString()
|
|
57
|
+
account?: string
|
|
58
|
+
|
|
59
|
+
@IsOptional()
|
|
60
|
+
@IsString()
|
|
61
|
+
branch?: string;
|
|
62
|
+
|
|
63
|
+
@IsOptional()
|
|
64
|
+
@IsString()
|
|
65
|
+
accountType?: string;
|
|
66
|
+
|
|
67
|
+
@IsOptional()
|
|
68
|
+
@IsString()
|
|
69
|
+
otp?: string
|
|
70
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IsDefined,
|
|
3
|
+
IsString,
|
|
4
|
+
IsOptional,
|
|
5
|
+
IsNumber
|
|
6
|
+
} from "class-validator";
|
|
7
|
+
|
|
8
|
+
export class FetchBankBalanceDto {
|
|
9
|
+
|
|
10
|
+
@IsDefined()
|
|
11
|
+
@IsString()
|
|
12
|
+
bankId: string
|
|
13
|
+
|
|
14
|
+
@IsOptional()
|
|
15
|
+
@IsString()
|
|
16
|
+
token?: string
|
|
17
|
+
|
|
18
|
+
@IsOptional()
|
|
19
|
+
@IsString()
|
|
20
|
+
permissionKey?: string
|
|
21
|
+
|
|
22
|
+
@IsOptional()
|
|
23
|
+
@IsString()
|
|
24
|
+
account?: string;
|
|
25
|
+
|
|
26
|
+
@IsOptional()
|
|
27
|
+
@IsString()
|
|
28
|
+
branch?: string;
|
|
29
|
+
|
|
30
|
+
@IsOptional()
|
|
31
|
+
@IsString()
|
|
32
|
+
accountType?: string;
|
|
33
|
+
|
|
34
|
+
@IsOptional()
|
|
35
|
+
@IsNumber()
|
|
36
|
+
mobile?: number
|
|
37
|
+
|
|
38
|
+
@IsOptional()
|
|
39
|
+
@IsString()
|
|
40
|
+
fullName?: string;
|
|
41
|
+
|
|
42
|
+
@IsOptional()
|
|
43
|
+
@IsString()
|
|
44
|
+
birthDate?: string;
|
|
45
|
+
|
|
46
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IsDefined,
|
|
3
|
+
IsNotEmpty,
|
|
4
|
+
IsNumber,
|
|
5
|
+
IsOptional,
|
|
6
|
+
IsString
|
|
7
|
+
} from "class-validator";
|
|
8
|
+
|
|
9
|
+
export class TransactionHistoryDto {
|
|
10
|
+
|
|
11
|
+
@IsDefined()
|
|
12
|
+
@IsString()
|
|
13
|
+
bankId: string
|
|
14
|
+
|
|
15
|
+
@IsOptional()
|
|
16
|
+
@IsString()
|
|
17
|
+
token?: string
|
|
18
|
+
|
|
19
|
+
@IsOptional()
|
|
20
|
+
@IsString()
|
|
21
|
+
permissionKey?: string
|
|
22
|
+
|
|
23
|
+
@IsOptional()
|
|
24
|
+
@IsString()
|
|
25
|
+
account?: string;
|
|
26
|
+
|
|
27
|
+
@IsOptional()
|
|
28
|
+
@IsString()
|
|
29
|
+
branch?: string;
|
|
30
|
+
|
|
31
|
+
@IsOptional()
|
|
32
|
+
@IsString()
|
|
33
|
+
accountType?: string;
|
|
34
|
+
|
|
35
|
+
@IsOptional()
|
|
36
|
+
@IsString()
|
|
37
|
+
dateFrom?: string;
|
|
38
|
+
|
|
39
|
+
@IsOptional()
|
|
40
|
+
@IsString()
|
|
41
|
+
dateTo?: string;
|
|
42
|
+
|
|
43
|
+
@IsOptional()
|
|
44
|
+
@IsNumber()
|
|
45
|
+
page?: number;
|
|
46
|
+
|
|
47
|
+
@IsOptional()
|
|
48
|
+
@IsNumber()
|
|
49
|
+
mobile?: number
|
|
50
|
+
|
|
51
|
+
@IsOptional()
|
|
52
|
+
@IsString()
|
|
53
|
+
fullName?: string;
|
|
54
|
+
|
|
55
|
+
@IsOptional()
|
|
56
|
+
@IsString()
|
|
57
|
+
birthDate?: string;
|
|
58
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@nestjs/common';
|
|
2
|
+
import { BankService } from '../interfaces/bank-service.interface';
|
|
3
|
+
import { ASPAC_SERVICE_TOKEN, WELCOMEBANK_SERVICE_TOKEN, MBWIN_SERVICE_TOKEN } from '../tokens/bank-service.tokens';
|
|
4
|
+
|
|
5
|
+
@Injectable()
|
|
6
|
+
export class BankStrategyFactory {
|
|
7
|
+
constructor(
|
|
8
|
+
@Inject(ASPAC_SERVICE_TOKEN) private readonly ASPACService: BankService,
|
|
9
|
+
@Inject(WELCOMEBANK_SERVICE_TOKEN) private readonly WelcomeBankService: BankService,
|
|
10
|
+
@Inject(MBWIN_SERVICE_TOKEN) private readonly MBWINService: BankService,
|
|
11
|
+
) {}
|
|
12
|
+
|
|
13
|
+
getBankService(bankid: string): BankService {
|
|
14
|
+
switch (bankid) {
|
|
15
|
+
case 'ASPAC':
|
|
16
|
+
return this.ASPACService;
|
|
17
|
+
case 'RBSAGAY':
|
|
18
|
+
return this.MBWINService;
|
|
19
|
+
case 'WELCOMEBANK':
|
|
20
|
+
return this.WelcomeBankService;
|
|
21
|
+
default:
|
|
22
|
+
throw new Error(`Unsupported bankId: ${bankid}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// banking-config.interface.ts
|
|
2
|
+
export interface BankingConfig {
|
|
3
|
+
BANK1_DATA_KEY: string;
|
|
4
|
+
BANK1_AUTH_KEY: string;
|
|
5
|
+
BANK2_AUTH_KEY: string;
|
|
6
|
+
BANK1_URL: string;
|
|
7
|
+
BANK2_URL: string;
|
|
8
|
+
BANK1_DATA_PORT: number;
|
|
9
|
+
BANK2_DATA_PORT: number;
|
|
10
|
+
BANK1_MESSAGE_ID: string;
|
|
11
|
+
//ASPAC
|
|
12
|
+
ASPAC_URL: string;
|
|
13
|
+
ASPAC_API_KEY: string;
|
|
14
|
+
ASPAC_VERSION_KEY: string;
|
|
15
|
+
//WelcomeBank
|
|
16
|
+
WELCOMEBANK_URL: string;
|
|
17
|
+
WELCOMEBANK_PORT: number;
|
|
18
|
+
WELCOMEBANK_API_KEY: string;
|
|
19
|
+
WELCOMEBANK_VERSION_KEY: string;
|
|
20
|
+
WELCOMBANK_ENABLEENCRYPTION: boolean;
|
|
21
|
+
//MBWIN
|
|
22
|
+
MBWIN_URL: string,
|
|
23
|
+
MBWIN_PORT: number,
|
|
24
|
+
MBWIN_API_KEY: string,
|
|
25
|
+
}
|