@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.
- package/.grype.yaml +3 -0
- package/.license-scanner.json +16 -0
- package/.ncurc.yaml +19 -13
- package/.nvmrc +1 -1
- package/.nycrc.yml +14 -2
- package/CHANGELOG.md +51 -0
- package/Dockerfile +13 -10
- package/README.md +39 -89
- package/audit-ci.jsonc +1 -1
- package/config/default.json +60 -3
- package/config/deprecated.default-settlement.json +160 -0
- package/docker/ml-api-adapter/default.json +28 -0
- package/docker-compose.yml +6 -0
- package/nodemon.json +6 -0
- package/package.json +128 -64
- package/{sbom-v19.13.2.csv → sbom-v20.0.0.csv} +886 -736
- package/scripts/_wait4_all.js +5 -5
- package/scripts/transferSettlementTemp/interchangeFeeCalculation.js +51 -0
- package/src/api/index.ts +30 -0
- package/src/api/interface/swagger.json +2249 -2054
- package/src/api/participants/routes.js +1 -1
- package/src/api/root/handler.int.ts +55 -0
- package/src/api/routes.js +7 -6
- package/src/api/server.ts +27 -0
- package/src/api/server.unit.ts +16 -0
- package/src/api/settlementModels/routes.js +4 -4
- package/src/domain/participant/index.d.ts +47 -0
- package/src/domain/participant/index.int.ts +724 -0
- package/src/domain/participant/index.js +4 -5
- package/src/domain/position/fx-prepare.js +1 -1
- package/src/domain/position/fx-timeout-reserved.js +6 -0
- package/src/domain/position/prepare.js +1 -1
- package/src/handlers/admin/handler.js +1 -1
- package/src/handlers/index.js +30 -0
- package/src/handlers/positions/handler.js +0 -2
- package/src/handlers/positions/handlerBatch.js +5 -5
- package/src/handlers/register.js +44 -29
- package/src/handlers/timeouts/handler.js +1 -4
- package/src/handlers/transfers/fx-abort.int.ts +209 -0
- package/src/handlers/transfers/fx-handlers.int.ts +275 -0
- package/src/handlers/transfers/fx-timeout.int.ts +284 -0
- package/src/handlers/transfers/handler.js +1 -3
- package/src/handlers/transfers/handlers.int.ts +538 -0
- package/src/handlers/transfers/prepare.int.ts +1283 -0
- package/src/handlers/transfers/prepare.js +2 -2
- package/src/knexfile.js +19 -0
- package/src/lib/cache.js +1 -1
- package/src/lib/config/index.ts +60 -0
- package/src/lib/config/resolver.ts +231 -0
- package/src/lib/config/resolver.unit.ts +72 -0
- package/src/lib/config/types.ts +372 -0
- package/src/lib/config/util.ts +523 -0
- package/src/lib/config/util.unit.ts +825 -0
- package/src/lib/migrator.js +3 -3
- package/src/lib/proxyCache.js +3 -3
- package/{migrations → src/migrations}/100100_event.js +1 -1
- package/{migrations → src/migrations}/110100_contactType.js +1 -1
- package/{migrations → src/migrations}/110200_currency.js +1 -1
- package/{migrations → src/migrations}/110201_currency-scale.js +1 -1
- package/{migrations → src/migrations}/110300_endpointType.js +1 -1
- package/{migrations → src/migrations}/110400_ledgerEntryType.js +1 -1
- package/{migrations → src/migrations}/110450_ledgerAccountType.js +1 -1
- package/{migrations → src/migrations}/110500_participantLimitType.js +1 -1
- package/{migrations → src/migrations}/110600_transferParticipantRoleType.js +1 -1
- package/{migrations → src/migrations}/110700_transferState.js +1 -1
- package/{migrations → src/migrations}/110900_settlementState.js +1 -1
- package/{migrations → src/migrations}/112000_bulkTransferState.js +1 -1
- package/{migrations → src/migrations}/112100_bulkProcessingState.js +1 -1
- package/{migrations → src/migrations}/200100_participant.js +1 -1
- package/{migrations → src/migrations}/200200_participantContact.js +1 -1
- package/{migrations → src/migrations}/200300_participantEndpoint.js +1 -1
- package/{migrations → src/migrations}/200400_participantParty.js +1 -1
- package/{migrations → src/migrations}/200600_token.js +1 -1
- package/{migrations → src/migrations}/200601_token-indexes.js +1 -1
- package/{migrations → src/migrations}/300100_transferDuplicateCheck.js +2 -2
- package/{migrations → src/migrations}/300150_bulkTransferDuplicateCheck.js +2 -2
- package/{migrations → src/migrations}/300200_transfer.js +2 -2
- package/{migrations → src/migrations}/300202_transfer-decimal184.js +1 -1
- package/{migrations → src/migrations}/300250_bulkTransfer.js +2 -3
- package/{migrations → src/migrations}/300275_bulkTransferAssociation.js +2 -3
- package/{migrations → src/migrations}/300300_ilpPacket.js +1 -1
- package/{migrations → src/migrations}/300400_transferStateChange.js +1 -1
- package/{migrations → src/migrations}/300450_bulkTransferStateChange.js +1 -1
- package/{migrations → src/migrations}/300500_segment.js +1 -1
- package/{migrations → src/migrations}/310100_participantCurrency.js +1 -1
- package/{migrations → src/migrations}/310200_transferParticipant.js +1 -1
- package/{migrations → src/migrations}/310202_transferParticipant-decimal184.js +1 -1
- package/{migrations → src/migrations}/310204_transferParticipant-participantId.js +2 -2
- package/{migrations → src/migrations}/310300_participantPosition.js +1 -1
- package/{migrations → src/migrations}/310302_participantPosition-decimal184.js +1 -1
- package/{migrations → src/migrations}/310400_participantPositionChange.js +1 -1
- package/{migrations → src/migrations}/310402_participantPositionChange-decimal184.js +1 -1
- package/{migrations → src/migrations}/310403_participantPositionChange-participantCurrencyId.js +2 -2
- package/{migrations → src/migrations}/310404_participantPositionChange-change.js +2 -2
- package/{migrations → src/migrations}/310500_participantLimit.js +1 -1
- package/{migrations → src/migrations}/310502_participantLimit-decimal184.js +1 -1
- package/{migrations → src/migrations}/400100_settlementWindow.js +1 -1
- package/{migrations → src/migrations}/400200_settlement.js +1 -1
- package/{migrations → src/migrations}/400300_settlementSettlementWindow.js +1 -1
- package/{migrations → src/migrations}/400301_settlementSettlementWindow-indexes.js +0 -1
- package/{migrations → src/migrations}/400400_settlementWindowStateChange.js +1 -1
- package/{migrations → src/migrations}/400500_settlementTransferParticipant.js +1 -1
- package/{migrations → src/migrations}/400502_settlementTransferParticipant-decimal184.js +1 -1
- package/{migrations → src/migrations}/400600_settlementParticipantCurrency.js +1 -1
- package/{migrations → src/migrations}/400602_settlementParticipantCurrency-decimal184.js +1 -1
- package/{migrations → src/migrations}/400700_settlementParticipantCurrencyStateChange.js +1 -1
- package/{migrations → src/migrations}/400800_settlementStateChange.js +1 -1
- package/{migrations → src/migrations}/400900_settlementWindowContent.js +1 -1
- package/{migrations → src/migrations}/401000_settlementWindowContentStateChange.js +1 -1
- package/{migrations → src/migrations}/401001_settlementWindowContentStateChange-indexes.js +6 -6
- package/{migrations → src/migrations}/401200_settlementContentAggregation.js +1 -1
- package/{migrations → src/migrations}/401300_settlementModel.js +1 -1
- package/{migrations → src/migrations}/410100_transferFulfilmentDuplicateCheck.js +1 -1
- package/{migrations → src/migrations}/410102_transferFulfilmentDuplicateCheck-dropForeignTransferId.js +1 -1
- package/{migrations → src/migrations}/410103_transferFulfilmentDuplicateCheck-hashNullable.js +1 -1
- package/{migrations → src/migrations}/410200_transferFulfilment.js +1 -1
- package/{migrations → src/migrations}/410202_transferFulfilment-ilpFulfilment.js +1 -1
- package/{migrations → src/migrations}/410203_transferFulfilment-foreignTransferFulfilmentId.js +1 -1
- package/{migrations → src/migrations}/410240_bulkTransferFulfilmentDuplicateCheck.js +1 -1
- package/{migrations → src/migrations}/410250_bulkTransferFulfilment.js +1 -1
- package/{migrations → src/migrations}/410300_transferExtension.js +1 -1
- package/{migrations → src/migrations}/410302_transferExtension-transferErrorId.js +1 -1
- package/{migrations → src/migrations}/410350_bulkTransferExtension.js +1 -1
- package/{migrations → src/migrations}/410400_transferTimeout.js +1 -1
- package/{migrations → src/migrations}/410450_transferErrorDuplicateCheck.js +1 -1
- package/{migrations → src/migrations}/410500_transferError.js +1 -1
- package/{migrations → src/migrations}/410502_transferError-foreignTransferErrorDuplicateCheckId.js +1 -1
- package/{migrations → src/migrations}/410550_bulkTransferError.js +1 -1
- package/{migrations → src/migrations}/410600_expiringTransfer.js +1 -1
- package/{migrations → src/migrations}/500401_quote-hotfix-2719.js +8 -8
- package/{migrations → src/migrations}/500501_feature-fixSubIdRef.js +12 -12
- package/{migrations → src/migrations}/500601_party-2480.js +3 -3
- package/{migrations → src/migrations}/501001_quoteExtension-quote-service-174.js +1 -2
- package/{migrations → src/migrations}/501002_quoteExtension-2522.js +3 -3
- package/{migrations → src/migrations}/600010_fxTransferType.js +1 -1
- package/{migrations → src/migrations}/600012_fxParticipantCurrencyType.js +1 -1
- package/{migrations → src/migrations}/600100_fxTransferDuplicateCheck.js +2 -2
- package/{migrations → src/migrations}/600110_fxTransferErrorDuplicateCheck.js.js +1 -1
- package/{migrations → src/migrations}/600200_fxTransfer.js +2 -2
- package/{migrations → src/migrations}/600400_fxTransferStateChange.js +1 -1
- package/{migrations → src/migrations}/600501_fxWatchList.js +2 -2
- package/{migrations → src/migrations}/600600_fxTransferFulfilmentDuplicateCheck.js +1 -1
- package/{migrations → src/migrations}/600700_fxTransferFulfilment.js +1 -1
- package/{migrations → src/migrations}/600800_fxTransferExtension.js +1 -1
- package/{migrations → src/migrations}/601400_fxTransferTimeout.js +1 -1
- package/{migrations → src/migrations}/601500_fxTransferError.js +1 -1
- package/{migrations → src/migrations}/610200_fxTransferParticipant.js +1 -1
- package/{migrations → src/migrations}/610202_fxTransferParticipant-participantId.js +2 -2
- package/{migrations → src/migrations}/610403_participantPositionChange-fxTransfer.js +1 -1
- package/{migrations → src/migrations}/800100_quotePartyView.js +1 -1
- package/{migrations → src/migrations}/800101_feature-fixSubIdRef.js +1 -1
- package/{migrations → src/migrations}/800200_quoteView.js +1 -1
- package/{migrations → src/migrations}/800300_quoteResponseView.js +1 -1
- package/{migrations → src/migrations}/900100_foreign-keys.js +18 -18
- package/{migrations → src/migrations}/900101_foreign-keys.js +6 -6
- package/{migrations → src/migrations}/910100_feature904DDL.js +7 -7
- package/{migrations → src/migrations}/910101_feature904DataMigration.js +1 -1
- package/{migrations → src/migrations}/910102_feature949DataMigration.js +1 -1
- package/{migrations → src/migrations}/910103_feature1093SettlementByCurrency.js +3 -3
- package/{migrations → src/migrations}/940101_quotePartyIdInfoExtension-2522.js +25 -25
- package/{migrations → src/migrations}/950101_transferParticipantStateChange.js +2 -2
- package/{migrations → src/migrations}/950102_settlementModel-adjustPosition.js +2 -2
- package/{migrations → src/migrations}/950103_dropTransferParticipantStateChange.js +3 -3
- package/{migrations → src/migrations}/950104_settlementModel-settlementAccountTypeId.js +3 -3
- package/src/migrations/950107_settlementWindowContent_foreign_settlementModel.js +63 -0
- package/{migrations → src/migrations}/950108_participantProxy.js +1 -2
- package/{migrations → src/migrations}/950120_fxQuoteConversionTerms_sourceAmount_nullable.js +1 -1
- package/{migrations → src/migrations}/960100_create_externalParticipant.js +2 -2
- package/{migrations → src/migrations}/960110_alter_transferParticipant__addFiled_externalParticipantId.js +2 -2
- package/{migrations → src/migrations}/961001_transferForwarded.js +1 -1
- package/{migrations → src/migrations}/961002_fxTransferForwarded.js +1 -1
- package/src/models/participant/externalParticipant.int.ts +85 -0
- package/src/models/participant/facade.js +4 -2
- package/src/models/participant/participantCurrencyCached.js +1 -1
- package/src/models/position/facade.js +8 -2
- package/src/models/transfer/facade.int.ts +139 -0
- package/src/models/transfer/facade.js +8 -3
- package/src/models/transfer/transferDuplicateCheck.js +2 -2
- package/src/models/transfer/transferError.int.ts +112 -0
- package/src/models/transfer/transferExtension.int.ts +137 -0
- package/src/models/transfer/transferStateChange.int.ts +117 -0
- package/{seeds → src/seeds}/participant.js +1 -1
- package/{seeds → src/seeds}/settlementInterchange.js +1 -0
- package/src/settlement/api/handlerRoutes.js +71 -0
- package/src/settlement/api/handlers/health.js +10 -0
- package/src/settlement/api/handlers/index.js +57 -0
- package/src/settlement/api/handlers/settlementWindows/{id}.js +103 -0
- package/src/settlement/api/handlers/settlementWindows.js +77 -0
- package/src/settlement/api/handlers/settlements/{id}.js +133 -0
- package/src/settlement/api/handlers/settlements/{sid}/participants/{pid}/accounts/{aid}.js +127 -0
- package/src/settlement/api/handlers/settlements/{sid}/participants/{pid}.js +127 -0
- package/src/settlement/api/handlers/settlements.js +114 -0
- package/src/settlement/api/openapiRouting.js +87 -0
- package/src/settlement/api/routes.js +176 -0
- package/src/settlement/domain/rules/index.js +46 -0
- package/src/settlement/domain/settlement/index.js +405 -0
- package/src/settlement/domain/settlementWindow/index.js +117 -0
- package/src/settlement/domain/transactions/index.js +83 -0
- package/src/settlement/domain/transferSettlement/index.js +57 -0
- package/src/settlement/handlers/deferredSettlement/handler.js +180 -0
- package/src/settlement/handlers/grossSettlement/handler.js +180 -0
- package/src/settlement/handlers/index.js +101 -0
- package/src/settlement/handlers/register.js +92 -0
- package/src/settlement/handlers/rules/handler.js +164 -0
- package/src/settlement/interface/swagger-handler.json +34 -0
- package/src/settlement/interface/swagger.json +1560 -0
- package/src/settlement/lib/db.js +32 -0
- package/src/settlement/lib/kafka/index.js +41 -0
- package/src/settlement/lib/kafka/producer.js +142 -0
- package/src/settlement/lib/scriptEngine.js +99 -0
- package/src/settlement/lib/scriptsLoader.js +175 -0
- package/src/settlement/lib/utility.js +243 -0
- package/src/settlement/models/ilpPackets/ilpPacket.js +42 -0
- package/src/settlement/models/lib/enums.js +192 -0
- package/src/settlement/models/misc/migrationLock.js +53 -0
- package/src/settlement/models/settlement/facade.js +1652 -0
- package/src/settlement/models/settlement/index.js +55 -0
- package/src/settlement/models/settlement/participantCurrency.js +48 -0
- package/src/settlement/models/settlement/settlement.js +49 -0
- package/src/settlement/models/settlement/settlementModel.js +44 -0
- package/src/settlement/models/settlement/settlementParticipantCurrency.js +61 -0
- package/src/settlement/models/settlement/settlementStateChange.js +44 -0
- package/src/settlement/models/settlement/settlementTransferParticipant.js +46 -0
- package/src/settlement/models/settlementWindow/facade.js +345 -0
- package/src/settlement/models/settlementWindow/index.js +47 -0
- package/src/settlement/models/settlementWindow/settlementWindowStateChange.js +55 -0
- package/src/settlement/models/settlementWindowContent/facade.js +79 -0
- package/src/settlement/models/settlementWindowContent/index.js +40 -0
- package/src/settlement/models/settlementWindowContent/settlementWindowContentStateChange.js +53 -0
- package/src/settlement/models/transferSettlement/facade.js +363 -0
- package/src/settlement/models/transferSettlement/index.js +42 -0
- package/src/settlement/shared/logger/index.js +7 -0
- package/src/settlement/shared/plugins.js +88 -0
- package/src/settlement/shared/setup.js +224 -0
- package/src/settlement/utils/truthyProperty.js +37 -0
- package/src/shared/legacyUtilShim.js +20 -0
- package/src/shared/plugins.js +3 -3
- package/src/shared/results.ts +22 -0
- package/src/shared/results.unit.ts +38 -0
- package/src/shared/setup.js +14 -1
- package/src/testing/api-helpers.ts +1222 -0
- package/src/testing/exec-async.ts +67 -0
- package/src/testing/harness.snapshot.sql +3895 -0
- package/src/testing/harness.test.ts +15 -0
- package/src/testing/harness.ts +1160 -0
- package/src/testing/kafka.ts +221 -0
- package/src/testing/prng.ts +82 -0
- package/src/testing/rdkafka.test.ts +263 -0
- package/src/testing/run.ts +559 -0
- package/src/testing/snapshot.test.ts +92 -0
- package/src/testing/snapshot.ts +549 -0
- package/src/testing/tap-stream.ts +164 -0
- package/src/testing/types.ts +95 -0
- package/src/testing/util.ts +333 -0
- package/src/types/central-services-error-handling.d.ts +72 -0
- package/src/types/central-services-stream.d.ts +148 -0
- package/test-integration.Dockerfile +0 -2
- package/test.Dockerfile +0 -2
- package/tsconfig.json +40 -0
- package/config/knexfile.js +0 -19
- package/migrations/950107_settlementWindowContent_foreign_settlementModel.js +0 -63
- package/src/api/index.js +0 -16
- package/src/lib/config.js +0 -81
- /package/{migrations → src/migrations}/110101_contactType-indexes.js +0 -0
- /package/{migrations → src/migrations}/110301_endpointType-indexes.js +0 -0
- /package/{migrations → src/migrations}/110401_ledgerEntryType-indexes.js +0 -0
- /package/{migrations → src/migrations}/110451_ledgerAccountType-indexes.js +0 -0
- /package/{migrations → src/migrations}/110501_participantLimitType-indexes.js +0 -0
- /package/{migrations → src/migrations}/110601_transferParticipantRoleType-indexes.js +0 -0
- /package/{migrations → src/migrations}/110800_settlementWindowState.js +0 -0
- /package/{migrations → src/migrations}/111000_amountType.js +0 -0
- /package/{migrations → src/migrations}/111001_amountType-indexes.js +0 -0
- /package/{migrations → src/migrations}/111100_balanceOfPayments.js +0 -0
- /package/{migrations → src/migrations}/111101_balanceOfPayments-indexes.js +0 -0
- /package/{migrations → src/migrations}/111200_partyIdentifierType.js +0 -0
- /package/{migrations → src/migrations}/111201_partyIdentifierType-indexes.js +0 -0
- /package/{migrations → src/migrations}/111300_partyType.js +0 -0
- /package/{migrations → src/migrations}/111301_partyType-indexes.js +0 -0
- /package/{migrations → src/migrations}/111400_quoteDuplicateCheck.js +0 -0
- /package/{migrations → src/migrations}/111500_transactionInitiator.js +0 -0
- /package/{migrations → src/migrations}/111501_transactionInitiator-indexes.js +0 -0
- /package/{migrations → src/migrations}/111600_transactionInitiatorType.js +0 -0
- /package/{migrations → src/migrations}/111601_transactionInitiatorType-indexes.js +0 -0
- /package/{migrations → src/migrations}/111700_settlementDelay.js +0 -0
- /package/{migrations → src/migrations}/111701_settlementDelay-indexes.js +0 -0
- /package/{migrations → src/migrations}/111800_settlementInterchange.js +0 -0
- /package/{migrations → src/migrations}/111801_settlementInterchange-indexes.js +0 -0
- /package/{migrations → src/migrations}/111900_settlementGranularity.js +0 -0
- /package/{migrations → src/migrations}/111901_settlementGranularity-indexes.js +0 -0
- /package/{migrations → src/migrations}/112101_bulkProcessingState-indexes.js +0 -0
- /package/{migrations → src/migrations}/200101_participant-indexes.js +0 -0
- /package/{migrations → src/migrations}/200201_participantContact-indexes.js +0 -0
- /package/{migrations → src/migrations}/200301_participantEndpoint-indexes.js +0 -0
- /package/{migrations → src/migrations}/200401_participantParty-indexes.js +0 -0
- /package/{migrations → src/migrations}/300201_transfer-indexes.js +0 -0
- /package/{migrations → src/migrations}/300251_bulkTransfer-indexes.js +0 -0
- /package/{migrations → src/migrations}/300276_bulkTransferAssociation-indexes.js +0 -0
- /package/{migrations → src/migrations}/300401_transferStateChange-indexes.js +0 -0
- /package/{migrations → src/migrations}/300451_bulkTransferStateChange-indexes.js +0 -0
- /package/{migrations → src/migrations}/300501_segment-indexes.js +0 -0
- /package/{migrations → src/migrations}/310101_participantCurrency-indexes.js +0 -0
- /package/{migrations → src/migrations}/310201_transferParticipant-indexes.js +0 -0
- /package/{migrations → src/migrations}/310203_transferParticipant-indexes.js +0 -0
- /package/{migrations → src/migrations}/310301_participantPosition-indexes.js +0 -0
- /package/{migrations → src/migrations}/310401_participantPositionChange-indexes.js +0 -0
- /package/{migrations → src/migrations}/310405_participantPositionChange-positionChange.js +0 -0
- /package/{migrations → src/migrations}/310406_participantPositionChange-positionChange-revert.js +0 -0
- /package/{migrations → src/migrations}/310501_participantLimit-indexes.js +0 -0
- /package/{migrations → src/migrations}/310503_participantLimit-indexes-composite.js +0 -0
- /package/{migrations → src/migrations}/400401_settlmentWindowStateChange-indexes.js +0 -0
- /package/{migrations → src/migrations}/400501_settlementTransferParticipant-indexes.js +0 -0
- /package/{migrations → src/migrations}/400601_settlementParticipantCurrency-indexes.js +0 -0
- /package/{migrations → src/migrations}/400701_settlementParticipantCurrencyStateChange-indexes.js +0 -0
- /package/{migrations → src/migrations}/400801_settlementStateChange-indexes.js +0 -0
- /package/{migrations → src/migrations}/401002_settlementWindowContent-indexes.js +0 -0
- /package/{migrations → src/migrations}/401201_settlementContentAggregation-indexes.js +0 -0
- /package/{migrations → src/migrations}/401301_settlementModel-indexes.js +0 -0
- /package/{migrations → src/migrations}/410101_transferFulfilmentDuplicateCheck-indexes.js +0 -0
- /package/{migrations → src/migrations}/410201_transferFulfilment-indexes.js +0 -0
- /package/{migrations → src/migrations}/410301_transferExtension-indexes.js +0 -0
- /package/{migrations → src/migrations}/410351_bulkTransferExtension-indexes.js +0 -0
- /package/{migrations → src/migrations}/410401_transferTimeout-indexes.js +0 -0
- /package/{migrations → src/migrations}/410501_transferError-indexes.js +0 -0
- /package/{migrations → src/migrations}/410551_bulkTransferError-indexes.js +0 -0
- /package/{migrations → src/migrations}/410601_expiringTransfer-indexes.js +0 -0
- /package/{migrations → src/migrations}/500100_transactionReference.js +0 -0
- /package/{migrations → src/migrations}/500101_transactionReference-indexes.js +0 -0
- /package/{migrations → src/migrations}/500200_transactionScenario.js +0 -0
- /package/{migrations → src/migrations}/500201_transactionScenario-indexes.js +0 -0
- /package/{migrations → src/migrations}/500300_transactionSubScenario.js +0 -0
- /package/{migrations → src/migrations}/500400_quote.js +0 -0
- /package/{migrations → src/migrations}/500500_quoteParty.js +0 -0
- /package/{migrations → src/migrations}/500600_party.js +0 -0
- /package/{migrations → src/migrations}/500700_quoteResponse.js +0 -0
- /package/{migrations → src/migrations}/500800_quoteResponseIlpPacket.js +0 -0
- /package/{migrations → src/migrations}/500900_geoCode.js +0 -0
- /package/{migrations → src/migrations}/501000_quoteExtension.js +0 -0
- /package/{migrations → src/migrations}/501100_quoteResponseDuplicateCheck.js +0 -0
- /package/{migrations → src/migrations}/501200_quoteError.js +0 -0
- /package/{migrations → src/migrations}/501300_transferRules.js +0 -0
- /package/{migrations → src/migrations}/600011_fxTransferType-indexes.js +0 -0
- /package/{migrations → src/migrations}/600013_fxParticipantCurrencyType-indexes.js +0 -0
- /package/{migrations → src/migrations}/600201_fxTransfer-indexes.js +0 -0
- /package/{migrations → src/migrations}/600401_fxTransferStateChange-indexes.js +0 -0
- /package/{migrations → src/migrations}/600502_fxWatchList-indexes.js +0 -0
- /package/{migrations → src/migrations}/600601_fxTransferFulfilmentDuplicateCheck-indexes.js +0 -0
- /package/{migrations → src/migrations}/600701_fxTransferFulfilment-indexes.js +0 -0
- /package/{migrations → src/migrations}/601401_fxTransferTimeout-indexes.js +0 -0
- /package/{migrations → src/migrations}/601501_fxTransferError-indexes.js +0 -0
- /package/{migrations → src/migrations}/610201_fxTransferParticipant-indexes.js +0 -0
- /package/{migrations → src/migrations}/910102_hotfix954.js +0 -0
- /package/{migrations → src/migrations}/940100_quotePartyIdInfoExtension.js +0 -0
- /package/{migrations → src/migrations}/950100_settlementContentAggregation-decimal184.js +0 -0
- /package/{migrations → src/migrations}/950106_unique_settlement_model_ledger_account_currency.js +0 -0
- /package/{migrations → src/migrations}/950109_fxQuote.js +0 -0
- /package/{migrations → src/migrations}/950110_fxQuoteResponse.js +0 -0
- /package/{migrations → src/migrations}/950111_fxQuoteError.js +0 -0
- /package/{migrations → src/migrations}/950113_fxQuoteDuplicateCheck.js +0 -0
- /package/{migrations → src/migrations}/950114_fxQuoteResponseDuplicateCheck.js +0 -0
- /package/{migrations → src/migrations}/950115_fxQuoteConversionTerms.js +0 -0
- /package/{migrations → src/migrations}/950116_fxQuoteConversionTermsExtension.js +0 -0
- /package/{migrations → src/migrations}/950117_fxQuoteResponseConversionTerms.js +0 -0
- /package/{migrations → src/migrations}/950118_fxQuoteResponseConversionTermsExtension.js +0 -0
- /package/{migrations → src/migrations}/950119_fxCharge.js +0 -0
- /package/{migrations → src/migrations}/960111_alter_fxTransferParticipant__addFiled_externalParticipantId.js +0 -0
- /package/{migrations → src/migrations}/960112_fxTransfer-indexes2.js +0 -0
- /package/{migrations → src/migrations}/960113_fxTransferExtension-indexes.js +0 -0
- /package/{migrations → src/migrations}/960114_fxTransferTimeout-indexes2.js +0 -0
- /package/{migrations → src/migrations}/961000_participantEndpoint_unique.js +0 -0
- /package/{migrations → src/migrations}/migration.template +0 -0
- /package/{seeds → src/seeds}/amountType.js +0 -0
- /package/{seeds → src/seeds}/balanceOfPayments.js +0 -0
- /package/{seeds → src/seeds}/bulkProcessingState.js +0 -0
- /package/{seeds → src/seeds}/bulkTransferState.js +0 -0
- /package/{seeds → src/seeds}/currency.js +0 -0
- /package/{seeds → src/seeds}/endpointType.js +0 -0
- /package/{seeds → src/seeds}/fxParticipantCurrencyType.js +0 -0
- /package/{seeds → src/seeds}/fxTransferType.js +0 -0
- /package/{seeds → src/seeds}/ledgerAccountType.js +0 -0
- /package/{seeds → src/seeds}/ledgerEntryType.js +0 -0
- /package/{seeds → src/seeds}/participantLimitType.js +0 -0
- /package/{seeds → src/seeds}/partyIdentifierType.js +0 -0
- /package/{seeds → src/seeds}/partyType.js +0 -0
- /package/{seeds → src/seeds}/settlementDelay.js +0 -0
- /package/{seeds → src/seeds}/settlementGranularity.js +0 -0
- /package/{seeds → src/seeds}/settlementState.js +0 -0
- /package/{seeds → src/seeds}/settlementWindow1State.js +0 -0
- /package/{seeds → src/seeds}/settlementWindow2Open.js +0 -0
- /package/{seeds → src/seeds}/transactionInitiator.js +0 -0
- /package/{seeds → src/seeds}/transactionInitiatorType.js +0 -0
- /package/{seeds → src/seeds}/transactionScenario.js +0 -0
- /package/{seeds → src/seeds}/transferParticipantRoleType.js +0 -0
- /package/{seeds → src/seeds}/transferState.js +0 -0
- /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
|
-
|
|
36
|
-
|
|
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
|
-
|
|
43
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
75
|
-
|
|
76
|
-
|
|
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(
|
|
80
|
-
|
|
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('../
|
|
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())
|
|
@@ -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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
36
|
-
|
|
35
|
+
const characterSet = 'utf8mb4'
|
|
36
|
+
const coalition = 'utf8mb4_unicode_ci'
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
51
|
-
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
65
|
-
|
|
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
|
})
|
|
@@ -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('
|
|
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
|
-
|
|
218
|
-
|
|
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
|
/*
|