@mojaloop/sdk-scheme-adapter 12.0.1 → 12.2.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 (260) hide show
  1. package/.circleci/config.yml +619 -0
  2. package/.env.example +13 -0
  3. package/CHANGELOG.md +29 -0
  4. package/CODEOWNERS +2 -0
  5. package/Dockerfile +35 -0
  6. package/LICENSE.md +10 -0
  7. package/PROXY.md +84 -0
  8. package/README.md +228 -0
  9. package/SECURITY.md +18 -0
  10. package/audit-resolve.json +20 -0
  11. package/docker/ml-testing-toolkit/secrets/keygen.sh +5 -0
  12. package/docker/ml-testing-toolkit/secrets/privatekey.pem +27 -0
  13. package/docker/ml-testing-toolkit/secrets/publickey.cer +21 -0
  14. package/docker/ml-testing-toolkit/secrets/tls/createSecrets.sh +29 -0
  15. package/docker/ml-testing-toolkit/secrets/tls/hub_client.csr +28 -0
  16. package/docker/ml-testing-toolkit/secrets/tls/hub_client_cacert.pem +32 -0
  17. package/docker/ml-testing-toolkit/secrets/tls/hub_client_cakey.key +51 -0
  18. package/docker/ml-testing-toolkit/secrets/tls/hub_client_key.key +51 -0
  19. package/docker/ml-testing-toolkit/secrets/tls/hub_server.csr +28 -0
  20. package/docker/ml-testing-toolkit/secrets/tls/hub_server_cacert.pem +32 -0
  21. package/docker/ml-testing-toolkit/secrets/tls/hub_server_cacert.srl +1 -0
  22. package/docker/ml-testing-toolkit/secrets/tls/hub_server_cakey.key +51 -0
  23. package/docker/ml-testing-toolkit/secrets/tls/hub_server_cert.pem +33 -0
  24. package/docker/ml-testing-toolkit/secrets/tls/hub_server_key.key +51 -0
  25. package/docker/ml-testing-toolkit/secrets/tls/openssl.conf +17 -0
  26. package/docker/ml-testing-toolkit/spec_files/api_definitions/central_admin_9.3/api_spec.yaml +2450 -0
  27. package/docker/ml-testing-toolkit/spec_files/api_definitions/central_admin_9.3/response_map.json +96 -0
  28. package/docker/ml-testing-toolkit/spec_files/api_definitions/fspiop_1.0/api_spec.yaml +4187 -0
  29. package/docker/ml-testing-toolkit/spec_files/api_definitions/fspiop_1.0/callback_map.json +542 -0
  30. package/docker/ml-testing-toolkit/spec_files/api_definitions/fspiop_1.0/mockRef.json +83 -0
  31. package/docker/ml-testing-toolkit/spec_files/api_definitions/fspiop_1.0/trigger_templates/transaction_request_followup.json +125 -0
  32. package/docker/ml-testing-toolkit/spec_files/api_definitions/fspiop_1.1/api_spec.yaml +3703 -0
  33. package/docker/ml-testing-toolkit/spec_files/api_definitions/fspiop_1.1/callback_map.json +568 -0
  34. package/docker/ml-testing-toolkit/spec_files/api_definitions/fspiop_1.1/mockRef.json +83 -0
  35. package/docker/ml-testing-toolkit/spec_files/api_definitions/fspiop_1.1/trigger_templates/transaction_request_followup.json +125 -0
  36. package/docker/ml-testing-toolkit/spec_files/api_definitions/settlements_1.0/api_spec.yaml +983 -0
  37. package/docker/ml-testing-toolkit/spec_files/api_definitions/settlements_1.0/mockRef.json +38 -0
  38. package/docker/ml-testing-toolkit/spec_files/api_definitions/settlements_1.0/response_map.json +34 -0
  39. package/docker/ml-testing-toolkit/spec_files/reports/templates/newman/html_template.html +1074 -0
  40. package/docker/ml-testing-toolkit/spec_files/reports/templates/newman/pdf_template.html +765 -0
  41. package/docker/ml-testing-toolkit/spec_files/reports/templates/newman/script.js +98 -0
  42. package/docker/ml-testing-toolkit/spec_files/rules_callback/config.json +3 -0
  43. package/docker/ml-testing-toolkit/spec_files/rules_callback/default.json +426 -0
  44. package/docker/ml-testing-toolkit/spec_files/rules_response/config.json +3 -0
  45. package/docker/ml-testing-toolkit/spec_files/rules_response/default.json +1623 -0
  46. package/docker/ml-testing-toolkit/spec_files/rules_response/default_pisp_rules.json +161 -0
  47. package/docker/ml-testing-toolkit/spec_files/rules_validation/config.json +3 -0
  48. package/docker/ml-testing-toolkit/spec_files/rules_validation/default.json +672 -0
  49. package/docker/ml-testing-toolkit/spec_files/system_config.json +62 -0
  50. package/docker/ml-testing-toolkit/spec_files/user_config.json +45 -0
  51. package/docker/wait4/setup_hosts_file.sh +25 -0
  52. package/docker/wait4/wait4.config.js +71 -0
  53. package/docker/wait4/wait4.js +204 -0
  54. package/docker-compose.yml +67 -0
  55. package/docs/Mojaloop - Modusbox Onboarding functionality.pdf +0 -0
  56. package/docs/dfspInboundApi.yaml +1091 -0
  57. package/jest.config.js +4 -1
  58. package/package.json +13 -8
  59. package/secrets/jwsSigningKey.key +27 -0
  60. package/secrets/jwsVerificationKeys/mojaloop-sdk.pem +9 -0
  61. package/secrets/jwsVerificationKeys/switch.pem +9 -0
  62. package/sequences.puml +99 -0
  63. package/src/ControlAgent/index.js +221 -0
  64. package/{TestServer → src/ControlServer}/handlers.js +0 -0
  65. package/src/ControlServer/index.js +294 -0
  66. package/{InboundServer → src/InboundServer}/api.yaml +0 -0
  67. package/src/InboundServer/api_template.yaml +69 -0
  68. package/{InboundServer → src/InboundServer}/handlers.js +0 -0
  69. package/{InboundServer → src/InboundServer}/index.js +33 -1
  70. package/{InboundServer → src/InboundServer}/middlewares.js +0 -0
  71. package/{OAuthTestServer → src/OAuthTestServer}/index.js +0 -0
  72. package/{OAuthTestServer → src/OAuthTestServer}/model.js +0 -0
  73. package/{OutboundServer → src/OutboundServer}/api.yaml +0 -0
  74. package/{OutboundServer → src/OutboundServer}/api_interfaces/index.d.ts +0 -0
  75. package/{OutboundServer → src/OutboundServer}/api_interfaces/openapi.d.ts +0 -0
  76. package/{OutboundServer → src/OutboundServer}/api_template/components/parameters/bulkQuoteId.yaml +1 -1
  77. package/{OutboundServer → src/OutboundServer}/api_template/components/parameters/bulkTransferId.yaml +1 -1
  78. package/{OutboundServer → src/OutboundServer}/api_template/components/parameters/requestToPayTransactionId.yaml +1 -1
  79. package/{OutboundServer → src/OutboundServer}/api_template/components/parameters/transferId.yaml +1 -1
  80. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/accountsCreationCompleted.yaml +0 -0
  81. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/accountsCreationError.yaml +0 -0
  82. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/accountsCreationTimeout.yaml +0 -0
  83. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/bulkQuoteBadRequest.yaml +0 -0
  84. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/bulkQuoteServerError.yaml +0 -0
  85. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/bulkQuoteSuccess.yaml +0 -0
  86. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/bulkQuoteTimeout.yaml +0 -0
  87. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/bulkTransferBadRequest.yaml +0 -0
  88. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/bulkTransferServerError.yaml +0 -0
  89. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/bulkTransferSuccess.yaml +0 -0
  90. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/bulkTransferTimeout.yaml +0 -0
  91. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/partiesByIdError404.yaml +1 -1
  92. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/partiesByIdSuccess.yaml +0 -0
  93. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/quotesPostSuccess.yaml +0 -0
  94. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/quotesServerError.yaml +0 -0
  95. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/requestToPaySuccess.yaml +0 -0
  96. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/requestToPayTransferBadRequest.yaml +0 -0
  97. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/requestToPayTransferSuccess.yaml +0 -0
  98. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/simpleTransfersPostSuccess.yaml +0 -0
  99. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/simpleTransfersServerError.yaml +0 -0
  100. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/transferBadRequest.yaml +0 -0
  101. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/transferServerError.yaml +0 -0
  102. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/transferSuccess.yaml +0 -0
  103. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/transferTimeout.yaml +0 -0
  104. package/src/OutboundServer/api_template/components/schemas/accountCreationStatus.yaml +18 -0
  105. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/accountsCreationState.yaml +0 -0
  106. package/src/OutboundServer/api_template/components/schemas/accountsRequest.yaml +20 -0
  107. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/accountsResponse.yaml +1 -1
  108. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/async2SyncCurrentState.yaml +0 -0
  109. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkQuoteErrorResponse.yaml +0 -0
  110. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkQuoteRequest.yaml +2 -2
  111. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkQuoteResponse.yaml +1 -1
  112. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkQuoteStatus.yaml +0 -0
  113. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkQuoteStatusResponse.yaml +1 -1
  114. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkTransferErrorResponse.yaml +0 -0
  115. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkTransferRequest.yaml +2 -2
  116. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkTransferResponse.yaml +1 -1
  117. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkTransferStatus.yaml +0 -0
  118. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkTransferStatusResponse.yaml +1 -1
  119. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/errorAccountsResponse.yaml +0 -0
  120. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/errorQuotesResponse.yaml +0 -0
  121. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/errorResponse.yaml +0 -0
  122. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/errorSimpleTransfersResponse.yaml +0 -0
  123. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/errorTransferResponse.yaml +0 -0
  124. package/src/OutboundServer/api_template/components/schemas/extensionListEmptiable.yaml +6 -0
  125. package/src/OutboundServer/api_template/components/schemas/individualQuote.yaml +32 -0
  126. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/individualQuoteResult.yaml +5 -5
  127. package/src/OutboundServer/api_template/components/schemas/individualTransfer.yaml +32 -0
  128. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/individualTransferFulfilment.yaml +2 -2
  129. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/individualTransferResult.yaml +6 -6
  130. package/src/OutboundServer/api_template/components/schemas/mojaloopError.yaml +5 -0
  131. package/src/OutboundServer/api_template/components/schemas/mojaloopTransactionRequestState.yaml +2 -0
  132. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/partiesByIdResponse.yaml +1 -1
  133. package/src/OutboundServer/api_template/components/schemas/quote.yaml +3 -0
  134. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/quoteError.yaml +0 -0
  135. package/src/OutboundServer/api_template/components/schemas/quotesPostRequest.yaml +13 -0
  136. package/src/OutboundServer/api_template/components/schemas/quotesPostResponse.yaml +48 -0
  137. package/src/OutboundServer/api_template/components/schemas/requestToPayRequest.yaml +39 -0
  138. package/src/OutboundServer/api_template/components/schemas/requestToPayResponse.yaml +41 -0
  139. package/src/OutboundServer/api_template/components/schemas/requestToPayTransferRequest.yaml +42 -0
  140. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/requestToPayTransferResponse.yaml +6 -6
  141. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/simpleTransferServerError.yaml +0 -0
  142. package/src/OutboundServer/api_template/components/schemas/simpleTransfersPostRequest.yaml +12 -0
  143. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/simpleTransfersPostResponse.yaml +1 -1
  144. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/transactionType.yaml +0 -0
  145. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/transferContinuationAcceptOTP.yaml +0 -0
  146. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/transferContinuationAcceptParty.yaml +0 -0
  147. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/transferContinuationAcceptQuote.yaml +0 -0
  148. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/transferError.yaml +0 -0
  149. package/src/OutboundServer/api_template/components/schemas/transferFulfilment.yaml +3 -0
  150. package/src/OutboundServer/api_template/components/schemas/transferParty.yaml +40 -0
  151. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/transferRequest.yaml +4 -4
  152. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/transferResponse.yaml +6 -6
  153. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/transferStatus.yaml +0 -0
  154. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/transferStatusResponse.yaml +1 -1
  155. package/{OutboundServer → src/OutboundServer}/api_template/health.yaml +0 -0
  156. package/{OutboundServer → src/OutboundServer}/api_template/openapi.yaml +0 -0
  157. package/{OutboundServer → src/OutboundServer}/api_template/paths/accounts.yaml +0 -0
  158. package/{OutboundServer → src/OutboundServer}/api_template/paths/bulkQuotes.yaml +0 -0
  159. package/{OutboundServer → src/OutboundServer}/api_template/paths/bulkQuotes_bulkQuoteId.yaml +0 -0
  160. package/{OutboundServer → src/OutboundServer}/api_template/paths/bulkTransfers.yaml +0 -0
  161. package/{OutboundServer → src/OutboundServer}/api_template/paths/bulkTransfers_bulkTransferId.yaml +0 -0
  162. package/{OutboundServer → src/OutboundServer}/api_template/paths/parties_Type_ID.yaml +2 -2
  163. package/{OutboundServer → src/OutboundServer}/api_template/paths/parties_Type_ID_SubId.yaml +3 -3
  164. package/{OutboundServer → src/OutboundServer}/api_template/paths/quotes.yaml +0 -0
  165. package/{OutboundServer → src/OutboundServer}/api_template/paths/requestToPay.yaml +0 -0
  166. package/{OutboundServer → src/OutboundServer}/api_template/paths/requestToPayTransfer.yaml +0 -0
  167. package/{OutboundServer → src/OutboundServer}/api_template/paths/requestToPayTransfer_requestToPayTransactionId.yaml +0 -0
  168. package/{OutboundServer → src/OutboundServer}/api_template/paths/simpleTransfers.yaml +0 -0
  169. package/{OutboundServer → src/OutboundServer}/api_template/paths/transfers.yaml +0 -0
  170. package/{OutboundServer → src/OutboundServer}/api_template/paths/transfers_transferId.yaml +0 -0
  171. package/{OutboundServer → src/OutboundServer}/handlers.js +0 -0
  172. package/{OutboundServer → src/OutboundServer}/index.js +15 -0
  173. package/{OutboundServer → src/OutboundServer}/middlewares.js +0 -0
  174. package/{TestServer → src/TestServer}/api.yaml +0 -0
  175. package/src/TestServer/handlers.js +63 -0
  176. package/{TestServer → src/TestServer}/index.js +31 -0
  177. package/{config.js → src/config.js} +6 -0
  178. package/{index.d.ts → src/index.d.ts} +0 -0
  179. package/{index.js → src/index.js} +0 -0
  180. package/{lib → src/lib}/api/index.js +0 -0
  181. package/{lib → src/lib}/cache.js +0 -0
  182. package/{lib → src/lib}/check.js +0 -0
  183. package/{lib → src/lib}/model/AccountsModel.js +0 -0
  184. package/{lib → src/lib}/model/Async2SyncModel.js +0 -0
  185. package/{lib → src/lib}/model/InboundTransfersModel.js +0 -0
  186. package/{lib → src/lib}/model/OutboundBulkQuotesModel.js +3 -3
  187. package/{lib → src/lib}/model/OutboundBulkTransfersModel.js +1 -1
  188. package/{lib → src/lib}/model/OutboundRequestToPayModel.js +1 -1
  189. package/{lib → src/lib}/model/OutboundRequestToPayTransferModel.js +9 -9
  190. package/{lib → src/lib}/model/OutboundTransfersModel.js +1 -1
  191. package/{lib → src/lib}/model/PartiesModel.js +0 -0
  192. package/{lib → src/lib}/model/ProxyModel/MatchRules/Expression.js +0 -0
  193. package/{lib → src/lib}/model/ProxyModel/MatchRules/Headers.js +0 -0
  194. package/{lib → src/lib}/model/ProxyModel/MatchRules/MatchRule.js +0 -0
  195. package/{lib → src/lib}/model/ProxyModel/MatchRules/Path.js +0 -0
  196. package/{lib → src/lib}/model/ProxyModel/MatchRules/Query.js +0 -0
  197. package/{lib → src/lib}/model/ProxyModel/MatchRules/index.js +0 -0
  198. package/{lib → src/lib}/model/ProxyModel/Route.js +0 -0
  199. package/{lib → src/lib}/model/ProxyModel/configSchema.json +0 -0
  200. package/{lib → src/lib}/model/ProxyModel/index.js +0 -0
  201. package/{lib → src/lib}/model/QuotesModel.js +0 -0
  202. package/{lib → src/lib}/model/TransfersModel.js +0 -0
  203. package/{lib → src/lib}/model/common/BackendError.js +0 -0
  204. package/{lib → src/lib}/model/common/PersistentStateMachine.js +0 -0
  205. package/{lib → src/lib}/model/common/index.js +0 -0
  206. package/{lib → src/lib}/model/index.js +0 -0
  207. package/{lib → src/lib}/model/lib/deferredJob.js +0 -0
  208. package/{lib → src/lib}/model/lib/index.js +0 -0
  209. package/{lib → src/lib}/model/lib/requests/backendRequests.js +0 -0
  210. package/{lib → src/lib}/model/lib/requests/common.js +0 -0
  211. package/{lib → src/lib}/model/lib/requests/index.js +0 -0
  212. package/{lib → src/lib}/model/lib/shared.js +6 -5
  213. package/{lib → src/lib}/randomphrase/index.js +0 -0
  214. package/{lib → src/lib}/randomphrase/words.json +0 -0
  215. package/{lib → src/lib}/router.js +0 -0
  216. package/{lib → src/lib}/validate.js +0 -0
  217. package/test/config/integration.env +9 -0
  218. package/test/integration/lib/cache.test.js +3 -3
  219. package/test/unit/ControlClient.test.js +113 -0
  220. package/test/unit/ControlServer/events.js +41 -0
  221. package/test/unit/ControlServer/index.js +231 -0
  222. package/test/unit/ControlServer.test.js +126 -0
  223. package/test/unit/InboundServer.test.js +4 -4
  224. package/test/unit/TestServer.test.js +5 -5
  225. package/test/unit/api/utils.js +5 -5
  226. package/test/unit/config.test.js +10 -9
  227. package/test/unit/inboundApi/handlers.test.js +6 -6
  228. package/test/unit/index.test.js +2 -1
  229. package/test/unit/lib/cache.test.js +1 -1
  230. package/test/unit/lib/model/AccountsModel.test.js +2 -2
  231. package/test/unit/lib/model/InboundTransfersModel.test.js +5 -5
  232. package/test/unit/lib/model/OutboundBulkQuotesModel.test.js +2 -2
  233. package/test/unit/lib/model/OutboundBulkTransfersModel.test.js +2 -2
  234. package/test/unit/lib/model/OutboundRequestToPayModel.test.js +3 -3
  235. package/test/unit/lib/model/OutboundRequestToPayTransferModel.test.js +2 -2
  236. package/test/unit/lib/model/OutboundTransfersModel.test.js +36 -3
  237. package/test/unit/lib/model/PartiesModel.test.js +28 -28
  238. package/test/unit/lib/model/QuotesModel.test.js +31 -31
  239. package/test/unit/lib/model/TransfersModel.test.js +3 -3
  240. package/test/unit/lib/model/common/PersistentStateMachine.test.js +13 -13
  241. package/test/unit/lib/model/mockedLibRequests.js +1 -1
  242. package/test/unit/outboundApi/handlers.test.js +3 -3
  243. package/.eslintignore +0 -2
  244. package/InboundServer/api_template.yaml +0 -69
  245. package/OutboundServer/api_template/components/schemas/accountCreationStatus.yaml +0 -18
  246. package/OutboundServer/api_template/components/schemas/accountsRequest.yaml +0 -20
  247. package/OutboundServer/api_template/components/schemas/extensionListEmptiable.yaml +0 -6
  248. package/OutboundServer/api_template/components/schemas/individualQuote.yaml +0 -32
  249. package/OutboundServer/api_template/components/schemas/individualTransfer.yaml +0 -32
  250. package/OutboundServer/api_template/components/schemas/mojaloopError.yaml +0 -5
  251. package/OutboundServer/api_template/components/schemas/mojaloopTransactionRequestState.yaml +0 -2
  252. package/OutboundServer/api_template/components/schemas/quote.yaml +0 -3
  253. package/OutboundServer/api_template/components/schemas/quotesPostRequest.yaml +0 -13
  254. package/OutboundServer/api_template/components/schemas/quotesPostResponse.yaml +0 -48
  255. package/OutboundServer/api_template/components/schemas/requestToPayRequest.yaml +0 -39
  256. package/OutboundServer/api_template/components/schemas/requestToPayResponse.yaml +0 -41
  257. package/OutboundServer/api_template/components/schemas/requestToPayTransferRequest.yaml +0 -42
  258. package/OutboundServer/api_template/components/schemas/simpleTransfersPostRequest.yaml +0 -12
  259. package/OutboundServer/api_template/components/schemas/transferFulfilment.yaml +0 -3
  260. package/OutboundServer/api_template/components/schemas/transferParty.yaml +0 -40
