diff --git a/package-lock.json b/package-lock.json index 1e6f2ab9e..ae4a794f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,9 +20,9 @@ "@mojaloop/central-services-health": "15.0.0", "@mojaloop/central-services-logger": "11.5.1", "@mojaloop/central-services-metrics": "12.4.2", - "@mojaloop/central-services-shared": "18.14.1", + "@mojaloop/central-services-shared": "18.15.0", "@mojaloop/central-services-stream": "11.4.1", - "@mojaloop/database-lib": "11.0.6", + "@mojaloop/database-lib": "11.1.0", "@mojaloop/event-sdk": "14.1.1", "@mojaloop/inter-scheme-proxy-cache-lib": "2.3.1", "@mojaloop/ml-number": "11.2.4", @@ -32,8 +32,8 @@ "ajv-keywords": "5.1.0", "base64url": "3.0.1", "blipp": "4.0.2", - "commander": "12.1.0", - "cron": "3.3.1", + "commander": "13.0.0", + "cron": "3.3.2", "decimal.js": "10.4.3", "docdash": "2.0.2", "event-stream": "4.0.1", @@ -60,7 +60,7 @@ "jsonpath": "1.1.1", "mock-knex": "0.4.13", "nodemon": "3.1.9", - "npm-check-updates": "17.1.11", + "npm-check-updates": "17.1.13", "nyc": "17.1.0", "pre-commit": "1.2.2", "proxyquire": "2.1.3", @@ -1618,9 +1618,9 @@ } }, "node_modules/@mojaloop/central-services-shared": { - "version": "18.14.1", - "resolved": "https://registry.npmjs.org/@mojaloop/central-services-shared/-/central-services-shared-18.14.1.tgz", - "integrity": "sha512-m04gmTfm7WBqdFgZBPljgUWRQ+htCTQJQ9jjblvj4b5Rbw0YI4gntsjyBxFKcVIIqluCeSmhzb9GPTIP/6Simg==", + "version": "18.15.0", + "resolved": "https://registry.npmjs.org/@mojaloop/central-services-shared/-/central-services-shared-18.15.0.tgz", + "integrity": "sha512-2pjGva6DuXtHRUjhh9zEzkkEdNMH/WQdL8cmh/NqiI7XlL9YJOK6Dvw6PhnTgAOP1WTrhYffVKi1ypF0Eywi+Q==", "dependencies": { "@hapi/catbox": "12.1.1", "@hapi/catbox-memory": "5.0.1", @@ -1632,7 +1632,7 @@ "event-stream": "4.0.1", "fast-safe-stringify": "^2.1.1", "immutable": "5.0.3", - "ioredis": "^5.4.1", + "ioredis": "^5.4.2", "lodash": "4.17.21", "mustache": "4.2.0", "openapi-backend": "5.11.1", @@ -1642,7 +1642,7 @@ "ulidx": "2.4.1", "uuid4": "2.0.3", "widdershins": "^4.0.1", - "yaml": "2.6.1" + "yaml": "2.7.0" }, "peerDependencies": { "@mojaloop/central-services-error-handling": ">=13.x.x", @@ -1719,10 +1719,11 @@ } }, "node_modules/@mojaloop/database-lib": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/@mojaloop/database-lib/-/database-lib-11.0.6.tgz", - "integrity": "sha512-5rg8aBkHEaz6MkgVZqXkYFFVKAc80iQejmyZaws3vuZnrG6YfAhTGQTSZCDfYX3WqtDpt4OE8yhYeBua82ftMA==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@mojaloop/database-lib/-/database-lib-11.1.0.tgz", + "integrity": "sha512-0mrjA2KjXYCoSSLCguQtlAQWd3g2aslSeF/TIEdaXB3PgUHaaGHMmvuPbR7Nz/a48KhSUtdv7RygvXt8355WkA==", "dependencies": { + "@mojaloop/central-services-error-handling": "13.0.2", "knex": "3.1.0", "lodash": "4.17.21", "mysql": "2.18.1" @@ -3197,9 +3198,9 @@ } }, "node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.0.0.tgz", + "integrity": "sha512-oPYleIY8wmTVzkvQq10AEok6YcTC4sRUBl8F9gVuwchGVUCTbl/vhLTaQqutuuySYOsu8YTgV+OxKc/8Yvx+mQ==", "engines": { "node": ">=18" } @@ -3679,9 +3680,9 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cron": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/cron/-/cron-3.3.1.tgz", - "integrity": "sha512-KpvuzJEbeTMTfLsXhUuDfsFYr8s5roUlLKb4fa68GszWrA4783C7q6m9yj4vyc6neyD/V9e0YiADSX2c+yRDXg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/cron/-/cron-3.3.2.tgz", + "integrity": "sha512-7o2PH9vKRd4PxB8c2GsHRozfHYT+gIhZG0DI+vzGOdWo42mofO/ooYnyU0CCh27aKzCrUKMAwAwi7xJ84xKSug==", "dependencies": { "@types/luxon": "~3.4.0", "luxon": "~3.5.0" @@ -7255,9 +7256,9 @@ } }, "node_modules/ioredis": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.4.1.tgz", - "integrity": "sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.4.2.tgz", + "integrity": "sha512-0SZXGNGZ+WzISQ67QDyZ2x0+wVxjjUndtD8oSeik/4ajifeiRufed8fCb8QW8VMyi4MXcS+UO1k/0NGhvq1PAg==", "dependencies": { "@ioredis/commands": "^1.1.1", "cluster-key-slot": "^1.1.0", @@ -9550,9 +9551,9 @@ } }, "node_modules/npm-check-updates": { - "version": "17.1.11", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-17.1.11.tgz", - "integrity": "sha512-TR2RuGIH7P3Qrb0jfdC/nT7JWqXPKjDlxuNQt3kx4oNVf1Pn5SBRB7KLypgYZhruivJthgTtfkkyK4mz342VjA==", + "version": "17.1.13", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-17.1.13.tgz", + "integrity": "sha512-m9Woo2J5XVab0VcQpYvrQ0hx3ySI1mGbiHR595mc6Lr1/FIaTWvv+oU+T1WKSfXRiluKC/V5P6Bdk5agaYpqqg==", "dev": true, "bin": { "ncu": "build/cli.js", @@ -14824,10 +14825,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", - "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", - "license": "ISC", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", "bin": { "yaml": "bin.mjs" }, diff --git a/package.json b/package.json index bbc75b1dc..d15e6f84d 100644 --- a/package.json +++ b/package.json @@ -92,9 +92,9 @@ "@mojaloop/central-services-health": "15.0.0", "@mojaloop/central-services-logger": "11.5.1", "@mojaloop/central-services-metrics": "12.4.2", - "@mojaloop/central-services-shared": "18.14.1", + "@mojaloop/central-services-shared": "18.15.0", "@mojaloop/central-services-stream": "11.4.1", - "@mojaloop/database-lib": "11.0.6", + "@mojaloop/database-lib": "11.1.0", "@mojaloop/event-sdk": "14.1.1", "@mojaloop/inter-scheme-proxy-cache-lib": "2.3.1", "@mojaloop/ml-number": "11.2.4", @@ -104,8 +104,8 @@ "ajv-keywords": "5.1.0", "base64url": "3.0.1", "blipp": "4.0.2", - "commander": "12.1.0", - "cron": "3.3.1", + "commander": "13.0.0", + "cron": "3.3.2", "decimal.js": "10.4.3", "docdash": "2.0.2", "event-stream": "4.0.1", @@ -135,7 +135,7 @@ "jsonpath": "1.1.1", "mock-knex": "0.4.13", "nodemon": "3.1.9", - "npm-check-updates": "17.1.11", + "npm-check-updates": "17.1.13", "nyc": "17.1.0", "pre-commit": "1.2.2", "proxyquire": "2.1.3", diff --git a/src/api/ledgerAccountTypes/handler.js b/src/api/ledgerAccountTypes/handler.js index ef0d6fca2..6bdc8356a 100644 --- a/src/api/ledgerAccountTypes/handler.js +++ b/src/api/ledgerAccountTypes/handler.js @@ -26,7 +26,7 @@ const LedgerAccountTypesService = require('../../domain/ledgerAccountTypes') const ErrorHandler = require('@mojaloop/central-services-error-handling') -const Logger = require('@mojaloop/central-services-logger') +const { rethrow } = require('@mojaloop/central-services-shared').Util const getAll = async function () { return LedgerAccountTypesService.getAll() @@ -42,8 +42,7 @@ async function create (request, h) { return h.response().code(201) } } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'ledgerAccountTypesCreate' }) } } diff --git a/src/api/participants/handler.js b/src/api/participants/handler.js index b2f2ff95a..7aaf0403b 100644 --- a/src/api/participants/handler.js +++ b/src/api/participants/handler.js @@ -32,6 +32,7 @@ const Logger = require('@mojaloop/central-services-logger') const ErrorHandler = require('@mojaloop/central-services-error-handling') const Enums = require('../../lib/enumCached') const SettlementService = require('../../domain/settlement') +const { rethrow } = Util const LocalEnum = { activated: 'activated', @@ -107,8 +108,7 @@ const create = async function (request, h) { } return h.response(entityItem(participant, ledgerAccountIds)).code(201) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'participantCreate' }) } } @@ -152,8 +152,7 @@ const createHubAccount = async function (request, h) { const ledgerAccountIds = Util.transpose(ledgerAccountTypes) return h.response(entityItem(participant, ledgerAccountIds)).code(201) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'participantCreateHubAccount' }) } } @@ -187,8 +186,7 @@ const update = async function (request) { const ledgerAccountIds = Util.transpose(ledgerAccountTypes) return entityItem(updatedEntity, ledgerAccountIds) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'participantUpdate' }) } } @@ -197,8 +195,7 @@ const addEndpoint = async function (request, h) { await ParticipantService.addEndpoint(request.params.name, request.payload) return h.response().code(201) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'participantAddEndpoint' }) } } @@ -228,8 +225,7 @@ const getEndpoint = async function (request) { return endpoints } } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'participantGetEndpoint' }) } } @@ -238,8 +234,7 @@ const addLimitAndInitialPosition = async function (request, h) { await ParticipantService.addLimitAndInitialPosition(request.params.name, request.payload) return h.response().code(201) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'participantAddLimitAndInitialPosition' }) } } @@ -261,8 +256,7 @@ const getLimits = async function (request) { } return limits } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'participantGetLimits' }) } } @@ -285,8 +279,7 @@ const getLimitsForAllParticipants = async function (request) { } return limits } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: ' participantGetLimitsForAllParticipants' }) } } @@ -305,8 +298,7 @@ const adjustLimits = async function (request, h) { } return h.response(updatedLimit).code(200) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'participantAdjustLimits' }) } } @@ -314,8 +306,7 @@ const getPositions = async function (request) { try { return await ParticipantService.getPositions(request.params.name, request.query) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'participantGetPositions' }) } } @@ -323,8 +314,7 @@ const getAccounts = async function (request) { try { return await ParticipantService.getAccounts(request.params.name, request.query) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'participantGetAccounts' }) } } @@ -341,8 +331,7 @@ const updateAccount = async function (request, h) { } return h.response().code(200) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'participantUpdateAccount' }) } } @@ -352,8 +341,7 @@ const recordFunds = async function (request, h) { await ParticipantService.recordFundsInOut(request.payload, request.params, enums) return h.response().code(202) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'participantRecordFunds' }) } } diff --git a/src/api/settlementModels/handler.js b/src/api/settlementModels/handler.js index 22cc958c5..c249992dc 100644 --- a/src/api/settlementModels/handler.js +++ b/src/api/settlementModels/handler.js @@ -31,6 +31,7 @@ const Enums = require('../../lib/enumCached') const Util = require('@mojaloop/central-services-shared').Util const Enum = require('@mojaloop/central-services-shared').Enum.Settlements const Logger = require('@mojaloop/central-services-logger') +const { rethrow } = Util const entityItem = ({ settlementModelId, name, isActive, settlementGranularityId, settlementInterchangeId, settlementDelayId, currencyId, requireLiquidityCheck, ledgerAccountTypeId, autoPositionReset }, ledgerAccountIds, settlementGranularityIds, settlementInterchangeIds, settlementDelayIds) => { return { @@ -90,8 +91,7 @@ const update = async function (request) { const settlementDelayIds = Util.transpose(Enum.SettlementDelay) return entityItem(updatedEntity, ledgerAccountIds, settlementGranularityIds, settlementInterchangeIds, settlementDelayIds) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'settlementModelUpdate' }) } } const create = async function (request, h) { @@ -99,8 +99,7 @@ const create = async function (request, h) { await SettlementService.createSettlementModel(request.payload) return h.response().code(201) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'settlementModelCreate' }) } } diff --git a/src/api/transactions/handler.js b/src/api/transactions/handler.js index b65e172ca..9868c70ed 100644 --- a/src/api/transactions/handler.js +++ b/src/api/transactions/handler.js @@ -24,9 +24,10 @@ ******/ 'use strict' -const Transaction = require('../../domain/transactions') const ErrorHandler = require('@mojaloop/central-services-error-handling') -const Logger = require('@mojaloop/central-services-logger') +const { rethrow } = require('@mojaloop/central-services-shared').Util + +const Transaction = require('../../domain/transactions') const getById = async function (request) { try { @@ -36,8 +37,7 @@ const getById = async function (request) { } throw ErrorHandler.Factory.createFSPIOPError(ErrorHandler.Enums.FSPIOPErrorCodes.ID_NOT_FOUND, 'The requested resource could not be found.') } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'transactionsGetById' }) } } diff --git a/src/handlers/admin/handler.js b/src/handlers/admin/handler.js index c3da22418..5d90512b3 100644 --- a/src/handlers/admin/handler.js +++ b/src/handlers/admin/handler.js @@ -39,7 +39,6 @@ const Kafka = require('@mojaloop/central-services-shared').Util.Kafka const Consumer = require('@mojaloop/central-services-stream').Util.Consumer const Enum = require('@mojaloop/central-services-shared').Enum const Time = require('@mojaloop/central-services-shared').Util.Time -const ErrorHandler = require('@mojaloop/central-services-error-handling') const Comparators = require('@mojaloop/central-services-shared').Util.Comparators const Config = require('../../lib/config') const TransferService = require('../../domain/transfer') @@ -47,6 +46,7 @@ const Db = require('../../lib/db') const httpPostRelatedActions = [Enum.Events.Event.Action.RECORD_FUNDS_IN, Enum.Events.Event.Action.RECORD_FUNDS_OUT_PREPARE_RESERVE] const httpPutRelatedActions = [Enum.Events.Event.Action.RECORD_FUNDS_OUT_COMMIT, Enum.Events.Event.Action.RECORD_FUNDS_OUT_ABORT] const allowedActions = [].concat(httpPostRelatedActions).concat(httpPutRelatedActions) +const { rethrow } = require('@mojaloop/central-services-shared').Util const createRecordFundsInOut = async (payload, transactionTimestamp, enums) => { /** @namespace Db.getKnex **/ @@ -64,8 +64,7 @@ const createRecordFundsInOut = async (payload, transactionTimestamp, enums) => { await TransferService.reconciliationTransferPrepare(payload, transactionTimestamp, enums, trx) await TransferService.reconciliationTransferReserve(payload, transactionTimestamp, enums, trx) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'adminCreateRecordFundsInOut' }) } }) } @@ -115,8 +114,7 @@ const transferExists = async (payload, transferId) => { const transfer = async (error, messages) => { if (error) { - Logger.isErrorEnabled && Logger.error(error) - throw ErrorHandler.Factory.reformatFSPIOPError(error) + rethrow.rethrowAndCountFspiopError(error, { operation: 'adminTransfer' }) } let message = {} try { @@ -160,8 +158,7 @@ const transfer = async (error, messages) => { await Kafka.commitMessageSync(Consumer, kafkaTopic, message) return true } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'adminTransfer' }) } } @@ -184,8 +181,7 @@ const registerTransferHandler = async () => { await Consumer.createHandler(transferHandler.topicName, transferHandler.config, transferHandler.command) return true } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerTransferHandler' }) } } @@ -202,8 +198,7 @@ const registerAllHandlers = async () => { await registerTransferHandler() return true } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerAllHandlers' }) } } diff --git a/src/handlers/bulk/fulfil/handler.js b/src/handlers/bulk/fulfil/handler.js index 2166fdaa8..4842ea71c 100644 --- a/src/handlers/bulk/fulfil/handler.js +++ b/src/handlers/bulk/fulfil/handler.js @@ -45,7 +45,7 @@ const Comparators = require('@mojaloop/central-services-shared').Util.Comparator const ErrorHandler = require('@mojaloop/central-services-error-handling') const location = { module: 'BulkFulfilHandler', method: '', path: '' } // var object used as pointer - +const { rethrow } = Util const consumerCommit = true const fromSwitch = true @@ -74,7 +74,6 @@ const bulkFulfil = async (error, messages) => { ['success', 'fspId'] ).startTimer() if (error) { - Logger.isErrorEnabled && Logger.error(error) throw error } let message = {} @@ -111,7 +110,7 @@ const bulkFulfil = async (error, messages) => { const fspiopError = ErrorHandler.Factory.createFSPIOPError(ErrorHandler.Enums.FSPIOPErrorCodes.MODIFIED_REQUEST) const eventDetail = { functionality: Enum.Events.Event.Type.NOTIFICATION, action } await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'bulkFulfil' }) } // TODO: move FSPIOP-Source validation before Transfer Duplicate Check to accept only Payee's first request @@ -135,7 +134,7 @@ const bulkFulfil = async (error, messages) => { params.message.value.content.uriParams = { id: bulkTransferId } await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'bulkFulfil' }) } try { Logger.isInfoEnabled && Logger.info(Util.breadcrumb(location, 'individualTransferFulfils')) @@ -241,7 +240,7 @@ const bulkFulfil = async (error, messages) => { params.message.value.content.uriParams = { id: bulkTransferId } await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'bulkFulfil' }) } Logger.isInfoEnabled && Logger.info(Util.breadcrumb(location, `callbackErrorGeneric--${actionLetter}8`)) @@ -249,13 +248,12 @@ const bulkFulfil = async (error, messages) => { params.message.value.content.uriParams = { id: bulkTransferId } await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: validationFspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw validationFspiopError + rethrow.rethrowAndCountFspiopError(validationFspiopError, { operation: 'bulkFulfil' }) } } catch (err) { Logger.isErrorEnabled && Logger.error(`${Util.breadcrumb(location)}::${err.message}--BP0`) - Logger.isErrorEnabled && Logger.error(err) histTimerEnd({ success: false, fspId: Config.INSTRUMENTATION_METRICS_LABELS.fspId }) - throw err + rethrow.rethrowAndCountFspiopError(err, { operation: 'bulkFulfil' }) } } @@ -321,8 +319,7 @@ const registerBulkFulfilHandler = async () => { await Consumer.createHandler(bulkFulfilHandler.topicName, bulkFulfilHandler.config, bulkFulfilHandler.command) return true } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerBulkFulfilHandler' }) } } @@ -345,8 +342,7 @@ const registerAllHandlers = async () => { } return true } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerAllHandlers' }) } } diff --git a/src/handlers/bulk/get/handler.js b/src/handlers/bulk/get/handler.js index 9eb65d790..0b90e5851 100644 --- a/src/handlers/bulk/get/handler.js +++ b/src/handlers/bulk/get/handler.js @@ -44,6 +44,8 @@ const Validator = require('../shared/validator') const { ERROR_HANDLING } = require('../../../lib/config') const location = { module: 'BulkGetHandler', method: '', path: '' } +const { rethrow } = Util + const consumerCommit = true const fromSwitch = true @@ -67,7 +69,7 @@ const getBulkTransfer = async (error, messages) => { ['success', 'fspId'] ).startTimer() if (error) { - throw ErrorHandler.Factory.reformatFSPIOPError(error) + throw error } const message = Array.isArray(messages) ? messages[0] : messages const contextFromMessage = EventSdk.Tracer.extractContextFromMessage(message.value) @@ -98,7 +100,7 @@ const getBulkTransfer = async (error, messages) => { Logger.isInfoEnabled && Logger.info(Util.breadcrumb(location, `callbackErrorBulkTransferNotFound--${actionLetter}3`)) const fspiopError = ErrorHandler.Factory.createFSPIOPError(ErrorHandler.Enums.FSPIOPErrorCodes.BULK_TRANSFER_ID_NOT_FOUND, 'Provided Bulk Transfer ID was not found on the server.') await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'bulkGetGetBulkTransfer' }) } // The SD says this should be 404 response which I think will not be constent with single transfers // which responds with CLIENT_ERROR instead @@ -107,7 +109,7 @@ const getBulkTransfer = async (error, messages) => { Logger.isInfoEnabled && Logger.info(Util.breadcrumb(location, `callbackErrorNotBulkTransferParticipant--${actionLetter}2`)) const fspiopError = ErrorHandler.Factory.createFSPIOPError(ErrorHandler.Enums.FSPIOPErrorCodes.CLIENT_ERROR) await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'bulkGetGetBulkTransfer' }) } const isPayeeRequest = participants.payeeFsp === message.value.from Util.breadcrumb(location, { path: 'validationPassed' }) @@ -151,7 +153,7 @@ const getBulkTransfer = async (error, messages) => { } /** - * @function registerBulkFulfilHandler + * @function registerGetBulkTransferHandler * * @async * @description Registers the handler for bulk-transfer topic. Gets Kafka config from default.json @@ -174,8 +176,7 @@ const registerGetBulkTransferHandler = async () => { await Consumer.createHandler(bulkGetHandler.topicName, bulkGetHandler.config, bulkGetHandler.command) return true } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerGetBulkTransferHandler' }) } } @@ -198,8 +199,7 @@ const registerAllHandlers = async () => { } return true } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerAllHandlers' }) } } diff --git a/src/handlers/bulk/prepare/handler.js b/src/handlers/bulk/prepare/handler.js index 5dc7656e0..fabdd018e 100644 --- a/src/handlers/bulk/prepare/handler.js +++ b/src/handlers/bulk/prepare/handler.js @@ -47,7 +47,7 @@ const Comparators = require('@mojaloop/central-services-shared').Util.Comparator const ErrorHandler = require('@mojaloop/central-services-error-handling') const location = { module: 'BulkPrepareHandler', method: '', path: '' } // var object used as pointer - +const { rethrow } = Util const consumerCommit = true const fromSwitch = true @@ -166,7 +166,7 @@ const bulkPrepare = async (error, messages) => { params.message.value.content.uriParams = { id: bulkTransferId } await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'bulkPrepare' }) } const { isValid, reasons, payerParticipantId, payeeParticipantId } = await Validator.validateBulkTransfer(payload, headers) @@ -184,7 +184,7 @@ const bulkPrepare = async (error, messages) => { params.message.value.content.uriParams = { id: bulkTransferId } await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'bulkPrepare' }) } try { Logger.isInfoEnabled && Logger.info(Util.breadcrumb(location, 'individualTransfers')) @@ -222,7 +222,7 @@ const bulkPrepare = async (error, messages) => { params.message.value.content.uriParams = { id: bulkTransferId } await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'bulkPrepare' }) } } else { // handle validation failure Logger.isErrorEnabled && Logger.error(Util.breadcrumb(location, { path: 'validationFailed' })) @@ -258,7 +258,7 @@ const bulkPrepare = async (error, messages) => { params.message.value.content.uriParams = { id: bulkTransferId } await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'bulkPrepare' }) } // produce validation error callback notification to payer Logger.isInfoEnabled && Logger.info(Util.breadcrumb(location, `callbackErrorGeneric--${actionLetter}7`)) @@ -267,13 +267,12 @@ const bulkPrepare = async (error, messages) => { params.message.value.content.uriParams = { id: bulkTransferId } await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: validationFspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw validationFspiopError + rethrow.rethrowAndCountFspiopError(validationFspiopError, { operation: 'bulkPrepare' }) } } catch (err) { Logger.isErrorEnabled && Logger.error(`${Util.breadcrumb(location)}::${err.message}--BP0`) - Logger.isErrorEnabled && Logger.error(err) histTimerEnd({ success: false, fspId: Config.INSTRUMENTATION_METRICS_LABELS.fspId }) - throw err + rethrow.rethrowAndCountFspiopError(err, { operation: 'bulkPrepare' }) } } @@ -301,8 +300,7 @@ const registerBulkPrepareHandler = async () => { await Consumer.createHandler(bulkPrepareHandler.topicName, bulkPrepareHandler.config, bulkPrepareHandler.command) return true } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerBulkPrepareHandler' }) } } @@ -325,8 +323,7 @@ const registerAllHandlers = async () => { } return true } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerAllHandlers' }) } } diff --git a/src/handlers/bulk/processing/handler.js b/src/handlers/bulk/processing/handler.js index b89226bdb..8af3ea928 100644 --- a/src/handlers/bulk/processing/handler.js +++ b/src/handlers/bulk/processing/handler.js @@ -44,7 +44,7 @@ const Kafka = Util.Kafka const HeaderValidation = Util.HeaderValidation const location = { module: 'BulkProcessingHandler', method: '', path: '' } // var object used as pointer - +const { rethrow } = Util const consumerCommit = true const fromSwitch = true @@ -152,7 +152,7 @@ const bulkProcessing = async (error, messages) => { errorDescription = payload.errorInformation && payload.errorInformation.errorDescription } else { const fspiopError = ErrorHandler.Factory.createFSPIOPError(ErrorHandler.Enums.FSPIOPErrorCodes.INTERNAL_SERVER_ERROR, `Invalid action ${action} for bulk in ${Enum.Transfers.BulkTransferState.RECEIVED} state`) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'bulkProcessing' }) } } else if ([Enum.Transfers.BulkTransferState.ACCEPTED].includes(bulkTransferInfo.bulkTransferStateId)) { if (action === Enum.Events.Event.Action.BULK_TIMEOUT_RESERVED) { @@ -164,7 +164,7 @@ const bulkProcessing = async (error, messages) => { errorDescription = payload.errorInformation && payload.errorInformation.errorDescription } else { const fspiopError = ErrorHandler.Factory.createFSPIOPError(ErrorHandler.Enums.FSPIOPErrorCodes.INTERNAL_SERVER_ERROR, `Invalid action ${action} for bulk in ${Enum.Transfers.BulkTransferState.ACCEPTED} state`) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'bulkProcessing' }) } } else if ([Enum.Transfers.BulkTransferState.PROCESSING, Enum.Transfers.BulkTransferState.PENDING_FULFIL, Enum.Transfers.BulkTransferState.EXPIRING].includes(bulkTransferInfo.bulkTransferStateId)) { criteriaState = Enum.Transfers.BulkTransferState.PROCESSING @@ -192,7 +192,7 @@ const bulkProcessing = async (error, messages) => { errorDescription = payload.errorInformation && payload.errorInformation.errorDescription } else { const fspiopError = ErrorHandler.Factory.createFSPIOPError(ErrorHandler.Enums.FSPIOPErrorCodes.INTERNAL_SERVER_ERROR, `Invalid action ${action} for bulk in ${Enum.Transfers.BulkTransferState.PROCESSING} state`) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'bulkProcessing' }) } } else if ([Enum.Transfers.BulkTransferState.ABORTING].includes(bulkTransferInfo.bulkTransferStateId)) { if (action === Enum.Events.Event.Action.BULK_ABORT) { @@ -204,15 +204,15 @@ const bulkProcessing = async (error, messages) => { errorDescription = payload.errorInformation && payload.errorInformation.errorDescription } else { const fspiopError = ErrorHandler.Factory.createFSPIOPError(ErrorHandler.Enums.FSPIOPErrorCodes.INTERNAL_SERVER_ERROR, `Invalid action ${action} for bulk in ${Enum.Transfers.BulkTransferState.ABORTING} state`) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'bulkProcessing' }) } } else if (bulkTransferInfo.bulkTransferStateId === Enum.Transfers.BulkTransferState.COMPLETED && action === Enum.Events.Event.Action.FULFIL_DUPLICATE) { /** - * Bulk transfer state is detected as COMPLETED, because data is fetched by trasnferId, + * Bulk transfer state is detected as COMPLETED, because data is fetched by transferId, * not by bulkTransferId, thus the duplicate fulfil refers to the original bulk where * it exists, not the current bulk in which duplicate fulfil is included. * - * TODO:967 BULK-NEEDS_CLAIRTY - Currently this is only added to the log and no + * TODO:967 BULK-NEEDS_CLARITY - Currently this is only added to the log and no * errorInformation is queued to be sent to Payee for the duplicate fulfil. * Also, please be aware, that such a duplicate fulfil may be processed after * all expected individual transfers have been processed and notification has @@ -224,10 +224,10 @@ const bulkProcessing = async (error, messages) => { } else { fspiopError = ErrorHandler.Factory.createFSPIOPError(ErrorHandler.Enums.FSPIOPErrorCodes.VALIDATION_ERROR, `fulfil-duplicate error occurred for transferId ${transferId}`) } - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'bulkProcessing' }) } else { // ['PENDING_INVALID', 'COMPLETED', 'REJECTED', 'INVALID'] const fspiopError = ErrorHandler.Factory.createFSPIOPError(ErrorHandler.Enums.FSPIOPErrorCodes.INTERNAL_SERVER_ERROR, `Could not process transferId ${transferId} after bulk is finilized`) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'bulkProcessing' }) } await BulkTransferService.bulkTransferAssociationUpdate( @@ -361,7 +361,7 @@ const bulkProcessing = async (error, messages) => { eventDetail.action = Enum.Events.Event.Action.BULK_ABORT params.message.value.content.uriParams.id = bulkTransferInfo.bulkTransferId await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'bulkProcessing' }) } else { // TODO: For the following (Internal Server Error) scenario a notification is produced for each individual transfer. // It also needs to be processed first in order to accumulate transfers and send the callback notification at bulk level. @@ -375,9 +375,8 @@ const bulkProcessing = async (error, messages) => { } } catch (err) { Logger.isErrorEnabled && Logger.error(`${Util.breadcrumb(location)}::${err.message}--BP0`) - Logger.isErrorEnabled && Logger.error(err) histTimerEnd({ success: false, fspId: Config.INSTRUMENTATION_METRICS_LABELS.fspId }) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'bulkProcessing' }) } } @@ -405,8 +404,7 @@ const registerBulkProcessingHandler = async () => { await Consumer.createHandler(bulkProcessingHandler.topicName, bulkProcessingHandler.config, bulkProcessingHandler.command) return true } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerBulkProcessingHandler' }) } } @@ -429,8 +427,7 @@ const registerAllHandlers = async () => { } return true } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerAllHandlers' }) } } diff --git a/src/handlers/positions/handler.js b/src/handlers/positions/handler.js index aa7699aa2..5adb160ed 100644 --- a/src/handlers/positions/handler.js +++ b/src/handlers/positions/handler.js @@ -58,7 +58,7 @@ const decodeMessages = require('@mojaloop/central-services-shared').Util.Streami const ErrorHandler = require('@mojaloop/central-services-error-handling') const location = { module: 'PositionHandler', method: '', path: '' } // var object used as pointer - +const rethrow = Utility.rethrow const consumerCommit = true const fromSwitch = true @@ -87,7 +87,7 @@ const positions = async (error, messages) => { if (error) { histTimerEnd({ success: false, fspId: Config.INSTRUMENTATION_METRICS_LABELS.fspId, action: 'error' }) - throw ErrorHandler.Factory.reformatFSPIOPError(error) + rethrow.rethrowAndCountFspiopError(error, { operation: 'positionsHandler' }) } let message = {} let prepareBatch = [] @@ -111,8 +111,7 @@ const positions = async (error, messages) => { const transferId = payload.transferId || (message.value.content.uriParams && message.value.content.uriParams.id) if (!transferId) { const fspiopError = ErrorHandler.Factory.createInternalServerFSPIOPError('transferId is null or undefined') - Logger.isErrorEnabled && Logger.error(fspiopError) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'positionsHandler' }) } const kafkaTopic = message.topic @@ -169,7 +168,7 @@ const positions = async (error, messages) => { const fspiopApiError = responseFspiopError.toApiErrorObject(Config.ERROR_HANDLING) await TransferService.logTransferError(transferId, fspiopApiError.errorInformation.errorCode, fspiopApiError.errorInformation.errorDescription) await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopApiError, eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw responseFspiopError + rethrow.rethrowAndCountFspiopError(responseFspiopError, { operation: 'positionsHandler' }) } } } else if (eventType === Enum.Events.Event.Type.POSITION && [Enum.Events.Event.Action.COMMIT, Enum.Events.Event.Action.RESERVE, Enum.Events.Event.Action.BULK_COMMIT].includes(action)) { @@ -180,7 +179,7 @@ const positions = async (error, messages) => { Logger.isInfoEnabled && Logger.info(Utility.breadcrumb(location, `validationFailed::notReceivedFulfilState1--${actionLetter}3`)) const fspiopError = ErrorHandler.Factory.createInternalServerFSPIOPError(`Invalid State: ${transferInfo.transferStateId} - expected: ${Enum.Transfers.TransferInternalState.RECEIVED_FULFIL}`) await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'positionsHandler' }) } else { Logger.isInfoEnabled && Logger.info(Utility.breadcrumb(location, `payee--${actionLetter}4`)) const isReversal = false @@ -227,7 +226,8 @@ const positions = async (error, messages) => { const participantCurrency = await participantFacade.getByIDAndCurrency(transferInfo.participantId, transferInfo.currencyId, Enum.Accounts.LedgerAccountType.POSITION) if (transferInfo.transferStateId !== Enum.Transfers.TransferInternalState.RESERVED_TIMEOUT) { Logger.isInfoEnabled && Logger.info(Utility.breadcrumb(location, `validationFailed::notReceivedFulfilState2--${actionLetter}6`)) - throw ErrorHandler.Factory.createInternalServerFSPIOPError(ErrorHandler.Enums.FSPIOPErrorCodes.INTERNAL_SERVER_ERROR.message) + const error = ErrorHandler.Factory.createInternalServerFSPIOPError(ErrorHandler.Enums.FSPIOPErrorCodes.INTERNAL_SERVER_ERROR.message) + rethrow.rethrowAndCountFspiopError(error, { operation: 'positionsHandler' }) } else { Logger.isInfoEnabled && Logger.info(Utility.breadcrumb(location, `validationPassed2--${actionLetter}7`)) const isReversal = true @@ -247,14 +247,14 @@ const positions = async (error, messages) => { eventDetail, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'positionsHandler' }) } } else { Logger.isInfoEnabled && Logger.info(Utility.breadcrumb(location, `invalidEventTypeOrAction--${actionLetter}8`)) const fspiopError = ErrorHandler.Factory.createInternalServerFSPIOPError(`Invalid event action:(${action}) and/or type:(${eventType})`) const eventDetail = { functionality: Enum.Events.Event.Type.NOTIFICATION, action: Enum.Events.Event.Action.POSITION } await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'positionsHandler' }) } } catch (err) { Logger.isErrorEnabled && Logger.error(`${Utility.breadcrumb(location)}::${err.message}--0`) @@ -291,8 +291,7 @@ const registerPositionHandler = async () => { await Consumer.createHandler(positionHandler.topicName, positionHandler.config, positionHandler.command) return true } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerPositionHandler' }) } } @@ -308,8 +307,7 @@ const registerAllHandlers = async () => { try { return await registerPositionHandler() } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerAllHandlers' }) } } diff --git a/src/handlers/positions/handlerBatch.js b/src/handlers/positions/handlerBatch.js index f703df87b..03bb0cb52 100644 --- a/src/handlers/positions/handlerBatch.js +++ b/src/handlers/positions/handlerBatch.js @@ -33,7 +33,6 @@ * @module src/handlers/positions */ -const Logger = require('@mojaloop/central-services-logger') const EventSdk = require('@mojaloop/event-sdk') const BinProcessor = require('../../domain/position/binProcessor') const SettlementModelCached = require('../../models/settlement/settlementModelCached') @@ -49,6 +48,7 @@ const ErrorHandler = require('@mojaloop/central-services-error-handling') const BatchPositionModel = require('../../models/position/batch') const decodePayload = require('@mojaloop/central-services-shared').Util.StreamingProtocol.decodePayload const consumerCommit = true +const rethrow = Utility.rethrow /** * @function positions @@ -71,7 +71,7 @@ const positions = async (error, messages) => { if (error) { histTimerEnd({ success: false }) - throw ErrorHandler.Factory.reformatFSPIOPError(error) + rethrow.rethrowAndCountFspiopError(error, { operation: 'positionsHandlerBatch' }) } let consumedMessages = [] @@ -237,8 +237,7 @@ const registerPositionHandler = async () => { await Consumer.createHandler(positionHandler.topicName, positionHandler.config, positionHandler.command) return true } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerPositionHandler' }) } } @@ -254,8 +253,7 @@ const registerAllHandlers = async () => { try { return await registerPositionHandler() } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerAllHandlers' }) } } diff --git a/src/handlers/timeouts/handler.js b/src/handlers/timeouts/handler.js index 3257d8bfe..75a850643 100644 --- a/src/handlers/timeouts/handler.js +++ b/src/handlers/timeouts/handler.js @@ -45,7 +45,7 @@ const Config = require('../../lib/config') const TimeoutService = require('../../domain/timeout') const { logger } = require('../../shared/logger') -const { Kafka, resourceVersions } = Utility +const { Kafka, resourceVersions, rethrow } = Utility const { Action, Type } = Enum.Events.Event let timeoutJob @@ -157,7 +157,7 @@ const _processTimedOutTransfers = async (transferTimeoutList) => { const state = new EventSdk.EventStateMetadata(EventSdk.EventStatusType.failed, fspiopError.apiErrorCode.code, fspiopError.apiErrorCode.message) await span.error(fspiopError, state) await span.finish(fspiopError.message, state) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: '_processTimedOutTransfers' }) } finally { if (!span.isFinished) { await span.finish() @@ -239,7 +239,7 @@ const _processFxTimedOutTransfers = async (fxTransferTimeoutList) => { const state = new EventSdk.EventStateMetadata(EventSdk.EventStatusType.failed, fspiopError.apiErrorCode.code, fspiopError.apiErrorCode.message) await span.error(fspiopError, state) await span.finish(fspiopError.message, state) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: '_processFxTimedOutTransfers' }) } finally { if (!span.isFinished) { await span.finish() @@ -294,7 +294,7 @@ const timeout = async () => { } } catch (err) { logger.error('error in timeout:', err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'timeoutHandler' }) } finally { running = false } @@ -350,7 +350,7 @@ const registerTimeoutHandler = async () => { return true } catch (err) { logger.error('error in registerTimeoutHandler:', err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerTimeoutHandler' }) } } @@ -370,7 +370,7 @@ const registerAllHandlers = async () => { return true } catch (err) { logger.error('error in registerAllHandlers:', err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerAllHandlers' }) } } diff --git a/src/handlers/transfers/FxFulfilService.js b/src/handlers/transfers/FxFulfilService.js index bf89d2481..1e35a4969 100644 --- a/src/handlers/transfers/FxFulfilService.js +++ b/src/handlers/transfers/FxFulfilService.js @@ -32,7 +32,7 @@ const ErrorHandler = require('@mojaloop/central-services-error-handling') const { Type, Action } = Enum.Events.Event const { SOURCE, DESTINATION } = Enum.Http.Headers.FSPIOP const { TransferState, TransferInternalState } = Enum.Transfers - +const { rethrow } = Util const consumerCommit = true const fromSwitch = true @@ -69,7 +69,7 @@ class FxFulfilService { eventDetail, fromSwitch }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'getFxTransferDetails' }) } this.log.debug('fxTransfer is found', { fxTransfer }) @@ -98,7 +98,7 @@ class FxFulfilService { await this.FxTransferModel.fxTransfer.saveFxFulfilResponse(transfer.commitRequestId, payload, eventDetail.action, apiFSPIOPError) await this._handleAbortValidation(transfer, apiFSPIOPError, eventDetail) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'validateHeaders' }) } } @@ -122,7 +122,7 @@ class FxFulfilService { }) } else { const fspiopError = ErrorHandler.Factory.createInternalServerFSPIOPError('Invalid cyril result') - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: '_handleAbortValidation' }) } } @@ -170,7 +170,7 @@ class FxFulfilService { eventDetail, fromSwitch }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'checkDuplication' }) } // This is a duplicate message for a fxTransfer that is already in a finalized state @@ -228,7 +228,7 @@ class FxFulfilService { eventDetail, fromSwitch }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'validateEventType' }) } this.log.debug('validateEventType is passed', { type, functionality }) } @@ -247,7 +247,7 @@ class FxFulfilService { await this.FxTransferModel.fxTransfer.saveFxFulfilResponse(fxTransfer.commitRequestId, payload, eventDetail.action, apiFSPIOPError) await this._handleAbortValidation(fxTransfer, apiFSPIOPError, eventDetail) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'validateFulfilment' }) } this.log.info('fulfilmentCheck passed successfully', { isValid }) @@ -273,7 +273,7 @@ class FxFulfilService { eventDetail, fromSwitch }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'validateTransferState' }) } this.log.debug('validateTransferState is passed') return true @@ -295,7 +295,7 @@ class FxFulfilService { eventDetail, fromSwitch }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'validateExpirationDate' }) } } @@ -325,7 +325,7 @@ class FxFulfilService { }) } else { const fspiopError = ErrorHandler.Factory.createInternalServerFSPIOPError('Invalid cyril result') - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'processFxAbort' }) } return true } diff --git a/src/handlers/transfers/handler.js b/src/handlers/transfers/handler.js index 4dbd19ca7..dfa4e7f2f 100644 --- a/src/handlers/transfers/handler.js +++ b/src/handlers/transfers/handler.js @@ -66,12 +66,13 @@ const TransferEventType = Enum.Events.Event.Type const TransferEventAction = Enum.Events.Event.Action const decodePayload = Util.StreamingProtocol.decodePayload +const { rethrow } = Util const consumerCommit = true const fromSwitch = true const fulfil = async (error, messages) => { if (error) { - throw ErrorHandler.Factory.reformatFSPIOPError(error) + rethrow.rethrowAndCountFspiopError(error, { operation: 'fulfil' }) } let message if (Array.isArray(messages)) { @@ -196,7 +197,7 @@ const processFulfilMessage = async (message, functionality, span) => { * non-existing transferId */ await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'processFulfilMessage' }) } // Lets validate FSPIOP Source & Destination Headers @@ -283,7 +284,7 @@ const processFulfilMessage = async (message, functionality, span) => { await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, eventDetail: reserveAbortedEventDetail, fromSwitch: true, toDestination: transfer.payeeFsp, hubName: Config.HUB_NAME }) } - throw apiFSPIOPError + rethrow.rethrowAndCountFspiopError(apiFSPIOPError, { operation: 'processFulfilMessage' }) } } @@ -372,7 +373,7 @@ const processFulfilMessage = async (message, functionality, span) => { */ const eventDetail = { functionality, action } await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'processFulfilMessage' }) } // Transfer is not a duplicate, or message hasn't been changed. @@ -385,7 +386,7 @@ const processFulfilMessage = async (message, functionality, span) => { * TODO: BulkProcessingHandler (not in scope of #967) */ await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'processFulfilMessage' }) } const validActions = [ @@ -404,7 +405,7 @@ const processFulfilMessage = async (message, functionality, span) => { * TODO: BulkProcessingHandler (not in scope of #967) */ await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'processFulfilMessage' }) } Util.breadcrumb(location, { path: 'validationCheck' }) @@ -441,7 +442,7 @@ const processFulfilMessage = async (message, functionality, span) => { ) } else { const fspiopError = ErrorHandler.Factory.createInternalServerFSPIOPError('Invalid cyril result') - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'processFulfilMessage' }) } // const payerAccount = await Participant.getAccountByNameAndCurrency(transfer.payerFsp, transfer.currency, Enum.Accounts.LedgerAccountType.POSITION) @@ -477,7 +478,7 @@ const processFulfilMessage = async (message, functionality, span) => { message.value.content.payload = reservedAbortedPayload await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, eventDetail, fromSwitch: true, toDestination: transfer.payeeFsp, hubName: Config.HUB_NAME }) } - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'processFulfilMessage' }) } if (transfer.transferState !== Enum.Transfers.TransferInternalState.RESERVED && @@ -507,7 +508,7 @@ const processFulfilMessage = async (message, functionality, span) => { message.value.content.payload = reservedAbortedPayload await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, eventDetail, fromSwitch: true, toDestination: transfer.payeeFsp, hubName: Config.HUB_NAME }) } - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'processFulfilMessage' }) } // Check if the transfer has expired @@ -536,7 +537,7 @@ const processFulfilMessage = async (message, functionality, span) => { message.value.content.payload = reservedAbortedPayload await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, eventDetail, fromSwitch: true, hubName: Config.HUB_NAME }) } - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'processFulfilMessage' }) } // Validations Succeeded - process the fulfil @@ -570,7 +571,7 @@ const processFulfilMessage = async (message, functionality, span) => { } else { histTimerEnd({ success: false, fspId: Config.INSTRUMENTATION_METRICS_LABELS.fspId }) const fspiopError = ErrorHandler.Factory.createInternalServerFSPIOPError('Invalid cyril result') - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'processFulfilMessage' }) } } else { // Key position fulfil message with payee account id @@ -607,7 +608,7 @@ const processFulfilMessage = async (message, functionality, span) => { // Key position abort with payer account id const payerAccount = await Participant.getAccountByNameAndCurrency(transfer.payerFsp, transfer.currency, Enum.Accounts.LedgerAccountType.POSITION) await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, messageKey: payerAccount.participantCurrencyId.toString(), hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError) } await TransferService.handlePayeeResponse(transferId, payload, action, fspiopError.toApiErrorObject(Config.ERROR_HANDLING)) const eventDetail = { functionality: TransferEventType.POSITION, action } @@ -616,7 +617,8 @@ const processFulfilMessage = async (message, functionality, span) => { await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, messageKey: payerAccount.participantCurrencyId.toString(), hubName: Config.HUB_NAME }) // TODO(2556): I don't think we should emit an extra notification here // this is the case where the Payee sent an ABORT, so we don't need to tell them to abort - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'processFulfilMessage' }) + break } case TransferEventAction.ABORT: { Logger.isInfoEnabled && Logger.info(Util.breadcrumb(location, `positionTopic4--${actionLetter}14`)) @@ -636,7 +638,7 @@ const processFulfilMessage = async (message, functionality, span) => { // Key position abort with payer account id const payerAccount = await Participant.getAccountByNameAndCurrency(transfer.payerFsp, transfer.currency, Enum.Accounts.LedgerAccountType.POSITION) await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, messageKey: payerAccount.participantCurrencyId.toString(), hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'processFulfilMessage' }) } await TransferService.handlePayeeResponse(transferId, payload, action, fspiopError.toApiErrorObject(Config.ERROR_HANDLING)) const eventDetail = { functionality: TransferEventType.POSITION, action } @@ -662,7 +664,7 @@ const processFulfilMessage = async (message, functionality, span) => { ) } else { const fspiopError = ErrorHandler.Factory.createInternalServerFSPIOPError('Invalid cyril result') - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'processFulfilMessage' }) } } } @@ -782,7 +784,7 @@ const getTransfer = async (error, messages) => { ['success', 'fspId'] ).startTimer() if (error) { - throw ErrorHandler.Factory.reformatFSPIOPError(error) + rethrow.rethrowAndCountFspiopError(error, { operation: 'getTransfer' }) } let message = {} if (Array.isArray(messages)) { @@ -819,13 +821,13 @@ const getTransfer = async (error, messages) => { Logger.isInfoEnabled && Logger.info(Util.breadcrumb(location, `callbackErrorTransferNotFound--${actionLetter}3`)) const fspiopError = ErrorHandler.Factory.createFSPIOPError(ErrorHandler.Enums.FSPIOPErrorCodes.TRANSFER_ID_NOT_FOUND, 'Provided commitRequest ID was not found on the server.') await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'getTransfer' }) } if (!await Validator.validateParticipantForCommitRequestId(message.value.from, transferIdOrCommitRequestId)) { Logger.isInfoEnabled && Logger.info(Util.breadcrumb(location, `callbackErrorNotFxTransferParticipant--${actionLetter}2`)) const fspiopError = ErrorHandler.Factory.createFSPIOPError(ErrorHandler.Enums.FSPIOPErrorCodes.CLIENT_ERROR) await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'getTransfer' }) } Util.breadcrumb(location, { path: 'validationPassed' }) Logger.isInfoEnabled && Logger.info(Util.breadcrumb(location, `callbackMessage--${actionLetter}4`)) @@ -836,13 +838,13 @@ const getTransfer = async (error, messages) => { Logger.isInfoEnabled && Logger.info(Util.breadcrumb(location, `callbackErrorTransferNotFound--${actionLetter}3`)) const fspiopError = ErrorHandler.Factory.createFSPIOPError(ErrorHandler.Enums.FSPIOPErrorCodes.TRANSFER_ID_NOT_FOUND, 'Provided Transfer ID was not found on the server.') await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'getTransfer' }) } if (!await Validator.validateParticipantTransferId(message.value.from, transferIdOrCommitRequestId)) { Logger.isInfoEnabled && Logger.info(Util.breadcrumb(location, `callbackErrorNotTransferParticipant--${actionLetter}2`)) const fspiopError = ErrorHandler.Factory.createFSPIOPError(ErrorHandler.Enums.FSPIOPErrorCodes.CLIENT_ERROR) await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'getTransfer' }) } Util.breadcrumb(location, { path: 'validationPassed' }) Logger.isInfoEnabled && Logger.info(Util.breadcrumb(location, `callbackMessage--${actionLetter}4`)) @@ -887,8 +889,7 @@ const registerPrepareHandler = async () => { await Consumer.createHandler(topicName, consumeConfig, prepare) return true } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerPrepareHandler' }) } } @@ -911,8 +912,7 @@ const registerFulfilHandler = async () => { await Consumer.createHandler(fulfillHandler.topicName, fulfillHandler.config, fulfillHandler.command) return true } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerFulfilHandler' }) } } @@ -935,8 +935,7 @@ const registerGetTransferHandler = async () => { await Consumer.createHandler(getHandler.topicName, getHandler.config, getHandler.command) return true } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerGetTransferHandler' }) } } @@ -955,8 +954,7 @@ const registerAllHandlers = async () => { await registerGetTransferHandler() return true } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowAndCountFspiopError(err, { operation: 'registerAllHandlers' }) } } diff --git a/src/handlers/transfers/prepare.js b/src/handlers/transfers/prepare.js index 2d0c5c7d8..d9e6bd900 100644 --- a/src/handlers/transfers/prepare.js +++ b/src/handlers/transfers/prepare.js @@ -47,6 +47,7 @@ const { FSPIOPErrorCodes } = ErrorHandler.Enums const { createFSPIOPError, reformatFSPIOPError } = ErrorHandler.Factory const { fspId } = Config.INSTRUMENTATION_METRICS_LABELS +const { rethrow } = Util const consumerCommit = true const fromSwitch = true const proxyEnabled = Config.PROXY_CACHE_CONFIG.enabled @@ -206,7 +207,7 @@ const calculateProxyObligation = async ({ payload, isFx, params, functionality, fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'calculateProxyObligation' }) } } @@ -257,7 +258,7 @@ const processDuplication = async ({ fromSwitch, hubName: Config.HUB_NAME }) - throw error + rethrow.rethrowAndCountFspiopError(error, { operation: 'processDuplication' }) } logger.info(Util.breadcrumb(location, 'handleResend')) @@ -283,7 +284,7 @@ const processDuplication = async ({ logger.info(Util.breadcrumb(location, `validationError1--${actionLetter}2`)) const fspiopError = ErrorHandler.Factory.createFSPIOPError(ErrorHandler.Enums.FSPIOPErrorCodes.MODIFIED_REQUEST, 'Individual transfer prepare duplicate') await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'processDuplication' }) } } else { logger.info(Util.breadcrumb(location, 'inProgress')) @@ -291,7 +292,7 @@ const processDuplication = async ({ logger.info(Util.breadcrumb(location, `validationError2--${actionLetter}4`)) const fspiopError = ErrorHandler.Factory.createFSPIOPError(ErrorHandler.Enums.FSPIOPErrorCodes.MODIFIED_REQUEST, 'Individual transfer prepare duplicate') await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit, fspiopError: fspiopError.toApiErrorObject(Config.ERROR_HANDLING), eventDetail, fromSwitch }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'processDuplication' }) } else { // action === TransferEventAction.PREPARE logger.info(Util.breadcrumb(location, `ignore--${actionLetter}3`)) await Kafka.proceed(Config.KAFKA_CONFIG, params, { consumerCommit }) @@ -335,7 +336,7 @@ const savePreparedRequest = async ({ fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'savePreparedRequest' }) } } @@ -451,7 +452,7 @@ const prepare = async (error, messages) => { ).startTimer() if (error) { histTimerEnd({ success: false, fspId }) - throw reformatFSPIOPError(error) + rethrow.rethrowAndCountFspiopError(error, { operation: 'transferPrepare' }) } const { @@ -535,7 +536,7 @@ const prepare = async (error, messages) => { fromSwitch, hubName: Config.HUB_NAME }) - throw fspiopError + rethrow.rethrowAndCountFspiopError(fspiopError, { operation: 'transferPrepare' }) } logger.info(Util.breadcrumb(location, `positionTopic1--${actionLetter}7`)) diff --git a/src/models/bulkTransfer/bulkTransfer.js b/src/models/bulkTransfer/bulkTransfer.js index 7254d4077..b2b093675 100644 --- a/src/models/bulkTransfer/bulkTransfer.js +++ b/src/models/bulkTransfer/bulkTransfer.js @@ -24,7 +24,7 @@ 'use strict' const Db = require('../../lib/db') -const Logger = require('@mojaloop/central-services-logger') +const { rethrow } = require('@mojaloop/central-services-shared').Util const getById = async (id) => { try { @@ -50,8 +50,7 @@ const getById = async (id) => { return result }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -79,8 +78,7 @@ const getByTransferId = async (id) => { return result }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -96,8 +94,7 @@ const getParticipantsById = async (id) => { return result }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/bulkTransfer/bulkTransferAssociation.js b/src/models/bulkTransfer/bulkTransferAssociation.js index aeea76292..21d06beee 100644 --- a/src/models/bulkTransfer/bulkTransferAssociation.js +++ b/src/models/bulkTransfer/bulkTransferAssociation.js @@ -26,12 +26,13 @@ const Db = require('../../lib/db') const Time = require('@mojaloop/central-services-shared').Util.Time const LibUtil = require('@mojaloop/central-services-shared').Util +const { rethrow } = require('@mojaloop/central-services-shared').Util exports.create = async (bulkTransferAssociation) => { try { return Db.from('bulkTransferAssociation').insert(bulkTransferAssociation) } catch (err) { - throw new Error(err.message) + rethrow.rethrowDatabaseError(err) } } @@ -45,7 +46,7 @@ exports.update = async (transferId, bulkTransferId, bulkTransferAssociation) => }) return Db.from('bulkTransferAssociation').update({ transferId, bulkTransferId }, record) } catch (err) { - throw new Error(err.message) + rethrow.rethrowDatabaseError(err) } } @@ -55,7 +56,7 @@ exports.exists = async (bulkTransferId, bulkProcessingStateId) => { bulkTransferId, bulkProcessingStateId }) } catch (err) { - throw new Error(err.message) + rethrow.rethrowDatabaseError(err) } } @@ -67,6 +68,6 @@ exports.count = async (bulkTransferId, bulkProcessingStateId) => { .first() return result.count } catch (err) { - throw new Error(err.message) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/bulkTransfer/bulkTransferDuplicateCheck.js b/src/models/bulkTransfer/bulkTransferDuplicateCheck.js index 7cb850038..ab6a1d9be 100644 --- a/src/models/bulkTransfer/bulkTransferDuplicateCheck.js +++ b/src/models/bulkTransfer/bulkTransferDuplicateCheck.js @@ -30,7 +30,7 @@ const Db = require('../../lib/db') const Logger = require('@mojaloop/central-services-logger') -const ErrorHandler = require('@mojaloop/central-services-error-handling') +const { rethrow } = require('@mojaloop/central-services-shared').Util /** * @function GetBulkTransferDuplicateCheck @@ -48,7 +48,7 @@ const getBulkTransferDuplicateCheck = async (bulkTransferId) => { try { return Db.from('bulkTransferDuplicateCheck').findOne({ bulkTransferId }) } catch (err) { - throw new Error(err.message) + rethrow.rethrowDatabaseError(err) } } @@ -69,7 +69,7 @@ const saveBulkTransferDuplicateCheck = async (bulkTransferId, hash) => { try { return Db.from('bulkTransferDuplicateCheck').insert({ bulkTransferId, hash }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/bulkTransfer/bulkTransferExtension.js b/src/models/bulkTransfer/bulkTransferExtension.js index 7919ba1e6..74710e1f1 100644 --- a/src/models/bulkTransfer/bulkTransferExtension.js +++ b/src/models/bulkTransfer/bulkTransferExtension.js @@ -24,7 +24,7 @@ 'use strict' const Db = require('../../lib/db') -const Logger = require('@mojaloop/central-services-logger') +const { rethrow } = require('@mojaloop/central-services-shared').Util const getByBulkTransferId = async (id) => { try { @@ -35,8 +35,7 @@ const getByBulkTransferId = async (id) => { return result }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/bulkTransfer/bulkTransferFulfilmentDuplicateCheck.js b/src/models/bulkTransfer/bulkTransferFulfilmentDuplicateCheck.js index d022df307..5a1b31dae 100644 --- a/src/models/bulkTransfer/bulkTransferFulfilmentDuplicateCheck.js +++ b/src/models/bulkTransfer/bulkTransferFulfilmentDuplicateCheck.js @@ -30,7 +30,7 @@ const Db = require('../../lib/db') const Logger = require('@mojaloop/central-services-logger') -const ErrorHandler = require('@mojaloop/central-services-error-handling') +const { rethrow } = require('@mojaloop/central-services-shared').Util /** * @function GetBulkTransferFulfilmentDuplicateCheck @@ -48,7 +48,7 @@ const getBulkTransferFulfilmentDuplicateCheck = async (bulkTransferId) => { try { return Db.from('bulkTransferFulfilmentDuplicateCheck').findOne({ bulkTransferId }) } catch (err) { - throw new Error(err.message) + rethrow.rethrowDatabaseError(err) } } @@ -69,7 +69,7 @@ const saveBulkTransferFulfilmentDuplicateCheck = async (bulkTransferId, hash) => try { return Db.from('bulkTransferFulfilmentDuplicateCheck').insert({ bulkTransferId, hash }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/bulkTransfer/bulkTransferStateChange.js b/src/models/bulkTransfer/bulkTransferStateChange.js index ccadfb7d3..bf1e7e644 100644 --- a/src/models/bulkTransfer/bulkTransferStateChange.js +++ b/src/models/bulkTransfer/bulkTransferStateChange.js @@ -25,14 +25,14 @@ const Db = require('../../lib/db') const Logger = require('@mojaloop/central-services-logger') +const { rethrow } = require('@mojaloop/central-services-shared').Util const create = async (stateChange) => { Logger.isDebugEnabled && Logger.debug('save bulkTransferStateChange' + stateChange.toString()) try { return await Db.from('bulkTransferStateChange').insert(stateChange) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -47,8 +47,7 @@ const getByBulkTransferId = async (id) => { return result }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -64,8 +63,7 @@ const getByTransferId = async (id) => { return result }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/bulkTransfer/facade.js b/src/models/bulkTransfer/facade.js index 230050872..44f26f35e 100644 --- a/src/models/bulkTransfer/facade.js +++ b/src/models/bulkTransfer/facade.js @@ -27,11 +27,11 @@ * @module src/models/transfer/facade/ */ -const Logger = require('@mojaloop/central-services-logger') const Db = require('../../lib/db') const Enum = require('@mojaloop/central-services-shared').Enum const Time = require('@mojaloop/central-services-shared').Util.Time // const BulkTransferAssociation = require('./BulkTransferAssociation') +const { rethrow } = require('@mojaloop/central-services-shared').Util const saveBulkTransferReceived = async (payload, participants, stateReason = null, isValid = true) => { try { @@ -66,8 +66,7 @@ const saveBulkTransferReceived = async (payload, participants, stateReason = nul return state }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -105,8 +104,7 @@ const saveBulkTransferProcessing = async (payload, stateReason = null, isValid = return state }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -149,8 +147,7 @@ const saveBulkTransferErrorProcessing = async (payload, stateReason = null, isVa return state }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -186,8 +183,7 @@ const saveBulkTransferAborting = async (payload, stateReason = null) => { return state }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/bulkTransfer/individualTransfer.js b/src/models/bulkTransfer/individualTransfer.js index 87a2d3a54..89f923fff 100644 --- a/src/models/bulkTransfer/individualTransfer.js +++ b/src/models/bulkTransfer/individualTransfer.js @@ -24,7 +24,7 @@ 'use strict' const Db = require('../../lib/db') -const Logger = require('@mojaloop/central-services-logger') +const { rethrow } = require('@mojaloop/central-services-shared').Util const getAllById = async (id) => { try { @@ -54,8 +54,7 @@ const getAllById = async (id) => { return result }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/fxTransfer/duplicateCheck.js b/src/models/fxTransfer/duplicateCheck.js index aba6f3e58..2f663e24c 100644 --- a/src/models/fxTransfer/duplicateCheck.js +++ b/src/models/fxTransfer/duplicateCheck.js @@ -1,8 +1,8 @@ -const ErrorHandler = require('@mojaloop/central-services-error-handling') const Metrics = require('@mojaloop/central-services-metrics') const Db = require('../../lib/db') const { logger } = require('../../shared/logger') const { TABLE_NAMES } = require('../../shared/constants') +const { rethrow } = require('@mojaloop/central-services-shared').Util const histName = 'model_fx_transfer' @@ -20,7 +20,7 @@ const getOneByCommitRequestId = async ({ commitRequestId, table, queryName }) => return result } catch (err) { histTimerEnd({ success: false, queryName }) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -38,7 +38,7 @@ const saveCommitRequestIdAndHash = async ({ commitRequestId, hash, table, queryN return result } catch (err) { histTimerEnd({ success: false, queryName }) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/fxTransfer/fxTransfer.js b/src/models/fxTransfer/fxTransfer.js index a4937f188..e5508e680 100644 --- a/src/models/fxTransfer/fxTransfer.js +++ b/src/models/fxTransfer/fxTransfer.js @@ -10,6 +10,7 @@ const Db = require('../../lib/db') const participant = require('../participant/facade') const ParticipantCachedModel = require('../participant/participantCached') const TransferExtensionModel = require('./fxTransferExtension') +const { rethrow } = require('@mojaloop/central-services-shared').Util const { TransferInternalState } = Enum.Transfers @@ -54,7 +55,7 @@ const getByIdLight = async (id) => { .first() }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -128,7 +129,7 @@ const getAllDetailsByCommitRequestId = async (commitRequestId) => { }) } catch (err) { logger.warn('error in getAllDetailsByCommitRequestId', err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -202,7 +203,7 @@ const getAllDetailsByCommitRequestIdForProxiedFxTransfer = async (commitRequestI }) } catch (err) { logger.warn('error in getAllDetailsByCommitRequestIdForProxiedFxTransfer', err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -334,7 +335,7 @@ const savePreparedRequest = async ( histTimerSaveTranferTransactionValidationPassedEnd({ success: true, queryName: 'facade_saveFxTransferPrepared_transaction' }) } catch (err) { histTimerSaveTranferTransactionValidationPassedEnd({ success: false, queryName: 'facade_saveFxTransferPrepared_transaction' }) - throw err + rethrow.rethrowDatabaseError(err) } }) } else { @@ -380,7 +381,7 @@ const savePreparedRequest = async ( } catch (err) { logger.warn('error in savePreparedRequest', err) histTimerSaveFxTransferEnd({ success: false, queryName: 'transfer_model_facade_saveTransferPrepared' }) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -518,7 +519,7 @@ const saveFxFulfilResponse = async (commitRequestId, payload, action, fspiopErro } catch (err) { histTFxFulfilResponseValidationPassedEnd({ success: false, queryName: 'facade_saveFxFulfilResponse_transaction' }) logger.error('saveFxFulfilResponse::failure') - throw err + rethrow.rethrowDatabaseError(err) } }) histTimerSaveFulfilResponseEnd({ success: true, queryName: 'facade_saveFulfilResponse' }) @@ -526,7 +527,7 @@ const saveFxFulfilResponse = async (commitRequestId, payload, action, fspiopErro } catch (err) { logger.warn('error in saveFxFulfilResponse', err) histTimerSaveFulfilResponseEnd({ success: false, queryName: 'facade_saveFulfilResponse' }) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -541,7 +542,7 @@ const updateFxPrepareReservedForwarded = async function (commitRequestId) { createdDate: Time.getUTCString(new Date()) }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -560,7 +561,7 @@ const getFxTransferParticipant = async (participantName, commitRequestId) => { ) }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/fxTransfer/fxTransferError.js b/src/models/fxTransfer/fxTransferError.js index 95758c12e..960ec5788 100644 --- a/src/models/fxTransfer/fxTransferError.js +++ b/src/models/fxTransfer/fxTransferError.js @@ -29,7 +29,7 @@ */ const Db = require('../../lib/db') -const Logger = require('@mojaloop/central-services-logger') +const { rethrow } = require('@mojaloop/central-services-shared').Util const getByCommitRequestId = async (id) => { try { @@ -43,8 +43,7 @@ const getByCommitRequestId = async (id) => { fxTransferError.errorCode = fxTransferError.errorCode.toString() return fxTransferError } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/fxTransfer/fxTransferExtension.js b/src/models/fxTransfer/fxTransferExtension.js index 4ddaac313..540c43e6b 100644 --- a/src/models/fxTransfer/fxTransferExtension.js +++ b/src/models/fxTransfer/fxTransferExtension.js @@ -26,13 +26,13 @@ 'use strict' const Db = require('../../lib/db') -const ErrorHandler = require('@mojaloop/central-services-error-handling') +const { rethrow } = require('@mojaloop/central-services-shared').Util const getByCommitRequestId = async (commitRequestId, isFulfilment = false, isError = false) => { try { return await Db.from('fxTransferExtension').find({ commitRequestId, isFulfilment, isError }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/fxTransfer/fxTransferTimeout.js b/src/models/fxTransfer/fxTransferTimeout.js index a7c175400..a1bab25c4 100644 --- a/src/models/fxTransfer/fxTransferTimeout.js +++ b/src/models/fxTransfer/fxTransferTimeout.js @@ -28,6 +28,7 @@ const Db = require('../../lib/db') const Logger = require('@mojaloop/central-services-logger') const Enum = require('@mojaloop/central-services-shared').Enum const TS = Enum.Transfers.TransferInternalState +const { rethrow } = require('@mojaloop/central-services-shared').Util const cleanup = async () => { Logger.isDebugEnabled && Logger.debug('cleanup fxTransferTimeout') @@ -58,8 +59,7 @@ const cleanup = async () => { }) return ttIdList } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/fxTransfer/stateChange.js b/src/models/fxTransfer/stateChange.js index c87002b51..98c05ae89 100644 --- a/src/models/fxTransfer/stateChange.js +++ b/src/models/fxTransfer/stateChange.js @@ -1,8 +1,7 @@ -const ErrorHandler = require('@mojaloop/central-services-error-handling') const TransferError = require('../../models/transfer/transferError') const Db = require('../../lib/db') const { TABLE_NAMES } = require('../../shared/constants') -const { logger } = require('../../shared/logger') +const { rethrow } = require('@mojaloop/central-services-shared').Util const table = TABLE_NAMES.fxTransferStateChange @@ -22,7 +21,7 @@ const logTransferError = async (id, errorCode, errorDescription) => { // todo: check if stateChange is not null return TransferError.insert(id, stateChange.fxTransferStateChangeId, errorCode, errorDescription) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -35,8 +34,7 @@ const getLatest = async () => { .first() }) } catch (err) { - logger.error('getLatest::fxTransferStateChange', err) - throw err + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/fxTransfer/watchList.js b/src/models/fxTransfer/watchList.js index 88a66fd9c..74def7e79 100644 --- a/src/models/fxTransfer/watchList.js +++ b/src/models/fxTransfer/watchList.js @@ -26,20 +26,33 @@ const Db = require('../../lib/db') const { TABLE_NAMES } = require('../../shared/constants') const { logger } = require('../../shared/logger') +const { rethrow } = require('@mojaloop/central-services-shared').Util const getItemInWatchListByCommitRequestId = async (commitRequestId) => { logger.debug(`get item in watch list (commitRequestId=${commitRequestId})`) - return Db.from(TABLE_NAMES.fxWatchList).findOne({ commitRequestId }) + try { + return Db.from(TABLE_NAMES.fxWatchList).findOne({ commitRequestId }) + } catch (err) { + rethrow.rethrowDatabaseError(err) + } } const getItemsInWatchListByDeterminingTransferId = async (determiningTransferId) => { logger.debug(`get item in watch list (determiningTransferId=${determiningTransferId})`) - return Db.from(TABLE_NAMES.fxWatchList).find({ determiningTransferId }) + try { + return Db.from(TABLE_NAMES.fxWatchList).find({ determiningTransferId }) + } catch (err) { + rethrow.rethrowDatabaseError(err) + } } const addToWatchList = async (record) => { logger.debug('add to fx watch list', record) - return Db.from(TABLE_NAMES.fxWatchList).insert(record) + try { + return Db.from(TABLE_NAMES.fxWatchList).insert(record) + } catch (err) { + rethrow.rethrowDatabaseError(err) + } } module.exports = { diff --git a/src/models/ilpPackets/ilpPacket.js b/src/models/ilpPackets/ilpPacket.js index 358763bb7..495112b64 100644 --- a/src/models/ilpPackets/ilpPacket.js +++ b/src/models/ilpPackets/ilpPacket.js @@ -25,12 +25,12 @@ 'use strict' const Db = require('../../lib/db') -const ErrorHandler = require('@mojaloop/central-services-error-handling') +const { rethrow } = require('@mojaloop/central-services-shared').Util exports.getById = async (id) => { try { return await Db.from('ilpPacket').find({ transferId: id }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/ledgerAccountType/ledgerAccountType.js b/src/models/ledgerAccountType/ledgerAccountType.js index e1ad5264b..49c2affed 100644 --- a/src/models/ledgerAccountType/ledgerAccountType.js +++ b/src/models/ledgerAccountType/ledgerAccountType.js @@ -29,7 +29,7 @@ 'use strict' const Db = require('../../lib/db') -const ErrorHandler = require('@mojaloop/central-services-error-handling') +const { rethrow } = require('@mojaloop/central-services-shared').Util /* istanbul ignore next */ exports.getLedgerAccountByName = async (name, trx = null) => { @@ -43,7 +43,7 @@ exports.getLedgerAccountByName = async (name, trx = null) => { .transacting(trx) return ledgerAccountType.length > 0 ? ledgerAccountType[0] : null } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } if (trx) { @@ -52,7 +52,7 @@ exports.getLedgerAccountByName = async (name, trx = null) => { return knex.transaction(trxFunction) } } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -68,7 +68,7 @@ exports.getLedgerAccountsByName = async (names, trx = null) => { .transacting(trx) return ledgerAccountTypes } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } if (trx) { @@ -77,7 +77,7 @@ exports.getLedgerAccountsByName = async (names, trx = null) => { return knex.transaction(trxFunction) } } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -97,7 +97,7 @@ exports.bulkInsert = async (records, trx = null) => { .transacting(trx) return createdIds.map(record => record.ledgerAccountTypeId) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } if (trx) { @@ -106,7 +106,7 @@ exports.bulkInsert = async (records, trx = null) => { return knex.transaction(trxFunction) } } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -129,7 +129,7 @@ exports.create = async (name, description, isActive, isSettleable, trx = null) = .transacting(trx) return createdId[0].ledgerAccountTypeId } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } if (trx) { @@ -138,7 +138,7 @@ exports.create = async (name, description, isActive, isSettleable, trx = null) = return knex.transaction(trxFunction) } } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -146,6 +146,6 @@ exports.getAll = async () => { try { return await Db.from('ledgerAccountType').find({ }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/misc/segment.js b/src/models/misc/segment.js index 8c65002c8..cd2adcb11 100644 --- a/src/models/misc/segment.js +++ b/src/models/misc/segment.js @@ -25,13 +25,13 @@ 'use strict' const Db = require('../../lib/db') -const ErrorHandler = require('@mojaloop/central-services-error-handling') +const { rethrow } = require('@mojaloop/central-services-shared').Util const getByParams = async (params) => { try { return await Db.from('segment').findOne(params) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/participant/externalParticipant.js b/src/models/participant/externalParticipant.js index 1eb1a8854..c56159c5f 100644 --- a/src/models/participant/externalParticipant.js +++ b/src/models/participant/externalParticipant.js @@ -23,10 +23,10 @@ -------------- **********/ -const ErrorHandler = require('@mojaloop/central-services-error-handling') const Db = require('../../lib/db') const { logger } = require('../../shared/logger') const { TABLE_NAMES, DB_ERROR_CODES } = require('../../shared/constants') +const { rethrow } = require('@mojaloop/central-services-shared').Util const TABLE = TABLE_NAMES.externalParticipant const ID_FIELD = 'externalParticipantId' @@ -44,7 +44,7 @@ const create = async ({ name, proxyId }) => { return null } log.error('error in create', err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -55,7 +55,7 @@ const getAll = async (options = {}) => { return result } catch (err) /* istanbul ignore next */ { log.error('error in getAll:', err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -66,7 +66,7 @@ const getOneBy = async (criteria, options) => { return result } catch (err) /* istanbul ignore next */ { log.error('error in getOneBy:', err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } const getById = async (id, options = {}) => getOneBy({ [ID_FIELD]: id }, options) @@ -79,7 +79,7 @@ const destroyBy = async (criteria) => { return result } catch (err) /* istanbul ignore next */ { log.error('error in destroyBy', err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } const destroyById = async (id) => destroyBy({ [ID_FIELD]: id }) diff --git a/src/models/participant/externalParticipantCached.js b/src/models/participant/externalParticipantCached.js index 9086d8acd..2883ded72 100644 --- a/src/models/participant/externalParticipantCached.js +++ b/src/models/participant/externalParticipantCached.js @@ -23,10 +23,10 @@ -------------- **********/ -const ErrorHandler = require('@mojaloop/central-services-error-handling') const Metrics = require('@mojaloop/central-services-metrics') const cache = require('../../lib/cache') const externalParticipantModel = require('./externalParticipant') +const { rethrow } = require('@mojaloop/central-services-shared').Util let cacheClient let epAllCacheKey @@ -96,7 +96,7 @@ const getById = async (id) => { const cachedParticipants = await getExternalParticipantsCached() return cachedParticipants.indexById[id] } catch (err) /* istanbul ignore next */ { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowCachedDatabaseError(err) } } @@ -105,7 +105,7 @@ const getByName = async (name) => { const cachedParticipants = await getExternalParticipantsCached() return cachedParticipants.indexByName[name] } catch (err) /* istanbul ignore next */ { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowCachedDatabaseError(err) } } @@ -114,7 +114,7 @@ const getAll = async () => { const cachedParticipants = await getExternalParticipantsCached() return cachedParticipants.allExternalParticipants } catch (err) /* istanbul ignore next */ { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowCachedDatabaseError(err) } } @@ -125,7 +125,7 @@ const withInvalidate = (theFunctionName) => { await invalidateCache() return result } catch (err) /* istanbul ignore next */ { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowCachedDatabaseError(err) } } } diff --git a/src/models/participant/facade.js b/src/models/participant/facade.js index 936ff68eb..435d1cc81 100644 --- a/src/models/participant/facade.js +++ b/src/models/participant/facade.js @@ -42,6 +42,7 @@ const externalParticipantModelCached = require('../../models/participant/externa const Config = require('../../lib/config') const SettlementModelModel = require('../settlement/settlementModel') const { logger } = require('../../shared/logger') +const { rethrow } = require('@mojaloop/central-services-shared').Util const getByNameAndCurrency = async (name, currencyId, ledgerAccountTypeId, isCurrencyActive) => { const histTimerParticipantGetByNameAndCurrencyEnd = Metrics.getHistogram( @@ -105,7 +106,7 @@ const getByNameAndCurrency = async (name, currencyId, ledgerAccountTypeId, isCur return participant } catch (err) { histTimerParticipantGetByNameAndCurrencyEnd({ success: false, queryName: 'facade_getByNameAndCurrency' }) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -171,7 +172,7 @@ const getByIDAndCurrency = async (participantId, currencyId, ledgerAccountTypeId return participant } catch (err) { histTimerParticipantGetByIDAndCurrencyEnd({ success: false, queryName: 'facade_getByIDAndCurrency' }) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -193,7 +194,7 @@ const getParticipantLimitByParticipantIdAndCurrencyId = async (participantId, cu ) }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -243,7 +244,7 @@ const getLimitsForAllParticipants = async (currencyId, type, ledgerAccountTypeId ) }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -272,7 +273,7 @@ const getEndpoint = async (participantId, endpointType) => { 'et.name') }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -299,7 +300,7 @@ const getAllEndpoints = async (participantId) => { 'et.name') }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -354,7 +355,7 @@ const addEndpoint = async (participantId, endpoint) => { return newEndpoint }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -426,7 +427,7 @@ const getParticipantLimitByParticipantCurrencyLimit = async (participantId, curr histGetParticipantLimitEnd({ success: true, queryName: 'facade_getParticipantLimitByParticipantCurrencyLimit' }) return participantLimit } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -448,7 +449,7 @@ const getParticipantPositionByParticipantIdAndCurrencyId = async (participantId, ) }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } /** @@ -541,7 +542,7 @@ const addLimitAndInitialPosition = async (participantCurrencyId, settlementAccou return true }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -598,7 +599,7 @@ const adjustLimits = async (participantCurrencyId, limit, trx) => { participantLimit: newLimit } } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -609,7 +610,7 @@ const adjustLimits = async (participantCurrencyId, limit, trx) => { return knex.transaction(trxFunction) } } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -645,7 +646,7 @@ const getParticipantLimitsByCurrencyId = async (participantCurrencyId, type) => ).orderBy('lt.name') }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -685,7 +686,7 @@ const getParticipantLimitsByParticipantId = async (participantId, type, ledgerAc ).orderBy('pc.currencyId', 'lt.name') }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -718,7 +719,7 @@ const addHubAccountAndInitPosition = async (participantId, currencyId, ledgerAcc } }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -745,7 +746,7 @@ const getAllAccountsByNameAndCurrency = async (name, currencyId = null, isAccoun .select('*', 'lap.name AS ledgerAccountType', 'participantCurrency.isActive AS accountIsActive') }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -763,7 +764,7 @@ const getAllNonHubParticipantsWithCurrencies = async (trx) => { return res } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } if (trx) { @@ -772,7 +773,7 @@ const getAllNonHubParticipantsWithCurrencies = async (trx) => { return knex.transaction(trxFunction) } } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/participant/participant.js b/src/models/participant/participant.js index 5f47cd836..822a88137 100644 --- a/src/models/participant/participant.js +++ b/src/models/participant/participant.js @@ -28,14 +28,14 @@ 'use strict' const Db = require('../../lib/db') -const ErrorHandler = require('@mojaloop/central-services-error-handling') +const { rethrow } = require('@mojaloop/central-services-shared').Util exports.getAll = async () => { try { const result = await Db.from('participant').find({}, { order: 'name asc' }) return result } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -48,7 +48,7 @@ exports.create = async (participant) => { }) return result } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -57,7 +57,7 @@ exports.update = async (participant, isActive) => { const result = await Db.from('participant').update({ participantId: participant.participantId }, { isActive }) return result } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -66,7 +66,7 @@ exports.destroyByName = async (name) => { const result = await Db.from('participant').destroy({ name }) return result } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -75,6 +75,6 @@ exports.destroyParticipantEndpointByParticipantId = async (participantId) => { const result = Db.from('participantEndpoint').destroy({ participantId }) return result } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/participant/participantCached.js b/src/models/participant/participantCached.js index 0660e552d..e4d62e221 100644 --- a/src/models/participant/participantCached.js +++ b/src/models/participant/participantCached.js @@ -24,10 +24,10 @@ 'use strict' -const ErrorHandler = require('@mojaloop/central-services-error-handling') const Cache = require('../../lib/cache') const ParticipantModel = require('../../models/participant/participant') const Metrics = require('@mojaloop/central-services-metrics') +const { rethrow } = require('@mojaloop/central-services-shared').Util let cacheClient let participantsAllCacheKey @@ -109,7 +109,7 @@ exports.getById = async (id) => { const cachedParticipants = await getParticipantsCached() return cachedParticipants.indexById[id] } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowCachedDatabaseError(err) } } @@ -118,7 +118,7 @@ exports.getByName = async (name) => { const cachedParticipants = await getParticipantsCached() return cachedParticipants.indexByName[name] } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowCachedDatabaseError(err) } } @@ -127,7 +127,7 @@ exports.getAll = async () => { const cachedParticipants = await getParticipantsCached() return cachedParticipants.allParticipants } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowCachedDatabaseError(err) } } @@ -138,7 +138,7 @@ const withInvalidate = (theFunctionName) => { await exports.invalidateParticipantsCache() return result } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowCachedDatabaseError(err) } } } diff --git a/src/models/participant/participantCurrency.js b/src/models/participant/participantCurrency.js index 870dd1680..5f7bbc9c7 100644 --- a/src/models/participant/participantCurrency.js +++ b/src/models/participant/participantCurrency.js @@ -25,7 +25,7 @@ 'use strict' const Db = require('../../lib/db') -const ErrorHandler = require('@mojaloop/central-services-error-handling') +const { rethrow } = require('@mojaloop/central-services-shared').Util exports.create = async (participantId, currencyId, ledgerAccountTypeId, isActive = true) => { try { @@ -37,7 +37,7 @@ exports.create = async (participantId, currencyId, ledgerAccountTypeId, isActive createdBy: 'unknown' }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -45,7 +45,7 @@ exports.getAll = async () => { try { return await Db.from('participantCurrency').find({}, { order: 'participantCurrencyId asc' }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -53,7 +53,7 @@ exports.getById = async (id) => { try { return await Db.from('participantCurrency').findOne({ participantCurrencyId: id }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -61,7 +61,7 @@ exports.update = async (participantCurrencyId, isActive) => { try { return await Db.from('participantCurrency').update({ participantCurrencyId }, { isActive }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -73,7 +73,7 @@ exports.getByParticipantId = async (id, ledgerAccountTypeId = null) => { } return await Db.from('participantCurrency').find(params) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -81,7 +81,7 @@ exports.destroyByParticipantId = async (id) => { try { return await Db.from('participantCurrency').destroy({ participantId: id }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -90,6 +90,6 @@ exports.getByName = async (accountParams) => { const participantCurrency = await Db.from('participantCurrency').findOne(accountParams) return participantCurrency } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/participant/participantCurrencyCached.js b/src/models/participant/participantCurrencyCached.js index 9ae8a4933..47ef18eb2 100644 --- a/src/models/participant/participantCurrencyCached.js +++ b/src/models/participant/participantCurrencyCached.js @@ -24,11 +24,11 @@ 'use strict' -const ErrorHandler = require('@mojaloop/central-services-error-handling') const Cache = require('../../lib/cache') const Config = require('../../../src/lib/config') const ParticipantCurrencyModel = require('../../models/participant/participantCurrency') const Metrics = require('@mojaloop/central-services-metrics') +const { rethrow } = require('@mojaloop/central-services-shared').Util let cacheClient let participantCurrencyAllCacheKey @@ -159,7 +159,7 @@ const withInvalidate = (theFunctionName) => { await exports.invalidateParticipantCurrencyCache() return result } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowCachedDatabaseError(err) } } } diff --git a/src/models/participant/participantLimit.js b/src/models/participant/participantLimit.js index e228918ea..6a57811f8 100644 --- a/src/models/participant/participantLimit.js +++ b/src/models/participant/participantLimit.js @@ -30,14 +30,13 @@ const Db = require('../../lib/db') const ParticipantCurrencyModel = require('./participantCurrencyCached') -const Logger = require('@mojaloop/central-services-logger') +const { rethrow } = require('@mojaloop/central-services-shared').Util const insert = async (participantLimit) => { try { return await Db.from('participantLimit').insert(participantLimit) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -45,8 +44,7 @@ const update = async (participantLimit) => { try { return await Db.from('participantLimit').update({ participantCurrencyId: participantLimit.participantCurrencyId }, { value: participantLimit.value, isActive: participantLimit.isActive }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -54,8 +52,7 @@ const getAll = async () => { try { return await Db.from('participantLimit').find({}) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -75,8 +72,7 @@ const getByParticipantCurrencyId = async (participantCurrencyId) => { try { return Db.from('participantLimit').findOne({ participantCurrencyId, isActive: 1 }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -96,8 +92,7 @@ const destroyByParticipantCurrencyId = async (participantCurrencyId) => { try { return Db.from('participantLimit').destroy({ participantCurrencyId }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -121,8 +116,7 @@ const destroyByParticipantId = async (participantId) => { .whereIn('participantCurrencyId', participantCurrencyIdList) .del() } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/participant/participantLimitCached.js b/src/models/participant/participantLimitCached.js index dd6c64d1d..287487222 100644 --- a/src/models/participant/participantLimitCached.js +++ b/src/models/participant/participantLimitCached.js @@ -24,10 +24,10 @@ 'use strict' -const ErrorHandler = require('@mojaloop/central-services-error-handling') const Cache = require('../../lib/cache') const ParticipantLimitModel = require('../../models/participant/participantLimit') const Metrics = require('@mojaloop/central-services-metrics') +const { rethrow } = require('@mojaloop/central-services-shared').Util let cacheClient let participantLimitAllCacheKey @@ -113,7 +113,7 @@ const withInvalidate = (theFunctionName) => { await exports.invalidateParticipantLimitCache() return result } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowCachedDatabaseError(err) } } } diff --git a/src/models/participant/participantPosition.js b/src/models/participant/participantPosition.js index 469ba9844..ffa74a3ed 100644 --- a/src/models/participant/participantPosition.js +++ b/src/models/participant/participantPosition.js @@ -34,8 +34,7 @@ const Db = require('../../lib/db') const ParticipantCurrencyModel = require('./participantCurrencyCached') -const Logger = require('@mojaloop/central-services-logger') -const ErrorHandler = require('@mojaloop/central-services-error-handling') +const { rethrow } = require('@mojaloop/central-services-shared').Util /** * @function GetByParticipantCurrencyId @@ -53,8 +52,7 @@ const getByParticipantCurrencyId = async (participantCurrencyId) => { try { return Db.from('participantPosition').findOne({ participantCurrencyId }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -74,8 +72,7 @@ const destroyByParticipantCurrencyId = async (participantCurrencyId) => { try { return Db.from('participantPosition').destroy({ participantCurrencyId }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -99,8 +96,7 @@ const destroyByParticipantId = async (participantId) => { .whereIn('participantCurrencyId', participantCurrencyIdList) .del() } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -113,7 +109,7 @@ const createParticipantPositionRecords = async (participantPositions, trx) => { .batchInsert('participantPosition', participantPositions) .transacting(trx) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } if (trx) { @@ -122,7 +118,7 @@ const createParticipantPositionRecords = async (participantPositions, trx) => { return knex.transaction(trxFunction) } } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } module.exports = { diff --git a/src/models/participant/participantPositionChange.js b/src/models/participant/participantPositionChange.js index a6902c1ba..7f6cc5227 100644 --- a/src/models/participant/participantPositionChange.js +++ b/src/models/participant/participantPositionChange.js @@ -29,8 +29,8 @@ */ const Db = require('../../lib/db') -const Logger = require('@mojaloop/central-services-logger') const Metrics = require('@mojaloop/central-services-metrics') +const { rethrow } = require('@mojaloop/central-services-shared').Util /** * @function getByParticipantPositionId @@ -61,9 +61,8 @@ const getByParticipantPositionId = async (participantPositionId) => { return result }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) histTimer({ success: false, queryName: 'model_getByParticipantPositionId', hit: false }) - throw err + rethrow.rethrowDatabaseError(err) } } module.exports = { diff --git a/src/models/position/batch.js b/src/models/position/batch.js index 39f9f330a..d35676d59 100644 --- a/src/models/position/batch.js +++ b/src/models/position/batch.js @@ -31,9 +31,9 @@ 'use strict' const Db = require('../../lib/db') -const Logger = require('@mojaloop/central-services-logger') const TransferExtensionModel = require('../transfer/transferExtension') const { Enum } = require('@mojaloop/central-services-shared') +const { rethrow } = require('@mojaloop/central-services-shared').Util const startDbTransaction = async () => { const knex = await Db.getKnex() @@ -58,8 +58,7 @@ const getLatestTransferStateChangesByTransferIdList = async (trx, transfersIdLis } return latestTransferStateChanges } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -80,8 +79,7 @@ const getLatestFxTransferStateChangesByCommitRequestIdList = async (trx, commitR } return latestFxTransferStateChanges } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -150,8 +148,7 @@ const getTransferInfoList = async (trx, transferIds, transferParticipantRoleType } return info } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -204,8 +201,7 @@ const getTransferByIdsForReserve = async (trx, transferIds) => { } return transfers } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } return {} @@ -233,8 +229,7 @@ const getFxTransferInfoList = async (trx, commitRequestId, transferParticipantRo } return info } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -264,8 +259,7 @@ const getReservedPositionChangesByCommitRequestIds = async (trx, commitRequestId } return info } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/position/batchCached.js b/src/models/position/batchCached.js index 4adcd5a54..907599e1e 100644 --- a/src/models/position/batchCached.js +++ b/src/models/position/batchCached.js @@ -30,10 +30,10 @@ 'use strict' -const ErrorHandler = require('@mojaloop/central-services-error-handling') const Cache = require('../../lib/cache') const Metrics = require('@mojaloop/central-services-metrics') const BatchPositionModel = require('./batch') +const { rethrow } = require('@mojaloop/central-services-shared').Util let cacheClient let participantCurrencyAllCacheKey @@ -116,7 +116,7 @@ exports.getParticipantCurrencyByIds = async (trx, participantCurrencyIds) => { } return participantCurrencies } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowCachedDatabaseError(err) } } @@ -129,6 +129,6 @@ exports.getParticipantCurrencyByParticipantIds = async (trx, participantIds) => } return participantCurrencies } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowCachedDatabaseError(err) } } diff --git a/src/models/position/facade.js b/src/models/position/facade.js index 12a36100d..6b4cb013e 100644 --- a/src/models/position/facade.js +++ b/src/models/position/facade.js @@ -39,6 +39,7 @@ const Time = require('@mojaloop/central-services-shared').Util.Time const MLNumber = require('@mojaloop/ml-number') const ErrorHandler = require('@mojaloop/central-services-error-handling') const Config = require('../../lib/config') +const { rethrow } = require('@mojaloop/central-services-shared').Util const Metrics = require('@mojaloop/central-services-metrics') @@ -247,7 +248,7 @@ const prepareChangeParticipantPositionTransaction = async (transferList) => { } catch (err) { Logger.isErrorEnabled && Logger.error(err) histTimerChangeParticipantPositionTransEnd({ success: false, queryName: 'facade_prepareChangeParticipantPositionTransaction_transaction' }) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } }) const preparedMessagesList = Array.from(transferIdList.map(transferId => @@ -260,7 +261,7 @@ const prepareChangeParticipantPositionTransaction = async (transferList) => { } catch (err) { Logger.isErrorEnabled && Logger.error(err) histTimerChangeParticipantPositionEnd({ success: false, queryName: 'facade_prepareChangeParticipantPositionTransaction' }) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -302,14 +303,13 @@ const changeParticipantPositionTransaction = async (participantCurrencyId, isRev await knex('participantPositionChange').transacting(trx).insert(participantPositionChange) histTimerChangeParticipantPositionTransactionEnd({ success: true, queryName: 'facade_changeParticipantPositionTransaction' }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } }).catch((err) => { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -347,7 +347,7 @@ const getByNameAndCurrency = async (name, ledgerAccountTypeId, currencyId = null 'pc.currencyId') }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -372,7 +372,7 @@ const getAllByNameAndCurrency = async (name, currencyId = null) => { ) }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/position/participantPosition.js b/src/models/position/participantPosition.js index d01d262d2..e09e061c5 100644 --- a/src/models/position/participantPosition.js +++ b/src/models/position/participantPosition.js @@ -25,14 +25,13 @@ 'use strict' const Db = require('../../lib/db') -const Logger = require('@mojaloop/central-services-logger') +const { rethrow } = require('@mojaloop/central-services-shared').Util const insert = async (participantPosition) => { try { return await Db.from('participantPosition').insert(participantPosition) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -40,8 +39,7 @@ const update = async (participantPosition) => { try { return await Db.from('participantPosition').update({ participantCurrencyId: participantPosition.participantCurrencyId }, { value: participantPosition.value, reservedValue: participantPosition.reservedValue, changedDate: new Date() }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -49,8 +47,7 @@ const getPositionByCurrencyId = async (participantCurrencyId) => { try { return await Db.from('participantPosition').findOne({ participantCurrencyId }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/position/participantPositionChanges.js b/src/models/position/participantPositionChanges.js index 178042c3d..737c17e71 100644 --- a/src/models/position/participantPositionChanges.js +++ b/src/models/position/participantPositionChanges.js @@ -25,8 +25,8 @@ 'use strict' const Db = require('../../lib/db') -const Logger = require('@mojaloop/central-services-logger') const Enum = require('@mojaloop/central-services-shared').Enum +const { rethrow } = require('@mojaloop/central-services-shared').Util const getReservedPositionChangesByCommitRequestId = async (commitRequestId) => { try { @@ -40,8 +40,7 @@ const getReservedPositionChangesByCommitRequestId = async (commitRequestId) => { ) return participantPositionChanges } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -57,8 +56,7 @@ const getReservedPositionChangesByTransferId = async (transferId) => { ) return participantPositionChanges } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/settlement/settlementModel.js b/src/models/settlement/settlementModel.js index 6d8a3a301..0ad1b863f 100644 --- a/src/models/settlement/settlementModel.js +++ b/src/models/settlement/settlementModel.js @@ -26,7 +26,7 @@ 'use strict' const Db = require('../../lib/db') -const ErrorHandler = require('@mojaloop/central-services-error-handling') +const { rethrow } = require('@mojaloop/central-services-shared').Util /* istanbul ignore next */ exports.create = async (name, isActive, settlementGranularityId, settlementInterchangeId, settlementDelayId, currencyId, requireLiquidityCheck, ledgerAccountTypeId, settlementAccountTypeId, autoPositionReset, trx = null) => { @@ -49,7 +49,7 @@ exports.create = async (name, isActive, settlementGranularityId, settlementInter }) .transacting(trx) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } if (trx) { @@ -58,7 +58,7 @@ exports.create = async (name, isActive, settlementGranularityId, settlementInter return knex.transaction(trxFunction) } } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } /* istanbul ignore next */ @@ -73,7 +73,7 @@ exports.getByName = async (name, trx = null) => { .transacting(trx) return result.length > 0 ? result[0] : null } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } if (trx) { @@ -82,21 +82,21 @@ exports.getByName = async (name, trx = null) => { return knex.transaction(trxFunction) } } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } exports.getAll = async () => { try { return await Db.from('settlementModel').find({ isActive: 1 }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } exports.update = async (settlementModel, isActive) => { try { return await Db.from('settlementModel').update({ settlementModelId: settlementModel.settlementModelId }, { isActive }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -112,7 +112,7 @@ exports.getSettlementModelsByName = async (names, trx = null) => { .transacting(trx) return settlementModelNames } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } if (trx) { @@ -121,6 +121,6 @@ exports.getSettlementModelsByName = async (names, trx = null) => { return knex.transaction(trxFunction) } } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/settlement/settlementModelCached.js b/src/models/settlement/settlementModelCached.js index 7a1f36769..09f3f20cf 100644 --- a/src/models/settlement/settlementModelCached.js +++ b/src/models/settlement/settlementModelCached.js @@ -24,10 +24,10 @@ 'use strict' -const ErrorHandler = require('@mojaloop/central-services-error-handling') const Cache = require('../../lib/cache') const SettlementModel = require('../../models/settlement/settlementModel') const Metrics = require('@mojaloop/central-services-metrics') +const { rethrow } = require('@mojaloop/central-services-shared').Util let cacheClient let settlementModelsAllCacheKey @@ -107,7 +107,7 @@ exports.getById = async (id) => { const cachedSettlementModels = await getSettlementModelsCached() return cachedSettlementModels.indexById[id] } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowCachedDatabaseError(err) } } @@ -116,7 +116,7 @@ exports.getByName = async (name) => { const cachedSettlementModels = await getSettlementModelsCached() return cachedSettlementModels.indexByName[name] } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowCachedDatabaseError(err) } } @@ -125,7 +125,7 @@ exports.getByLedgerAccountTypeId = async (ledgerAccountTypeId) => { const cachedSettlementModels = await getSettlementModelsCached() return cachedSettlementModels.indexByLedgerAccountTypeId[ledgerAccountTypeId] } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowCachedDatabaseError(err) } } @@ -134,6 +134,6 @@ exports.getAll = async () => { const cachedSettlementModels = await getSettlementModelsCached() return cachedSettlementModels.allSettlementModels } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowCachedDatabaseError(err) } } diff --git a/src/models/transfer/facade.js b/src/models/transfer/facade.js index 06d2035fe..7943d07de 100644 --- a/src/models/transfer/facade.js +++ b/src/models/transfer/facade.js @@ -45,6 +45,7 @@ const Config = require('../../lib/config') const ParticipantFacade = require('../participant/facade') const ParticipantCachedModel = require('../participant/participantCached') const TransferExtensionModel = require('./transferExtension') +const { rethrow } = require('@mojaloop/central-services-shared').Util const TransferEventAction = Enum.Events.Event.Action const TransferInternalState = Enum.Transfers.TransferInternalState @@ -126,7 +127,7 @@ const getById = async (id) => { }) } catch (err) { logger.warn('error in transfer.getById', err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -179,7 +180,7 @@ const getByIdLight = async (id) => { }) } catch (err) { logger.warn('error in transfer.getByIdLight', err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -234,7 +235,7 @@ const getAll = async () => { }) } catch (err) { logger.warn('error in transfer.getAll', err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -261,7 +262,7 @@ const getTransferInfoToChangePosition = async (id, transferParticipantRoleTypeId }) } catch (err) { logger.warn('error in getTransferInfoToChangePosition', err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -403,7 +404,7 @@ const savePayeeTransferResponse = async (transferId, payload, action, fspiopErro } catch (err) { logger.error('savePayeeTransferResponse::failure', err) histTPayeeResponseValidationPassedEnd({ success: false, queryName: 'facade_saveTransferPrepared_transaction' }) - throw err + rethrow.rethrowDatabaseError(err) } }) histTimerSavePayeeTranferResponsedEnd({ success: true, queryName: 'facade_savePayeeTransferResponse' }) @@ -411,7 +412,7 @@ const savePayeeTransferResponse = async (transferId, payload, action, fspiopErro } catch (err) { logger.warn('error in savePayeeTransferResponse', err) histTimerSavePayeeTranferResponsedEnd({ success: false, queryName: 'facade_savePayeeTransferResponse' }) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -542,7 +543,7 @@ const saveTransferPrepared = async (payload, stateReason = null, hasPassedValida const knex = await Db.getKnex() if (hasPassedValidation) { - const histTimerSaveTranferTransactionValidationPassedEnd = Metrics.getHistogram( + const histTimerSaveTransferTransactionValidationPassedEnd = Metrics.getHistogram( 'model_transfer', 'facade_saveTransferPrepared_transaction - Metrics for transfer model', ['success', 'queryName'] @@ -567,14 +568,14 @@ const saveTransferPrepared = async (payload, stateReason = null, hasPassedValida } await knex('ilpPacket').transacting(trx).insert(ilpPacketRecord) await knex('transferStateChange').transacting(trx).insert(transferStateChangeRecord) - histTimerSaveTranferTransactionValidationPassedEnd({ success: true, queryName: 'facade_saveTransferPrepared_transaction' }) + histTimerSaveTransferTransactionValidationPassedEnd({ success: true, queryName: 'facade_saveTransferPrepared_transaction' }) } catch (err) { - histTimerSaveTranferTransactionValidationPassedEnd({ success: false, queryName: 'facade_saveTransferPrepared_transaction' }) - throw err + histTimerSaveTransferTransactionValidationPassedEnd({ success: false, queryName: 'facade_saveTransferPrepared_transaction' }) + rethrow.rethrowDatabaseError(err) } }) } else { - const histTimerSaveTranferNoValidationEnd = Metrics.getHistogram( + const histTimerSaveTransferNoValidationEnd = Metrics.getHistogram( 'model_transfer', 'facade_saveTransferPrepared_no_validation - Metrics for transfer model', ['success', 'queryName'] @@ -584,13 +585,13 @@ const saveTransferPrepared = async (payload, stateReason = null, hasPassedValida await knex('transferParticipant').insert(payerTransferParticipantRecord) } catch (err) { logger.warn('Payer transferParticipant insert error', err) - histTimerSaveTranferNoValidationEnd({ success: false, queryName: 'facade_saveTransferPrepared_no_validation' }) + histTimerSaveTransferNoValidationEnd({ success: false, queryName: 'facade_saveTransferPrepared_no_validation' }) } try { await knex('transferParticipant').insert(payeeTransferParticipantRecord) } catch (err) { logger.warn('Payee transferParticipant insert error:', err) - histTimerSaveTranferNoValidationEnd({ success: false, queryName: 'facade_saveTransferPrepared_no_validation' }) + histTimerSaveTransferNoValidationEnd({ success: false, queryName: 'facade_saveTransferPrepared_no_validation' }) } payerTransferParticipantRecord.name = payload.payerFsp payeeTransferParticipantRecord.name = payload.payeeFsp @@ -607,28 +608,28 @@ const saveTransferPrepared = async (payload, stateReason = null, hasPassedValida await knex.batchInsert('transferExtension', transferExtensionsRecordList) } catch (err) { logger.warn('batchInsert transferExtension error:', err) - histTimerSaveTranferNoValidationEnd({ success: false, queryName: 'facade_saveTransferPrepared_no_validation' }) + histTimerSaveTransferNoValidationEnd({ success: false, queryName: 'facade_saveTransferPrepared_no_validation' }) } } try { await knex('ilpPacket').insert(ilpPacketRecord) } catch (err) { logger.warn('ilpPacket insert error:', err) - histTimerSaveTranferNoValidationEnd({ success: false, queryName: 'facade_saveTransferPrepared_no_validation' }) + histTimerSaveTransferNoValidationEnd({ success: false, queryName: 'facade_saveTransferPrepared_no_validation' }) } try { await knex('transferStateChange').insert(transferStateChangeRecord) - histTimerSaveTranferNoValidationEnd({ success: true, queryName: 'facade_saveTransferPrepared_no_validation' }) + histTimerSaveTransferNoValidationEnd({ success: true, queryName: 'facade_saveTransferPrepared_no_validation' }) } catch (err) { logger.warn('transferStateChange insert error:', err) - histTimerSaveTranferNoValidationEnd({ success: false, queryName: 'facade_saveTransferPrepared_no_validation' }) + histTimerSaveTransferNoValidationEnd({ success: false, queryName: 'facade_saveTransferPrepared_no_validation' }) } } histTimerSaveTransferPreparedEnd({ success: true, queryName: 'transfer_model_facade_saveTransferPrepared' }) } catch (err) { logger.warn('error in saveTransferPrepared', err) histTimerSaveTransferPreparedEnd({ success: false, queryName: 'transfer_model_facade_saveTransferPrepared' }) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -669,7 +670,7 @@ const getTransferStateByTransferId = async (id) => { .first() }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -1093,10 +1094,10 @@ const timeoutExpireReserved = async (segmentId, intervalMin, intervalMax, fxSegm await knex('segment').transacting(trx).where({ segmentId: fxSegmentId }).update({ value: fxIntervalMax }) } } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } }).catch((err) => { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) }) const transferTimeoutList = await _getTransferTimeoutList(knex, transactionTimestamp) @@ -1107,7 +1108,7 @@ const timeoutExpireReserved = async (segmentId, intervalMin, intervalMax, fxSegm fxTransferTimeoutList } } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -1236,7 +1237,7 @@ const transferStateAndPositionUpdate = async function (param1, enums, trx = null return await knex.transaction(trxFunction) } } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -1251,7 +1252,7 @@ const updatePrepareReservedForwarded = async function (transferId) { createdDate: Time.getUTCString(new Date()) }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -1367,7 +1368,7 @@ const reconciliationTransferPrepare = async function (payload, transactionTimest } return 0 } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -1401,7 +1402,7 @@ const reconciliationTransferReserve = async function (payload, transactionTimest } return 0 } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -1452,7 +1453,7 @@ const reconciliationTransferCommit = async function (payload, transactionTimesta } return 0 } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -1502,7 +1503,7 @@ const reconciliationTransferAbort = async function (payload, transactionTimestam } return 0 } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -1521,7 +1522,7 @@ const getTransferParticipant = async (participantName, transferId) => { ) }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -1535,7 +1536,7 @@ const recordFundsIn = async (payload, transactionTimestamp, enums) => { await TransferFacade.reconciliationTransferCommit(payload, transactionTimestamp, enums, trx) } catch (err) { logger.error('error in recordFundsIn:', err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } }) } diff --git a/src/models/transfer/ilpPacket.js b/src/models/transfer/ilpPacket.js index 88f7c7a8a..d85b34ecb 100644 --- a/src/models/transfer/ilpPacket.js +++ b/src/models/transfer/ilpPacket.js @@ -29,7 +29,7 @@ const Db = require('../../lib/db') const Util = require('@mojaloop/central-services-shared').Util -const ErrorHandler = require('@mojaloop/central-services-error-handling') +const { rethrow } = require('@mojaloop/central-services-shared').Util exports.saveIlpPacket = async (record) => { try { @@ -38,7 +38,7 @@ exports.saveIlpPacket = async (record) => { value: record.value }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -46,7 +46,7 @@ exports.getByTransferId = async (transferId) => { try { return await Db.from('ilpPacket').findOne({ transferId }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -58,7 +58,7 @@ exports.update = async (record) => { try { return await Db.from('ilpPacket').update({ transferId: record.transferId }, Util.omitNil(fields)) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -66,6 +66,6 @@ exports.destroyByTransferId = async (record) => { try { return await Db.from('ilpPacket').destroy({ transferId: record.transferId }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/transfer/transfer.js b/src/models/transfer/transfer.js index ff4d24571..694cab657 100644 --- a/src/models/transfer/transfer.js +++ b/src/models/transfer/transfer.js @@ -26,13 +26,13 @@ const Db = require('../../lib/db') const Logger = require('@mojaloop/central-services-logger') -const ErrorHandler = require('@mojaloop/central-services-error-handling') +const { rethrow } = require('@mojaloop/central-services-shared').Util const getById = async (transferId) => { try { return await Db.from('transfer').findOne({ transferId }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -41,8 +41,7 @@ const saveTransfer = async (record) => { try { return Db.from('transfer').insert(record) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -50,7 +49,7 @@ const destroyById = async (id) => { try { await Db.from('transfer').destroy({ transferId: id }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -58,8 +57,7 @@ const truncateTransfer = async () => { try { return await Db.from('transfer').truncate() } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/transfer/transferDuplicateCheck.js b/src/models/transfer/transferDuplicateCheck.js index 35e121241..9d6fc28ff 100644 --- a/src/models/transfer/transferDuplicateCheck.js +++ b/src/models/transfer/transferDuplicateCheck.js @@ -30,8 +30,9 @@ const Db = require('../../lib/db') const Logger = require('@mojaloop/central-services-logger') -const ErrorHandler = require('@mojaloop/central-services-error-handling') const Metrics = require('@mojaloop/central-services-metrics') +const { rethrow } = require('@mojaloop/central-services-shared').Util + /** * @function GetTransferDuplicateCheck * @@ -56,7 +57,7 @@ const getTransferDuplicateCheck = async (transferId) => { return result } catch (err) { histTimerGetTransferDuplicateCheckEnd({ success: false, queryName: 'transferDuplicateCheck_getTransferDuplicateCheck' }) - throw new Error(err.message) + rethrow.rethrowDatabaseError(err) } } @@ -85,7 +86,7 @@ const saveTransferDuplicateCheck = async (transferId, hash) => { return result } catch (err) { histTimerSaveTransferDuplicateCheckEnd({ success: false, queryName: 'transferDuplicateCheck_saveTransferDuplicateCheck' }) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/transfer/transferError.js b/src/models/transfer/transferError.js index 43741e52b..85e91d34a 100644 --- a/src/models/transfer/transferError.js +++ b/src/models/transfer/transferError.js @@ -31,7 +31,7 @@ const Db = require('../../lib/db') const Logger = require('@mojaloop/central-services-logger') -const ErrorHandler = require('@mojaloop/central-services-error-handling') +const { rethrow } = require('@mojaloop/central-services-shared').Util /** * @function Insert @@ -51,7 +51,7 @@ const insert = async (transferId, transferStateChangeId, errorCode, errorDescrip try { return Db.from('transferError').insert({ transferId, transferStateChangeId, errorCode, errorDescription }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -80,7 +80,7 @@ const getByTransferStateChangeId = async (transferStateChangeId) => { try { return Db.from('transferError').find({ transferStateChangeId }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -117,8 +117,7 @@ const getByTransferId = async (id) => { transferError.errorCode = transferError.errorCode.toString() return transferError } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/transfer/transferErrorDuplicateCheck.js b/src/models/transfer/transferErrorDuplicateCheck.js index 06ab156b9..a8736f727 100644 --- a/src/models/transfer/transferErrorDuplicateCheck.js +++ b/src/models/transfer/transferErrorDuplicateCheck.js @@ -30,7 +30,7 @@ const Db = require('../../lib/db') const Logger = require('@mojaloop/central-services-logger') -const ErrorHandler = require('@mojaloop/central-services-error-handling') +const { rethrow } = require('@mojaloop/central-services-shared').Util /** * @function GetTransferFulfilmentDuplicateCheck @@ -48,7 +48,7 @@ const getTransferErrorDuplicateCheck = async (transferId) => { try { return Db.from('transferErrorDuplicateCheck').findOne({ transferId }) } catch (err) { - throw new Error(err.message) + rethrow.rethrowDatabaseError(err) } } @@ -69,7 +69,7 @@ const saveTransferErrorDuplicateCheck = async (transferId, hash) => { try { return Db.from('transferErrorDuplicateCheck').insert({ transferId, hash }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/transfer/transferExtension.js b/src/models/transfer/transferExtension.js index edc48f440..436af204c 100644 --- a/src/models/transfer/transferExtension.js +++ b/src/models/transfer/transferExtension.js @@ -28,13 +28,13 @@ 'use strict' const Db = require('../../lib/db') -const ErrorHandler = require('@mojaloop/central-services-error-handling') +const { rethrow } = require('@mojaloop/central-services-shared').Util const saveTransferExtension = async (extension) => { try { return await Db.from('transferExtension').insert(extension) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -42,7 +42,7 @@ const getByTransferId = async (transferId, isFulfilment = false, isError = false try { return await Db.from('transferExtension').find({ transferId, isFulfilment, isError }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -50,7 +50,7 @@ const getByTransferExtensionId = async (transferExtensionId) => { try { return await Db.from('transferExtension').findOne({ transferExtensionId }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -58,7 +58,7 @@ const destroyByTransferId = async (transferId) => { try { return await Db.from('transferExtension').destroy({ transferId }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/transfer/transferFulfilment.js b/src/models/transfer/transferFulfilment.js index 522db90b0..ffa149732 100644 --- a/src/models/transfer/transferFulfilment.js +++ b/src/models/transfer/transferFulfilment.js @@ -26,14 +26,14 @@ const Db = require('../../lib/db') const Logger = require('@mojaloop/central-services-logger') -const ErrorHandler = require('@mojaloop/central-services-error-handling') +const { rethrow } = require('@mojaloop/central-services-shared').Util const getByTransferId = async (transferId) => { Logger.isDebugEnabled && Logger.debug('getByTransferId ' + transferId.toString()) try { return await Db.from('transferFulfilment').find({ transferId }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } @@ -42,8 +42,7 @@ const saveTransferFulfilment = async (record) => { try { return await Db.from('transferFulfilment').insert(record) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/transfer/transferFulfilmentDuplicateCheck.js b/src/models/transfer/transferFulfilmentDuplicateCheck.js index 7ece58146..530d3c329 100644 --- a/src/models/transfer/transferFulfilmentDuplicateCheck.js +++ b/src/models/transfer/transferFulfilmentDuplicateCheck.js @@ -30,7 +30,7 @@ const Db = require('../../lib/db') const Logger = require('@mojaloop/central-services-logger') -const ErrorHandler = require('@mojaloop/central-services-error-handling') +const { rethrow } = require('@mojaloop/central-services-shared').Util /** * @function GetTransferFulfilmentDuplicateCheck @@ -48,7 +48,7 @@ const getTransferFulfilmentDuplicateCheck = async (transferId) => { try { return Db.from('transferFulfilmentDuplicateCheck').findOne({ transferId }) } catch (err) { - throw new Error(err.message) + rethrow.rethrowDatabaseError(err) } } @@ -69,7 +69,7 @@ const saveTransferFulfilmentDuplicateCheck = async (transferId, hash) => { try { return Db.from('transferFulfilmentDuplicateCheck').insert({ transferId, hash }) } catch (err) { - throw ErrorHandler.Factory.reformatFSPIOPError(err) + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/transfer/transferParticipant.js b/src/models/transfer/transferParticipant.js index bafbfa96b..aa40637c9 100644 --- a/src/models/transfer/transferParticipant.js +++ b/src/models/transfer/transferParticipant.js @@ -26,14 +26,14 @@ const Db = require('../../lib/db') const Logger = require('@mojaloop/central-services-logger') +const { rethrow } = require('@mojaloop/central-services-shared').Util const saveTransferParticipant = async (record) => { Logger.isDebugEnabled && Logger.debug('save transferParticipant' + record.toString()) try { return await Db.from('transferParticipant').insert(record) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/transfer/transferStateChange.js b/src/models/transfer/transferStateChange.js index ed7234bd2..9d064c54d 100644 --- a/src/models/transfer/transferStateChange.js +++ b/src/models/transfer/transferStateChange.js @@ -28,14 +28,14 @@ const Db = require('../../lib/db') const Logger = require('@mojaloop/central-services-logger') +const { rethrow } = require('@mojaloop/central-services-shared').Util const saveTransferStateChange = async (stateChange) => { Logger.isDebugEnabled && Logger.debug('save transferStateChange' + stateChange.toString()) try { return Db.from('transferStateChange').insert(stateChange) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -50,8 +50,7 @@ const getByTransferId = async (id) => { return result }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -63,8 +62,7 @@ const getByTransferIdList = async (transfersIdList) => { return result }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -77,8 +75,7 @@ const getLatest = async () => { .first() }) } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } @@ -86,8 +83,7 @@ const truncate = async () => { try { return await Db.from('transferStateChange').truncate() } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } diff --git a/src/models/transfer/transferTimeout.js b/src/models/transfer/transferTimeout.js index ac33b20cc..4675a9a4f 100644 --- a/src/models/transfer/transferTimeout.js +++ b/src/models/transfer/transferTimeout.js @@ -27,6 +27,7 @@ const Db = require('../../lib/db') const Logger = require('@mojaloop/central-services-logger') const Enum = require('@mojaloop/central-services-shared').Enum +const { rethrow } = require('@mojaloop/central-services-shared').Util const TS = Enum.Transfers.TransferInternalState const cleanup = async () => { @@ -58,8 +59,7 @@ const cleanup = async () => { }) return ttIdList } catch (err) { - Logger.isErrorEnabled && Logger.error(err) - throw err + rethrow.rethrowDatabaseError(err) } } diff --git a/test/unit/api/ledgerAccountTypes/handler.test.js b/test/unit/api/ledgerAccountTypes/handler.test.js index d25915311..812fd4120 100644 --- a/test/unit/api/ledgerAccountTypes/handler.test.js +++ b/test/unit/api/ledgerAccountTypes/handler.test.js @@ -30,10 +30,11 @@ const Logger = require('@mojaloop/central-services-logger') const Handler = require('../../../../src/api/ledgerAccountTypes/handler') const LedgerAccountTypeService = require('../../../../src/domain/ledgerAccountTypes') const ProxyCache = require('#src/lib/proxyCache') +const Metrics = require('@mojaloop/central-services-metrics') Test('LedgerAccountTypes', ledgerAccountTypesHandlerTest => { let sandbox - + Metrics._setupDefaultServiceMetrics() ledgerAccountTypesHandlerTest.beforeEach(test => { sandbox = Sinon.createSandbox() sandbox.stub(Logger) diff --git a/test/unit/api/participants/handler.test.js b/test/unit/api/participants/handler.test.js index 97a3694c2..a8a5c14a4 100644 --- a/test/unit/api/participants/handler.test.js +++ b/test/unit/api/participants/handler.test.js @@ -11,8 +11,10 @@ const FSPIOPError = require('@mojaloop/central-services-error-handling').Factory const SettlementModel = require('../../../../src/domain/settlement') const ProxyCache = require('#src/lib/proxyCache') const Config = require('#src/lib/config') +const Metrics = require('@mojaloop/central-services-metrics') const createRequest = ({ payload, params, query }) => { + Metrics._setupDefaultServiceMetrics() const sandbox = Sinon.createSandbox() const requestPayload = payload || {} const requestParams = params || {} @@ -34,7 +36,7 @@ const createRequest = ({ payload, params, query }) => { Test('Participant', participantHandlerTest => { let sandbox - + Metrics._setupDefaultServiceMetrics() const participantFixtures = [ { participantId: 1, diff --git a/test/unit/api/root/handler.test.js b/test/unit/api/root/handler.test.js index 0344998c3..d40c36a01 100644 --- a/test/unit/api/root/handler.test.js +++ b/test/unit/api/root/handler.test.js @@ -29,6 +29,7 @@ const Joi = require('joi') const Sinon = require('sinon') const Consumer = require('@mojaloop/central-services-stream').Util.Consumer +const Metrics = require('@mojaloop/central-services-metrics') const MigrationLockModel = require('../../../../src/models/misc/migrationLock') const ProxyCache = require('#src/lib/proxyCache') const Config = require('#src/lib/config') @@ -44,6 +45,8 @@ const requireUncached = module => { Test('Root', rootHandlerTest => { let sandbox + Metrics._setupDefaultServiceMetrics() + rootHandlerTest.beforeEach(test => { sandbox = Sinon.createSandbox() sandbox.stub(ProxyCache, 'getCache').returns({ diff --git a/test/unit/api/settlementModels/handler.test.js b/test/unit/api/settlementModels/handler.test.js index c67ae3b6a..c29e465a7 100644 --- a/test/unit/api/settlementModels/handler.test.js +++ b/test/unit/api/settlementModels/handler.test.js @@ -33,8 +33,10 @@ const SettlementService = require('../../../../src/domain/settlement') const EnumCached = require('../../../../src/lib/enumCached') const FSPIOPError = require('@mojaloop/central-services-error-handling').Factory.FSPIOPError const ProxyCache = require('#src/lib/proxyCache') +const Metrics = require('@mojaloop/central-services-metrics') const createRequest = ({ payload, params, query }) => { + Metrics._setupDefaultServiceMetrics() const sandbox = Sinon.createSandbox() const requestPayload = payload || {} const requestParams = params || {} diff --git a/test/unit/api/transactions/handler.test.js b/test/unit/api/transactions/handler.test.js index 4da65d1bc..2a542090b 100644 --- a/test/unit/api/transactions/handler.test.js +++ b/test/unit/api/transactions/handler.test.js @@ -29,9 +29,12 @@ const Sinon = require('sinon') const Handler = require('../../../../src/api/transactions/handler') const TransactionsService = require('../../../../src/domain/transactions') const ProxyCache = require('#src/lib/proxyCache') +const Metrics = require('@mojaloop/central-services-metrics') Test('IlpPackets', IlpPacketsHandlerTest => { let sandbox + Metrics._setupDefaultServiceMetrics() + const ilpPacket = [{ transferId: '6d3e964e-9a25-4ff5-a365-2cc5af348321', value: 'AQAAAAAAAADIEHByaXZhdGUucGF5ZWVmc3CCAiB7InRyYW5zYWN0aW9uSWQiOiIyZGY3NzRlMi1mMWRiLTRmZjctYTQ5NS0yZGRkMzdhZjdjMmMiLCJxdW90ZUlkIjoiMDNhNjA1NTAtNmYyZi00NTU2LThlMDQtMDcwM2UzOWI4N2ZmIiwicGF5ZWUiOnsicGFydHlJZEluZm8iOnsicGFydHlJZFR5cGUiOiJNU0lTRE4iLCJwYXJ0eUlkZW50aWZpZXIiOiIyNzcxMzgwMzkxMyIsImZzcElkIjoicGF5ZWVmc3AifSwicGVyc29uYWxJbmZvIjp7ImNvbXBsZXhOYW1lIjp7fX19LCJwYXllciI6eyJwYXJ0eUlkSW5mbyI6eyJwYXJ0eUlkVHlwZSI6Ik1TSVNETiIsInBhcnR5SWRlbnRpZmllciI6IjI3NzEzODAzOTExIiwiZnNwSWQiOiJwYXllcmZzcCJ9LCJwZXJzb25hbEluZm8iOnsiY29tcGxleE5hbWUiOnt9fX0sImFtb3VudCI6eyJjdXJyZW5jeSI6IlVTRCIsImFtb3VudCI6IjIwMCJ9LCJ0cmFuc2FjdGlvblR5cGUiOnsic2NlbmFyaW8iOiJERVBPU0lUIiwic3ViU2NlbmFyaW8iOiJERVBPU0lUIiwiaW5pdGlhdG9yIjoiUEFZRVIiLCJpbml0aWF0b3JUeXBlIjoiQ09OU1VNRVIiLCJyZWZ1bmRJbmZvIjp7fX19', diff --git a/test/unit/handlers/positions/handlerBatch.test.js b/test/unit/handlers/positions/handlerBatch.test.js index 605ad261e..8be174ff7 100644 --- a/test/unit/handlers/positions/handlerBatch.test.js +++ b/test/unit/handlers/positions/handlerBatch.test.js @@ -358,6 +358,29 @@ Test('Position handler', positionBatchHandlerTest => { } }) + positionsTest.test('handle no messages', async test => { + // Arrange + await Consumer.createHandler(topicName, config, command) + Kafka.transformGeneralTopicName.returns(topicName) + Kafka.getKafkaConfig.returns(config) + Kafka.proceed.returns(true) + + // Act + try { + await allTransferHandlers.positions(null, []) + test.ok(BatchPositionModel.startDbTransaction.notCalled, 'startDbTransaction should not be called') + test.ok(BinProcessor.processBins.notCalled, 'processBins should not be called') + test.ok(Kafka.proceed.notCalled, 'kafkaProceed should not be called') + test.ok(trxStub.commit.notCalled, 'trx.commit should not be called') + test.ok(trxStub.rollback.notCalled, 'trx.rollback should not be called') + test.ok(Kafka.produceGeneralMessage.notCalled, 'produceGeneralMessage should not be called') + test.end() + } catch (err) { + test.fail('Error should not be thrown') + test.end() + } + }) + positionsTest.test('rollback DB transaction and audit error if BinProcessor fails', async test => { // Arrange BinProcessor.processBins.rejects(new Error('BinProcessor failed'))