@mojaloop/central-ledger 19.14.0 → 20.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (394) hide show
  1. package/.grype.yaml +3 -0
  2. package/.license-scanner.json +16 -0
  3. package/.ncurc.yaml +19 -13
  4. package/.nvmrc +1 -1
  5. package/.nycrc.yml +14 -2
  6. package/CHANGELOG.md +51 -0
  7. package/Dockerfile +13 -10
  8. package/README.md +39 -89
  9. package/audit-ci.jsonc +1 -1
  10. package/config/default.json +60 -3
  11. package/config/deprecated.default-settlement.json +160 -0
  12. package/docker/ml-api-adapter/default.json +28 -0
  13. package/docker-compose.yml +6 -0
  14. package/nodemon.json +6 -0
  15. package/package.json +128 -64
  16. package/{sbom-v19.13.2.csv → sbom-v20.0.0.csv} +886 -736
  17. package/scripts/_wait4_all.js +5 -5
  18. package/scripts/transferSettlementTemp/interchangeFeeCalculation.js +51 -0
  19. package/src/api/index.ts +30 -0
  20. package/src/api/interface/swagger.json +2249 -2054
  21. package/src/api/participants/routes.js +1 -1
  22. package/src/api/root/handler.int.ts +55 -0
  23. package/src/api/routes.js +7 -6
  24. package/src/api/server.ts +27 -0
  25. package/src/api/server.unit.ts +16 -0
  26. package/src/api/settlementModels/routes.js +4 -4
  27. package/src/domain/participant/index.d.ts +47 -0
  28. package/src/domain/participant/index.int.ts +724 -0
  29. package/src/domain/participant/index.js +4 -5
  30. package/src/domain/position/fx-prepare.js +1 -1
  31. package/src/domain/position/fx-timeout-reserved.js +6 -0
  32. package/src/domain/position/prepare.js +1 -1
  33. package/src/handlers/admin/handler.js +1 -1
  34. package/src/handlers/index.js +30 -0
  35. package/src/handlers/positions/handler.js +0 -2
  36. package/src/handlers/positions/handlerBatch.js +5 -5
  37. package/src/handlers/register.js +44 -29
  38. package/src/handlers/timeouts/handler.js +1 -4
  39. package/src/handlers/transfers/fx-abort.int.ts +209 -0
  40. package/src/handlers/transfers/fx-handlers.int.ts +275 -0
  41. package/src/handlers/transfers/fx-timeout.int.ts +284 -0
  42. package/src/handlers/transfers/handler.js +1 -3
  43. package/src/handlers/transfers/handlers.int.ts +538 -0
  44. package/src/handlers/transfers/prepare.int.ts +1283 -0
  45. package/src/handlers/transfers/prepare.js +2 -2
  46. package/src/knexfile.js +19 -0
  47. package/src/lib/cache.js +1 -1
  48. package/src/lib/config/index.ts +60 -0
  49. package/src/lib/config/resolver.ts +231 -0
  50. package/src/lib/config/resolver.unit.ts +72 -0
  51. package/src/lib/config/types.ts +372 -0
  52. package/src/lib/config/util.ts +523 -0
  53. package/src/lib/config/util.unit.ts +825 -0
  54. package/src/lib/migrator.js +3 -3
  55. package/src/lib/proxyCache.js +3 -3
  56. package/{migrations → src/migrations}/100100_event.js +1 -1
  57. package/{migrations → src/migrations}/110100_contactType.js +1 -1
  58. package/{migrations → src/migrations}/110200_currency.js +1 -1
  59. package/{migrations → src/migrations}/110201_currency-scale.js +1 -1
  60. package/{migrations → src/migrations}/110300_endpointType.js +1 -1
  61. package/{migrations → src/migrations}/110400_ledgerEntryType.js +1 -1
  62. package/{migrations → src/migrations}/110450_ledgerAccountType.js +1 -1
  63. package/{migrations → src/migrations}/110500_participantLimitType.js +1 -1
  64. package/{migrations → src/migrations}/110600_transferParticipantRoleType.js +1 -1
  65. package/{migrations → src/migrations}/110700_transferState.js +1 -1
  66. package/{migrations → src/migrations}/110900_settlementState.js +1 -1
  67. package/{migrations → src/migrations}/112000_bulkTransferState.js +1 -1
  68. package/{migrations → src/migrations}/112100_bulkProcessingState.js +1 -1
  69. package/{migrations → src/migrations}/200100_participant.js +1 -1
  70. package/{migrations → src/migrations}/200200_participantContact.js +1 -1
  71. package/{migrations → src/migrations}/200300_participantEndpoint.js +1 -1
  72. package/{migrations → src/migrations}/200400_participantParty.js +1 -1
  73. package/{migrations → src/migrations}/200600_token.js +1 -1
  74. package/{migrations → src/migrations}/200601_token-indexes.js +1 -1
  75. package/{migrations → src/migrations}/300100_transferDuplicateCheck.js +2 -2
  76. package/{migrations → src/migrations}/300150_bulkTransferDuplicateCheck.js +2 -2
  77. package/{migrations → src/migrations}/300200_transfer.js +2 -2
  78. package/{migrations → src/migrations}/300202_transfer-decimal184.js +1 -1
  79. package/{migrations → src/migrations}/300250_bulkTransfer.js +2 -3
  80. package/{migrations → src/migrations}/300275_bulkTransferAssociation.js +2 -3
  81. package/{migrations → src/migrations}/300300_ilpPacket.js +1 -1
  82. package/{migrations → src/migrations}/300400_transferStateChange.js +1 -1
  83. package/{migrations → src/migrations}/300450_bulkTransferStateChange.js +1 -1
  84. package/{migrations → src/migrations}/300500_segment.js +1 -1
  85. package/{migrations → src/migrations}/310100_participantCurrency.js +1 -1
  86. package/{migrations → src/migrations}/310200_transferParticipant.js +1 -1
  87. package/{migrations → src/migrations}/310202_transferParticipant-decimal184.js +1 -1
  88. package/{migrations → src/migrations}/310204_transferParticipant-participantId.js +2 -2
  89. package/{migrations → src/migrations}/310300_participantPosition.js +1 -1
  90. package/{migrations → src/migrations}/310302_participantPosition-decimal184.js +1 -1
  91. package/{migrations → src/migrations}/310400_participantPositionChange.js +1 -1
  92. package/{migrations → src/migrations}/310402_participantPositionChange-decimal184.js +1 -1
  93. package/{migrations → src/migrations}/310403_participantPositionChange-participantCurrencyId.js +2 -2
  94. package/{migrations → src/migrations}/310404_participantPositionChange-change.js +2 -2
  95. package/{migrations → src/migrations}/310500_participantLimit.js +1 -1
  96. package/{migrations → src/migrations}/310502_participantLimit-decimal184.js +1 -1
  97. package/{migrations → src/migrations}/400100_settlementWindow.js +1 -1
  98. package/{migrations → src/migrations}/400200_settlement.js +1 -1
  99. package/{migrations → src/migrations}/400300_settlementSettlementWindow.js +1 -1
  100. package/{migrations → src/migrations}/400301_settlementSettlementWindow-indexes.js +0 -1
  101. package/{migrations → src/migrations}/400400_settlementWindowStateChange.js +1 -1
  102. package/{migrations → src/migrations}/400500_settlementTransferParticipant.js +1 -1
  103. package/{migrations → src/migrations}/400502_settlementTransferParticipant-decimal184.js +1 -1
  104. package/{migrations → src/migrations}/400600_settlementParticipantCurrency.js +1 -1
  105. package/{migrations → src/migrations}/400602_settlementParticipantCurrency-decimal184.js +1 -1
  106. package/{migrations → src/migrations}/400700_settlementParticipantCurrencyStateChange.js +1 -1
  107. package/{migrations → src/migrations}/400800_settlementStateChange.js +1 -1
  108. package/{migrations → src/migrations}/400900_settlementWindowContent.js +1 -1
  109. package/{migrations → src/migrations}/401000_settlementWindowContentStateChange.js +1 -1
  110. package/{migrations → src/migrations}/401001_settlementWindowContentStateChange-indexes.js +6 -6
  111. package/{migrations → src/migrations}/401200_settlementContentAggregation.js +1 -1
  112. package/{migrations → src/migrations}/401300_settlementModel.js +1 -1
  113. package/{migrations → src/migrations}/410100_transferFulfilmentDuplicateCheck.js +1 -1
  114. package/{migrations → src/migrations}/410102_transferFulfilmentDuplicateCheck-dropForeignTransferId.js +1 -1
  115. package/{migrations → src/migrations}/410103_transferFulfilmentDuplicateCheck-hashNullable.js +1 -1
  116. package/{migrations → src/migrations}/410200_transferFulfilment.js +1 -1
  117. package/{migrations → src/migrations}/410202_transferFulfilment-ilpFulfilment.js +1 -1
  118. package/{migrations → src/migrations}/410203_transferFulfilment-foreignTransferFulfilmentId.js +1 -1
  119. package/{migrations → src/migrations}/410240_bulkTransferFulfilmentDuplicateCheck.js +1 -1
  120. package/{migrations → src/migrations}/410250_bulkTransferFulfilment.js +1 -1
  121. package/{migrations → src/migrations}/410300_transferExtension.js +1 -1
  122. package/{migrations → src/migrations}/410302_transferExtension-transferErrorId.js +1 -1
  123. package/{migrations → src/migrations}/410350_bulkTransferExtension.js +1 -1
  124. package/{migrations → src/migrations}/410400_transferTimeout.js +1 -1
  125. package/{migrations → src/migrations}/410450_transferErrorDuplicateCheck.js +1 -1
  126. package/{migrations → src/migrations}/410500_transferError.js +1 -1
  127. package/{migrations → src/migrations}/410502_transferError-foreignTransferErrorDuplicateCheckId.js +1 -1
  128. package/{migrations → src/migrations}/410550_bulkTransferError.js +1 -1
  129. package/{migrations → src/migrations}/410600_expiringTransfer.js +1 -1
  130. package/{migrations → src/migrations}/500401_quote-hotfix-2719.js +8 -8
  131. package/{migrations → src/migrations}/500501_feature-fixSubIdRef.js +12 -12
  132. package/{migrations → src/migrations}/500601_party-2480.js +3 -3
  133. package/{migrations → src/migrations}/501001_quoteExtension-quote-service-174.js +1 -2
  134. package/{migrations → src/migrations}/501002_quoteExtension-2522.js +3 -3
  135. package/{migrations → src/migrations}/600010_fxTransferType.js +1 -1
  136. package/{migrations → src/migrations}/600012_fxParticipantCurrencyType.js +1 -1
  137. package/{migrations → src/migrations}/600100_fxTransferDuplicateCheck.js +2 -2
  138. package/{migrations → src/migrations}/600110_fxTransferErrorDuplicateCheck.js.js +1 -1
  139. package/{migrations → src/migrations}/600200_fxTransfer.js +2 -2
  140. package/{migrations → src/migrations}/600400_fxTransferStateChange.js +1 -1
  141. package/{migrations → src/migrations}/600501_fxWatchList.js +2 -2
  142. package/{migrations → src/migrations}/600600_fxTransferFulfilmentDuplicateCheck.js +1 -1
  143. package/{migrations → src/migrations}/600700_fxTransferFulfilment.js +1 -1
  144. package/{migrations → src/migrations}/600800_fxTransferExtension.js +1 -1
  145. package/{migrations → src/migrations}/601400_fxTransferTimeout.js +1 -1
  146. package/{migrations → src/migrations}/601500_fxTransferError.js +1 -1
  147. package/{migrations → src/migrations}/610200_fxTransferParticipant.js +1 -1
  148. package/{migrations → src/migrations}/610202_fxTransferParticipant-participantId.js +2 -2
  149. package/{migrations → src/migrations}/610403_participantPositionChange-fxTransfer.js +1 -1
  150. package/{migrations → src/migrations}/800100_quotePartyView.js +1 -1
  151. package/{migrations → src/migrations}/800101_feature-fixSubIdRef.js +1 -1
  152. package/{migrations → src/migrations}/800200_quoteView.js +1 -1
  153. package/{migrations → src/migrations}/800300_quoteResponseView.js +1 -1
  154. package/{migrations → src/migrations}/900100_foreign-keys.js +18 -18
  155. package/{migrations → src/migrations}/900101_foreign-keys.js +6 -6
  156. package/{migrations → src/migrations}/910100_feature904DDL.js +7 -7
  157. package/{migrations → src/migrations}/910101_feature904DataMigration.js +1 -1
  158. package/{migrations → src/migrations}/910102_feature949DataMigration.js +1 -1
  159. package/{migrations → src/migrations}/910103_feature1093SettlementByCurrency.js +3 -3
  160. package/{migrations → src/migrations}/940101_quotePartyIdInfoExtension-2522.js +25 -25
  161. package/{migrations → src/migrations}/950101_transferParticipantStateChange.js +2 -2
  162. package/{migrations → src/migrations}/950102_settlementModel-adjustPosition.js +2 -2
  163. package/{migrations → src/migrations}/950103_dropTransferParticipantStateChange.js +3 -3
  164. package/{migrations → src/migrations}/950104_settlementModel-settlementAccountTypeId.js +3 -3
  165. package/src/migrations/950107_settlementWindowContent_foreign_settlementModel.js +63 -0
  166. package/{migrations → src/migrations}/950108_participantProxy.js +1 -2
  167. package/{migrations → src/migrations}/950120_fxQuoteConversionTerms_sourceAmount_nullable.js +1 -1
  168. package/{migrations → src/migrations}/960100_create_externalParticipant.js +2 -2
  169. package/{migrations → src/migrations}/960110_alter_transferParticipant__addFiled_externalParticipantId.js +2 -2
  170. package/{migrations → src/migrations}/961001_transferForwarded.js +1 -1
  171. package/{migrations → src/migrations}/961002_fxTransferForwarded.js +1 -1
  172. package/src/models/participant/externalParticipant.int.ts +85 -0
  173. package/src/models/participant/facade.js +4 -2
  174. package/src/models/participant/participantCurrencyCached.js +1 -1
  175. package/src/models/position/facade.js +8 -2
  176. package/src/models/transfer/facade.int.ts +139 -0
  177. package/src/models/transfer/facade.js +8 -3
  178. package/src/models/transfer/transferDuplicateCheck.js +2 -2
  179. package/src/models/transfer/transferError.int.ts +112 -0
  180. package/src/models/transfer/transferExtension.int.ts +137 -0
  181. package/src/models/transfer/transferStateChange.int.ts +117 -0
  182. package/{seeds → src/seeds}/participant.js +1 -1
  183. package/{seeds → src/seeds}/settlementInterchange.js +1 -0
  184. package/src/settlement/api/handlerRoutes.js +71 -0
  185. package/src/settlement/api/handlers/health.js +10 -0
  186. package/src/settlement/api/handlers/index.js +57 -0
  187. package/src/settlement/api/handlers/settlementWindows/{id}.js +103 -0
  188. package/src/settlement/api/handlers/settlementWindows.js +77 -0
  189. package/src/settlement/api/handlers/settlements/{id}.js +133 -0
  190. package/src/settlement/api/handlers/settlements/{sid}/participants/{pid}/accounts/{aid}.js +127 -0
  191. package/src/settlement/api/handlers/settlements/{sid}/participants/{pid}.js +127 -0
  192. package/src/settlement/api/handlers/settlements.js +114 -0
  193. package/src/settlement/api/openapiRouting.js +87 -0
  194. package/src/settlement/api/routes.js +176 -0
  195. package/src/settlement/domain/rules/index.js +46 -0
  196. package/src/settlement/domain/settlement/index.js +405 -0
  197. package/src/settlement/domain/settlementWindow/index.js +117 -0
  198. package/src/settlement/domain/transactions/index.js +83 -0
  199. package/src/settlement/domain/transferSettlement/index.js +57 -0
  200. package/src/settlement/handlers/deferredSettlement/handler.js +180 -0
  201. package/src/settlement/handlers/grossSettlement/handler.js +180 -0
  202. package/src/settlement/handlers/index.js +101 -0
  203. package/src/settlement/handlers/register.js +92 -0
  204. package/src/settlement/handlers/rules/handler.js +164 -0
  205. package/src/settlement/interface/swagger-handler.json +34 -0
  206. package/src/settlement/interface/swagger.json +1560 -0
  207. package/src/settlement/lib/db.js +32 -0
  208. package/src/settlement/lib/kafka/index.js +41 -0
  209. package/src/settlement/lib/kafka/producer.js +142 -0
  210. package/src/settlement/lib/scriptEngine.js +99 -0
  211. package/src/settlement/lib/scriptsLoader.js +175 -0
  212. package/src/settlement/lib/utility.js +243 -0
  213. package/src/settlement/models/ilpPackets/ilpPacket.js +42 -0
  214. package/src/settlement/models/lib/enums.js +192 -0
  215. package/src/settlement/models/misc/migrationLock.js +53 -0
  216. package/src/settlement/models/settlement/facade.js +1652 -0
  217. package/src/settlement/models/settlement/index.js +55 -0
  218. package/src/settlement/models/settlement/participantCurrency.js +48 -0
  219. package/src/settlement/models/settlement/settlement.js +49 -0
  220. package/src/settlement/models/settlement/settlementModel.js +44 -0
  221. package/src/settlement/models/settlement/settlementParticipantCurrency.js +61 -0
  222. package/src/settlement/models/settlement/settlementStateChange.js +44 -0
  223. package/src/settlement/models/settlement/settlementTransferParticipant.js +46 -0
  224. package/src/settlement/models/settlementWindow/facade.js +345 -0
  225. package/src/settlement/models/settlementWindow/index.js +47 -0
  226. package/src/settlement/models/settlementWindow/settlementWindowStateChange.js +55 -0
  227. package/src/settlement/models/settlementWindowContent/facade.js +79 -0
  228. package/src/settlement/models/settlementWindowContent/index.js +40 -0
  229. package/src/settlement/models/settlementWindowContent/settlementWindowContentStateChange.js +53 -0
  230. package/src/settlement/models/transferSettlement/facade.js +363 -0
  231. package/src/settlement/models/transferSettlement/index.js +42 -0
  232. package/src/settlement/shared/logger/index.js +7 -0
  233. package/src/settlement/shared/plugins.js +88 -0
  234. package/src/settlement/shared/setup.js +224 -0
  235. package/src/settlement/utils/truthyProperty.js +37 -0
  236. package/src/shared/legacyUtilShim.js +20 -0
  237. package/src/shared/plugins.js +3 -3
  238. package/src/shared/results.ts +22 -0
  239. package/src/shared/results.unit.ts +38 -0
  240. package/src/shared/setup.js +14 -1
  241. package/src/testing/api-helpers.ts +1222 -0
  242. package/src/testing/exec-async.ts +67 -0
  243. package/src/testing/harness.snapshot.sql +3895 -0
  244. package/src/testing/harness.test.ts +15 -0
  245. package/src/testing/harness.ts +1160 -0
  246. package/src/testing/kafka.ts +221 -0
  247. package/src/testing/prng.ts +82 -0
  248. package/src/testing/rdkafka.test.ts +263 -0
  249. package/src/testing/run.ts +559 -0
  250. package/src/testing/snapshot.test.ts +92 -0
  251. package/src/testing/snapshot.ts +549 -0
  252. package/src/testing/tap-stream.ts +164 -0
  253. package/src/testing/types.ts +95 -0
  254. package/src/testing/util.ts +333 -0
  255. package/src/types/central-services-error-handling.d.ts +72 -0
  256. package/src/types/central-services-stream.d.ts +148 -0
  257. package/test-integration.Dockerfile +0 -2
  258. package/test.Dockerfile +0 -2
  259. package/tsconfig.json +40 -0
  260. package/config/knexfile.js +0 -19
  261. package/migrations/950107_settlementWindowContent_foreign_settlementModel.js +0 -63
  262. package/src/api/index.js +0 -16
  263. package/src/lib/config.js +0 -81
  264. /package/{migrations → src/migrations}/110101_contactType-indexes.js +0 -0
  265. /package/{migrations → src/migrations}/110301_endpointType-indexes.js +0 -0
  266. /package/{migrations → src/migrations}/110401_ledgerEntryType-indexes.js +0 -0
  267. /package/{migrations → src/migrations}/110451_ledgerAccountType-indexes.js +0 -0
  268. /package/{migrations → src/migrations}/110501_participantLimitType-indexes.js +0 -0
  269. /package/{migrations → src/migrations}/110601_transferParticipantRoleType-indexes.js +0 -0
  270. /package/{migrations → src/migrations}/110800_settlementWindowState.js +0 -0
  271. /package/{migrations → src/migrations}/111000_amountType.js +0 -0
  272. /package/{migrations → src/migrations}/111001_amountType-indexes.js +0 -0
  273. /package/{migrations → src/migrations}/111100_balanceOfPayments.js +0 -0
  274. /package/{migrations → src/migrations}/111101_balanceOfPayments-indexes.js +0 -0
  275. /package/{migrations → src/migrations}/111200_partyIdentifierType.js +0 -0
  276. /package/{migrations → src/migrations}/111201_partyIdentifierType-indexes.js +0 -0
  277. /package/{migrations → src/migrations}/111300_partyType.js +0 -0
  278. /package/{migrations → src/migrations}/111301_partyType-indexes.js +0 -0
  279. /package/{migrations → src/migrations}/111400_quoteDuplicateCheck.js +0 -0
  280. /package/{migrations → src/migrations}/111500_transactionInitiator.js +0 -0
  281. /package/{migrations → src/migrations}/111501_transactionInitiator-indexes.js +0 -0
  282. /package/{migrations → src/migrations}/111600_transactionInitiatorType.js +0 -0
  283. /package/{migrations → src/migrations}/111601_transactionInitiatorType-indexes.js +0 -0
  284. /package/{migrations → src/migrations}/111700_settlementDelay.js +0 -0
  285. /package/{migrations → src/migrations}/111701_settlementDelay-indexes.js +0 -0
  286. /package/{migrations → src/migrations}/111800_settlementInterchange.js +0 -0
  287. /package/{migrations → src/migrations}/111801_settlementInterchange-indexes.js +0 -0
  288. /package/{migrations → src/migrations}/111900_settlementGranularity.js +0 -0
  289. /package/{migrations → src/migrations}/111901_settlementGranularity-indexes.js +0 -0
  290. /package/{migrations → src/migrations}/112101_bulkProcessingState-indexes.js +0 -0
  291. /package/{migrations → src/migrations}/200101_participant-indexes.js +0 -0
  292. /package/{migrations → src/migrations}/200201_participantContact-indexes.js +0 -0
  293. /package/{migrations → src/migrations}/200301_participantEndpoint-indexes.js +0 -0
  294. /package/{migrations → src/migrations}/200401_participantParty-indexes.js +0 -0
  295. /package/{migrations → src/migrations}/300201_transfer-indexes.js +0 -0
  296. /package/{migrations → src/migrations}/300251_bulkTransfer-indexes.js +0 -0
  297. /package/{migrations → src/migrations}/300276_bulkTransferAssociation-indexes.js +0 -0
  298. /package/{migrations → src/migrations}/300401_transferStateChange-indexes.js +0 -0
  299. /package/{migrations → src/migrations}/300451_bulkTransferStateChange-indexes.js +0 -0
  300. /package/{migrations → src/migrations}/300501_segment-indexes.js +0 -0
  301. /package/{migrations → src/migrations}/310101_participantCurrency-indexes.js +0 -0
  302. /package/{migrations → src/migrations}/310201_transferParticipant-indexes.js +0 -0
  303. /package/{migrations → src/migrations}/310203_transferParticipant-indexes.js +0 -0
  304. /package/{migrations → src/migrations}/310301_participantPosition-indexes.js +0 -0
  305. /package/{migrations → src/migrations}/310401_participantPositionChange-indexes.js +0 -0
  306. /package/{migrations → src/migrations}/310405_participantPositionChange-positionChange.js +0 -0
  307. /package/{migrations → src/migrations}/310406_participantPositionChange-positionChange-revert.js +0 -0
  308. /package/{migrations → src/migrations}/310501_participantLimit-indexes.js +0 -0
  309. /package/{migrations → src/migrations}/310503_participantLimit-indexes-composite.js +0 -0
  310. /package/{migrations → src/migrations}/400401_settlmentWindowStateChange-indexes.js +0 -0
  311. /package/{migrations → src/migrations}/400501_settlementTransferParticipant-indexes.js +0 -0
  312. /package/{migrations → src/migrations}/400601_settlementParticipantCurrency-indexes.js +0 -0
  313. /package/{migrations → src/migrations}/400701_settlementParticipantCurrencyStateChange-indexes.js +0 -0
  314. /package/{migrations → src/migrations}/400801_settlementStateChange-indexes.js +0 -0
  315. /package/{migrations → src/migrations}/401002_settlementWindowContent-indexes.js +0 -0
  316. /package/{migrations → src/migrations}/401201_settlementContentAggregation-indexes.js +0 -0
  317. /package/{migrations → src/migrations}/401301_settlementModel-indexes.js +0 -0
  318. /package/{migrations → src/migrations}/410101_transferFulfilmentDuplicateCheck-indexes.js +0 -0
  319. /package/{migrations → src/migrations}/410201_transferFulfilment-indexes.js +0 -0
  320. /package/{migrations → src/migrations}/410301_transferExtension-indexes.js +0 -0
  321. /package/{migrations → src/migrations}/410351_bulkTransferExtension-indexes.js +0 -0
  322. /package/{migrations → src/migrations}/410401_transferTimeout-indexes.js +0 -0
  323. /package/{migrations → src/migrations}/410501_transferError-indexes.js +0 -0
  324. /package/{migrations → src/migrations}/410551_bulkTransferError-indexes.js +0 -0
  325. /package/{migrations → src/migrations}/410601_expiringTransfer-indexes.js +0 -0
  326. /package/{migrations → src/migrations}/500100_transactionReference.js +0 -0
  327. /package/{migrations → src/migrations}/500101_transactionReference-indexes.js +0 -0
  328. /package/{migrations → src/migrations}/500200_transactionScenario.js +0 -0
  329. /package/{migrations → src/migrations}/500201_transactionScenario-indexes.js +0 -0
  330. /package/{migrations → src/migrations}/500300_transactionSubScenario.js +0 -0
  331. /package/{migrations → src/migrations}/500400_quote.js +0 -0
  332. /package/{migrations → src/migrations}/500500_quoteParty.js +0 -0
  333. /package/{migrations → src/migrations}/500600_party.js +0 -0
  334. /package/{migrations → src/migrations}/500700_quoteResponse.js +0 -0
  335. /package/{migrations → src/migrations}/500800_quoteResponseIlpPacket.js +0 -0
  336. /package/{migrations → src/migrations}/500900_geoCode.js +0 -0
  337. /package/{migrations → src/migrations}/501000_quoteExtension.js +0 -0
  338. /package/{migrations → src/migrations}/501100_quoteResponseDuplicateCheck.js +0 -0
  339. /package/{migrations → src/migrations}/501200_quoteError.js +0 -0
  340. /package/{migrations → src/migrations}/501300_transferRules.js +0 -0
  341. /package/{migrations → src/migrations}/600011_fxTransferType-indexes.js +0 -0
  342. /package/{migrations → src/migrations}/600013_fxParticipantCurrencyType-indexes.js +0 -0
  343. /package/{migrations → src/migrations}/600201_fxTransfer-indexes.js +0 -0
  344. /package/{migrations → src/migrations}/600401_fxTransferStateChange-indexes.js +0 -0
  345. /package/{migrations → src/migrations}/600502_fxWatchList-indexes.js +0 -0
  346. /package/{migrations → src/migrations}/600601_fxTransferFulfilmentDuplicateCheck-indexes.js +0 -0
  347. /package/{migrations → src/migrations}/600701_fxTransferFulfilment-indexes.js +0 -0
  348. /package/{migrations → src/migrations}/601401_fxTransferTimeout-indexes.js +0 -0
  349. /package/{migrations → src/migrations}/601501_fxTransferError-indexes.js +0 -0
  350. /package/{migrations → src/migrations}/610201_fxTransferParticipant-indexes.js +0 -0
  351. /package/{migrations → src/migrations}/910102_hotfix954.js +0 -0
  352. /package/{migrations → src/migrations}/940100_quotePartyIdInfoExtension.js +0 -0
  353. /package/{migrations → src/migrations}/950100_settlementContentAggregation-decimal184.js +0 -0
  354. /package/{migrations → src/migrations}/950106_unique_settlement_model_ledger_account_currency.js +0 -0
  355. /package/{migrations → src/migrations}/950109_fxQuote.js +0 -0
  356. /package/{migrations → src/migrations}/950110_fxQuoteResponse.js +0 -0
  357. /package/{migrations → src/migrations}/950111_fxQuoteError.js +0 -0
  358. /package/{migrations → src/migrations}/950113_fxQuoteDuplicateCheck.js +0 -0
  359. /package/{migrations → src/migrations}/950114_fxQuoteResponseDuplicateCheck.js +0 -0
  360. /package/{migrations → src/migrations}/950115_fxQuoteConversionTerms.js +0 -0
  361. /package/{migrations → src/migrations}/950116_fxQuoteConversionTermsExtension.js +0 -0
  362. /package/{migrations → src/migrations}/950117_fxQuoteResponseConversionTerms.js +0 -0
  363. /package/{migrations → src/migrations}/950118_fxQuoteResponseConversionTermsExtension.js +0 -0
  364. /package/{migrations → src/migrations}/950119_fxCharge.js +0 -0
  365. /package/{migrations → src/migrations}/960111_alter_fxTransferParticipant__addFiled_externalParticipantId.js +0 -0
  366. /package/{migrations → src/migrations}/960112_fxTransfer-indexes2.js +0 -0
  367. /package/{migrations → src/migrations}/960113_fxTransferExtension-indexes.js +0 -0
  368. /package/{migrations → src/migrations}/960114_fxTransferTimeout-indexes2.js +0 -0
  369. /package/{migrations → src/migrations}/961000_participantEndpoint_unique.js +0 -0
  370. /package/{migrations → src/migrations}/migration.template +0 -0
  371. /package/{seeds → src/seeds}/amountType.js +0 -0
  372. /package/{seeds → src/seeds}/balanceOfPayments.js +0 -0
  373. /package/{seeds → src/seeds}/bulkProcessingState.js +0 -0
  374. /package/{seeds → src/seeds}/bulkTransferState.js +0 -0
  375. /package/{seeds → src/seeds}/currency.js +0 -0
  376. /package/{seeds → src/seeds}/endpointType.js +0 -0
  377. /package/{seeds → src/seeds}/fxParticipantCurrencyType.js +0 -0
  378. /package/{seeds → src/seeds}/fxTransferType.js +0 -0
  379. /package/{seeds → src/seeds}/ledgerAccountType.js +0 -0
  380. /package/{seeds → src/seeds}/ledgerEntryType.js +0 -0
  381. /package/{seeds → src/seeds}/participantLimitType.js +0 -0
  382. /package/{seeds → src/seeds}/partyIdentifierType.js +0 -0
  383. /package/{seeds → src/seeds}/partyType.js +0 -0
  384. /package/{seeds → src/seeds}/settlementDelay.js +0 -0
  385. /package/{seeds → src/seeds}/settlementGranularity.js +0 -0
  386. /package/{seeds → src/seeds}/settlementState.js +0 -0
  387. /package/{seeds → src/seeds}/settlementWindow1State.js +0 -0
  388. /package/{seeds → src/seeds}/settlementWindow2Open.js +0 -0
  389. /package/{seeds → src/seeds}/transactionInitiator.js +0 -0
  390. /package/{seeds → src/seeds}/transactionInitiatorType.js +0 -0
  391. /package/{seeds → src/seeds}/transactionScenario.js +0 -0
  392. /package/{seeds → src/seeds}/transferParticipantRoleType.js +0 -0
  393. /package/{seeds → src/seeds}/transferState.js +0 -0
  394. /package/{seeds → src/seeds}/z1000_settlementModel-deprecated.js- +0 -0
