@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
package/Dockerfile ADDED
@@ -0,0 +1,35 @@
1
+ FROM node:16-alpine as builder
2
+
3
+ RUN apk add --no-cache git python3 build-base
4
+
5
+ EXPOSE 3000
6
+
7
+ WORKDIR /src
8
+
9
+ # This is super-ugly, but it means we don't have to re-run npm install every time any of the source
10
+ # files change- only when any dependencies change- which is a superior developer experience when
11
+ # relying on docker-compose.
12
+ COPY ./package.json .
13
+ COPY ./package-lock.json .
14
+ RUN npm ci --only=production
15
+ FROM node:16-alpine
16
+
17
+ ARG BUILD_DATE
18
+ ARG VCS_URL
19
+ ARG VCS_REF
20
+ ARG VERSION
21
+
22
+ # See http://label-schema.org/rc1/ for label schema info
23
+ LABEL org.label-schema.schema-version="1.0"
24
+ LABEL org.label-schema.name="sdk-scheme-adapter"
25
+ LABEL org.label-schema.build-date=$BUILD_DATE
26
+ LABEL org.label-schema.vcs-url=$VCS_URL
27
+ LABEL org.label-schema.vcs-ref=$VCS_REF
28
+ LABEL org.label-schema.url="https://mojaloop.io/"
29
+ LABEL org.label-schema.version=$VERSION
30
+
31
+ COPY --from=builder /src/ /src
32
+ COPY ./src ./src
33
+ COPY ./secrets /
34
+
35
+ CMD ["node", "src/index.js"]
package/LICENSE.md ADDED
@@ -0,0 +1,10 @@
1
+ # LICENSE
2
+
3
+ Copyright © 2017 Bill & Melinda Gates Foundation
4
+
5
+ The Mojaloop files are made available by the Bill & Melinda Gates Foundation under the Apache License, Version 2.0
6
+ (the "License") and you may not use these files except in compliance with the [License](http://www.apache.org/licenses/LICENSE-2.0). You may obtain a copy of the License at
7
+
8
+ [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
9
+
10
+ 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](http://www.apache.org/licenses/LICENSE-2.0).
package/PROXY.md ADDED
@@ -0,0 +1,84 @@
1
+ ### SDK Proxy Configuration
2
+
3
+ The SDK Proxy allows a DFSP to use the same outbound SDK endpoint for talking to a DFSP through the Mojaloop API and to a non-Mojaloop (custom) REST API exposed by the Mojaloop Hub. For example:
4
+ * to issue a Mojaloop transfer request, a DFSP would call: `http://local.sdk-adapter.com:4001/transfers`
5
+ * to issue a request to a custom API, a DFSP would call: `http://local.sdk-adapter.com:4001/customservice`
6
+
7
+ To be able to connect to a custom API, the DFSP must:
8
+
9
+ 1. Define API endpoint information in a Proxy configuration YAML file.
10
+ 2. Specify the location of the configuration file in the environment variable `PROXY_CONFIG_PATH`.
11
+ 3. Map the configuration file into the container at runtime.
12
+
13
+ The configuration file is structured as follows:
14
+ ```yaml
15
+ version: 1.0
16
+ routes:
17
+ - description: 'Routing by URL path as string'
18
+ match:
19
+ - path: /sdk-path-1
20
+ - path: /sdk-other-path-1
21
+ destination:
22
+ path: /switch-path-1
23
+
24
+ - description: 'Routing by URL path as regexp'
25
+ match:
26
+ - path: ~ ^\/sdk-.*2$
27
+ destination:
28
+ path: /switch-path-2
29
+
30
+ - description: 'Routing by query and headers params with regexp'
31
+ match:
32
+ - path: /sdk-custom-api
33
+ headers:
34
+ - name: CustomHeader
35
+ value: ~ *
36
+ query:
37
+ - key: customQueryKey
38
+ value: Value1
39
+ - key: ~ query.*Special
40
+ value: ~ val.*2
41
+ destination:
42
+ path: /switch-path-3
43
+
44
+ ```
45
+
46
+ #### Elements of configuration file
47
+
48
+ * `version` **(required)** - Must be set to `1.0`.
49
+
50
+ * `routes` **(required)** - Must contain an array of routes, that is, endpoint mappings with corresponding forwarding rules.
51
+
52
+ ##### Routes
53
+
54
+ * `description` **(optional)** - User description of route.
55
+
56
+ * `match` **(required)** - Must contain one or more forwarding rules that will be applied to incoming requests.
57
+ A request will be forwarded to the `destination` if **ANY** of the rules match the request.
58
+
59
+ * `destination` **(required)** - The endpoint that the SDK Proxy should forward requests to.
60
+
61
+ ##### Forwarding rules
62
+
63
+ There must be at least one forwarding rule defined in `match`, additional rules are optional.
64
+
65
+ A forwarding rule value can be defined as a plain string or a regular expression.
66
+
67
+ When using a regular expression, the value must be prefixed with the tilde symbol (`~`) and a space, for example:
68
+ ```
69
+ ~ customVal.*
70
+
71
+ ~ ^\/api\/common\/.*\/v1$
72
+ ```
73
+
74
+ A forwarding rule is applied by the SDK Proxy when **ALL** of the items inside the rule match the corresponding request parameters (such as an endpoint URL, or HTTP request headers, or query parameters). You can define rules about request parameters using the following elements in the configuration file:
75
+
76
+ * `path` - used to match a URL path
77
+
78
+ * `headers` - array of `name`/`value` pairs used to match HTTP request headers:
79
+ * `name` - HTTP header name
80
+ * `value` - HTTP header value
81
+
82
+ * `query` - array of `key`/`value` pairs used to match HTTP query parameters:
83
+ * `key` - HTTP query key
84
+ * `value` - HTTP query value
package/README.md ADDED
@@ -0,0 +1,228 @@
1
+ [![Git Commit](https://img.shields.io/github/last-commit/mojaloop/sdk-scheme-adapter.svg?style=flat)](https://github.com/mojaloop/sdk-scheme-adapter/commits/master)
2
+ [![Git Releases](https://img.shields.io/github/release/mojaloop/sdk-scheme-adapter.svg?style=flat)](https://github.com/mojaloop/sdk-scheme-adapter/releases)
3
+ [![Npm Version](https://img.shields.io/npm/v/@mojaloop/sdk-scheme-adapter.svg?style=flat)](https://www.npmjs.com/package/@mojaloop/sdk-scheme-adapter)
4
+ [![NPM Vulnerabilities](https://img.shields.io/snyk/vulnerabilities/npm/@mojaloop/sdk-scheme-adapter.svg?style=flat)](https://www.npmjs.com/package/@mojaloop/sdk-scheme-adapter)
5
+ [![CircleCI](https://circleci.com/gh/mojaloop/sdk-scheme-adapter.svg?style=svg)](https://circleci.com/gh/mojaloop/sdk-scheme-adapter)
6
+
7
+ # Mojaloop SDK Scheme Adapter
8
+
9
+ This package provides a scheme adapter that interfaces between a Mojaloop API compliant switch and a DFSP backend platform that does not natively implement the Mojaloop API.
10
+
11
+ The API between the scheme adapter and the DFSP backend is synchronous HTTP while the interface between the scheme adapter and the switch is native Mojaloop API.
12
+
13
+ This package exemplifies the use of the Mojaloop SDK Standard Components for TLS, JWS and ILP (available [here](http://www.github.com/mojaloop/sdk-standard-components)).
14
+
15
+ For information on the background and context of this project please see the presentation [here](docs/Mojaloop%20-%20Modusbox%20Onboarding%20functionality.pdf)
16
+
17
+ ## DFSP Backend API
18
+
19
+ DFSP backends must implement the [DFSP Inbound API](docs/dfspInboundApi.yaml) in order for the scheme adapter to make incoming transfers i.e. to receive funds to a customer account.
20
+
21
+ DFSP backends can call the [DFSP Outbound API](/src/outboundApi/api.yaml) in order to make outgoing transfers i.e. to send funds from a customer account.
22
+
23
+ ## Docker Image
24
+
25
+ This package is available as a pre-built docker image on Docker Hub: [https://hub.docker.com/r/mojaloop/sdk-scheme-adapter](https://hub.docker.com/r/mojaloop/sdk-scheme-adapter)
26
+
27
+ ## NPM Package
28
+
29
+ Users who do not wish to use all the functionality of the scheme adapter as-is are able to import this package as a dependency into their own projects. The scheme adapter package is [published on npm](https://www.npmjs.com/package/@mojaloop/sdk-scheme-adapter) and exposes the following components for external use:
30
+
31
+ - Inbound Server Middleware
32
+ - Outbound Server Middleware
33
+ - Request Router
34
+ - Request Validation Framework
35
+ - Unique Request Identifier Framework (RandomPhrase)
36
+ - Logger
37
+ - Distributed Cache Abstraction (uses REDIS as a backing service)
38
+
39
+ ## Quick Start
40
+
41
+ The steps shown below illustrate setting up the Mojaloop SDK Scheme Adapter locally with a mock DFSP backend.
42
+
43
+ This configuration is suitable as a starting point for DFSPs wishing to utilize the scheme adapter for integrating their backend systems with a Mojaloop API enabled switch.
44
+
45
+ _Note that these instructions are for Linux based systems. For Mac and/or Windows you will need to translate the following for your environment._
46
+
47
+ 1. Make sure you have docker and docker-compose installed locally. See [https://docs.docker.com/v17.12/install/](https://docs.docker.com/v17.12/install/) and [https://docs.docker.com/compose/install/](https://docs.docker.com/compose/install/) respectively.
48
+ 1. Clone the Mojaloop SDK Mock DFSP Backend repository locally:
49
+
50
+ Change directory into your workspace then to clone using HTTPS:
51
+
52
+ ```bash
53
+ $ git clone https://github.com/mojaloop/sdk-mock-dfsp-backend.git
54
+ ```
55
+
56
+ or to clone using SSH:
57
+
58
+ ```bash
59
+ $ git clone git@github.com:mojaloop/sdk-mock-dfsp-backend.git
60
+ ```
61
+
62
+ Now change directory into the cloned repository directory:
63
+
64
+ ```bash
65
+ $ cd sdk-mock-dfsp-backend
66
+ ```
67
+
68
+ 1. Edit the scheme adapter configuration to point the scheme adapter at your Mojaloop API enabled switch or simulator:
69
+
70
+ Use your favourite text editor to edit the file `src/scheme-adapter.env`.
71
+ Change the value of the `PEER_ENDPOINT` variable to the DNS name or IP address and port number of your Mojaloop API enabled switch or simulator. Save the file.
72
+
73
+ 1. Use docker-compose to download and run the pre-built scheme-adapter, shared cache and mock DFSP backend containers locally:
74
+
75
+ Change directory into the `src` subfolder and run docker-compose
76
+
77
+ ```bash
78
+ $ cd src/
79
+ $ docker-compose up
80
+ ```
81
+
82
+ You should see docker download the pre-built docker images for the scheme adapter, shared cache (redis) and mock DFSP backend. Docker-compose will start the containers.
83
+
84
+ 1. Test the outbound (sending money) API:
85
+
86
+ Find the IP address of the mock DFSP backend container. To do this you can use...
87
+
88
+ ```bash
89
+ docker network ls
90
+ ```
91
+
92
+ to find the list of docker networks on your local machine. Identity the docker network created by docker-compose, docker-compose will assign a name based on the directory name from which you ran the `docker-compose up` command.
93
+
94
+ Once you have identified the network you can use...
95
+
96
+ ```bash
97
+ docker network inspect {network name}
98
+ ```
99
+
100
+ This will print a JSON structure to the terminal containing the set of containers in the network and their individual IP addresses.
101
+
102
+ Use the following command to tell the mock DFSP backend to initiate an outbound money transfer via the scheme-adapter:
103
+
104
+ _Dont forget to substitute in the correct IP address for the Mock DFSP Backend container_
105
+
106
+ ```bash
107
+ curl -X POST \
108
+ http://{MOCK Container IP Address}:3000/send \
109
+ -H 'Content-Type: application/json' \
110
+ -d '{
111
+ "from": {
112
+ "displayName": "John Doe",
113
+ "idType": "MSISDN",
114
+ "idValue": "123456789"
115
+ },
116
+ "to": {
117
+ "idType": "MSISDN",
118
+ "idValue": "987654321"
119
+ },
120
+ "amountType": "SEND",
121
+ "currency": "USD",
122
+ "amount": "100",
123
+ "transactionType": "TRANSFER",
124
+ "note": "test payment",
125
+ "homeTransactionId": "123ABC"
126
+ }'
127
+ ```
128
+
129
+ The response from the above call should indicate the result of the communication between the scheme-adapter and the Mojaloop API enabled switch or simulator.
130
+
131
+ 1. Speak to your switch operator or use your simulator to test the inbound (receiving money) API.
132
+
133
+ You can now examine the code of the Mock DFSP backend to understand how it implements the scheme-adapter simplified inbound API.
134
+
135
+
136
+ ## Testing
137
+
138
+ ### Unit Tests
139
+
140
+ Unit tests can be found in the `./src/test/unit` directory, and follow the same directory structure of the main project.
141
+
142
+ Run the unit tests with the following (from `./src` dir):
143
+
144
+ ```bash
145
+ npm run test
146
+ ```
147
+
148
+ ### Integration Tests
149
+
150
+ ```bash
151
+ docker-compose -f docker-compose.yml build
152
+ docker-compose -f docker-compose.yml up -d
153
+ ./docker/wait4/wait4.js cicd-integration-tests
154
+ cd src
155
+ npm run test:int
156
+ cd ../
157
+ docker-compose -f docker-compose.yml down
158
+
159
+ # test report you can find in
160
+ src/junit.xml
161
+ ```
162
+
163
+ ### Get status of quote request
164
+ The status of a previously sent quotation request can be get by executing `GET /quotes/{ID}`.
165
+ When the response to the original quote request is sent, the response is cached in the redis store. When a `GET /quotes/{ID}` is received,
166
+ the cached response is retrieved from the redis store and returned to the caller as a body with `PUT /quotes/{ID}` request.
167
+ When the redis is setup as a persistent store then it will return the response for all the quote requests sent with `POST /quotes`. If the the redis is setup as cache with expiry time then it will not return response for the expired quotes when the cache expires. Also only the payer dfsp is supposed to make the `GET /quotes/{ID}` request.
168
+ If the quote response is not found in the redis store `PUT /quotes/{ID}` will be made with the following body
169
+ ```
170
+ {
171
+ "errorInformation":{
172
+ "errorCode":"3205",
173
+ "errorDescription":"Quote ID not found"
174
+ }
175
+ }
176
+ ```
177
+
178
+ ### Dev Tools
179
+ This project uses @redocly/openapi-cli and @mojaloop/api-snippets to build interfaces.
180
+
181
+ Any interface changes should be done in the corresponding `api-template.yaml`
182
+ file and then rebuilt using the command below or the `build:openapi` scripts.
183
+
184
+ ```bash
185
+ openapi bundle --output api.yaml --ext yaml api_template.yaml
186
+ ```
187
+
188
+ To rebuild the inbound interface run
189
+
190
+ ```bash
191
+ npm run build:openapi:inbound
192
+ ```
193
+
194
+ To rebuild the outbound interface run
195
+
196
+ ```bash
197
+ npm run build:openapi:outbound
198
+ ```
199
+
200
+ ## Automated Releases
201
+
202
+ As part of our CI/CD process, we use a combination of CircleCI, standard-version
203
+ npm package and github-release CircleCI orb to automatically trigger our releases
204
+ and image builds. This process essentially mimics a manual tag and release.
205
+
206
+ On a merge to master, CircleCI is configured to use the mojaloopci github account
207
+ to push the latest generated CHANGELOG and package version number.
208
+
209
+ Once those changes are pushed, CircleCI will pull the updated master, tag and
210
+ push a release triggering another subsequent build that also publishes a docker image.
211
+
212
+ ### Potential problems
213
+
214
+ * There is a case where the merge to master workflow will resolve successfully, triggering
215
+ a release. Then that tagged release workflow subsequently failing due to the image scan,
216
+ audit check, vulnerability check or other "live" checks.
217
+
218
+ This will leave master without an associated published build. Fixes that require
219
+ a new merge will essentially cause a skip in version number or require a clean up
220
+ of the master branch to the commit before the CHANGELOG and bump.
221
+
222
+ This may be resolved by relying solely on the previous checks of the
223
+ merge to master workflow to assume that our tagged release is of sound quality.
224
+ We are still mulling over this solution since catching bugs/vulnerabilities/etc earlier
225
+ is a boon.
226
+
227
+ * It is unknown if a race condition might occur with multiple merges with master in
228
+ quick succession, but this is a suspected edge case.
package/SECURITY.md ADDED
@@ -0,0 +1,18 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ All versions of this project are currently being supported with security updates.
6
+
7
+ | Version | Supported |
8
+ | ------- | ------------------ |
9
+ | 0.0.x | :white_check_mark: |
10
+
11
+
12
+ ## Reporting a Vulnerability
13
+
14
+ Please report any vulnerabilities you may discover privately, so as to not expose current users to unnecessary risk, by contacting the repository owner.
15
+
16
+ Reports will be assessed by the development team and an impact assessment carried out as soon as possible.
17
+
18
+ Further actions will be planned and communicated as deemed appropriate by the repository owner in order to minimise exposure of users to risk.
@@ -414,6 +414,26 @@
414
414
  "decision": "ignore",
415
415
  "madeAt": 1649898257344,
416
416
  "expiresAt": 1652490250295
417
+ },
418
+ "1070030|@mojaloop/central-services-shared>widdershins>markdown-it": {
419
+ "decision": "ignore",
420
+ "madeAt": 1650460940438,
421
+ "expiresAt": 1653052932045
422
+ },
423
+ "1070030|@mojaloop/central-services-shared>shins>markdown-it": {
424
+ "decision": "ignore",
425
+ "madeAt": 1650459472663,
426
+ "expiresAt": 1653051469252
427
+ },
428
+ "1068154|@mojaloop/central-services-shared>shins>sanitize-html": {
429
+ "decision": "ignore",
430
+ "madeAt": 1650459474362,
431
+ "expiresAt": 1653051469252
432
+ },
433
+ "1068155|@mojaloop/central-services-shared>shins>sanitize-html": {
434
+ "decision": "ignore",
435
+ "madeAt": 1650459475376,
436
+ "expiresAt": 1653051469252
417
437
  }
418
438
  },
419
439
  "rules": {},
@@ -0,0 +1,5 @@
1
+ #openssl genrsa -des3 -out privatekey.pem 2048
2
+ openssl genrsa -out privatekey.pem 2048
3
+ openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 1825 -subj "/CN=testingtoolkitdfsp/C=US/ST=Ohio/L=Columbus/O=Testing Toolkit/OU=Payments"
4
+ #openssl rsa -in privatekey.pem -pubout -out publickey.cer
5
+ #openssl rsa -in privatekey.pem -out privatekey.pem
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpQIBAAKCAQEAwczEjlUeOPutgPRlpZSbcbJJwsmmxsBfoPDw1sjBiR7L6Doh
3
+ VqKd810+TmiDRYgCzOLabje/mtLiDC95MtuPF5yUiVE04ar6Ny5pZLxJEnbDEOAE
4
+ TxOn1gzCKeRHYOcgybDi6TLhnvyFyIaXKzyBhEYvxI8VvRV11UawLqvpgVrdsbZy
5
+ 1FQOMLq7OB+J6qC7fhR61F6Wu45RZlZMB482c658P7dCQCdQtEMEF5kuBNB/JuUR
6
+ e0qKjl2udKVL3wgBC7J7o7Tx8kY5T63q/ZC3TfoTclFeXtIePt8Eu74u3d6WpSWb
7
+ Z12mewRBVPtmbGHgEXpih3uayaqIeC8Dc4zO5QIDAQABAoIBAQCPMGJR36YS6DGL
8
+ xAeOTbyERvykxSVKWDzPxvXLXE1SqMRz8u9K+Z/GfjBY8nN7XkDjbQGCygHxvLpz
9
+ 0me0IfEZuwEsbCmsSw3Q06PfYBaFY+ZAg6PrYVRynL6hAR+UA3GAVAdz0bpOI7od
10
+ LQRoV65CMzF8A1RGfqKvUClAcph2j4lbjjRZ1OExDdcbRCI4h9qgGOMo9o9OEB1X
11
+ HHiPhtS1ZwjczqCyJHkkHbOgYNPN7SDy8vHFOVjMDIADF+S/NLrxGUUIUDvNMnGV
12
+ D4G8thQD2zSatMjlbJJ+oNt++T/SJMSIiuQTB5zy/KpiMPUN+AXhq5h/dHDcFXhA
13
+ ng2deEcJAoGBAOQr1g/s/3V32tQpYloTMOPqIJoVnZnlcXbKy3nWLuOrkVlM0x3V
14
+ AEwC7ntb2eOSQ331AvBd/EESgtZr1jvxfsHG+MjwEylcOE33g4MqCKthGcnFA8zG
15
+ Z5h6OqTtHdY1bmuiisPvBA4/x2o7mWJz35vT0Sny3cci3f2D6pmPpuq3AoGBANlv
16
+ wjWgeDQSR8nTdM1P7zepVdN51f8Fl3r49kMhceVHdwL5iL7q4GkxUgpCyBkFoElW
17
+ vmsLgR1fnb+qBtF2kvljQtlRrlgwz1GgYNhp+aAgcAjvQ9fQcvCLr1leXzf6VBHx
18
+ jXEIUAlAJVlJ5gWKlDNK9ytjurOvOXipRC4GQKdDAoGBALNOt6RATOjVTYSZGQ9M
19
+ MYmKPiCYiAeexbHi4FBYvvRvqYOR2f6BmwAg9aS/o9Uw5hUf7DVUxp2knGlAyVTG
20
+ DSTe5jeSYpyIOj8bGaCD8dgsMIXda4ULDfJHa7qcFGx4BNRVIdOkC33fJSkYuQsj
21
+ oD/nD2J1109c2TMW7c/LkhK1AoGAUD8xws7tbfJNMkxrMBbPJ5DETx8I/myW4lid
22
+ slrWiRLd9mgXsrZGiiwcphLNfIaaCFcOQb1mMmwGcSUUDRwg1A9xLXk6yeuBqBNz
23
+ iotaCGHQV0vOkwioUuSKm4X7yFIH0vN+CvhRaYiWACUI0oS5e1CwdgABeK0znbeC
24
+ pSXDmLcCgYEA1ls595Ue5cUCmFDvpCIifsATNOMPguKeFuPbYSItQod3P3Bj6txV
25
+ phe0jUtWPhIF3I0XOtea2Usvbrj64GMNWLaeK2pdsbIWBlsu2tuqaAfKYiGpGCAh
26
+ QWGAPwZ4w7Z3nmA6IhaD6zUnzBGserHv59XttKK0AiQwYMn6UvUIq0M=
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,21 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDbjCCAlYCCQDudXfDH36/JjANBgkqhkiG9w0BAQsFADB5MRswGQYDVQQDDBJ0
3
+ ZXN0aW5ndG9vbGtpdGRmc3AxCzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARPaGlvMREw
4
+ DwYDVQQHDAhDb2x1bWJ1czEYMBYGA1UECgwPVGVzdGluZyBUb29sa2l0MREwDwYD
5
+ VQQLDAhQYXltZW50czAeFw0yMDAzMjQxNzU1MjZaFw0yNTAzMjMxNzU1MjZaMHkx
6
+ GzAZBgNVBAMMEnRlc3Rpbmd0b29sa2l0ZGZzcDELMAkGA1UEBhMCVVMxDTALBgNV
7
+ BAgMBE9oaW8xETAPBgNVBAcMCENvbHVtYnVzMRgwFgYDVQQKDA9UZXN0aW5nIFRv
8
+ b2xraXQxETAPBgNVBAsMCFBheW1lbnRzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
9
+ MIIBCgKCAQEAwczEjlUeOPutgPRlpZSbcbJJwsmmxsBfoPDw1sjBiR7L6DohVqKd
10
+ 810+TmiDRYgCzOLabje/mtLiDC95MtuPF5yUiVE04ar6Ny5pZLxJEnbDEOAETxOn
11
+ 1gzCKeRHYOcgybDi6TLhnvyFyIaXKzyBhEYvxI8VvRV11UawLqvpgVrdsbZy1FQO
12
+ MLq7OB+J6qC7fhR61F6Wu45RZlZMB482c658P7dCQCdQtEMEF5kuBNB/JuURe0qK
13
+ jl2udKVL3wgBC7J7o7Tx8kY5T63q/ZC3TfoTclFeXtIePt8Eu74u3d6WpSWbZ12m
14
+ ewRBVPtmbGHgEXpih3uayaqIeC8Dc4zO5QIDAQABMA0GCSqGSIb3DQEBCwUAA4IB
15
+ AQAZ1lQ/KcSGwy/jQUIGF87JugLU17nnIEG2TrkC5n+fZDQqs8QqU6itbkdGQyNj
16
+ F5aLoPEdrKzevnBztlAEq0bofR0uDnQPN74A/NwOUfWds0hq5elZnO9Uq0G15Go4
17
+ pfqLbSjHxSu6LZaHP6f9+WvMqNbGr3kipz8GSIQWixzdKBnNxCwWjZmk4gD5cahU
18
+ XIpMAZumsnKk6pWilmuMIxC579CyLkGdVze3Kj6GunUJ1pieZzv4+RUJz8NgXxjW
19
+ ZRwqCkEqPe/8S1X9srtcrdbHryDdC18Ldu/rADEKbSqy0BhQdKYDcxulaQuqibwD
20
+ i0dWSdTWoseAbUqp2ACc6aF/
21
+ -----END CERTIFICATE-----
@@ -0,0 +1,29 @@
1
+ OUTPUT_DIR="."
2
+
3
+ rm *.key *.pem *.csr *.crt *.srl
4
+
5
+ ## Generating Server CA certificate
6
+ openssl genrsa -out "$OUTPUT_DIR/hub_server_cakey.key" 4096
7
+ openssl req -new -sha256 -config openssl.conf -nodes -x509 -days 10000 -extensions v3_ca -key "$OUTPUT_DIR/hub_server_cakey.key" -out "$OUTPUT_DIR/hub_server_cacert.pem" -subj '/CN=hubserverca/C=US/ST=Ohio/L=Columbus/O=Hub Server CA/OU=Payments'
8
+
9
+ ## Generate server key
10
+ openssl genrsa -out "$OUTPUT_DIR/hub_server_key.key" 4096
11
+
12
+ ## Generate server csr
13
+ openssl req -new -sha256 -config openssl.conf -key hub_server_cakey.key -subj "/C=US/ST=CA/O=Hub Server/CN=mojaloop-testing-toolkit" -out hub_server.csr
14
+
15
+ ## Sign server cert
16
+ openssl x509 -req -days 3650 -sha256 -extfile openssl.conf -extensions v3_req -in hub_server.csr -signkey hub_server_key.key -CA hub_server_cacert.pem -CAkey hub_server_cakey.key -CAcreateserial -out hub_server_cert.pem
17
+
18
+ ## Generating Client CA certificate
19
+ openssl genrsa -out "$OUTPUT_DIR/hub_client_cakey.key" 4096
20
+ openssl req -new -sha256 -config openssl.conf -nodes -x509 -days 10000 -extensions v3_ca -key "$OUTPUT_DIR/hub_client_cakey.key" -out "$OUTPUT_DIR/hub_client_cacert.pem" -subj '/CN=hubclientca/C=US/ST=Ohio/L=Columbus/O=Hub Client CA/OU=Payments'
21
+
22
+ ## Generate client key
23
+ openssl genrsa -out "$OUTPUT_DIR/hub_client_key.key" 4096
24
+
25
+ ## Generate client csr
26
+ openssl req -new -sha256 -key hub_client_key.key -out "$OUTPUT_DIR/hub_client.csr" -subj '/CN=hubclient/C=US/ST=Ohio/L=Columbus/O=Hub Client/OU=Payments/emailAddress=admin@hubclient.com'
27
+
28
+
29
+ #openssl x509 -in hub_server_cert.pem -text -noout
@@ -0,0 +1,28 @@
1
+ -----BEGIN CERTIFICATE REQUEST-----
2
+ MIIE1TCCAr0CAQAwgY8xEjAQBgNVBAMMCWh1YmNsaWVudDELMAkGA1UEBhMCVVMx
3
+ DTALBgNVBAgMBE9oaW8xETAPBgNVBAcMCENvbHVtYnVzMRMwEQYDVQQKDApIdWIg
4
+ Q2xpZW50MREwDwYDVQQLDAhQYXltZW50czEiMCAGCSqGSIb3DQEJARYTYWRtaW5A
5
+ aHViY2xpZW50LmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMXw
6
+ zRGgrVa7eiuO6ZgNc16gLTW+akYh86CDIiIYtDIKUcLsmViLVXqMdPbaheMPTNr3
7
+ PGhAYyMjRUSf/PtxokTexyfr2ATF1JL8MC9ea6y4nnKfuf5mHdEyWCEGMywNPsVO
8
+ 2Dvf8w7RmV+Do/HzE0479lK/JqFAOxeSrNiQXhmJ1gv6Km7E4tuvqVLDhry55LWN
9
+ MSpT8dcHoYylzvtutXTlYTZfPAN9J7cqHS/BdXPOw5GM0104RKctR6ma6bCt3OvV
10
+ BqrKsvJ+cKOmfj86jYottMWKLlDYkszikqsKOQebqjNj8wDTNX4JhETkjF2WlemN
11
+ h4FBTmzmE88ugUY3b+PsySZxsbL1UURZINofsZTGyjV6GETKeGXVbIvJAY4+xpES
12
+ vv0QhBjz7aX4rNngbERuMkXa3WF4EYkU1Yl61XnWvYSm5MAF2j+oGoOD4SgxXJxm
13
+ Xs5jS4wAYBPA1VkafaXQQ/cCrD+F3kxSy+CHnuTaPt/Dqq89zvN9yMcqwkdIChfY
14
+ og8NP01aMe84rkcfQpBVUe9wkgo/lsFqBE9lRuuxhFpGyhNL1g9VJ/DSVIkZm8Ba
15
+ 1jcGbl25SdtU0FswGLkl45JpQtjvErdldNerhcxHoAVA1AlqRS71lV8Uq5TqdLHh
16
+ fMz8JSV9YEyAc4gP2YBOfonHFtXGyelYHukblHi3AgMBAAGgADANBgkqhkiG9w0B
17
+ AQsFAAOCAgEAqHiCShmAw+D0MBPTll4bJMeIk6PhlhV/OaLakDoAu4HjQgaMODP2
18
+ uJjX07jRQFiMPFNJNgTJHfdl/azSIsfI56/6XVmUwYENDzwUVHkBo0d9XSCPX+cn
19
+ gFRc6J2ccGJO0O+ac8lsvIrAWd72chbhAxm09xQ/iz4aT+zwc7TrpYtn6mdfTkWD
20
+ xrNTcuUrT2CBNQKpO3m2oA/lJbnlfoz+m16hJQmmLX5i+qympS9EmH9un5yH4Lx+
21
+ EuiMcuKad4kxQF27hnnp9z/WQr/DR6Y826NpqWDA5gvJcCXo+ACfl+JIQSN54Z68
22
+ J0C+1idE5lY12jgXUGBMn3gwAA39hucPDVu4br0Q6oOnYLD8ZnVpsy1Pvf1ekIvb
23
+ PJEYOUu8lsuwJQcpdLwrEV2WDFsxRalYTnvYazv+dtBmidSHziZythQZNPcDQNvN
24
+ 8OmwEE0t+o9TpEgHRVLonwRm3AfHiEmD/fsj0yylZzg7hSDa9QaQ1TW/nCC/3KfZ
25
+ ASztRCe+teibaLbRiLNUwhI+kkYTy1jibeDtb7A/FE8rlnC21e+5/Ds+90FEtcaG
26
+ kesHJkC7rtzGlsdZGB0HnDJTWE9vxFsIcHf0+oJ73yKI/17+0DW7jBFp874hdhMj
27
+ ip8xnZFDmplztB3aPzIpmNClAcNn5AP+m9cKbg8wY/wmTcRlF7hNAMU=
28
+ -----END CERTIFICATE REQUEST-----
@@ -0,0 +1,32 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFdjCCA16gAwIBAgIJAL5G4HWE3SsRMA0GCSqGSIb3DQEBCwUAMHAxFDASBgNV
3
+ BAMMC2h1YmNsaWVudGNhMQswCQYDVQQGEwJVUzENMAsGA1UECAwET2hpbzERMA8G
4
+ A1UEBwwIQ29sdW1idXMxFjAUBgNVBAoMDUh1YiBDbGllbnQgQ0ExETAPBgNVBAsM
5
+ CFBheW1lbnRzMB4XDTIwMDQwNzIwMjA0NVoXDTQ3MDgyNDIwMjA0NVowcDEUMBIG
6
+ A1UEAwwLaHViY2xpZW50Y2ExCzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARPaGlvMREw
7
+ DwYDVQQHDAhDb2x1bWJ1czEWMBQGA1UECgwNSHViIENsaWVudCBDQTERMA8GA1UE
8
+ CwwIUGF5bWVudHMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGeRcG
9
+ 9RbcFLGTw5v9AsB3wTrcOCX3VQT8sCODAotd6heuOZwxeODZ1it35OtfNwhSDNlC
10
+ xg3GxYnh+PThWpCW7fHeXYKskj+0iXtgOdnoyjJQbXW4YTHWt+m/1AaB3A2QgEwP
11
+ 2alxSXqKVTPar70Swh8CSyfMWObXGHk6ydhZ87bxnwBsb2zCf4TX/CXpgV/Dq+fA
12
+ EQHF/FJSNYKsSx/ElNnsaN9VF9g8GbQwcTFSqZXv0zQkUai8U1l4zIj1w6ZsAiXK
13
+ u93s4fa6mCRM56o45bcjh4zgX0MfWFEYGzFN6tpkeiFJwV2jsZoEEv0SBgw8jGCF
14
+ 9U3zc3G4LDmI1CIUk0E9gq3EoWQFZWS2ILcH/GjuqII2qavJ5HdcneN8sRWRz5RS
15
+ 6jzWsJlB+wLocXXS8Kv44zQWQJRsbPWbSowtTjie6XIWgAQWiSVzZeu2/zHchC/3
16
+ CBL9vDT5qn70c5cdRkACS2phZZF4vLekEYfWxRYqLs6iaGTjc6FiYoKf3sqm6LPN
17
+ 2Gz9OTH16qklA3jzY4jFSmDeoqYYBGGxbKgWN/w5SII+w+GROjz+dH9Ut4cFEUuC
18
+ IZ/rqUPYBgU11YR2feOqGLweBb54dSGxa0sf4jQLIzy36EXGOeiz8O5K/bcitFyE
19
+ kkIIiFFzt44H4mIUamamk3WF7GTp+r5XSbNyQQIDAQABoxMwETAPBgNVHRMBAf8E
20
+ BTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQCH/r0Wjh7FKDnXi707BZwgZL4Agu+Z
21
+ sntNZx7lbkJKLovpAouN7oHqwSJ5b1r7KOoW8RFZk/5wHBsis1GTU1HHaErAG/KU
22
+ jSz7amU1aUCKaXk/qMyEF6oVQ09a06OMYfqhNwzLL+zuzZT274z/WEA9V/EOkLrF
23
+ sm34vSZk8RMVwcnja0Tq21K6gk7hJ64cq1/sOtZhS6t6YRnzu7mA0PjnaeHPuGBv
24
+ qxYt1WmMvxEzBP6D6NgFRKuwDmZxDH9mV+o3BTktzUh83F40I5rjzXI7Wfw/D3Od
25
+ 1Sgypq/rJJowCBWY7NkWfB1Oykl1Ql3ThUNSwDaN8WZLZINQcwjbv5CWoJ8uJ3yX
26
+ YNy/29k1jmsjx0/LdH3oHshdhfnekUSqRjHsSHqKuobwr7mivERKIPywQQzqId0+
27
+ SW/Y4wMXroVCSDhApDy5CKXpW1j4fRWQy+vgLZTof3t8mv4znfc+P8M0ET/HoH2Q
28
+ q1B8Cwis0JIxfMQJ/HiypVo0g2cPCpqQkhwJk8kFuJccPiCnm9yR5wsmVm0wF1/d
29
+ glB2lou8lGNBjnMuRxSjQ6S/k4XNGupV8D9qnoHCrIcfNRwfsNIFFRbbDFn9pfog
30
+ IV4kF6529qmxTMcmQXCPhkTHRkTypvPc9Hgxd60GtJVmHIxBFHRWNcSRVFuZtyHm
31
+ cTQg3x0mFGAD9Q==
32
+ -----END CERTIFICATE-----
@@ -0,0 +1,51 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ 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
51
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,51 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ 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
51
+ -----END RSA PRIVATE KEY-----