@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
@@ -32,14 +32,14 @@
32
32
  exports.up = function (knex) {
33
33
  // foreign keys sorted alphabetically by table name
34
34
  return knex.schema
35
- .table('transferExtension', (t) => {
36
- t.foreign('transferErrorId').references('transferError.transferErrorId')
37
- })
35
+ .table('transferExtension', (t) => {
36
+ t.foreign('transferErrorId').references('transferError.transferErrorId')
37
+ })
38
38
  }
39
39
 
40
40
  exports.down = function (knex) {
41
41
  return knex.schema
42
- .table('transferExtension', (t) => {
43
- t.dropForeign('transferErrorId')
44
- })
42
+ .table('transferExtension', (t) => {
43
+ t.dropForeign('transferErrorId')
44
+ })
45
45
  }
@@ -59,25 +59,25 @@ const migrateDDL = async (knex) => {
59
59
  const tableNameSuffix = Time.getYMDString(new Date())
60
60
 
61
61
  // drop foreign keys to make names available to replacing table
62
- await knex.schema.table(`transferExtension`, (t) => {
62
+ await knex.schema.table('transferExtension', (t) => {
63
63
  t.dropForeign('transferid')
64
64
  t.dropForeign('transfererrorid')
65
65
  t.dropForeign('transferfulfilmentid')
66
66
  })
67
67
  // drop foreign keys to make names available to replacing table
68
- await knex.schema.table(`transferFulfilment`, (t) => {
68
+ await knex.schema.table('transferFulfilment', (t) => {
69
69
  t.dropForeign('transferid')
70
70
  t.dropForeign('settlementwindowid')
71
71
  t.dropForeign('transferfulfilmentid')
72
72
  })
73
73
  // drop foreign keys to make names available to replacing table
74
- await knex.schema.table(`transferError`, (t) => {
75
- t.dropForeign('transferstatechangeid')
76
- t.dropForeign('transfererrorduplicatecheckid')
74
+ await knex.schema.table('transferError', (t) => {
75
+ t.dropForeign('transferstatechangeid')
76
+ t.dropForeign('transfererrorduplicatecheckid')
77
77
  })
78
78
  // drop foreign keys to make names available to replacing table
79
- await knex.schema.table(`transferErrorDuplicateCheck`, (t) => {
80
- t.dropForeign('transferid')
79
+ await knex.schema.table('transferErrorDuplicateCheck', (t) => {
80
+ t.dropForeign('transferid')
81
81
  })
82
82
  // rename current tables to preserve currently stored data
83
83
  await knex.schema.renameTable('transferExtension', `transferExtension${tableNameSuffix}`)
@@ -29,7 +29,7 @@
29
29
 
30
30
  'use strict'
31
31
  const Time = require('@mojaloop/central-services-shared').Util.Time
32
- const Config = require('../src/lib/config')
32
+ const Config = require('../lib/config')
33
33
  const RUN_DATA_MIGRATIONS = Config.DB_RUN_DATA_MIGRATIONS
34
34
 
35
35
  const tableNameSuffix = Time.getYMDString(new Date())
@@ -28,7 +28,7 @@
28
28
  ******/
29
29
 
30
30
  'use strict'
31
- const Config = require('../src/lib/config')
31
+ const Config = require('../lib/config')
32
32
  const RUN_DATA_MIGRATIONS = Config.DB_RUN_DATA_MIGRATIONS
33
33
 
34
34
  /**
@@ -30,14 +30,14 @@
30
30
  'use strict'
31
31
 
32
32
  exports.up = async (knex, Promise) => {
33
- await knex.schema.hasTable('ledgerAccountType').then(function(exists) {
33
+ await knex.schema.hasTable('ledgerAccountType').then(function (exists) {
34
34
  if (exists) {
35
35
  return knex.schema.alterTable('ledgerAccountType', (t) => {
36
36
  t.boolean('isSettleable').defaultTo(false).notNullable()
37
37
  })
38
38
  }
39
39
  })
40
- await knex.schema.hasTable('ledgerEntryType').then(function(exists) {
40
+ await knex.schema.hasTable('ledgerEntryType').then(function (exists) {
41
41
  if (exists) {
42
42
  return knex.schema.alterTable('ledgerEntryType', (t) => {
43
43
  t.integer('ledgerAccountTypeId').unsigned().nullable()
@@ -45,7 +45,7 @@ exports.up = async (knex, Promise) => {
45
45
  })
46
46
  }
47
47
  })
48
- await knex.schema.hasTable('settlement').then(function(exists) {
48
+ await knex.schema.hasTable('settlement').then(function (exists) {
49
49
  if (exists) {
50
50
  return knex.schema.alterTable('settlement', (t) => {
51
51
  t.integer('settlementModelId').unsigned().nullable()
@@ -27,40 +27,40 @@
27
27
  --------------
28
28
  ******/
29
29
 
30
- // Notes: these changes are required for the quoting-service and are not used by central-ledger
31
- // This implements [Central-ledger migration scripts should configure the Quote Party table to utf8 follow-up #2522](https://github.com/mojaloop/project/issues/2522)
32
- // Referencing for MySQL Documentation: https://dev.mysql.com/doc/refman/5.6/en/alter-table.html#alter-table-character-set
33
- 'use strict'
30
+ // Notes: these changes are required for the quoting-service and are not used by central-ledger
31
+ // This implements [Central-ledger migration scripts should configure the Quote Party table to utf8 follow-up #2522](https://github.com/mojaloop/project/issues/2522)
32
+ // Referencing for MySQL Documentation: https://dev.mysql.com/doc/refman/5.6/en/alter-table.html#alter-table-character-set
33
+ 'use strict'
34
34
 
35
- const characterSet = 'utf8mb4'
36
- const coalition = 'utf8mb4_unicode_ci'
35
+ const characterSet = 'utf8mb4'
36
+ const coalition = 'utf8mb4_unicode_ci'
37
37
 
38
- exports.up = async (knex) => {
39
- console.log(`WARNING: Migration script 940101_quotePartyIdInfoExtension-2522.js is converting quotePartyIdInfoExtension table to use the following character set ${characterSet} with ${coalition} collation`)
40
- return knex.schema.hasTable('quotePartyIdInfoExtension').then(async (exists) => {
41
- if (exists) {
42
- try {
43
- const result = await knex.select(knex.raw(`
38
+ exports.up = async (knex) => {
39
+ console.log(`WARNING: Migration script 940101_quotePartyIdInfoExtension-2522.js is converting quotePartyIdInfoExtension table to use the following character set ${characterSet} with ${coalition} collation`)
40
+ return knex.schema.hasTable('quotePartyIdInfoExtension').then(async (exists) => {
41
+ if (exists) {
42
+ try {
43
+ const result = await knex.select(knex.raw(`
44
44
  CCSA.character_set_name, CCSA.collation_name
45
45
  FROM information_schema.TABLES T,
46
46
  information_schema.COLLATION_CHARACTER_SET_APPLICABILITY CCSA
47
47
  WHERE CCSA.collation_name = T.table_collation
48
48
  AND T.table_name = "quotePartyIdInfoExtension";
49
49
  `))
50
- console.log(`WARNING: Migration script 940101_quotePartyIdInfoExtension-2522.js - take note of the current configuration if you wish to revert= ${JSON.stringify(result)}`)
51
- await knex.raw(`
50
+ console.log(`WARNING: Migration script 940101_quotePartyIdInfoExtension-2522.js - take note of the current configuration if you wish to revert= ${JSON.stringify(result)}`)
51
+ await knex.raw(`
52
52
  ALTER TABLE quotePartyIdInfoExtension CONVERT TO CHARACTER
53
53
  SET ${characterSet} COLLATE ${coalition}
54
54
  `)
55
- } catch (err) {
56
- console.log(`ERROR: Migration script 940101_quotePartyIdInfoExtension-2522.js - converting quotePartyIdInfoExtension table to use the following character set ${characterSet} with ${coalition} collation has failed!`)
57
- console.error(err)
58
- throw err
59
- }
60
- }
61
- })
62
- }
55
+ } catch (err) {
56
+ console.log(`ERROR: Migration script 940101_quotePartyIdInfoExtension-2522.js - converting quotePartyIdInfoExtension table to use the following character set ${characterSet} with ${coalition} collation has failed!`)
57
+ console.error(err)
58
+ throw err
59
+ }
60
+ }
61
+ })
62
+ }
63
63
 
64
- exports.down = (knex) => {
65
- console.log('WARNING: Migration script 940101_quotePartyIdInfoExtension-2522.js must manually be reversed')
66
- }
64
+ exports.down = (knex) => {
65
+ console.log('WARNING: Migration script 940101_quotePartyIdInfoExtension-2522.js must manually be reversed')
66
+ }
@@ -30,12 +30,12 @@
30
30
  'use strict'
31
31
 
32
32
  exports.up = async (knex) => {
33
- return await knex.schema.hasTable('transferParticipantStateChange').then(function(exists) {
33
+ return await knex.schema.hasTable('transferParticipantStateChange').then(function (exists) {
34
34
  if (!exists) {
35
35
  return knex.schema.createTable('transferParticipantStateChange', (t) => {
36
36
  t.bigIncrements('transferParticipantStateChangeId').primary().notNullable()
37
37
  t.bigInteger('transferParticipantId').notNullable().unsigned()
38
- t.foreign('transferParticipantId','tt_transferParticipantId_fk').references('transferParticipantId').inTable('transferParticipant')
38
+ t.foreign('transferParticipantId', 'tt_transferParticipantId_fk').references('transferParticipantId').inTable('transferParticipant')
39
39
  t.string('settlementWindowStateId', 50)
40
40
  t.foreign('settlementWindowStateId').references('settlementWindowStateId').inTable('settlementWindowState')
41
41
  t.string('reason', 512).defaultTo(null).nullable()
@@ -30,7 +30,7 @@
30
30
  'use strict'
31
31
 
32
32
  exports.up = async (knex) => {
33
- return await knex.schema.hasTable('settlementModel').then(function(exists) {
33
+ return await knex.schema.hasTable('settlementModel').then(function (exists) {
34
34
  if (exists) {
35
35
  return knex.schema.alterTable('settlementModel', (t) => {
36
36
  t.boolean('adjustPosition').defaultTo(false).notNullable()
@@ -40,7 +40,7 @@ exports.up = async (knex) => {
40
40
  }
41
41
 
42
42
  exports.down = function (knex) {
43
- return knex.schema.alterTable('settlementModel',(t) => {
43
+ return knex.schema.alterTable('settlementModel', (t) => {
44
44
  t.dropColumn('adjustPosition')
45
45
  })
46
46
  }
@@ -34,13 +34,13 @@ exports.up = async (knex) => {
34
34
  return knex.schema.dropTableIfExists('transferParticipantStateChange')
35
35
  }
36
36
 
37
- exports.down = async function(knex, Promise) {
38
- return await knex.schema.hasTable('transferParticipantStateChange').then(function(exists) {
37
+ exports.down = async function (knex, Promise) {
38
+ return await knex.schema.hasTable('transferParticipantStateChange').then(function (exists) {
39
39
  if (!exists) {
40
40
  return knex.schema.createTable('transferParticipantStateChange', (t) => {
41
41
  t.bigIncrements('transferParticipantStateChangeId').primary().notNullable()
42
42
  t.bigInteger('transferParticipantId').notNullable().unsigned()
43
- t.foreign('transferParticipantId','tt_transferParticipantId_fk').references('transferParticipantId').inTable('transferParticipant')
43
+ t.foreign('transferParticipantId', 'tt_transferParticipantId_fk').references('transferParticipantId').inTable('transferParticipant')
44
44
  t.string('settlementWindowStateId', 50)
45
45
  t.foreign('settlementWindowStateId').references('settlementWindowStateId').inTable('settlementWindowState')
46
46
  t.string('reason', 512).defaultTo(null).nullable()
@@ -30,11 +30,11 @@
30
30
  'use strict'
31
31
 
32
32
  exports.up = async (knex) => {
33
- await knex.schema.hasTable('settlementModel').then(async function(tableExists) {
33
+ await knex.schema.hasTable('settlementModel').then(async function (tableExists) {
34
34
  if (tableExists) {
35
35
  await knex.schema.hasColumn('settlementModel', 'settlementAccountTypeId')
36
36
  .then(async (columnExists) => {
37
- if (!columnExists){
37
+ if (!columnExists) {
38
38
  await knex.schema.alterTable('settlementModel', (t) => {
39
39
  t.integer('settlementAccountTypeId').unsigned().defaultTo(null)
40
40
  })
@@ -66,7 +66,7 @@ exports.up = async (knex) => {
66
66
  }
67
67
 
68
68
  exports.down = function (knex) {
69
- return knex.schema.alterTable('settlementModel',(t) => {
69
+ return knex.schema.alterTable('settlementModel', (t) => {
70
70
  t.dropColumn('settlementAccountTypeId')
71
71
  })
72
72
  }
@@ -0,0 +1,63 @@
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
+ - Valentin Genev <valentin.genev@modusbox.com>
27
+ --------------
28
+ ******/
29
+
30
+ 'use strict'
31
+
32
+ exports.up = async (knex) => {
33
+ return await knex.schema.hasTable('settlementWindowContent').then(async function (exists) {
34
+ if (exists) {
35
+ await knex.schema.hasColumn('settlementWindowContent', 'settlementModelId')
36
+ .then(async (columnExists) => {
37
+ if (!columnExists) {
38
+ return knex.schema.alterTable('settlementWindowContent', (t) => {
39
+ t.integer('SettlementModelId').unsigned().defaultTo(null)
40
+ t.foreign('SettlementModelId').references('SettlementModelId').inTable('settlementModel')
41
+ })
42
+ }
43
+ })
44
+ }
45
+ })
46
+ }
47
+
48
+ exports.down = async function (knex) {
49
+ return await knex.schema.hasTable('settlementWindowContent').then(async function (exists) {
50
+ if (exists) {
51
+ await knex.schema.hasColumn('settlementWindowContent', 'settlementModelId')
52
+ .then(async (columnExists) => {
53
+ if (columnExists) {
54
+ return knex.schema
55
+ .alterTable('settlementWindowContent', (t) => {
56
+ t.dropForeign('SettlementModelId')
57
+ t.dropColumn('SettlementModelId')
58
+ })
59
+ }
60
+ })
61
+ }
62
+ })
63
+ }
@@ -35,11 +35,10 @@
35
35
  'use strict'
36
36
 
37
37
  exports.up = async (knex) => {
38
- return await knex.schema.hasTable('participant').then(function(exists) {
38
+ return await knex.schema.hasTable('participant').then(function (exists) {
39
39
  if (exists) {
40
40
  return knex.schema.alterTable('participant', (t) => {
41
41
  t.boolean('isProxy').defaultTo(false).notNullable()
42
-
43
42
  })
44
43
  }
45
44
  })
@@ -63,4 +63,4 @@ exports.down = function (knex) {
63
63
  })
64
64
  })
65
65
  })
66
- }
66
+ }
@@ -27,7 +27,7 @@
27
27
  **********/
28
28
 
29
29
  exports.up = async (knex) => {
30
- return knex.schema.hasTable('externalParticipant').then(function(exists) {
30
+ return knex.schema.hasTable('externalParticipant').then(function (exists) {
31
31
  if (!exists) {
32
32
  return knex.schema.createTable('externalParticipant', (t) => {
33
33
  t.bigIncrements('externalParticipantId').primary().notNullable()
@@ -42,7 +42,7 @@ exports.up = async (knex) => {
42
42
  }
43
43
 
44
44
  exports.down = function (knex) {
45
- return knex.schema.hasTable('externalParticipant').then(function(exists) {
45
+ return knex.schema.hasTable('externalParticipant').then(function (exists) {
46
46
  if (!exists) {
47
47
  return knex.schema.dropTableIfExists('externalParticipant')
48
48
  }
@@ -29,7 +29,7 @@
29
29
  const EP_ID_FIELD = 'externalParticipantId'
30
30
 
31
31
  exports.up = async (knex) => {
32
- return knex.schema.hasTable('transferParticipant').then(function(exists) {
32
+ return knex.schema.hasTable('transferParticipant').then(function (exists) {
33
33
  if (exists) {
34
34
  return knex.schema.alterTable('transferParticipant', (t) => {
35
35
  t.bigint(EP_ID_FIELD).unsigned().nullable()
@@ -41,7 +41,7 @@ exports.up = async (knex) => {
41
41
  }
42
42
 
43
43
  exports.down = async (knex) => {
44
- return knex.schema.hasTable('transferParticipant').then(function(exists) {
44
+ return knex.schema.hasTable('transferParticipant').then(function (exists) {
45
45
  if (exists) {
46
46
  return knex.schema.alterTable('transferParticipant', (t) => {
47
47
  t.dropIndex(EP_ID_FIELD)
@@ -30,7 +30,7 @@
30
30
  'use strict'
31
31
 
32
32
  exports.up = async (knex) => {
33
- return await knex.schema.hasTable('transferForwarded').then(function(exists) {
33
+ return await knex.schema.hasTable('transferForwarded').then(function (exists) {
34
34
  if (!exists) {
35
35
  return knex.schema.createTable('transferForwarded', (t) => {
36
36
  t.bigIncrements('transferForwardedId').primary().notNullable()
@@ -30,7 +30,7 @@
30
30
  'use strict'
31
31
 
32
32
  exports.up = async (knex) => {
33
- return await knex.schema.hasTable('fxTransferForwarded').then(function(exists) {
33
+ return await knex.schema.hasTable('fxTransferForwarded').then(function (exists) {
34
34
  if (!exists) {
35
35
  return knex.schema.createTable('fxTransferForwarded', (t) => {
36
36
  t.bigIncrements('fxTransferForwardedId').primary().notNullable()
@@ -0,0 +1,85 @@
1
+ import { after, before, describe, it } from "node:test"
2
+ import assert from "node:assert"
3
+ import Harness from '../../testing/harness'
4
+ import { Snapshot } from "../../testing/snapshot"
5
+ import * as ApiHelpers from '../../testing/api-helpers'
6
+
7
+ import externalParticipant from './externalParticipant'
8
+ const db = require('../../lib/db')
9
+ const harness = Harness.getInstance()
10
+
11
+ describe('models/participant/externalParticipant', () => {
12
+ before(async () => {
13
+ await harness.up()
14
+ await harness.setupGlobals()
15
+ })
16
+
17
+ after(async () => {
18
+ await harness.teardownGlobals()
19
+ await harness.down()
20
+ })
21
+
22
+ it('Should throw error on inserting a record without related proxyId in participant table.', async () => {
23
+ try {
24
+ await externalParticipant.create({
25
+ proxyId: 0,
26
+ name: 'name'
27
+ })
28
+ } catch (err: any) {
29
+ assert(err)
30
+ assert(err.extensions)
31
+ assert(err.extensions[0])
32
+
33
+ Snapshot.from(`{
34
+ "key": "system",
35
+ "value": "[\\"db\\"]"
36
+ }`).checkStringUnwrap(JSON.stringify(err.extensions[0], null, 2))
37
+
38
+ assert(err.apiErrorCode)
39
+ assert(err.apiErrorCode.code)
40
+ assert(err.apiErrorCode.code === '2001')
41
+ return
42
+ }
43
+
44
+ throw new Error('Expected test failure.')
45
+ })
46
+
47
+ it('Should not throw error on inserting a record, if the name already exists', async () => {
48
+ // First create the hub + a participant.
49
+ const createHubPayload: ApiHelpers.CreateHubPayload = {
50
+ currencies: ['USD'],
51
+ settlementModels: [{
52
+ name: `DEFERRED_MULTILATERAL_NET_USD`,
53
+ settlementGranularity: "NET",
54
+ settlementInterchange: "MULTILATERAL",
55
+ settlementDelay: "DEFERRED",
56
+ currency: 'USD',
57
+ requireLiquidityCheck: true,
58
+ ledgerAccountType: "POSITION",
59
+ settlementAccountType: "SETTLEMENT",
60
+ autoPositionReset: true
61
+ }]
62
+ }
63
+ await ApiHelpers.createHub(harness, createHubPayload)
64
+ await ApiHelpers.createDfsp(harness, {
65
+ name: 'dfsp_f',
66
+ currencies: ['USD'],
67
+ isProxy: false,
68
+ initialPostionsAndLimits: [
69
+ {
70
+ initialPosition: 0,
71
+ value: 100000
72
+ }
73
+ ],
74
+ deposits: [10000]
75
+ })
76
+
77
+ const { participantId } = await db.from('participant').findOne({})
78
+ const result = await externalParticipant.create({
79
+ name: `epName-${Date.now()}`,
80
+ proxyId: participantId,
81
+ })
82
+
83
+ assert(result)
84
+ })
85
+ })
@@ -389,7 +389,8 @@ const getParticipantLimitByParticipantCurrencyLimit = async (participantId, curr
389
389
  participantId,
390
390
  currencyId: participantCurrency.currencyId,
391
391
  participantLimitTypeId: participantLimitRow.participantLimitTypeId,
392
- value: participantLimitRow.value
392
+ value: participantLimitRow.value,
393
+ thresholdAlarmPercentage: participantLimitRow.thresholdAlarmPercentage
393
394
  }
394
395
  }
395
396
  }
@@ -413,7 +414,8 @@ const getParticipantLimitByParticipantCurrencyLimit = async (participantId, curr
413
414
  'participant.participantId AS participantId',
414
415
  'pc.currencyId AS currencyId',
415
416
  'pl.participantLimitTypeId as participantLimitTypeId',
416
- 'pl.value AS value'
417
+ 'pl.value AS value',
418
+ 'pl.thresholdAlarmPercentage AS thresholdAlarmPercentage'
417
419
  ).first()
418
420
  })
419
421
  }
@@ -28,7 +28,7 @@
28
28
  'use strict'
29
29
 
30
30
  const Cache = require('../../lib/cache')
31
- const Config = require('../../../src/lib/config')
31
+ const Config = require('../../lib/config')
32
32
  const ParticipantCurrencyModel = require('../../models/participant/participantCurrency')
33
33
  const rethrow = require('../../shared/rethrow')
34
34
 
@@ -213,9 +213,15 @@ const prepareChangeParticipantPositionTransaction = async (transferList) => {
213
213
  reservedValue: new MLNumber(initialParticipantPosition.reservedValue).subtract(sumTransfersInBatch).toFixed(Config.AMOUNT.SCALE),
214
214
  changedDate: transactionTimestamp
215
215
  })
216
+
216
217
  // TODO this limit needs to be clarified
217
- if (processedPositionValue.toNumber() > liquidityCover.multiply(participantLimit.thresholdAlarmPercentage).toNumber()) {
218
- limitAlarms.push(participantLimit)
218
+ // It appears that participantLimit.thresholdAlarmPercentage is always undefined.
219
+ // @mojaloop/ml-number@11.1.5 broke this line since it throws when an undefined value is
220
+ // passed in. For now, I'm putting in a placeholder of 1.
221
+ if (participantLimit.thresholdAlarmPercentage) {
222
+ if (processedPositionValue.toNumber() > liquidityCover.multiply(participantLimit.thresholdAlarmPercentage).toNumber()) {
223
+ limitAlarms.push(participantLimit)
224
+ }
219
225
  }
220
226
  histTimerUpdateParticipantPositionEnd({ success: true, queryName: 'facade_prepareChangeParticipantPositionTransaction_transaction_UpdateParticipantPosition' })
221
227
  /*