@mojaloop/sdk-scheme-adapter 12.0.0 → 12.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. package/.circleci/config.yml +619 -0
  2. package/.env.example +13 -0
  3. package/.nvmrc +1 -1
  4. package/.versionrc +1 -0
  5. package/CHANGELOG.md +28 -2
  6. package/CODEOWNERS +2 -0
  7. package/Dockerfile +35 -0
  8. package/LICENSE.md +10 -0
  9. package/PROXY.md +84 -0
  10. package/README.md +228 -0
  11. package/SECURITY.md +18 -0
  12. package/audit-resolve.json +45 -0
  13. package/docker/ml-testing-toolkit/secrets/keygen.sh +5 -0
  14. package/docker/ml-testing-toolkit/secrets/privatekey.pem +27 -0
  15. package/docker/ml-testing-toolkit/secrets/publickey.cer +21 -0
  16. package/docker/ml-testing-toolkit/secrets/tls/createSecrets.sh +29 -0
  17. package/docker/ml-testing-toolkit/secrets/tls/hub_client.csr +28 -0
  18. package/docker/ml-testing-toolkit/secrets/tls/hub_client_cacert.pem +32 -0
  19. package/docker/ml-testing-toolkit/secrets/tls/hub_client_cakey.key +51 -0
  20. package/docker/ml-testing-toolkit/secrets/tls/hub_client_key.key +51 -0
  21. package/docker/ml-testing-toolkit/secrets/tls/hub_server.csr +28 -0
  22. package/docker/ml-testing-toolkit/secrets/tls/hub_server_cacert.pem +32 -0
  23. package/docker/ml-testing-toolkit/secrets/tls/hub_server_cacert.srl +1 -0
  24. package/docker/ml-testing-toolkit/secrets/tls/hub_server_cakey.key +51 -0
  25. package/docker/ml-testing-toolkit/secrets/tls/hub_server_cert.pem +33 -0
  26. package/docker/ml-testing-toolkit/secrets/tls/hub_server_key.key +51 -0
  27. package/docker/ml-testing-toolkit/secrets/tls/openssl.conf +17 -0
  28. package/docker/ml-testing-toolkit/spec_files/api_definitions/central_admin_9.3/api_spec.yaml +2450 -0
  29. package/docker/ml-testing-toolkit/spec_files/api_definitions/central_admin_9.3/response_map.json +96 -0
  30. package/docker/ml-testing-toolkit/spec_files/api_definitions/fspiop_1.0/api_spec.yaml +4187 -0
  31. package/docker/ml-testing-toolkit/spec_files/api_definitions/fspiop_1.0/callback_map.json +542 -0
  32. package/docker/ml-testing-toolkit/spec_files/api_definitions/fspiop_1.0/mockRef.json +83 -0
  33. package/docker/ml-testing-toolkit/spec_files/api_definitions/fspiop_1.0/trigger_templates/transaction_request_followup.json +125 -0
  34. package/docker/ml-testing-toolkit/spec_files/api_definitions/fspiop_1.1/api_spec.yaml +3703 -0
  35. package/docker/ml-testing-toolkit/spec_files/api_definitions/fspiop_1.1/callback_map.json +568 -0
  36. package/docker/ml-testing-toolkit/spec_files/api_definitions/fspiop_1.1/mockRef.json +83 -0
  37. package/docker/ml-testing-toolkit/spec_files/api_definitions/fspiop_1.1/trigger_templates/transaction_request_followup.json +125 -0
  38. package/docker/ml-testing-toolkit/spec_files/api_definitions/settlements_1.0/api_spec.yaml +983 -0
  39. package/docker/ml-testing-toolkit/spec_files/api_definitions/settlements_1.0/mockRef.json +38 -0
  40. package/docker/ml-testing-toolkit/spec_files/api_definitions/settlements_1.0/response_map.json +34 -0
  41. package/docker/ml-testing-toolkit/spec_files/reports/templates/newman/html_template.html +1074 -0
  42. package/docker/ml-testing-toolkit/spec_files/reports/templates/newman/pdf_template.html +765 -0
  43. package/docker/ml-testing-toolkit/spec_files/reports/templates/newman/script.js +98 -0
  44. package/docker/ml-testing-toolkit/spec_files/rules_callback/config.json +3 -0
  45. package/docker/ml-testing-toolkit/spec_files/rules_callback/default.json +426 -0
  46. package/docker/ml-testing-toolkit/spec_files/rules_response/config.json +3 -0
  47. package/docker/ml-testing-toolkit/spec_files/rules_response/default.json +1623 -0
  48. package/docker/ml-testing-toolkit/spec_files/rules_response/default_pisp_rules.json +161 -0
  49. package/docker/ml-testing-toolkit/spec_files/rules_validation/config.json +3 -0
  50. package/docker/ml-testing-toolkit/spec_files/rules_validation/default.json +672 -0
  51. package/docker/ml-testing-toolkit/spec_files/system_config.json +62 -0
  52. package/docker/ml-testing-toolkit/spec_files/user_config.json +45 -0
  53. package/docker/wait4/setup_hosts_file.sh +25 -0
  54. package/docker/wait4/wait4.config.js +71 -0
  55. package/docker/wait4/wait4.js +204 -0
  56. package/docker-compose.yml +67 -0
  57. package/docs/Mojaloop - Modusbox Onboarding functionality.pdf +0 -0
  58. package/docs/dfspInboundApi.yaml +1091 -0
  59. package/jest.config.js +4 -1
  60. package/package.json +17 -17
  61. package/secrets/jwsSigningKey.key +27 -0
  62. package/secrets/jwsVerificationKeys/mojaloop-sdk.pem +9 -0
  63. package/secrets/jwsVerificationKeys/switch.pem +9 -0
  64. package/sequences.puml +99 -0
  65. package/src/ControlAgent/index.js +221 -0
  66. package/{TestServer → src/ControlServer}/handlers.js +0 -0
  67. package/src/ControlServer/index.js +294 -0
  68. package/{InboundServer → src/InboundServer}/api.yaml +0 -0
  69. package/src/InboundServer/api_template.yaml +69 -0
  70. package/{InboundServer → src/InboundServer}/handlers.js +0 -0
  71. package/{InboundServer → src/InboundServer}/index.js +33 -1
  72. package/{InboundServer → src/InboundServer}/middlewares.js +0 -0
  73. package/src/OAuthTestServer/index.js +127 -0
  74. package/{OAuthTestServer → src/OAuthTestServer}/model.js +0 -0
  75. package/{OutboundServer → src/OutboundServer}/api.yaml +0 -0
  76. package/{OutboundServer → src/OutboundServer}/api_interfaces/index.d.ts +0 -0
  77. package/{OutboundServer → src/OutboundServer}/api_interfaces/openapi.d.ts +0 -0
  78. package/{OutboundServer → src/OutboundServer}/api_template/components/parameters/bulkQuoteId.yaml +1 -1
  79. package/{OutboundServer → src/OutboundServer}/api_template/components/parameters/bulkTransferId.yaml +1 -1
  80. package/{OutboundServer → src/OutboundServer}/api_template/components/parameters/requestToPayTransactionId.yaml +1 -1
  81. package/{OutboundServer → src/OutboundServer}/api_template/components/parameters/transferId.yaml +1 -1
  82. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/accountsCreationCompleted.yaml +0 -0
  83. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/accountsCreationError.yaml +0 -0
  84. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/accountsCreationTimeout.yaml +0 -0
  85. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/bulkQuoteBadRequest.yaml +0 -0
  86. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/bulkQuoteServerError.yaml +0 -0
  87. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/bulkQuoteSuccess.yaml +0 -0
  88. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/bulkQuoteTimeout.yaml +0 -0
  89. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/bulkTransferBadRequest.yaml +0 -0
  90. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/bulkTransferServerError.yaml +0 -0
  91. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/bulkTransferSuccess.yaml +0 -0
  92. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/bulkTransferTimeout.yaml +0 -0
  93. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/partiesByIdError404.yaml +1 -1
  94. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/partiesByIdSuccess.yaml +0 -0
  95. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/quotesPostSuccess.yaml +0 -0
  96. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/quotesServerError.yaml +0 -0
  97. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/requestToPaySuccess.yaml +0 -0
  98. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/requestToPayTransferBadRequest.yaml +0 -0
  99. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/requestToPayTransferSuccess.yaml +0 -0
  100. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/simpleTransfersPostSuccess.yaml +0 -0
  101. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/simpleTransfersServerError.yaml +0 -0
  102. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/transferBadRequest.yaml +0 -0
  103. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/transferServerError.yaml +0 -0
  104. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/transferSuccess.yaml +0 -0
  105. package/{OutboundServer → src/OutboundServer}/api_template/components/responses/transferTimeout.yaml +0 -0
  106. package/src/OutboundServer/api_template/components/schemas/accountCreationStatus.yaml +18 -0
  107. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/accountsCreationState.yaml +0 -0
  108. package/src/OutboundServer/api_template/components/schemas/accountsRequest.yaml +20 -0
  109. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/accountsResponse.yaml +1 -1
  110. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/async2SyncCurrentState.yaml +0 -0
  111. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkQuoteErrorResponse.yaml +0 -0
  112. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkQuoteRequest.yaml +2 -2
  113. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkQuoteResponse.yaml +1 -1
  114. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkQuoteStatus.yaml +0 -0
  115. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkQuoteStatusResponse.yaml +1 -1
  116. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkTransferErrorResponse.yaml +0 -0
  117. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkTransferRequest.yaml +2 -2
  118. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkTransferResponse.yaml +1 -1
  119. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkTransferStatus.yaml +0 -0
  120. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/bulkTransferStatusResponse.yaml +1 -1
  121. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/errorAccountsResponse.yaml +0 -0
  122. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/errorQuotesResponse.yaml +0 -0
  123. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/errorResponse.yaml +0 -0
  124. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/errorSimpleTransfersResponse.yaml +0 -0
  125. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/errorTransferResponse.yaml +0 -0
  126. package/src/OutboundServer/api_template/components/schemas/extensionListEmptiable.yaml +6 -0
  127. package/src/OutboundServer/api_template/components/schemas/individualQuote.yaml +32 -0
  128. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/individualQuoteResult.yaml +5 -5
  129. package/src/OutboundServer/api_template/components/schemas/individualTransfer.yaml +32 -0
  130. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/individualTransferFulfilment.yaml +2 -2
  131. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/individualTransferResult.yaml +6 -6
  132. package/src/OutboundServer/api_template/components/schemas/mojaloopError.yaml +5 -0
  133. package/src/OutboundServer/api_template/components/schemas/mojaloopTransactionRequestState.yaml +2 -0
  134. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/partiesByIdResponse.yaml +1 -1
  135. package/src/OutboundServer/api_template/components/schemas/quote.yaml +3 -0
  136. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/quoteError.yaml +0 -0
  137. package/src/OutboundServer/api_template/components/schemas/quotesPostRequest.yaml +13 -0
  138. package/src/OutboundServer/api_template/components/schemas/quotesPostResponse.yaml +48 -0
  139. package/src/OutboundServer/api_template/components/schemas/requestToPayRequest.yaml +39 -0
  140. package/src/OutboundServer/api_template/components/schemas/requestToPayResponse.yaml +41 -0
  141. package/src/OutboundServer/api_template/components/schemas/requestToPayTransferRequest.yaml +42 -0
  142. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/requestToPayTransferResponse.yaml +6 -6
  143. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/simpleTransferServerError.yaml +0 -0
  144. package/src/OutboundServer/api_template/components/schemas/simpleTransfersPostRequest.yaml +12 -0
  145. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/simpleTransfersPostResponse.yaml +1 -1
  146. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/transactionType.yaml +0 -0
  147. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/transferContinuationAcceptOTP.yaml +0 -0
  148. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/transferContinuationAcceptParty.yaml +0 -0
  149. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/transferContinuationAcceptQuote.yaml +0 -0
  150. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/transferError.yaml +0 -0
  151. package/src/OutboundServer/api_template/components/schemas/transferFulfilment.yaml +3 -0
  152. package/src/OutboundServer/api_template/components/schemas/transferParty.yaml +40 -0
  153. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/transferRequest.yaml +4 -4
  154. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/transferResponse.yaml +6 -6
  155. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/transferStatus.yaml +0 -0
  156. package/{OutboundServer → src/OutboundServer}/api_template/components/schemas/transferStatusResponse.yaml +1 -1
  157. package/{OutboundServer → src/OutboundServer}/api_template/health.yaml +0 -0
  158. package/{OutboundServer → src/OutboundServer}/api_template/openapi.yaml +0 -0
  159. package/{OutboundServer → src/OutboundServer}/api_template/paths/accounts.yaml +0 -0
  160. package/{OutboundServer → src/OutboundServer}/api_template/paths/bulkQuotes.yaml +0 -0
  161. package/{OutboundServer → src/OutboundServer}/api_template/paths/bulkQuotes_bulkQuoteId.yaml +0 -0
  162. package/{OutboundServer → src/OutboundServer}/api_template/paths/bulkTransfers.yaml +0 -0
  163. package/{OutboundServer → src/OutboundServer}/api_template/paths/bulkTransfers_bulkTransferId.yaml +0 -0
  164. package/{OutboundServer → src/OutboundServer}/api_template/paths/parties_Type_ID.yaml +2 -2
  165. package/{OutboundServer → src/OutboundServer}/api_template/paths/parties_Type_ID_SubId.yaml +3 -3
  166. package/{OutboundServer → src/OutboundServer}/api_template/paths/quotes.yaml +0 -0
  167. package/{OutboundServer → src/OutboundServer}/api_template/paths/requestToPay.yaml +0 -0
  168. package/{OutboundServer → src/OutboundServer}/api_template/paths/requestToPayTransfer.yaml +0 -0
  169. package/{OutboundServer → src/OutboundServer}/api_template/paths/requestToPayTransfer_requestToPayTransactionId.yaml +0 -0
  170. package/{OutboundServer → src/OutboundServer}/api_template/paths/simpleTransfers.yaml +0 -0
  171. package/{OutboundServer → src/OutboundServer}/api_template/paths/transfers.yaml +0 -0
  172. package/{OutboundServer → src/OutboundServer}/api_template/paths/transfers_transferId.yaml +0 -0
  173. package/{OutboundServer → src/OutboundServer}/handlers.js +0 -0
  174. package/{OutboundServer → src/OutboundServer}/index.js +15 -0
  175. package/{OutboundServer → src/OutboundServer}/middlewares.js +0 -0
  176. package/{TestServer → src/TestServer}/api.yaml +0 -0
  177. package/src/TestServer/handlers.js +63 -0
  178. package/{TestServer → src/TestServer}/index.js +31 -0
  179. package/{config.js → src/config.js} +6 -0
  180. package/{index.d.ts → src/index.d.ts} +0 -0
  181. package/{index.js → src/index.js} +0 -0
  182. package/{lib → src/lib}/api/index.js +0 -0
  183. package/{lib → src/lib}/cache.js +0 -0
  184. package/{lib → src/lib}/check.js +0 -0
  185. package/{lib → src/lib}/model/AccountsModel.js +0 -0
  186. package/{lib → src/lib}/model/Async2SyncModel.js +0 -0
  187. package/{lib → src/lib}/model/InboundTransfersModel.js +0 -0
  188. package/{lib → src/lib}/model/OutboundBulkQuotesModel.js +0 -0
  189. package/{lib → src/lib}/model/OutboundBulkTransfersModel.js +0 -0
  190. package/{lib → src/lib}/model/OutboundRequestToPayModel.js +0 -0
  191. package/{lib → src/lib}/model/OutboundRequestToPayTransferModel.js +0 -0
  192. package/{lib → src/lib}/model/OutboundTransfersModel.js +0 -0
  193. package/{lib → src/lib}/model/PartiesModel.js +0 -0
  194. package/{lib → src/lib}/model/ProxyModel/MatchRules/Expression.js +0 -0
  195. package/{lib → src/lib}/model/ProxyModel/MatchRules/Headers.js +0 -0
  196. package/{lib → src/lib}/model/ProxyModel/MatchRules/MatchRule.js +0 -0
  197. package/{lib → src/lib}/model/ProxyModel/MatchRules/Path.js +0 -0
  198. package/{lib → src/lib}/model/ProxyModel/MatchRules/Query.js +0 -0
  199. package/{lib → src/lib}/model/ProxyModel/MatchRules/index.js +0 -0
  200. package/{lib → src/lib}/model/ProxyModel/Route.js +0 -0
  201. package/{lib → src/lib}/model/ProxyModel/configSchema.json +0 -0
  202. package/{lib → src/lib}/model/ProxyModel/index.js +0 -0
  203. package/{lib → src/lib}/model/QuotesModel.js +0 -0
  204. package/{lib → src/lib}/model/TransfersModel.js +0 -0
  205. package/{lib → src/lib}/model/common/BackendError.js +0 -0
  206. package/{lib → src/lib}/model/common/PersistentStateMachine.js +0 -0
  207. package/{lib → src/lib}/model/common/index.js +0 -0
  208. package/{lib → src/lib}/model/index.js +0 -0
  209. package/{lib → src/lib}/model/lib/deferredJob.js +0 -0
  210. package/{lib → src/lib}/model/lib/index.js +0 -0
  211. package/{lib → src/lib}/model/lib/requests/backendRequests.js +0 -0
  212. package/{lib → src/lib}/model/lib/requests/common.js +0 -0
  213. package/{lib → src/lib}/model/lib/requests/index.js +0 -0
  214. package/{lib → src/lib}/model/lib/shared.js +0 -0
  215. package/{lib → src/lib}/randomphrase/index.js +0 -0
  216. package/{lib → src/lib}/randomphrase/words.json +0 -0
  217. package/{lib → src/lib}/router.js +0 -0
  218. package/{lib → src/lib}/validate.js +0 -0
  219. package/test/config/integration.env +9 -0
  220. package/test/integration/lib/cache.test.js +3 -3
  221. package/test/unit/ControlClient.test.js +113 -0
  222. package/test/unit/ControlServer/events.js +41 -0
  223. package/test/unit/ControlServer/index.js +231 -0
  224. package/test/unit/ControlServer.test.js +126 -0
  225. package/test/unit/InboundServer.test.js +5 -5
  226. package/test/unit/TestServer.test.js +5 -5
  227. package/test/unit/api/utils.js +5 -5
  228. package/test/unit/config.test.js +11 -10
  229. package/test/unit/inboundApi/handlers.test.js +6 -6
  230. package/test/unit/index.test.js +2 -1
  231. package/test/unit/lib/cache.test.js +1 -1
  232. package/test/unit/lib/model/AccountsModel.test.js +2 -2
  233. package/test/unit/lib/model/InboundTransfersModel.test.js +5 -5
  234. package/test/unit/lib/model/OutboundBulkQuotesModel.test.js +2 -2
  235. package/test/unit/lib/model/OutboundBulkTransfersModel.test.js +2 -2
  236. package/test/unit/lib/model/OutboundRequestToPayModel.test.js +3 -3
  237. package/test/unit/lib/model/OutboundRequestToPayTransferModel.test.js +2 -2
  238. package/test/unit/lib/model/OutboundTransfersModel.test.js +3 -3
  239. package/test/unit/lib/model/PartiesModel.test.js +28 -28
  240. package/test/unit/lib/model/QuotesModel.test.js +31 -31
  241. package/test/unit/lib/model/TransfersModel.test.js +3 -3
  242. package/test/unit/lib/model/common/PersistentStateMachine.test.js +13 -13
  243. package/test/unit/lib/model/mockedLibRequests.js +1 -1
  244. package/test/unit/outboundApi/handlers.test.js +3 -3
  245. package/.eslintignore +0 -2
  246. package/InboundServer/api_template.yaml +0 -69
  247. package/OAuthTestServer/index.js +0 -66
  248. package/OutboundServer/api_template/components/schemas/accountCreationStatus.yaml +0 -18
  249. package/OutboundServer/api_template/components/schemas/accountsRequest.yaml +0 -20
  250. package/OutboundServer/api_template/components/schemas/extensionListEmptiable.yaml +0 -6
  251. package/OutboundServer/api_template/components/schemas/individualQuote.yaml +0 -32
  252. package/OutboundServer/api_template/components/schemas/individualTransfer.yaml +0 -32
  253. package/OutboundServer/api_template/components/schemas/mojaloopError.yaml +0 -5
  254. package/OutboundServer/api_template/components/schemas/mojaloopTransactionRequestState.yaml +0 -2
  255. package/OutboundServer/api_template/components/schemas/quote.yaml +0 -3
  256. package/OutboundServer/api_template/components/schemas/quotesPostRequest.yaml +0 -13
  257. package/OutboundServer/api_template/components/schemas/quotesPostResponse.yaml +0 -48
  258. package/OutboundServer/api_template/components/schemas/requestToPayRequest.yaml +0 -39
  259. package/OutboundServer/api_template/components/schemas/requestToPayResponse.yaml +0 -41
  260. package/OutboundServer/api_template/components/schemas/requestToPayTransferRequest.yaml +0 -42
  261. package/OutboundServer/api_template/components/schemas/simpleTransfersPostRequest.yaml +0 -12
  262. package/OutboundServer/api_template/components/schemas/transferFulfilment.yaml +0 -3
  263. 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);
