@lyxa.ai/core 1.4.19 → 1.4.21
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/dist/index.js.map +1 -1
- package/dist/libraries/cash-settlement/providers/bob.d.ts +3 -0
- package/dist/libraries/cash-settlement/providers/bob.js +256 -38
- package/dist/libraries/cash-settlement/providers/bob.js.map +1 -1
- package/dist/libraries/trpc/middlewares/auth.d.ts +1 -1
- package/dist/libraries/trpc/middlewares/createRoleProtectedProcedure.d.ts +1 -1
- package/dist/libraries/trpc/middlewares/phone-verified.d.ts +1 -1
- package/dist/libraries/trpc/middlewares/publicUserDecoder.d.ts +1 -1
- package/dist/types/README.md +1 -1
- package/dist/types/package.json +1 -1
- package/dist/types/utilities/enum.d.ts +5 -0
- package/dist/types/utilities/enum.js +5 -0
- package/dist/types/utilities/enum.js.map +1 -1
- package/dist/types/utilities/validation/common-validation.d.ts +12 -12
- package/dist/utilities/enum.d.ts +5 -0
- package/dist/utilities/enum.js +5 -0
- package/dist/utilities/enum.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["// Apply the soft delete plugin globally before any connections or models\nimport { applySoftDeletePlugin } from './libraries/mongo/plugins/soft-delete-plugin';\napplySoftDeletePlugin();\nimport { LibraryManager } from './libraries';\nimport { Container } from 'typedi';\nimport { ConfigurationOptions, ConfigurationService } from './libraries/configuration';\nimport { LyxaLogger } from './libraries/logger';\nimport { RedisService } from './libraries/redis';\nimport { initGlobalConnection, initLyxaMongoDbConnection } from './libraries/mongo';\nimport { SecretManagerService } from './libraries/secrets';\nimport { MicroServiceDispatcher } from './libraries/dispatcher';\nimport { TwilioService } from './libraries/twilio';\nimport { FirebaseService } from './libraries/firebase';\nimport { initEventBus, subscribeToEvent } from './libraries/event';\nimport { SubscriptionRegistry } from './libraries/event/registry/SubscriptionRegistry';\nimport { GoogleMapsService, MapService } from './libraries/map';\nimport { CachedSettingsService } from './libraries/cache/settings';\nimport {\n\tFCMService,\n\tFCMServiceForCpanel,\n\tFCMServiceForRider,\n\tFCMServiceForShop,\n\tFCMServiceForUser,\n} from './libraries/firebase/fcmService';\nimport { BullMQService } from './libraries/bullmq/bull-mq-service';\nimport { BOBSecrets, BOBService, CashSettlementService } from './libraries/cash-settlement';\nimport { EnvironmentConfigurationType } from './libraries/configuration/types/EnvironmentConfigurationType';\nimport { OsrmMapService } from './libraries/map/providers/osrm';\nimport { RabbitMQUrlMap } from './utilities/environment/rabbitmq-environments';\nimport { disconnectAllEntitiesFromInstance } from './libraries/socket/connections/instance-disconnect';\nimport { LyxaLoggerKit } from './libraries/logger-kit';\n\n\n\nexport { ConfigurationOptions } from './libraries/configuration';\nexport { EnvironmentConfigurationType } from './libraries/configuration/types/EnvironmentConfigurationType';\nexport { initGlobalConnection } from './libraries/mongo';\n\nexport async function bootstrapCore(options?: ConfigurationOptions) {\n\ttry {\n\t\tawait registerLibraries(options);\n\t\tgetLibraries().getLogger().logger.info('Successfully bootstrapped lyxa-core.');\n\n\t\tconst gracefulShutdown = async () => {\n\t\t\tgetLibraries().getLogger().logger.info('Received shutdown signal, shutting down gracefully...');\n\t\t\tif (options?.instanceType == 'socket') await disconnectAllEntitiesFromInstance();\n\t\t\tprocess.exit();\n\t\t};\n\n\t\tprocess.on('SIGTERM', gracefulShutdown);\n\t\tprocess.on('SIGINT', gracefulShutdown);\n\t\tprocess.on('uncaughtException', err => {\n\t\t\tconsole.log('err', err);\n\t\t\tgetLibraries().getLogger().logger.error('Uncaught exception, shutting down...', err);\n\t\t\tgracefulShutdown();\n\t\t});\n\t\tprocess.on('exit', code => {\n\t\t\tgetLibraries().getLogger().logger.info(`Exiting with code: ${code}`);\n\t\t});\n\n\t\tconsole.log('Created hooks.');\n\t} catch (e) {\n\t\tconsole.error(e);\n\t}\n}\n\nexport async function registerLibraries(options?: ConfigurationOptions) {\n\t// Setup configuration.\n\tconst configurationInstance = new ConfigurationService(options);\n\tContainer.set(ConfigurationService, configurationInstance);\n\n\t// Setup redis.\n\tconst redisInstance = new RedisService(configurationInstance.redisURL);\n\tContainer.set(RedisService, redisInstance);\n\n\t// Setup secret\n\tconst secretInstance = new SecretManagerService(configurationInstance, redisInstance);\n\tContainer.set(SecretManagerService, secretInstance);\n\n\t// Setup BullMQ\n\tconst bullMQInstance = new BullMQService(redisInstance);\n\tContainer.set(BullMQService, bullMQInstance);\n\n\tconst mongoUrl = options?.mongoDbUrl\n\t\t? options.mongoDbUrl\n\t\t: await getLibraries().getSecretsService().getKey('MONGO_URL');\n\n\tawait initLyxaMongoDbConnection(mongoUrl!, options);\n\tawait initGlobalConnection(mongoUrl!, options!.environment);\n\n\tconst loggerInstance = new LyxaLogger(options!.instanceType!, mongoUrl!);\n\tContainer.set(LyxaLogger, loggerInstance);\n\n\tconst loggerKit = new LyxaLoggerKit({ instanceType: options!.instanceType! });\n\tContainer.set(LyxaLoggerKit, loggerKit);\n\t\n\t// Setup firebase\n\tconst firebaseInstance = new FirebaseService(configurationInstance!);\n\tContainer.set(FirebaseService, firebaseInstance);\n\n\t// Setup microservice dispatcher\n\tconst microserviceDispatcherInstance = new MicroServiceDispatcher(secretInstance);\n\tContainer.set(MicroServiceDispatcher, microserviceDispatcherInstance);\n\n\t// Setup twilio\n\tconst twilioServiceInstance = new TwilioService();\n\tContainer.set(TwilioService, twilioServiceInstance);\n\n\t// Setup map service\n\tconst googleMapsKey = await getLibraries().getSecretsService().getKey('GOOGLE_MAPS_API_KEY');\n\tconst googleMapService = new GoogleMapsService(redisInstance, googleMapsKey as string);\n\tconst osrmMapService = new OsrmMapService();\n\tconst mapServiceInstance = new MapService(googleMapService, osrmMapService);\n\tContainer.set(MapService, mapServiceInstance);\n\n\t// Setup cash settlement service\n\tconst bobUsername = await getLibraries().getSecretsService().getKey('BOB_USER_NAME');\n\tconst bobPassword = await getLibraries().getSecretsService().getKey('BOB_PASSWORD');\n\tconst bobURL = await getLibraries().getSecretsService().getKey('BOB_URL');\n\n\tconst bobService = new BOBService({\n\t\tBOB_USER_NAME: bobUsername,\n\t\tBOB_PASSWORD: bobPassword,\n\t\tBOB_URL: bobURL,\n\t} as BOBSecrets);\n\tconst cashSettlementServiceInstance = new CashSettlementService(bobService);\n\tContainer.set(CashSettlementService, cashSettlementServiceInstance);\n\tContainer.set(BOBService, bobService);\n\n\tconst settingsServiceInstance = new CachedSettingsService(redisInstance);\n\tContainer.set(CachedSettingsService, settingsServiceInstance);\n\n\ttry {\n\t\tconst settings = await settingsServiceInstance.getSettings();\n\t\tconst { _setTimezone } = await import('./utilities/dayjs/dayjs');\n\t\t_setTimezone(settings?.timezone || 'Asia/Beirut');\n\t\tconsole.log('Timezone initialized:', settings?.timezone || 'Asia/Beirut');\n\t} catch (error) {\n\t\tconsole.error('Failed to initialize timezone:', error);\n\t}\n\n\t// Setup fcm service\n\tconst firebaseService = getLibraries().getFirebaseService();\n\tconst fcmServiceInstance = new FCMService(firebaseService.superApp);\n\tconst fcmServiceInstanceForUser = new FCMService(firebaseService.userApp);\n\tconst fcmServiceInstanceForRider = new FCMService(firebaseService.riderApp);\n\tconst fcmServiceInstanceForShop = new FCMService(firebaseService.shopApp);\n\tconst fcmServiceInstanceForCpanel = new FCMService(firebaseService.cpanelApp);\n\tContainer.set(FCMService, fcmServiceInstance);\n\tContainer.set(FCMServiceForUser, fcmServiceInstanceForUser);\n\tContainer.set(FCMServiceForRider, fcmServiceInstanceForRider);\n\tContainer.set(FCMServiceForShop, fcmServiceInstanceForShop);\n\tContainer.set(FCMServiceForCpanel, fcmServiceInstanceForCpanel);\n\n\tconsole.log('Initialized everything');\n\n\tawait initEventBus(RabbitMQUrlMap[options?.environment ?? EnvironmentConfigurationType.DEV]);\n\n\tconst allSubscriptions = SubscriptionRegistry.getAllSubscriptions();\n\n\tconst instantiatedServices = new Map<Function, any>();\n\n\tfor (const { eventId, targetConstructor, methodName, opts } of allSubscriptions) {\n\t\tlet instance = instantiatedServices.get(targetConstructor);\n\t\tif (!instance) {\n\t\t\tinstance = Container.get(targetConstructor as any);\n\t\t\tinstantiatedServices.set(targetConstructor, instance);\n\t\t}\n\n\t\tawait subscribeToEvent(\n\t\t\teventId,\n\t\t\tasync payload => {\n\t\t\t\treturn instance[methodName](payload);\n\t\t\t},\n\t\t\topts\n\t\t);\n\t}\n}\n\nexport function getLibraries(): LibraryManager {\n\treturn Container.get(LibraryManager);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["// Apply the soft delete plugin globally before any connections or models\nimport { applySoftDeletePlugin } from './libraries/mongo/plugins/soft-delete-plugin';\napplySoftDeletePlugin();\nimport { LibraryManager } from './libraries';\nimport { Container } from 'typedi';\nimport { ConfigurationOptions, ConfigurationService } from './libraries/configuration';\nimport { LyxaLogger } from './libraries/logger';\nimport { RedisService } from './libraries/redis';\nimport { initGlobalConnection, initLyxaMongoDbConnection } from './libraries/mongo';\nimport { SecretManagerService } from './libraries/secrets';\nimport { MicroServiceDispatcher } from './libraries/dispatcher';\nimport { TwilioService } from './libraries/twilio';\nimport { FirebaseService } from './libraries/firebase';\nimport { initEventBus, subscribeToEvent } from './libraries/event';\nimport { SubscriptionRegistry } from './libraries/event/registry/SubscriptionRegistry';\nimport { GoogleMapsService, MapService } from './libraries/map';\nimport { CachedSettingsService } from './libraries/cache/settings';\nimport {\n\tFCMService,\n\tFCMServiceForCpanel,\n\tFCMServiceForRider,\n\tFCMServiceForShop,\n\tFCMServiceForUser,\n} from './libraries/firebase/fcmService';\nimport { BullMQService } from './libraries/bullmq/bull-mq-service';\nimport { BOBSecrets, BOBService, CashSettlementService } from './libraries/cash-settlement';\nimport { EnvironmentConfigurationType } from './libraries/configuration/types/EnvironmentConfigurationType';\nimport { OsrmMapService } from './libraries/map/providers/osrm';\nimport { RabbitMQUrlMap } from './utilities/environment/rabbitmq-environments';\nimport { disconnectAllEntitiesFromInstance } from './libraries/socket/connections/instance-disconnect';\nimport { LyxaLoggerKit } from './libraries/logger-kit';\n\nexport { ConfigurationOptions } from './libraries/configuration';\nexport { EnvironmentConfigurationType } from './libraries/configuration/types/EnvironmentConfigurationType';\nexport { initGlobalConnection } from './libraries/mongo';\n\nexport async function bootstrapCore(options?: ConfigurationOptions) {\n\ttry {\n\t\tawait registerLibraries(options);\n\t\tgetLibraries().getLogger().logger.info('Successfully bootstrapped lyxa-core.');\n\n\t\tconst gracefulShutdown = async () => {\n\t\t\tgetLibraries().getLogger().logger.info('Received shutdown signal, shutting down gracefully...');\n\t\t\tif (options?.instanceType == 'socket') await disconnectAllEntitiesFromInstance();\n\t\t\tprocess.exit();\n\t\t};\n\n\t\tprocess.on('SIGTERM', gracefulShutdown);\n\t\tprocess.on('SIGINT', gracefulShutdown);\n\t\tprocess.on('uncaughtException', err => {\n\t\t\tconsole.log('err', err);\n\t\t\tgetLibraries().getLogger().logger.error('Uncaught exception, shutting down...', err);\n\t\t\tgracefulShutdown();\n\t\t});\n\t\tprocess.on('exit', code => {\n\t\t\tgetLibraries().getLogger().logger.info(`Exiting with code: ${code}`);\n\t\t});\n\n\t\tconsole.log('Created hooks.');\n\t} catch (e) {\n\t\tconsole.error(e);\n\t}\n}\n\nexport async function registerLibraries(options?: ConfigurationOptions) {\n\t// Setup configuration.\n\tconst configurationInstance = new ConfigurationService(options);\n\tContainer.set(ConfigurationService, configurationInstance);\n\n\t// Setup redis.\n\tconst redisInstance = new RedisService(configurationInstance.redisURL);\n\tContainer.set(RedisService, redisInstance);\n\n\t// Setup secret\n\tconst secretInstance = new SecretManagerService(configurationInstance, redisInstance);\n\tContainer.set(SecretManagerService, secretInstance);\n\n\t// Setup BullMQ\n\tconst bullMQInstance = new BullMQService(redisInstance);\n\tContainer.set(BullMQService, bullMQInstance);\n\n\tconst mongoUrl = options?.mongoDbUrl\n\t\t? options.mongoDbUrl\n\t\t: await getLibraries().getSecretsService().getKey('MONGO_URL');\n\n\tawait initLyxaMongoDbConnection(mongoUrl!, options);\n\tawait initGlobalConnection(mongoUrl!, options!.environment);\n\n\tconst loggerInstance = new LyxaLogger(options!.instanceType!, mongoUrl!);\n\tContainer.set(LyxaLogger, loggerInstance);\n\n\tconst loggerKit = new LyxaLoggerKit({ instanceType: options!.instanceType! });\n\tContainer.set(LyxaLoggerKit, loggerKit);\n\n\t// Setup firebase\n\tconst firebaseInstance = new FirebaseService(configurationInstance!);\n\tContainer.set(FirebaseService, firebaseInstance);\n\n\t// Setup microservice dispatcher\n\tconst microserviceDispatcherInstance = new MicroServiceDispatcher(secretInstance);\n\tContainer.set(MicroServiceDispatcher, microserviceDispatcherInstance);\n\n\t// Setup twilio\n\tconst twilioServiceInstance = new TwilioService();\n\tContainer.set(TwilioService, twilioServiceInstance);\n\n\t// Setup map service\n\tconst googleMapsKey = await getLibraries().getSecretsService().getKey('GOOGLE_MAPS_API_KEY');\n\tconst googleMapService = new GoogleMapsService(redisInstance, googleMapsKey as string);\n\tconst osrmMapService = new OsrmMapService();\n\tconst mapServiceInstance = new MapService(googleMapService, osrmMapService);\n\tContainer.set(MapService, mapServiceInstance);\n\n\t// Setup cash settlement service\n\tconst bobUsername = await getLibraries().getSecretsService().getKey('BOB_USER_NAME');\n\tconst bobPassword = await getLibraries().getSecretsService().getKey('BOB_PASSWORD');\n\tconst bobURL = await getLibraries().getSecretsService().getKey('BOB_URL');\n\n\tconst bobService = new BOBService({\n\t\tBOB_USER_NAME: bobUsername,\n\t\tBOB_PASSWORD: bobPassword,\n\t\tBOB_URL: bobURL,\n\t} as BOBSecrets);\n\tconst cashSettlementServiceInstance = new CashSettlementService(bobService);\n\tContainer.set(CashSettlementService, cashSettlementServiceInstance);\n\tContainer.set(BOBService, bobService);\n\n\tconst settingsServiceInstance = new CachedSettingsService(redisInstance);\n\tContainer.set(CachedSettingsService, settingsServiceInstance);\n\n\ttry {\n\t\tconst settings = await settingsServiceInstance.getSettings();\n\t\tconst { _setTimezone } = await import('./utilities/dayjs/dayjs');\n\t\t_setTimezone(settings?.timezone || 'Asia/Beirut');\n\t\tconsole.log('Timezone initialized:', settings?.timezone || 'Asia/Beirut');\n\t} catch (error) {\n\t\tconsole.error('Failed to initialize timezone:', error);\n\t}\n\n\t// Setup fcm service\n\tconst firebaseService = getLibraries().getFirebaseService();\n\tconst fcmServiceInstance = new FCMService(firebaseService.superApp);\n\tconst fcmServiceInstanceForUser = new FCMService(firebaseService.userApp);\n\tconst fcmServiceInstanceForRider = new FCMService(firebaseService.riderApp);\n\tconst fcmServiceInstanceForShop = new FCMService(firebaseService.shopApp);\n\tconst fcmServiceInstanceForCpanel = new FCMService(firebaseService.cpanelApp);\n\tContainer.set(FCMService, fcmServiceInstance);\n\tContainer.set(FCMServiceForUser, fcmServiceInstanceForUser);\n\tContainer.set(FCMServiceForRider, fcmServiceInstanceForRider);\n\tContainer.set(FCMServiceForShop, fcmServiceInstanceForShop);\n\tContainer.set(FCMServiceForCpanel, fcmServiceInstanceForCpanel);\n\n\tconsole.log('Initialized everything');\n\n\tawait initEventBus(RabbitMQUrlMap[options?.environment ?? EnvironmentConfigurationType.DEV]);\n\n\tconst allSubscriptions = SubscriptionRegistry.getAllSubscriptions();\n\n\tconst instantiatedServices = new Map<Function, any>();\n\n\tfor (const { eventId, targetConstructor, methodName, opts } of allSubscriptions) {\n\t\tlet instance = instantiatedServices.get(targetConstructor);\n\t\tif (!instance) {\n\t\t\tinstance = Container.get(targetConstructor as any);\n\t\t\tinstantiatedServices.set(targetConstructor, instance);\n\t\t}\n\n\t\tawait subscribeToEvent(\n\t\t\teventId,\n\t\t\tasync payload => {\n\t\t\t\treturn instance[methodName](payload);\n\t\t\t},\n\t\t\topts\n\t\t);\n\t}\n}\n\nexport function getLibraries(): LibraryManager {\n\treturn Container.get(LibraryManager);\n}\n"]}
|
|
@@ -30,5 +30,8 @@ export declare class BOBService implements ICashSettlementService {
|
|
|
30
30
|
hasPendingRiderSettlements(riderId: mongoose.Types.ObjectId): Promise<boolean>;
|
|
31
31
|
getLastSettlement(reference: string): Promise<ISettlementInfo | null>;
|
|
32
32
|
getLastRiderSettlement(rider: mongoose.Types.ObjectId): Promise<ISettlementInfo | null>;
|
|
33
|
+
private getTransfers;
|
|
33
34
|
private decompressResponse;
|
|
35
|
+
private hasUnpaidTransfer;
|
|
36
|
+
checkAllPendingTransfers(): Promise<void>;
|
|
34
37
|
}
|
|
@@ -23,6 +23,7 @@ const enum_1 = require("../../../utilities/enum");
|
|
|
23
23
|
const __1 = require("../../..");
|
|
24
24
|
const error_common_1 = require("../../../utilities/error-common");
|
|
25
25
|
const currency_1 = require("../../../utilities/shared/currency");
|
|
26
|
+
const dayjs_1 = __importDefault(require("dayjs"));
|
|
26
27
|
var BOBTransferStatus;
|
|
27
28
|
(function (BOBTransferStatus) {
|
|
28
29
|
BOBTransferStatus["NOT_PAID"] = "NOT PAID";
|
|
@@ -55,6 +56,19 @@ let BOBService = class BOBService {
|
|
|
55
56
|
return digits.toString().padStart(2, '0') + letters[firstCharIndex] + letters[secondCharIndex];
|
|
56
57
|
}
|
|
57
58
|
async initiateSettlement(amount, currency, reference, firstName, lastName, riderId, location) {
|
|
59
|
+
const logger = (0, __1.getLibraries)().getLoggerKit();
|
|
60
|
+
logger.info('Initiating BOB settlement', {
|
|
61
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_INITIATE,
|
|
62
|
+
data: {
|
|
63
|
+
amount,
|
|
64
|
+
currency,
|
|
65
|
+
reference,
|
|
66
|
+
firstName,
|
|
67
|
+
lastName,
|
|
68
|
+
riderId: riderId.toString(),
|
|
69
|
+
location,
|
|
70
|
+
},
|
|
71
|
+
});
|
|
58
72
|
if (amount > 20000000) {
|
|
59
73
|
(0, error_common_1.badRequestError)('Please provide a value between 0 and 20000000');
|
|
60
74
|
}
|
|
@@ -108,7 +122,13 @@ let BOBService = class BOBService {
|
|
|
108
122
|
bobModel: enum_1.BobModel.C2B,
|
|
109
123
|
bobType: enum_1.BobType.INWARD,
|
|
110
124
|
});
|
|
111
|
-
|
|
125
|
+
logger.info('Created BOB settlement in database', {
|
|
126
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_INITIATE,
|
|
127
|
+
data: {
|
|
128
|
+
bobSettlementId: bobSettlement._id.toString(),
|
|
129
|
+
crmNumber,
|
|
130
|
+
},
|
|
131
|
+
});
|
|
112
132
|
return true;
|
|
113
133
|
}
|
|
114
134
|
async createBullMQJobForStatusCheck(crmNumber) {
|
|
@@ -130,38 +150,14 @@ let BOBService = class BOBService {
|
|
|
130
150
|
console.log(`Removed job scheduler: ${schedulerId}`);
|
|
131
151
|
return;
|
|
132
152
|
}
|
|
133
|
-
const
|
|
134
|
-
ChannelType: enum_1.BobChannelType.CO,
|
|
135
|
-
Credentials: {
|
|
136
|
-
User: this.BOB_USER_NAME,
|
|
137
|
-
Password: this.BOB_PASSWORD,
|
|
138
|
-
},
|
|
139
|
-
Model: enum_1.BobModel.C2B,
|
|
140
|
-
CRMNumber: job.data.crmNumber,
|
|
141
|
-
};
|
|
142
|
-
const { data } = await axios_1.default.post(`${this.BOB_URL}GetTransferStatus`, bobData, {
|
|
143
|
-
httpsAgent: new https_1.default.Agent({ rejectUnauthorized: false }),
|
|
144
|
-
});
|
|
145
|
-
if (data.ErrorCode != 100) {
|
|
146
|
-
console.error(`Error in BOB getTransferStatus: ${data.ErrorDescription}`);
|
|
147
|
-
throw new server_1.TRPCError({
|
|
148
|
-
code: 'INTERNAL_SERVER_ERROR',
|
|
149
|
-
message: 'Failed to post data to BOB API.',
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
const responseObject = await this.decompressResponse(data.Response);
|
|
153
|
-
if (!responseObject) {
|
|
154
|
-
console.error('Failed to get settlement status in BOB');
|
|
155
|
-
throw new server_1.TRPCError({
|
|
156
|
-
code: 'INTERNAL_SERVER_ERROR',
|
|
157
|
-
message: 'Failed to get settlement status in BOB.',
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
const hasUnpaidTransfer = responseObject.some((item) => item.CRMNumber == crmNumber && item.Status == BOBTransferStatus.NOT_PAID);
|
|
153
|
+
const hasUnpaidTransfer = await this.hasUnpaidTransfer(job.data.crmNumber);
|
|
161
154
|
if (!hasUnpaidTransfer) {
|
|
162
155
|
this.settlePayment(settlement);
|
|
163
156
|
}
|
|
164
|
-
console.log(`🔥 [${new Date().toISOString()}]
|
|
157
|
+
console.log(`🔥 [${new Date().toISOString()}] Checking settlement status for ${job.data.crmNumber}:`, {
|
|
158
|
+
settlement,
|
|
159
|
+
hasUnpaidTransfer,
|
|
160
|
+
});
|
|
165
161
|
});
|
|
166
162
|
worker.on('completed', (job) => {
|
|
167
163
|
console.log(`✅ Job completed: ${job.id}`);
|
|
@@ -171,30 +167,58 @@ let BOBService = class BOBService {
|
|
|
171
167
|
});
|
|
172
168
|
}
|
|
173
169
|
async markSettlementAsPaid(settlementId) {
|
|
170
|
+
const logger = (0, __1.getLibraries)().getLoggerKit();
|
|
171
|
+
logger.info('Marking BOB settlement as paid', {
|
|
172
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_SETTLE,
|
|
173
|
+
data: {
|
|
174
|
+
settlementId: settlementId.toString(),
|
|
175
|
+
},
|
|
176
|
+
});
|
|
174
177
|
const settlement = await this.model.findById(settlementId);
|
|
175
178
|
if (!settlement) {
|
|
176
|
-
|
|
179
|
+
logger.info('Settlement not found', {
|
|
180
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_SETTLE,
|
|
181
|
+
data: {
|
|
182
|
+
settlementId: settlementId.toString(),
|
|
183
|
+
},
|
|
184
|
+
});
|
|
177
185
|
throw new server_1.TRPCError({
|
|
178
186
|
code: 'NOT_FOUND',
|
|
179
187
|
message: 'Settlement not found.',
|
|
180
188
|
});
|
|
181
189
|
}
|
|
182
190
|
if (settlement.status === enum_1.BobSettlementStatus.PAID) {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
191
|
+
logger.info('Settlement is already marked as paid', {
|
|
192
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_SETTLE,
|
|
193
|
+
data: {
|
|
194
|
+
settlementId: settlementId.toString(),
|
|
195
|
+
},
|
|
187
196
|
});
|
|
197
|
+
(0, error_common_1.badRequestError)('Settlement is already marked as paid.');
|
|
188
198
|
}
|
|
189
199
|
await this.settlePayment(settlement);
|
|
190
200
|
if (settlement.status === enum_1.BobSettlementStatus.NOT_PAID) {
|
|
191
201
|
await this.removeTransfer(settlement.crmNumber);
|
|
192
202
|
}
|
|
203
|
+
logger.info('BOB settlement marked as paid', {
|
|
204
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_SETTLE,
|
|
205
|
+
data: {
|
|
206
|
+
settlementId: settlementId.toString(),
|
|
207
|
+
},
|
|
208
|
+
});
|
|
193
209
|
return true;
|
|
194
210
|
}
|
|
195
211
|
async settlePayment(settlement) {
|
|
196
|
-
|
|
197
|
-
|
|
212
|
+
const logger = (0, __1.getLibraries)().getLoggerKit();
|
|
213
|
+
logger.info('Settling BOB payment', {
|
|
214
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_SETTLE,
|
|
215
|
+
data: {
|
|
216
|
+
settlementId: settlement._id.toString(),
|
|
217
|
+
crmNumber: settlement.crmNumber,
|
|
218
|
+
},
|
|
219
|
+
});
|
|
220
|
+
const updatedSettlement = await this.model.findByIdAndUpdate(settlement._id, { status: enum_1.BobSettlementStatus.PAID }, { new: true, runValidators: true });
|
|
221
|
+
const financeSettlement = await this.financeSettlementModel.create({
|
|
198
222
|
amount: settlement.amount,
|
|
199
223
|
secondaryAmount: settlement.secondaryAmount,
|
|
200
224
|
rider: settlement.rider,
|
|
@@ -239,14 +263,34 @@ let BOBService = class BOBService {
|
|
|
239
263
|
}
|
|
240
264
|
const deltaPrimary = -deductedPrimary;
|
|
241
265
|
const deltaSecondary = -secondaryToDeduct;
|
|
242
|
-
await this.riderModel.findByIdAndUpdate(rider._id, {
|
|
266
|
+
const updatedRider = await this.riderModel.findByIdAndUpdate(rider._id, {
|
|
243
267
|
$inc: {
|
|
244
268
|
'cashInHand.secondaryAmount': deltaSecondary,
|
|
245
269
|
'cashInHand.amount': deltaPrimary,
|
|
246
270
|
},
|
|
247
271
|
}, { new: true, runValidators: true });
|
|
272
|
+
logger.info('Settled BOB payment and updated rider cash in hand', {
|
|
273
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_SETTLE,
|
|
274
|
+
data: {
|
|
275
|
+
settlementId: settlement._id.toString(),
|
|
276
|
+
crmNumber: settlement.crmNumber,
|
|
277
|
+
deltaSecondary,
|
|
278
|
+
deltaPrimary,
|
|
279
|
+
riderId: rider._id.toString(),
|
|
280
|
+
previousRiderCashInHand: rider.cashInHand,
|
|
281
|
+
updatedRiderCashInHand: updatedRider?.cashInHand,
|
|
282
|
+
financeSettlementId: financeSettlement._id.toString(),
|
|
283
|
+
},
|
|
284
|
+
});
|
|
248
285
|
}
|
|
249
286
|
async revokeSettlement(reference) {
|
|
287
|
+
const logger = (0, __1.getLibraries)().getLoggerKit();
|
|
288
|
+
logger.info('Revoking BOB settlement', {
|
|
289
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_REVOKE,
|
|
290
|
+
data: {
|
|
291
|
+
reference,
|
|
292
|
+
},
|
|
293
|
+
});
|
|
250
294
|
const settlement = await this.model.findOne({
|
|
251
295
|
crmNumber: reference,
|
|
252
296
|
status: enum_1.BobSettlementStatus.NOT_PAID,
|
|
@@ -265,14 +309,35 @@ let BOBService = class BOBService {
|
|
|
265
309
|
}, {
|
|
266
310
|
status: enum_1.BobSettlementStatus.REVOKED,
|
|
267
311
|
}, { new: true, runValidators: true });
|
|
312
|
+
logger.info('BOB settlement revoked', {
|
|
313
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_REVOKE,
|
|
314
|
+
data: {
|
|
315
|
+
reference,
|
|
316
|
+
settlementId: settlement._id.toString(),
|
|
317
|
+
result,
|
|
318
|
+
},
|
|
319
|
+
});
|
|
268
320
|
return true;
|
|
269
321
|
}
|
|
270
322
|
async revokeRiderSettlements(rider) {
|
|
323
|
+
const logger = (0, __1.getLibraries)().getLoggerKit();
|
|
324
|
+
logger.info('Revoking BOB settlements for rider', {
|
|
325
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_REVOKE,
|
|
326
|
+
data: {
|
|
327
|
+
riderId: rider.toString(),
|
|
328
|
+
},
|
|
329
|
+
});
|
|
271
330
|
const settlements = await this.model.find({
|
|
272
331
|
rider: rider,
|
|
273
332
|
status: enum_1.BobSettlementStatus.NOT_PAID,
|
|
274
333
|
});
|
|
275
334
|
if (!settlements.length) {
|
|
335
|
+
logger.info('No unpaid BOB settlements found for rider', {
|
|
336
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_REVOKE,
|
|
337
|
+
data: {
|
|
338
|
+
riderId: rider.toString(),
|
|
339
|
+
},
|
|
340
|
+
});
|
|
276
341
|
(0, error_common_1.notFoundError)('No unpaid settlements found.');
|
|
277
342
|
}
|
|
278
343
|
for (const settlement of settlements) {
|
|
@@ -281,9 +346,23 @@ let BOBService = class BOBService {
|
|
|
281
346
|
status: enum_1.BobSettlementStatus.REVOKED,
|
|
282
347
|
});
|
|
283
348
|
}
|
|
349
|
+
logger.info('BOB settlements revoked for rider', {
|
|
350
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_REVOKE,
|
|
351
|
+
data: {
|
|
352
|
+
riderId: rider.toString(),
|
|
353
|
+
settlementIds: settlements.map(s => s._id.toString()),
|
|
354
|
+
},
|
|
355
|
+
});
|
|
284
356
|
return true;
|
|
285
357
|
}
|
|
286
358
|
async removeTransfer(crmNumber) {
|
|
359
|
+
const logger = (0, __1.getLibraries)().getLoggerKit();
|
|
360
|
+
logger.info('Removing transfer from BOB', {
|
|
361
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_REMOVE,
|
|
362
|
+
data: {
|
|
363
|
+
crmNumber,
|
|
364
|
+
},
|
|
365
|
+
});
|
|
287
366
|
const bobData = {
|
|
288
367
|
ChannelType: enum_1.BobChannelType.CO,
|
|
289
368
|
Credentials: {
|
|
@@ -314,6 +393,13 @@ let BOBService = class BOBService {
|
|
|
314
393
|
message: 'Failed to remove transfer in BOB.',
|
|
315
394
|
});
|
|
316
395
|
}
|
|
396
|
+
logger.info('Removed transfer from BOB', {
|
|
397
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_REMOVE,
|
|
398
|
+
data: {
|
|
399
|
+
crmNumber,
|
|
400
|
+
responseObject,
|
|
401
|
+
},
|
|
402
|
+
});
|
|
317
403
|
}
|
|
318
404
|
async hasPendingSettlements(reference) {
|
|
319
405
|
const pendingSettlements = await this.model.find({
|
|
@@ -363,6 +449,39 @@ let BOBService = class BOBService {
|
|
|
363
449
|
updatedAt: lastSettlement.updatedAt ?? new Date(),
|
|
364
450
|
};
|
|
365
451
|
}
|
|
452
|
+
async getTransfers(timeframe) {
|
|
453
|
+
const DateTimeFrom = new Date(timeframe.startDate).toISOString().split('.')[0] + 'Z';
|
|
454
|
+
const DateTimeTo = new Date(timeframe.endDate).toISOString().split('.')[0] + 'Z';
|
|
455
|
+
const bobData = {
|
|
456
|
+
ChannelType: enum_1.BobChannelType.CO,
|
|
457
|
+
Credentials: {
|
|
458
|
+
User: this.BOB_USER_NAME,
|
|
459
|
+
Password: this.BOB_PASSWORD,
|
|
460
|
+
},
|
|
461
|
+
Model: enum_1.BobModel.C2B,
|
|
462
|
+
DateTimeFrom,
|
|
463
|
+
DateTimeTo,
|
|
464
|
+
};
|
|
465
|
+
const { data } = await axios_1.default.post(`${this.BOB_URL}GetTransfers`, bobData, {
|
|
466
|
+
httpsAgent: new https_1.default.Agent({ rejectUnauthorized: false }),
|
|
467
|
+
});
|
|
468
|
+
if (data.ErrorCode != 100) {
|
|
469
|
+
console.error(`Error in BOB getTransfers: ${data.ErrorDescription}`);
|
|
470
|
+
throw new server_1.TRPCError({
|
|
471
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
472
|
+
message: 'Failed to post data to BOB API.',
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
const responseObject = await this.decompressResponse(data.Response);
|
|
476
|
+
if (!responseObject) {
|
|
477
|
+
console.error('Failed to get transfers in BOB');
|
|
478
|
+
throw new server_1.TRPCError({
|
|
479
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
480
|
+
message: 'Failed to get transfers in BOB.',
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
return responseObject;
|
|
484
|
+
}
|
|
366
485
|
async decompressResponse(response) {
|
|
367
486
|
return new Promise((resolve, reject) => {
|
|
368
487
|
const decodedBuffer = Buffer.from(response, 'base64');
|
|
@@ -382,6 +501,105 @@ let BOBService = class BOBService {
|
|
|
382
501
|
});
|
|
383
502
|
});
|
|
384
503
|
}
|
|
504
|
+
async hasUnpaidTransfer(crmNumber) {
|
|
505
|
+
const bobData = {
|
|
506
|
+
ChannelType: enum_1.BobChannelType.CO,
|
|
507
|
+
Credentials: {
|
|
508
|
+
User: this.BOB_USER_NAME,
|
|
509
|
+
Password: this.BOB_PASSWORD,
|
|
510
|
+
},
|
|
511
|
+
Model: enum_1.BobModel.C2B,
|
|
512
|
+
CRMNumber: crmNumber,
|
|
513
|
+
};
|
|
514
|
+
const { data } = await axios_1.default.post(`${this.BOB_URL}GetTransferStatus`, bobData, {
|
|
515
|
+
httpsAgent: new https_1.default.Agent({ rejectUnauthorized: false }),
|
|
516
|
+
});
|
|
517
|
+
if (data.ErrorCode != 100) {
|
|
518
|
+
console.error(`Error in BOB getTransferStatus: ${data.ErrorDescription}`);
|
|
519
|
+
throw new server_1.TRPCError({
|
|
520
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
521
|
+
message: 'Failed to post data to BOB API.',
|
|
522
|
+
});
|
|
523
|
+
}
|
|
524
|
+
const responseObject = await this.decompressResponse(data.Response);
|
|
525
|
+
if (!responseObject) {
|
|
526
|
+
console.error('Failed to get settlement status in BOB');
|
|
527
|
+
throw new server_1.TRPCError({
|
|
528
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
529
|
+
message: 'Failed to get settlement status in BOB.',
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
const hasUnpaidTransfer = responseObject.some((item) => item.CRMNumber == crmNumber && item.Status == BOBTransferStatus.NOT_PAID);
|
|
533
|
+
return hasUnpaidTransfer;
|
|
534
|
+
}
|
|
535
|
+
async checkAllPendingTransfers() {
|
|
536
|
+
const logger = (0, __1.getLibraries)().getLoggerKit();
|
|
537
|
+
logger.info('Checking pending BOB settlements', { tag: enum_1.LogTag.BOB_TRANSACTION_CHECK });
|
|
538
|
+
const notPaidSettlements = await this.model.find({
|
|
539
|
+
status: enum_1.BobSettlementStatus.NOT_PAID,
|
|
540
|
+
});
|
|
541
|
+
if (!notPaidSettlements.length) {
|
|
542
|
+
return;
|
|
543
|
+
}
|
|
544
|
+
logger.info('Checking pending settlements', {
|
|
545
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_CHECK,
|
|
546
|
+
data: {
|
|
547
|
+
count: notPaidSettlements.length,
|
|
548
|
+
settlementIds: notPaidSettlements.map(s => s._id.toString()),
|
|
549
|
+
},
|
|
550
|
+
});
|
|
551
|
+
let maxDate = (0, dayjs_1.default)();
|
|
552
|
+
let minDate = (0, dayjs_1.default)();
|
|
553
|
+
const createdAtDates = notPaidSettlements.map(item => (0, dayjs_1.default)(item.createdAt));
|
|
554
|
+
if (createdAtDates.length > 0) {
|
|
555
|
+
maxDate = dayjs_1.default.max(...createdAtDates);
|
|
556
|
+
minDate = dayjs_1.default.min(...createdAtDates);
|
|
557
|
+
}
|
|
558
|
+
const maxDatePlusOneDay = maxDate.add(1, 'day').toDate();
|
|
559
|
+
const minDateMinusOneDay = minDate.add(1, 'day').toDate();
|
|
560
|
+
const transfers = await this.getTransfers({
|
|
561
|
+
startDate: minDateMinusOneDay,
|
|
562
|
+
endDate: maxDatePlusOneDay,
|
|
563
|
+
});
|
|
564
|
+
logger.info('Transactions on BOB', {
|
|
565
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_CHECK,
|
|
566
|
+
data: {
|
|
567
|
+
count: transfers.length,
|
|
568
|
+
transfers,
|
|
569
|
+
startDate: minDateMinusOneDay,
|
|
570
|
+
endDate: maxDatePlusOneDay,
|
|
571
|
+
},
|
|
572
|
+
});
|
|
573
|
+
if (!transfers || transfers.length === 0) {
|
|
574
|
+
return;
|
|
575
|
+
}
|
|
576
|
+
const transferStatusMap = new Map();
|
|
577
|
+
for (const trx of transfers) {
|
|
578
|
+
transferStatusMap.set(trx.ReferenceNumber, trx.Status);
|
|
579
|
+
}
|
|
580
|
+
logger.info('Mapped transfer statuses', {
|
|
581
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_CHECK,
|
|
582
|
+
data: {
|
|
583
|
+
transferStatusMap,
|
|
584
|
+
},
|
|
585
|
+
});
|
|
586
|
+
await Promise.all(notPaidSettlements.map(async (settlement) => {
|
|
587
|
+
try {
|
|
588
|
+
const status = transferStatusMap.get(settlement.crmNumber);
|
|
589
|
+
const isStillUnpaid = status === BOBTransferStatus.NOT_PAID;
|
|
590
|
+
if (!isStillUnpaid) {
|
|
591
|
+
await this.settlePayment(settlement);
|
|
592
|
+
}
|
|
593
|
+
logger.info(`Settled payment for crmNumber ${settlement.crmNumber}`, {
|
|
594
|
+
tag: enum_1.LogTag.BOB_TRANSACTION_CHECK,
|
|
595
|
+
data: { status },
|
|
596
|
+
});
|
|
597
|
+
}
|
|
598
|
+
catch (err) {
|
|
599
|
+
logger.error(`Failed settlement with crmNumber ${settlement.crmNumber}, id: ${settlement._id}`, err, { tag: enum_1.LogTag.BOB_TRANSACTION_CHECK });
|
|
600
|
+
}
|
|
601
|
+
}));
|
|
602
|
+
}
|
|
385
603
|
};
|
|
386
604
|
exports.BOBService = BOBService;
|
|
387
605
|
exports.BOBService = BOBService = __decorate([
|