@@ -0,0 +1,294 @@
1
+ /**************************************************************************
2
+ * (C) Copyright ModusBox Inc. 2020 - All rights reserved. *
3
+ * *
4
+ * This file is made available under the terms of the license agreement *
5
+ * specified in the corresponding source code repository. *
6
+ * *
7
+ * ORIGINAL AUTHOR: *
8
+ * Matt Kingston - matt.kingston@modusbox.com *
9
+ **************************************************************************/
10
+
11
+ // This server has deliberately been written separate from any other server in the SDK. There is
12
+ // some reasonable argument that it could be part of the outbound or test server. It has not been
13
+ // incorporated in either as, at the time of writing, it is intended to be maintained in a
14
+ // proprietary fork. Therefore, keeping it independent of other servers will avoid the maintenance
15
+ // burden that would otherwise be associated with incorporating it with those.
16
+ //
17
+ // It inherits from the Server class from the 'ws' websocket library for Node, which in turn
18
+ // inherits from EventEmitter. We exploit this to emit an event when a reconfigure message is sent
19
+ // to this server. Then, when this server's reconfigure method is called, it reconfigures itself
20
+ // and sends a message to all clients notifying them of the new application configuration.
21
+ //
22
+ // It expects new configuration to be supplied as an array of JSON patches. It therefore exposes
23
+ // the current configuration to
24
+
25
+ const assert = require('assert').strict;
26
+
27
+ const ws = require('ws');
28
+ const jsonPatch = require('fast-json-patch');
29
+
30
+ const randomPhrase = require('~/lib/randomphrase');
31
+
32
+ /**************************************************************************
33
+ * The message protocol messages, verbs, and errors
34
+ *************************************************************************/
35
+ const MESSAGE = {
36
+ CONFIGURATION: 'CONFIGURATION',
37
+ ERROR: 'ERROR',
38
+ };
39
+
40
+ const VERB = {
41
+ READ: 'READ',
42
+ NOTIFY: 'NOTIFY',
43
+ PATCH: 'PATCH'
44
+ };
45
+
46
+ const ERROR = {
47
+ UNSUPPORTED_MESSAGE: 'UNSUPPORTED_MESSAGE',
48
+ UNSUPPORTED_VERB: 'UNSUPPORTED_VERB',
49
+ JSON_PARSE_ERROR: 'JSON_PARSE_ERROR',
50
+ };
51
+
52
+ /**************************************************************************
53
+ * Events emitted by the control server
54
+ *************************************************************************/
55
+ const EVENT = {
56
+ RECONFIGURE: 'RECONFIGURE',
57
+ };
58
+
59
+ /**************************************************************************
60
+ * Private convenience functions
61
+ *************************************************************************/
62
+ const serialise = JSON.stringify;
63
+ const deserialise = (msg) => {
64
+ //reviver function
65
+ return JSON.parse(msg.toString(), (k, v) => {
66
+ if (
67
+ v !== null &&
68
+ typeof v === 'object' &&
69
+ 'type' in v &&
70
+ v.type === 'Buffer' &&
71
+ 'data' in v &&
72
+ Array.isArray(v.data)) {
73
+ return new Buffer(v.data);
74
+ }
75
+ return v;
76
+ });
77
+ };
78
+
79
+ const buildMsg = (verb, msg, data, id = randomPhrase()) => serialise({
80
+ verb,
81
+ msg,
82
+ data,
83
+ id,
84
+ });
85
+
86
+ const buildPatchConfiguration = (oldConf, newConf, id) => {
87
+ const patches = jsonPatch.compare(oldConf, newConf);
88
+ return buildMsg(VERB.PATCH, MESSAGE.CONFIGURATION, patches, id);
89
+ };
90
+
91
+ const getWsIp = (req) => [
92
+ req.socket.remoteAddress,
93
+ ...(
94
+ req.headers['x-forwarded-for']
95
+ ? req.headers['x-forwarded-for'].split(/\s*,\s*/)
96
+ : []
97
+ )
98
+ ];
99
+
100
+ /**************************************************************************
101
+ * build
102
+ *
103
+ * Public object exposing an API to build valid protocol messages.
104
+ * It is not the only way to build valid messages within the protocol.
105
+ *************************************************************************/
106
+ const build = {
107
+ CONFIGURATION: {
108
+ PATCH: buildPatchConfiguration,
109
+ READ: (id) => buildMsg(VERB.READ, MESSAGE.CONFIGURATION, {}, id),
110
+ NOTIFY: (config, id) => buildMsg(VERB.NOTIFY, MESSAGE.CONFIGURATION, config, id),
111
+ },
112
+ ERROR: {
113
+ NOTIFY: {
114
+ UNSUPPORTED_MESSAGE: (id) => buildMsg(VERB.NOTIFY, MESSAGE.ERROR, ERROR.UNSUPPORTED_MESSAGE, id),
115
+ UNSUPPORTED_VERB: (id) => buildMsg(VERB.NOTIFY, MESSAGE.ERROR, ERROR.UNSUPPORTED_VERB, id),
116
+ JSON_PARSE_ERROR: (id) => buildMsg(VERB.NOTIFY, MESSAGE.ERROR, ERROR.JSON_PARSE_ERROR, id),
117
+ }
118
+ },
119
+ };
120
+
121
+ /**************************************************************************
122
+ * Client
123
+ *
124
+ * The Control Client. Client for the websocket control API.
125
+ * Used to hot-restart the SDK.
126
+ *
127
+ * logger - Logger- see SDK logger used elsewhere
128
+ * address - address of control server
129
+ * port - port of control server
130
+ *************************************************************************/
131
+ class Client extends ws {
132
+ constructor({ address = 'localhost', port, logger }) {
133
+ super(`ws://${address}:${port}`);
134
+ this._logger = logger;
135
+ }
136
+
137
+ // Really only exposed so that a user can import only the client for convenience
138
+ get Build() {
139
+ return build;
140
+ }
141
+
142
+ static async Create(...args) {
143
+ const result = new Client(...args);
144
+ await new Promise((resolve, reject) => {
145
+ result.on('open', resolve);
146
+ result.on('error', reject);
147
+ });
148
+ return result;
149
+ }
150
+
151
+ async send(msg) {
152
+ const data = typeof msg === 'string' ? msg : serialise(msg);
153
+ this._logger.push({ data }).log('Sending message');
154
+ return new Promise((resolve) => super.send.call(this, data, resolve));
155
+ }
156
+
157
+ // Receive a single message
158
+ async receive() {
159
+ return new Promise((resolve) => this.once('message', (data) => {
160
+ const msg = deserialise(data);
161
+ this._logger.push({ msg }).log('Received');
162
+ resolve(msg);
163
+ }));
164
+ }
165
+ }
166
+
167
+ /**************************************************************************
168
+ * Server
169
+ *
170
+ * The Control Server. Exposes a websocket control API.
171
+ * Used to hot-restart the SDK.
172
+ *
173
+ * logger - Logger- see SDK logger used elsewhere
174
+ * port - HTTP port to host on
175
+ * appConfig - The configuration for the entire application- supplied here as this class uses it to
176
+ * validate reconfiguration requests- it is not used for configuration here, however
177
+ * server - optional HTTP/S server on which to serve the websocket
178
+ *************************************************************************/
179
+ class Server extends ws.Server {
180
+ constructor({ logger, port = 0, appConfig = {} }) {
181
+ super({ clientTracking: true, port });
182
+
183
+ this._logger = logger;
184
+ this._port = port;
185
+ this._appConfig = appConfig;
186
+ this._clientData = new Map();
187
+
188
+ this.on('error', err => {
189
+ this._logger.push({ err })
190
+ .log('Unhandled websocket error occurred. Shutting down.');
191
+ process.exit(1);
192
+ });
193
+
194
+ this.on('connection', (socket, req) => {
195
+ const logger = this._logger.push({
196
+ url: req.url,
197
+ ip: getWsIp(req),
198
+ remoteAddress: req.socket.remoteAddress,
199
+ });
200
+ logger.log('Websocket connection received');
201
+ this._clientData.set(socket, { ip: req.connection.remoteAddress, logger });
202
+
203
+ socket.on('close', (code, reason) => {
204
+ logger.push({ code, reason }).log('Websocket connection closed');
205
+ this._clientData.delete(socket);
206
+ });
207
+
208
+ socket.on('message', this._handle(socket, logger));
209
+ });
210
+
211
+ this._logger.push(this.address()).log('running on');
212
+ }
213
+
214
+ // Close the server then wait for all the client sockets to close
215
+ async stop() {
216
+ await new Promise(this.close.bind(this));
217
+ this._logger.log('Control server shutdown complete');
218
+ }
219
+
220
+ reconfigure({ logger = this._logger, port = 0, appConfig = this._appConfig }) {
221
+ assert(port === this._port, 'Cannot reconfigure running port');
222
+ return () => {
223
+ const reconfigureClientLogger =
224
+ ({ logger: clientLogger }) => clientLogger.configure(logger);
225
+ this._clientData.values(reconfigureClientLogger);
226
+ this._logger = logger;
227
+ this._appConfig = appConfig;
228
+ this._logger.log('restarted');
229
+ };
230
+ }
231
+
232
+ async notifyClientsOfCurrentConfig() {
233
+ const updateConfMsg = build.CONFIGURATION.NOTIFY(this._appConfig);
234
+ const logError = (socket, message) => (err) =>
235
+ this._logger
236
+ .push({ message, ip: this._clientData.get(socket).ip, err })
237
+ .log('Error sending reconfigure notification to client');
238
+ const sendToAllClients = (msg) => Promise.all(
239
+ [...this.clients.values()].map((socket) =>
240
+ (new Promise((resolve) => socket.send(msg, resolve))).catch(logError(socket, msg))
241
+ )
242
+ );
243
+ return await sendToAllClients(updateConfMsg);
244
+ }
245
+
246
+ _handle(client, logger) {
247
+ return (data) => {
248
+ // TODO: json-schema validation of received message- should be pretty straight-forward
249
+ // and will allow better documentation of the API
250
+ let msg;
251
+ try {
252
+ msg = deserialise(data);
253
+ } catch (err) {
254
+ logger.push({ data }).log('Couldn\'t parse received message');
255
+ client.send(build.ERROR.NOTIFY.JSON_PARSE_ERROR());
256
+ }
257
+ logger.push({ msg }).log('Handling received message');
258
+ switch (msg.msg) {
259
+ case MESSAGE.CONFIGURATION:
260
+ switch (msg.verb) {
261
+ case VERB.READ:
262
+ client.send(build.CONFIGURATION.NOTIFY(this._appConfig, msg.id));
263
+ break;
264
+ case VERB.PATCH: {
265
+ // TODO: validate the incoming patch? Or assume clients have used the
266
+ // client library?
267
+ const dup = JSON.parse(JSON.stringify(this._appConfig)); // fast-json-patch explicitly mutates
268
+ jsonPatch.applyPatch(dup, msg.data);
269
+ logger.push({ oldConf: this._appConfig, newConf: dup }).log('Emitting new configuration');
270
+ this.emit(EVENT.RECONFIGURE, dup);
271
+ break;
272
+ }
273
+ default:
274
+ client.send(build.ERROR.NOTIFY.UNSUPPORTED_VERB(msg.id));
275
+ break;
276
+ }
277
+ break;
278
+ default:
279
+ client.send(build.ERROR.NOTIFY.UNSUPPORTED_MESSAGE(msg.id));
280
+ break;
281
+ }
282
+ };
283
+ }
284
+ }
285
+
286
+ module.exports = {
287
+ Client,
288
+ Server,
289
+ build,
290
+ MESSAGE,
291
+ VERB,
292
+ ERROR,
293
+ EVENT,
294
+ };
File without changes
@@ -0,0 +1,69 @@
1
+ openapi: 3.0.0
2
+ info:
3
+ version: '1.1'
4
+ title: Open API for FSP Interoperability (FSPIOP)
5
+ description: >-
6
+ Based on API Definition.docx updated on 2020-05-19 Version 1.1.
7
+ API supports a maximum size of 65536 bytes (64 Kilobytes) in the HTTP
8
+ header.
9
+ license:
10
+ name: Open API for FSP Interoperability (FSPIOP)
11
+ paths:
12
+ '/participants/{ID}/error':
13
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/participants_ID_error.yaml'
14
+ '/participants/{ID}':
15
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/participants_ID.yaml'
16
+ '/participants/{Type}/{ID}/error':
17
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/participants_Type_ID_error.yaml'
18
+ '/participants/{Type}/{ID}/{SubId}/error':
19
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/participants_Type_ID_SubId_error.yaml'
20
+ '/participants/{Type}/{ID}/{SubId}':
21
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/participants_Type_ID_SubId.yaml'
22
+ '/participants/{Type}/{ID}':
23
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/participants_Type_ID.yaml'
24
+ '/participants':
25
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/participants.yaml'
26
+ '/parties/{Type}/{ID}':
27
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/parties_Type_ID.yaml'
28
+ '/parties/{Type}/{ID}/error':
29
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/parties_Type_ID_error.yaml'
30
+ '/parties/{Type}/{ID}/{SubId}':
31
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/parties_Type_ID_SubId.yaml'
32
+ '/parties/{Type}/{ID}/{SubId}/error':
33
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/parties_Type_ID_SubId_error.yaml'
34
+ '/transactionRequests/{ID}/error':
35
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/transactionRequests_ID_error.yaml'
36
+ '/transactionRequests/{ID}':
37
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/transactionRequests_ID.yaml'
38
+ '/transactionRequests':
39
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/transactionRequests.yaml'
40
+ '/quotes/{ID}/error':
41
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/quotes_ID_error.yaml'
42
+ '/quotes/{ID}':
43
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/quotes_ID.yaml'
44
+ '/quotes':
45
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/quotes.yaml'
46
+ '/authorizations/{ID}':
47
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/authorizations_ID.yaml'
48
+ '/authorizations/{ID}/error':
49
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/authorizations_ID_error.yaml'
50
+ '/transfers/{ID}/error':
51
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/transfers_ID_error.yaml'
52
+ '/transfers/{ID}':
53
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/transfers_ID.yaml'
54
+ '/transfers':
55
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/transfers.yaml'
56
+ '/transactions/{ID}':
57
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/transactions_ID.yaml'
58
+ '/transactions/{ID}/error':
59
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/transactions_ID_error.yaml'
60
+ '/bulkQuotes/{ID}/error':
61
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/bulkQuotes_ID_error.yaml'
62
+ '/bulkQuotes/{ID}':
63
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/bulkQuotes_ID.yaml'
64
+ '/bulkTransfers/{ID}':
65
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/bulkTransfers_ID.yaml'
66
+ '/bulkTransfers':
67
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/bulkTransfers.yaml'
68
+ '/bulkTransfers/{ID}/error':
69
+ $ref: '../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/paths/bulkTransfers_ID_error.yaml'
File without changes
@@ -24,6 +24,7 @@ const Validate = require('../lib/validate');
24
24
  const router = require('../lib/router');