@@ -0,0 +1,243 @@
1
+ /*****
2
+ License
3
+ --------------
4
+ Copyright © 2020-2025 Mojaloop Foundation
5
+ The Mojaloop files are made available by the Mojaloop Foundation under the Apache License, Version 2.0 (the "License") and you may not use these files except in compliance with the License. You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, the Mojaloop files are distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
10
+
11
+ Contributors
12
+ --------------
13
+ This is the official list of the Mojaloop project contributors for this file.
14
+ Names of the original copyright holders (individuals or organizations)
15
+ should be listed with a '*' in the first column. People who have
16
+ contributed from an organization can be listed under the organization
17
+ that actually holds the copyright for their contributions (see the
18
+ Mojaloop Foundation for an example). Those individuals should have
19
+ their names indented and be marked with a '-'. Email address can be added
20
+ optionally within square brackets <email>.
21
+
22
+ * Mojaloop Foundation
23
+ - Name Surname <name.surname@mojaloop.io>
24
+
25
+ * Georgi Georgiev <georgi.georgiev@modusbox.com>
26
+ * Lazola Lucas <lazola.lucas@modusbox.com>
27
+ * Rajiv Mothilal <rajiv.mothilal@modusbox.com>
28
+ * Miguel de Barros <miguel.debarros@modusbox.com>
29
+
30
+ --------------
31
+ ******/
32
+
33
+ 'use strict'
34
+
35
+ /**
36
+ * @module src/handlers/lib
37
+ */
38
+
39
+ const Config = require('../../lib/config')
40
+ const KafkaConfig = Config.KAFKA_CONFIG
41
+ const { logger } = require('../shared/logger')
42
+ const idGenerator = require('@mojaloop/central-services-shared').Util.id
43
+ const Kafka = require('./kafka/index')
44
+ const ErrorHandler = require('@mojaloop/central-services-error-handling')
45
+ const generateULID = idGenerator({ type: 'ulid' })
46
+ /**
47
+ * The Producer config required
48
+ *
49
+ * @description This ENUM is for the PRODUCER of the topic being created
50
+ *
51
+ * @enum {object} ENUMS~PRODUCER
52
+ * @property {string} PRODUCER - PRODUCER config to be fetched
53
+ */
54
+ const PRODUCER = 'PRODUCER'
55
+
56
+ /**
57
+ * The Notification config required
58
+ *
59
+ * @description This ENUM is for the notification message being created
60
+ *
61
+ * @enum {object} ENUMS~NOTIFICATION
62
+ * @property {string} NOTIFICATION - notification to be used to update metadata
63
+ */
64
+ const NOTIFICATION = 'notification'
65
+
66
+ /**
67
+ * The EVENT config required
68
+ *
69
+ * @description This ENUM is for the topic being created
70
+ *
71
+ * @enum {object} ENUMS~EVENT
72
+ * @property {string} EVENT - event to be used get the config for Kafka
73
+ */
74
+ const EVENT = 'event'
75
+
76
+ /**
77
+ * The STATE constant
78
+ *
79
+ * I believe that this is a temporary solution
80
+ *
81
+ * This ENUM is for the state of the message being created
82
+ *
83
+ * @enum {object} ENUMS~STATE
84
+ * @property {string} STATE - used for the state of the message
85
+ */
86
+ const STATE = {
87
+ SUCCESS: {
88
+ status: 'success',
89
+ code: 0,
90
+ description: 'action successful'
91
+ },
92
+ FAILURE: {
93
+ status: 'error',
94
+ code: 999,
95
+ description: 'action failed'
96
+ }
97
+ }
98
+
99
+ /**
100
+ * ENUMS
101
+ *
102
+ * @description Global ENUMS object
103
+ *
104
+ * @enum {string} ENUMS
105
+ * @property {string} PRODUCER - This ENUM is for the PRODUCER
106
+ */
107
+ const ENUMS = {
108
+ PRODUCER,
109
+ NOTIFICATION,
110
+ STATE,
111
+ EVENT
112
+ }
113
+
114
+ /**
115
+ * @function GetKafkaConfig
116
+ *
117
+ * @description participantTopicTemplate called which generates a participant topic name from the 3 inputs, which are used in the placeholder participant topic template found in the default.json
118
+ *
119
+ * @param {string} flow - This is required for the config for the Stream Processing API. Example: 'CONSUMER' ie: note the case of text
120
+ * @param {string} functionality - the functionality flow. Example: 'TRANSFER' ie: note the case of text
121
+ * @param {string} action - the action that applies to the flow. Example: 'PREPARE' ie: note the case of text
122
+ *
123
+ * @returns {string} - Returns topic name to be created, throws error if failure occurs
124
+ */
125
+ const getKafkaConfig = (flow, functionality, action) => {
126
+ try {
127
+ const flowObject = KafkaConfig[flow]
128
+ const functionalityObject = flowObject[functionality]
129
+ const actionObject = functionalityObject[action]
130
+ actionObject.config.logger = logger
131
+ return actionObject.config
132
+ } catch (err) {
133
+ throw ErrorHandler.Factory.createInternalServerFSPIOPError(`No config found for those parameters flow='${flow}', functionality='${functionality}', action='${action}'`, err)
134
+ }
135
+ }
136
+
137
+ /**
138
+ * @function updateMessageProtocolMetadata
139
+ *
140
+ * @param {object} messageProtocol - The current messageProtocol from kafka
141
+ * @param {string} metadataType - the type of flow. Example: 'notification'
142
+ * @param {string} metadataAction - the action flow. Example: 'prepare'
143
+ * @param {object} state - the state of the message being passed.
144
+ * Example:
145
+ * SUCCESS: {
146
+ * status: 'success',
147
+ * code: 0,
148
+ * description: 'action successful'
149
+ * }
150
+ *
151
+ * @returns {object} - Returns updated messageProtocol
152
+ */
153
+ const updateMessageProtocolMetadata = (messageProtocol, metadataType, metadataAction, state) => {
154
+ if (!messageProtocol.metadata) {
155
+ messageProtocol.metadata = {
156
+ event: {
157
+ id: generateULID(),
158
+ type: metadataType,
159
+ action: metadataAction,
160
+ state
161
+ }
162
+ }
163
+ } else {
164
+ messageProtocol.metadata.event.responseTo = messageProtocol.metadata.event.id
165
+ messageProtocol.metadata.event.id = generateULID()
166
+ messageProtocol.metadata.event.type = metadataType
167
+ messageProtocol.metadata.event.state = state
168
+ }
169
+ return messageProtocol
170
+ }
171
+
172
+ /**
173
+ * @function GeneralTopicTemplate
174
+ *
175
+ * @description Generates a general topic name from the 2 inputs, which are used in the placeholder general topic template found in the default.json
176
+ *
177
+ * @param {string} functionality - the functionality flow. Example: 'transfer'
178
+ * @param {string} action - the action that applies to the flow. Example: 'prepare'
179
+ *
180
+ * @returns {string} - Returns topic name to be created, throws error if failure occurs
181
+ */
182
+ const generalTopicTemplate = (functionality, action) => {
183
+ try {
184
+ return Config.KAFKA_CONFIG.TOPIC_TEMPLATES.GENERAL_TOPIC_TEMPLATE.TEMPLATE
185
+ .replace('{{functionality}}', functionality || '')
186
+ .replace('{{action}}', action || '')
187
+ } catch (err) {
188
+ logger.error(err)
189
+ throw ErrorHandler.Factory.reformatFSPIOPError(err)
190
+ }
191
+ }
192
+
193
+ /**
194
+ * @function createGeneralTopicConfig
195
+ *
196
+ * @param {string} functionality - the functionality flow. Example: 'transfer' ie: note the case of text
197
+ * @param {string} action - the action that applies to the flow. Example: 'prepare' ie: note the case of text
198
+ * @param {number} partition - optional partition to produce to
199
+ * @param {*} opaqueKey - optional opaque token, which gets passed along to your delivery reports
200
+ *
201
+ * @returns {object} - Returns newly created general topicConfig
202
+ */
203
+ const createGeneralTopicConf = (functionality, action, partition = 0, opaqueKey = 0) => {
204
+ return {
205
+ topicName: generalTopicTemplate(functionality, action),
206
+ key: generateULID(),
207
+ partition,
208
+ opaqueKey
209
+ }
210
+ }
211
+
212
+ /**
213
+ * @function produceGeneralMessage
214
+ *
215
+ * @async
216
+ * @description This is an async method that produces a message against a generated Kafka topic. it is called multiple times
217
+ *
218
+ * Kafka.Producer.produceMessage called to persist the message to the configured topic on Kafka
219
+ * Utility.updateMessageProtocolMetadata called updates the messages metadata
220
+ * Utility.createGeneralTopicConf called dynamically generates the general topic configuration
221
+ * Utility.getKafkaConfig called dynamically gets Kafka configuration
222
+ *
223
+ * @param {string} functionality - the functionality flow. Example: 'transfer' ie: note the case of text
224
+ * @param {string} action - the action that applies to the flow. Example: 'prepare' ie: note the case of text
225
+ * @param {object} message - a list of messages to consume for the relevant topic
226
+ * @param {object} state - state of the message being produced
227
+ *
228
+ * @returns {object} - Returns a boolean: true if successful, or throws and error if failed
229
+ */
230
+ const produceGeneralMessage = async (functionality, action, message, state) => {
231
+ const functionalityMapped = functionality
232
+ const actionMapped = action
233
+ return Kafka.Producer.produceMessage(updateMessageProtocolMetadata(message, functionality, action, state),
234
+ createGeneralTopicConf(functionalityMapped, actionMapped),
235
+ getKafkaConfig(ENUMS.PRODUCER, functionalityMapped.toUpperCase(), actionMapped.toUpperCase()))
236
+ }
237
+
238
+ exports.ENUMS = ENUMS
239
+ exports.getKafkaConfig = getKafkaConfig
240
+ exports.updateMessageProtocolMetadata = updateMessageProtocolMetadata
241
+ exports.createGeneralTopicConf = createGeneralTopicConf
242
+ exports.produceGeneralMessage = produceGeneralMessage
243
+ exports.generalTopicTemplate = generalTopicTemplate
@@ -0,0 +1,42 @@
1
+ /*****
2
+ License
3
+ --------------
4
+ Copyright © 2020-2025 Mojaloop Foundation
5
+ The Mojaloop files are made available by the Mojaloop Foundation under the Apache License, Version 2.0 (the "License") and you may not use these files except in compliance with the License. You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, the Mojaloop files are distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
10
+
11
+ Contributors
12
+ --------------
13
+ This is the official list of the Mojaloop project contributors for this file.
14
+ Names of the original copyright holders (individuals or organizations)
15
+ should be listed with a '*' in the first column. People who have
16
+ contributed from an organization can be listed under the organization
17
+ that actually holds the copyright for their contributions (see the
18
+ Mojaloop Foundation for an example). Those individuals should have
19
+ their names indented and be marked with a '-'. Email address can be added
20
+ optionally within square brackets <email>.
21
+
22
+ * Mojaloop Foundation
23
+ - Name Surname <name.surname@mojaloop.io>
24
+
25
+ * ModusBox
26
+ - Lazola Lucas <lazola.lucas@modusbox.com>
27
+ --------------
28
+ ******/
29
+ 'use strict'
30
+
31
+ const Db = require('../../lib/db')
32
+ const ErrorHandler = require('@mojaloop/central-services-error-handling')
33
+ const { logger } = require('../../shared/logger')
34
+
35
+ exports.getById = async (id) => {
36
+ try {
37
+ return await Db.from('ilpPacket').find({ transferId: id })
38
+ } catch (err) {
39
+ logger.error(err)
40
+ throw ErrorHandler.Factory.reformatFSPIOPError(err)
41
+ }
42
+ }
@@ -0,0 +1,192 @@
1
+ /*****
2
+ License
3
+ --------------
4
+ Copyright © 2020-2025 Mojaloop Foundation
5
+ The Mojaloop files are made available by the Mojaloop Foundation under the Apache License, Version 2.0 (the "License") and you may not use these files except in compliance with the License. You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, the Mojaloop files are distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
10
+
11
+ Contributors
12
+ --------------
13
+ This is the official list of the Mojaloop project contributors for this file.
14
+ Names of the original copyright holders (individuals or organizations)
15
+ should be listed with a '*' in the first column. People who have
16
+ contributed from an organization can be listed under the organization
17
+ that actually holds the copyright for their contributions (see the
18
+ Mojaloop Foundation for an example). Those individuals should have
19
+ their names indented and be marked with a '-'. Email address can be added
20
+ optionally within square brackets <email>.
21
+
22
+ * Mojaloop Foundation
23
+ - Name Surname <name.surname@mojaloop.io>
24
+
25
+ * ModusBox
26
+ - Deon Botha <deon.botha@modusbox.com>
27
+ - Georgi Georgiev <georgi.georgiev@modusbox.com>
28
+ - Valentin Genev <valentin.genev@modusbox.com>
29
+ --------------
30
+ ******/
31
+ 'use strict'
32
+
33
+ const Db = require('../../lib/db')
34
+
35
+ module.exports = {
36
+ headers: {
37
+ FSPIOP: {
38
+ SWITCH: 'central-switch'
39
+ }
40
+ },
41
+
42
+ ledgerAccountTypes: async function () {
43
+ const ledgerAccountTypeEnum = {}
44
+ const ledgerAccountTypeEnumsList = await Db.from('ledgerAccountType').find({})
45
+ if (ledgerAccountTypeEnumsList) {
46
+ for (const state of ledgerAccountTypeEnumsList) {
47
+ ledgerAccountTypeEnum[`${state.name}`] = state.ledgerAccountTypeId
48
+ }
49
+ return ledgerAccountTypeEnum
50
+ }
51
+ },
52
+ ledgerEntryTypes: async function () {
53
+ const ledgerEntryTypeEnum = {}
54
+ const ledgerEntryTypeEnumsList = await Db.from('ledgerEntryType').find({})
55
+ if (ledgerEntryTypeEnumsList) {
56
+ for (const state of ledgerEntryTypeEnumsList) {
57
+ ledgerEntryTypeEnum[`${state.name}`] = state.ledgerEntryTypeId
58
+ }
59
+ return ledgerEntryTypeEnum
60
+ }
61
+ },
62
+ participantLimitTypes: async function () {
63
+ const participantLimitTypeEnum = {}
64
+ const participantLimitTypeEnumsList = await Db.from('participantLimitType').find({})
65
+ if (participantLimitTypeEnumsList) {
66
+ for (const state of participantLimitTypeEnumsList) {
67
+ participantLimitTypeEnum[`${state.name}`] = state.participantLimitTypeId
68
+ }
69
+ return participantLimitTypeEnum
70
+ }
71
+ },
72
+ settlementDelay: async function () {
73
+ const settlementDelayName = {}
74
+
75
+ const settlementDelayNamesList = await Db.from('settlementDelay').find({})
76
+ if (settlementDelayNamesList) {
77
+ for (const record of settlementDelayNamesList) {
78
+ settlementDelayName[`${record.name}`] = record.settlementDelayId
79
+ }
80
+ return settlementDelayName
81
+ }
82
+ },
83
+ settlementDelayEnums: async function () {
84
+ const settlementDelayEnum = {}
85
+
86
+ const settlementDelayEnumsList = await Db.from('settlementDelay').find({})
87
+ if (settlementDelayEnumsList) {
88
+ for (const record of settlementDelayEnumsList) {
89
+ settlementDelayEnum[`${record.name}`] = record.name
90
+ }
91
+ return settlementDelayEnum
92
+ }
93
+ },
94
+ settlementGranularity: async function () {
95
+ const settlementGranularityName = {}
96
+
97
+ const settlementGranularityNamesList = await Db.from('settlementGranularity').find({})
98
+ if (settlementGranularityNamesList) {
99
+ for (const record of settlementGranularityNamesList) {
100
+ settlementGranularityName[`${record.name}`] = record.settlementGranularityId
101
+ }
102
+ return settlementGranularityName
103
+ }
104
+ },
105
+ settlementGranularityEnums: async function () {
106
+ const settlementGranularityEnum = {}
107
+
108
+ const settlementGranularityEnumsList = await Db.from('settlementGranularity').find({})
109
+ if (settlementGranularityEnumsList) {
110
+ for (const record of settlementGranularityEnumsList) {
111
+ settlementGranularityEnum[`${record.name}`] = record.name
112
+ }
113
+ return settlementGranularityEnum
114
+ }
115
+ },
116
+ settlementInterchange: async function () {
117
+ const settlementInterchangeName = {}
118
+
119
+ const settlementInterchangeNamesList = await Db.from('settlementInterchange').find({})
120
+ if (settlementInterchangeNamesList) {
121
+ for (const record of settlementInterchangeNamesList) {
122
+ settlementInterchangeName[`${record.name}`] = record.settlementInterchangeId
123
+ }
124
+ return settlementInterchangeName
125
+ }
126
+ },
127
+ settlementInterchangeEnums: async function () {
128
+ const settlementInterchangeEnum = {}
129
+
130
+ const settlementInterchangeEnumsList = await Db.from('settlementInterchange').find({})
131
+ if (settlementInterchangeEnumsList) {
132
+ for (const record of settlementInterchangeEnumsList) {
133
+ settlementInterchangeEnum[`${record.name}`] = record.name
134
+ }
135
+ return settlementInterchangeEnum
136
+ }
137
+ },
138
+ settlementStates: async function () {
139
+ const settlementStateEnum = {}
140
+
141
+ const settlementStateEnumsList = await Db.from('settlementState').find({})
142
+ if (settlementStateEnumsList) {
143
+ for (const state of settlementStateEnumsList) {
144
+ settlementStateEnum[`${state.enumeration}`] = state.settlementStateId
145
+ }
146
+ return settlementStateEnum
147
+ }
148
+ },
149
+ settlementWindowStates: async function () {
150
+ const settlementWindowStateEnum = {}
151
+ const settlementWindowStateEnumsList = await Db.from('settlementWindowState').find({})
152
+ if (settlementWindowStateEnumsList) {
153
+ for (const state of settlementWindowStateEnumsList) {
154
+ settlementWindowStateEnum[`${state.enumeration}`] = state.settlementWindowStateId
155
+ }
156
+ return settlementWindowStateEnum
157
+ }
158
+ },
159
+ transferParticipantRoleTypes: async function () {
160
+ const transferParticipantRoleTypeEnum = {}
161
+ const transferParticipantRoleTypeEnumsList = await Db.from('transferParticipantRoleType').find({})
162
+ if (transferParticipantRoleTypeEnumsList) {
163
+ for (const state of transferParticipantRoleTypeEnumsList) {
164
+ transferParticipantRoleTypeEnum[`${state.name}`] = state.transferParticipantRoleTypeId
165
+ }
166
+ return transferParticipantRoleTypeEnum
167
+ }
168
+ },
169
+ transferStateEnums: async function () {
170
+ const transferStateEnum = {}
171
+ const transferStateEnumsList = await Db.from('transferState').find({})
172
+ if (transferStateEnumsList) {
173
+ for (const state of transferStateEnumsList) {
174
+ // apply distinct even though final result would contain distinct values
175
+ if (!transferStateEnum[`${state.enumeration}`]) {
176
+ transferStateEnum[`${state.enumeration}`] = state.enumeration
177
+ }
178
+ }
179
+ return transferStateEnum
180
+ }
181
+ },
182
+ transferStates: async function () {
183
+ const transferStateEnum = {}
184
+ const transferStateEnumsList = await Db.from('transferState').find({})
185
+ if (transferStateEnumsList) {
186
+ for (const state of transferStateEnumsList) {
187
+ transferStateEnum[`${state.transferStateId}`] = state.transferStateId
188
+ }
189
+ return transferStateEnum
190
+ }
191
+ }
192
+ }
@@ -0,0 +1,53 @@
1
+ /*****
2
+ License
3
+ --------------
4
+ Copyright © 2020-2025 Mojaloop Foundation
5
+ The Mojaloop files are made available by the Mojaloop Foundation under the Apache License, Version 2.0 (the "License") and you may not use these files except in compliance with the License. You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, the Mojaloop files are distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
10
+
11
+ Contributors
12
+ --------------
13
+ This is the official list of the Mojaloop project contributors for this file.
14
+ Names of the original copyright holders (individuals or organizations)
15
+ should be listed with a '*' in the first column. People who have
16
+ contributed from an organization can be listed under the organization
17
+ that actually holds the copyright for their contributions (see the
18
+ Mojaloop Foundation for an example). Those individuals should have
19
+ their names indented and be marked with a '-'. Email address can be added
20
+ optionally within square brackets <email>.
21
+
22
+ * Mojaloop Foundation
23
+ - Name Surname <name.surname@mojaloop.io>
24
+
25
+ * Lewis Daly <lewis@vesselstech.com>
26
+ --------------
27
+ ******/
28
+
29
+ 'use strict'
30
+
31
+ const Db = require('../../lib/db')
32
+
33
+ /**
34
+ * @function getIsMigrationLocked
35
+ *
36
+ * @description Gets whether or not the database is locked based on the migration_lock
37
+ * @returns {Promise<boolean>} - true if locked, false if not. Rejects if an error occours
38
+ */
39
+ const getIsMigrationLocked = async () => {
40
+ const result = await Db.from('migration_lock').query(async builder => {
41
+ builder.select('is_locked AS isLocked')
42
+ .orderBy('index', 'desc')
43
+ .first()
44
+
45
+ return builder
46
+ })
47
+
48
+ return result.isLocked
49
+ }
50
+
51
+ module.exports = {
52
+ getIsMigrationLocked
53
+ }