@@ -0,0 +1,127 @@
1
+ /**************************************************************************
2
+ * (C) Copyright ModusBox Inc. 2019 - 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
+ * Yevhen Kyriukha - yevhen.kyriukha@modusbox.com *
9
+ **************************************************************************/
10
+
11
+ 'use strict';
12
+
13
+ const { assert } = require('assert');
14
+ const express = require('express');
15
+ const bodyParser = require('body-parser');
16
+ const OAuth2Server = require('oauth2-server');
17
+ const { InMemoryCache } = require('./model');
18
+ const {Request, Response} = require('oauth2-server');
19
+ const UnauthorizedRequestError = require('oauth2-server/lib/errors/unauthorized-request-error');
20
+
21
+ class OAuthTestServer {
22
+ /**
23
+ *
24
+ * @param {Object} conf
25
+ * @param {number} conf.port OAuth server listen port
26
+ * @param {string} conf.clientKey Customer Key
27
+ * @param {String} conf.clientSecret Customer Secret
28
+ * @param {Logger} conf.logger Logger
29
+ */
30
+ constructor({ port, clientKey, clientSecret, logger }) {
31
+ this._api = null;
32
+ this._port = port;
33
+ this._logger = logger;
34
+ this._clientKey = clientKey;
35
+ this._clientSecret = clientSecret;
36
+ }
37
+
38
+ async start() {
39
+ if (this._app) {
40
+ return;
41
+ }
42
+ this._app = express();
43
+
44
+ this._oauth = new OAuth2Server({
45
+ model: new InMemoryCache({ clientKey: this._clientKey, clientSecret:this._clientSecret }),
46
+ accessTokenLifetime: 60 * 60,
47
+ allowBearerTokensInQueryString: true,
48
+ });
49
+
50
+ this._app.use(bodyParser.urlencoded({ extended: false }));
51
+ this._app.use(bodyParser.json());
52
+ this._app.use(this.tokenMiddleware());
53
+
54
+
55
+ await new Promise((resolve) => this._app.listen(this._port, resolve));
56
+ this._logger.push({ port: this._port }).log('Serving OAuth2 Test Server');
57
+ }
58
+
59
+ async stop() {
60
+ if (!this._app) {
61
+ return;
62
+ }
63
+ await new Promise(resolve => this._app.close(resolve));
64
+ this._app = null;
65
+ this._logger.log('OAuth2 Test Server shut down complete');
66
+ }
67
+
68
+ async reconfigure({ port, clientKey, clientSecret, logger }) {
69
+ assert(port === this._port, 'Cannot reconfigure running port');
70
+ return () => {
71
+ this._port = port;
72
+ this._logger = logger;
73
+ this.stop().then(() => this.start());
74
+ this._api = OAuthTestServer._SetupApi({ clientKey, clientSecret });
75
+ this._logger.log('restarted');
76
+ };
77
+ }
78
+
79
+ handleResponse(req, res, response) {
80
+ if (response.status === 302) {
81
+ const location = response.headers.location;
82
+ delete response.headers.location;
83
+ res.set(response.headers);
84
+ res.redirect(location);
85
+ } else {
86
+ res.set(response.headers);
87
+ res.status(response.status).send(response.body);
88
+ }
89
+ }
90
+
91
+ handleError(e, req, res, response) {
92
+ if (response) {
93
+ res.set(response.headers);
94
+ }
95
+
96
+ res.status(e.code);
97
+
98
+ if (e instanceof UnauthorizedRequestError) {
99
+ return res.send();
100
+ }
101
+
102
+ res.send({ error: e.name, error_description: e.message });
103
+ }
104
+
105
+ tokenMiddleware(options) {
106
+ return async (req, res, next) => {
107
+ const request = new Request(req);
108
+ const response = new Response(res);
109
+
110
+ let token;
111
+
112
+ try {
113
+ token = await this._oauth.token(request, response, options);
114
+ res.locals.oauth = {token};
115
+ } catch (e) {
116
+ await this.handleError(e, req, res, response, next);
117
+ return;
118
+ }
119
+
120
+ await this.handleResponse(req, res, response);
121
+
122
+ };
123
+ }
124
+ }
125
+
126
+
127
+ module.exports = OAuthTestServer;
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