25
25
  const handlers = require('./handlers');
26
26
  const middlewares = require('./middlewares');
27
+ const check = require('../lib/check');
27
28
 
28
29
  class InboundApi extends EventEmitter {
29
30
  constructor(conf, logger, cache, validator) {
@@ -43,7 +44,7 @@ class InboundApi extends EventEmitter {
43
44
  });
44
45
 
45
46
  if (conf.validateInboundJws) {
46
- this._jwsVerificationKeys = InboundApi._GetJwsKeys(conf.jwsVerificationKeysDirectory);
47
+ this._jwsVerificationKeys = conf.pm4mlEnabled ? conf.peerJWSKeys : InboundApi._GetJwsKeys(conf.jwsVerificationKeysDirectory);
47
48
  }
48
49
  this._api = InboundApi._SetupApi({
49
50
  conf,
@@ -187,6 +188,37 @@ class InboundServer extends EventEmitter {
187
188
  this._logger.log('inbound shut down complete');
188
189
  }
189
190
 
191
+ async reconfigure(conf, logger, cache) {
192
+ // It may be possible to extract the socket from an existing HTTP/HTTPS server and replace
193
+ // it in a new server of the other type, as Node's HTTP and HTTPS servers both eventually
194
+ // are subclasses of net.Server. This wasn't considered as a requirement at the time of
195
+ // writing.
196
+ assert(
197
+ this._conf.mutualTLS.inboundRequests.enabled === conf.mutualTLS.inboundRequests.enabled,
198
+ 'Cannot live-restart an HTTPS server as HTTP or vice versa',
199
+ );
200
+ const newApi = new InboundApi(conf, logger, cache, this._validator);
201
+ await newApi.start();
202
+ return () => {
203
+ this._logger = logger;
204
+ this._cache = cache;
205
+ // TODO: .tls might be undefined, causing an.. err.. undefined dereference..
206
+ const tlsCredsChanged = check.notDeepEqual(
207
+ conf.inbound.tls.creds,
208
+ this._conf.inbound.tls.creds
209
+ );
210
+ if (this._conf.mutualTLS.inboundRequests.enabled && tlsCredsChanged) {
211
+ this._server.setSecureContext(conf.inbound.tls.creds);
212
+ }
213
+ this._server.removeAllListeners('request');
214
+ this._server.on('request', newApi.callback());
215
+ this._api.stop();
216
+ this._api = newApi;
217
+ this._conf = conf;
218
+ this._logger.log('restarted');
219
+ };
220
+ }
221
+
190
222
  _createServer(tlsEnabled, tlsCreds, handler) {
191
223
  if (!tlsEnabled) {
192
224
  return http.createServer(handler);
File without changes
@@ -3,7 +3,7 @@ in: path
3
3
  required: true
4
4
  schema:
5
5
  $ref: >-
6
- ../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/CorrelationId.yaml
6
+ ../../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/CorrelationId.yaml
7
7
  description: >-
8
8
  Identifier of the bulk transfer to continue as returned in the response to a
9
9
  `POST /bulkTransfers` request.
@@ -3,7 +3,7 @@ in: path
3
3
  required: true
4
4
  schema:
5
5
  $ref: >-
6
- ../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/CorrelationId.yaml
6
+ ../../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/CorrelationId.yaml
7
7
  description: >-
8
8
  Identifier of the bulk transfer to continue as returned in the response to a
9
9
  `POST /bulkTransfers` request.
@@ -3,7 +3,7 @@ in: path
3
3
  required: true
4
4
  schema:
5
5
  $ref: >-
6
- ../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/CorrelationId.yaml
6
+ ../../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/CorrelationId.yaml
7
7
  description: >-
8
8
  Identifier of the merchant request to pay transfer to continue as returned in
9
9
  the response to a `POST /requestToPayTransfer` request.
@@ -3,7 +3,7 @@ in: path
3
3
  required: true
4
4
  schema:
5
5
  $ref: >-
6
- ../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/CorrelationId.yaml
6
+ ../../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/CorrelationId.yaml
7
7
  description: >-
8
8
  Identifier of the transfer to continue as returned in the response to a `POST
9
9
  /transfers` request.
@@ -6,4 +6,4 @@ content:
6
6
  properties:
7
7
  errorInformation:
8
8
  $ref: >-
9
- ../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/ErrorInformation.yaml
9
+ ../../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/ErrorInformation.yaml
@@ -0,0 +1,18 @@
1
+ type: array
2
+ items:
3
+ type: object
4
+ required:
5
+ - idType
6
+ - idValue
7
+ properties:
8
+ idType:
9
+ $ref: >-
10
+ ../../../../../node_modules/@mojaloop/api-snippets/thirdparty/v1_0/openapi3/components/schemas/PartyIdType.yaml
11
+ idValue:
12
+ $ref: >-
13
+ ../../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/PartyIdentifier.yaml
14
+ idSubValue:
15
+ $ref: >-
16
+ ../../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/PartySubIdOrType.yaml
17
+ error:
18
+ $ref: ./errorResponse.yaml
@@ -0,0 +1,20 @@
1
+ type: array
2
+ items:
3
+ type: object
4
+ required:
5
+ - idType
6
+ - idValue
7
+ - currency
8
+ properties:
9
+ idType:
10
+ $ref: >-
11
+ ../../../../../node_modules/@mojaloop/api-snippets/thirdparty/v1_0/openapi3/components/schemas/PartyIdType.yaml
12
+ idValue:
13
+ $ref: >-
14
+ ../../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/PartyIdentifier.yaml
15
+ idSubValue:
16
+ $ref: >-
17
+ ../../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/PartySubIdOrType.yaml
18
+ currency:
19
+ $ref: >-
20
+ ../../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/Currency.yaml
@@ -4,7 +4,7 @@ required:
4
4
  properties:
5
5
  modelId:
6
6
  $ref: >-
7
- ../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/CorrelationId.yaml
7
+ ../../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/CorrelationId.yaml
8
8
  accounts:
9
9
  $ref: ./accountsRequest.yaml
10
10
  response:
@@ -11,7 +11,7 @@ properties:
11
11
  between the Switch and DFSP backend systems.
12
12
  bulkQuoteId:
13
13
  $ref: >-
14
- ../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/CorrelationId.yaml
14
+ ../../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/CorrelationId.yaml
15
15
  from:
16
16
  $ref: ./transferParty.yaml
17
17
  individualQuotes:
@@ -23,4 +23,4 @@ properties:
23
23
  $ref: ./individualQuote.yaml
24
24
  extensions:
25
25
  $ref: >-
26
- ../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/ExtensionList.yaml
26
+ ../../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/ExtensionList.yaml
@@ -5,7 +5,7 @@ required:
5
5
  properties:
6
6
  quoteId:
7
7
  $ref: >-
8
- ../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/CorrelationId.yaml
8
+ ../../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/CorrelationId.yaml
9
9
  homeTransactionId:
10
10
  type: string
11
11
  description: >-
@@ -6,7 +6,7 @@ required:
6
6
  properties:
7
7
  bulkQuoteId:
8
8
  $ref: >-
9
- ../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/CorrelationId.yaml
9
+ ../../../../../node_modules/@mojaloop/api-snippets/fspiop/v1_1/openapi3/components/schemas/CorrelationId.yaml
10
10
  currentState:
11
11
  $ref: ./bulkQuoteStatus.yaml
12
12
  individualQuotes: