@mojaloop/sdk-scheme-adapter 11.18.8

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 (277) hide show
  1. package/.env.example +140 -0
  2. package/.eslintignore +2 -0
  3. package/.eslintrc.json +30 -0
  4. package/.nvmrc +1 -0
  5. package/.versionrc +15 -0
  6. package/CHANGELOG.md +118 -0
  7. package/InboundServer/api.yaml +3594 -0
  8. package/InboundServer/api_template.yaml +69 -0
  9. package/InboundServer/handlers.js +940 -0
  10. package/InboundServer/index.js +205 -0
  11. package/InboundServer/middlewares.js +426 -0
  12. package/OAuthTestServer/index.js +66 -0
  13. package/OAuthTestServer/model.js +70 -0
  14. package/OutboundServer/api.yaml +2732 -0
  15. package/OutboundServer/api_interfaces/index.d.ts +117 -0
  16. package/OutboundServer/api_interfaces/openapi.d.ts +1475 -0
  17. package/OutboundServer/api_template/components/parameters/bulkQuoteId.yaml +9 -0
  18. package/OutboundServer/api_template/components/parameters/bulkTransferId.yaml +9 -0
  19. package/OutboundServer/api_template/components/parameters/requestToPayTransactionId.yaml +9 -0
  20. package/OutboundServer/api_template/components/parameters/transferId.yaml +9 -0
  21. package/OutboundServer/api_template/components/responses/accountsCreationCompleted.yaml +5 -0
  22. package/OutboundServer/api_template/components/responses/accountsCreationError.yaml +5 -0
  23. package/OutboundServer/api_template/components/responses/accountsCreationTimeout.yaml +5 -0
  24. package/OutboundServer/api_template/components/responses/authorizationPostSuccess.yaml +5 -0
  25. package/OutboundServer/api_template/components/responses/authorizationsServerError.yaml +5 -0
  26. package/OutboundServer/api_template/components/responses/bulkQuoteBadRequest.yaml +5 -0
  27. package/OutboundServer/api_template/components/responses/bulkQuoteServerError.yaml +5 -0
  28. package/OutboundServer/api_template/components/responses/bulkQuoteSuccess.yaml +5 -0
  29. package/OutboundServer/api_template/components/responses/bulkQuoteTimeout.yaml +5 -0
  30. package/OutboundServer/api_template/components/responses/bulkTransferBadRequest.yaml +5 -0
  31. package/OutboundServer/api_template/components/responses/bulkTransferServerError.yaml +5 -0
  32. package/OutboundServer/api_template/components/responses/bulkTransferSuccess.yaml +5 -0
  33. package/OutboundServer/api_template/components/responses/bulkTransferTimeout.yaml +5 -0
  34. package/OutboundServer/api_template/components/responses/partiesByIdError404.yaml +9 -0
  35. package/OutboundServer/api_template/components/responses/partiesByIdSuccess.yaml +5 -0
  36. package/OutboundServer/api_template/components/responses/quotesPostSuccess.yaml +5 -0
  37. package/OutboundServer/api_template/components/responses/quotesServerError.yaml +5 -0
  38. package/OutboundServer/api_template/components/responses/requestToPaySuccess.yaml +5 -0
  39. package/OutboundServer/api_template/components/responses/requestToPayTransferBadRequest.yaml +5 -0
  40. package/OutboundServer/api_template/components/responses/requestToPayTransferSuccess.yaml +5 -0
  41. package/OutboundServer/api_template/components/responses/simpleTransfersPostSuccess.yaml +5 -0
  42. package/OutboundServer/api_template/components/responses/simpleTransfersServerError.yaml +5 -0
  43. package/OutboundServer/api_template/components/responses/transferBadRequest.yaml +5 -0
  44. package/OutboundServer/api_template/components/responses/transferServerError.yaml +5 -0
  45. package/OutboundServer/api_template/components/responses/transferSuccess.yaml +5 -0
  46. package/OutboundServer/api_template/components/responses/transferTimeout.yaml +5 -0
  47. package/OutboundServer/api_template/components/schemas/accountCreationStatus.yaml +18 -0
  48. package/OutboundServer/api_template/components/schemas/accountsCreationState.yaml +4 -0
  49. package/OutboundServer/api_template/components/schemas/accountsRequest.yaml +20 -0
  50. package/OutboundServer/api_template/components/schemas/accountsResponse.yaml +15 -0
  51. package/OutboundServer/api_template/components/schemas/async2SyncCurrentState.yaml +5 -0
  52. package/OutboundServer/api_template/components/schemas/authorizationsPostRequest.yaml +15 -0
  53. package/OutboundServer/api_template/components/schemas/authorizationsPostResponse.yaml +19 -0
  54. package/OutboundServer/api_template/components/schemas/bulkQuoteErrorResponse.yaml +8 -0
  55. package/OutboundServer/api_template/components/schemas/bulkQuoteRequest.yaml +26 -0
  56. package/OutboundServer/api_template/components/schemas/bulkQuoteResponse.yaml +21 -0
  57. package/OutboundServer/api_template/components/schemas/bulkQuoteStatus.yaml +4 -0
  58. package/OutboundServer/api_template/components/schemas/bulkQuoteStatusResponse.yaml +17 -0
  59. package/OutboundServer/api_template/components/schemas/bulkTransferErrorResponse.yaml +8 -0
  60. package/OutboundServer/api_template/components/schemas/bulkTransferRequest.yaml +26 -0
  61. package/OutboundServer/api_template/components/schemas/bulkTransferResponse.yaml +16 -0
  62. package/OutboundServer/api_template/components/schemas/bulkTransferStatus.yaml +4 -0
  63. package/OutboundServer/api_template/components/schemas/bulkTransferStatusResponse.yaml +17 -0
  64. package/OutboundServer/api_template/components/schemas/errorAccountsResponse.yaml +8 -0
  65. package/OutboundServer/api_template/components/schemas/errorAuthorizationsResponse.yaml +3 -0
  66. package/OutboundServer/api_template/components/schemas/errorQuotesResponse.yaml +9 -0
  67. package/OutboundServer/api_template/components/schemas/errorResponse.yaml +8 -0
  68. package/OutboundServer/api_template/components/schemas/errorSimpleTransfersResponse.yaml +3 -0
  69. package/OutboundServer/api_template/components/schemas/errorTransferResponse.yaml +8 -0
  70. package/OutboundServer/api_template/components/schemas/extensionListEmptiable.yaml +6 -0
  71. package/OutboundServer/api_template/components/schemas/individualQuote.yaml +32 -0
  72. package/OutboundServer/api_template/components/schemas/individualQuoteResult.yaml +28 -0
  73. package/OutboundServer/api_template/components/schemas/individualTransfer.yaml +32 -0
  74. package/OutboundServer/api_template/components/schemas/individualTransferFulfilment.yaml +13 -0
  75. package/OutboundServer/api_template/components/schemas/individualTransferResult.yaml +41 -0
  76. package/OutboundServer/api_template/components/schemas/mojaloopError.yaml +5 -0
  77. package/OutboundServer/api_template/components/schemas/mojaloopTransactionRequestState.yaml +2 -0
  78. package/OutboundServer/api_template/components/schemas/partiesByIdResponse.yaml +13 -0
  79. package/OutboundServer/api_template/components/schemas/quote.yaml +3 -0
  80. package/OutboundServer/api_template/components/schemas/quoteError.yaml +16 -0
  81. package/OutboundServer/api_template/components/schemas/quotesPostRequest.yaml +13 -0
  82. package/OutboundServer/api_template/components/schemas/quotesPostResponse.yaml +48 -0
  83. package/OutboundServer/api_template/components/schemas/requestToPayRequest.yaml +39 -0
  84. package/OutboundServer/api_template/components/schemas/requestToPayResponse.yaml +41 -0
  85. package/OutboundServer/api_template/components/schemas/requestToPayTransferRequest.yaml +42 -0
  86. package/OutboundServer/api_template/components/schemas/requestToPayTransferResponse.yaml +58 -0
  87. package/OutboundServer/api_template/components/schemas/simpleTransferServerError.yaml +5 -0
  88. package/OutboundServer/api_template/components/schemas/simpleTransfersPostRequest.yaml +12 -0
  89. package/OutboundServer/api_template/components/schemas/simpleTransfersPostResponse.yaml +11 -0
  90. package/OutboundServer/api_template/components/schemas/transactionType.yaml +4 -0
  91. package/OutboundServer/api_template/components/schemas/transferContinuationAcceptOTP.yaml +9 -0
  92. package/OutboundServer/api_template/components/schemas/transferContinuationAcceptParty.yaml +8 -0
  93. package/OutboundServer/api_template/components/schemas/transferContinuationAcceptQuote.yaml +9 -0
  94. package/OutboundServer/api_template/components/schemas/transferError.yaml +16 -0
  95. package/OutboundServer/api_template/components/schemas/transferFulfilment.yaml +3 -0
  96. package/OutboundServer/api_template/components/schemas/transferParty.yaml +40 -0
  97. package/OutboundServer/api_template/components/schemas/transferRequest.yaml +37 -0
  98. package/OutboundServer/api_template/components/schemas/transferResponse.yaml +58 -0
  99. package/OutboundServer/api_template/components/schemas/transferStatus.yaml +6 -0
  100. package/OutboundServer/api_template/components/schemas/transferStatusResponse.yaml +13 -0
  101. package/OutboundServer/api_template/health.yaml +12 -0
  102. package/OutboundServer/api_template/openapi.yaml +55 -0
  103. package/OutboundServer/api_template/paths/accounts.yaml +26 -0
  104. package/OutboundServer/api_template/paths/authorizations.yaml +19 -0
  105. package/OutboundServer/api_template/paths/bulkQuotes.yaml +23 -0
  106. package/OutboundServer/api_template/paths/bulkQuotes_bulkQuoteId.yaml +24 -0
  107. package/OutboundServer/api_template/paths/bulkTransfers.yaml +23 -0
  108. package/OutboundServer/api_template/paths/bulkTransfers_bulkTransferId.yaml +24 -0
  109. package/OutboundServer/api_template/paths/parties_Type_ID.yaml +20 -0
  110. package/OutboundServer/api_template/paths/parties_Type_ID_SubId.yaml +22 -0
  111. package/OutboundServer/api_template/paths/quotes.yaml +20 -0
  112. package/OutboundServer/api_template/paths/requestToPay.yaml +22 -0
  113. package/OutboundServer/api_template/paths/requestToPayTransfer.yaml +57 -0
  114. package/OutboundServer/api_template/paths/requestToPayTransfer_requestToPayTransactionId.yaml +34 -0
  115. package/OutboundServer/api_template/paths/simpleTransfers.yaml +19 -0
  116. package/OutboundServer/api_template/paths/transfers.yaml +55 -0
  117. package/OutboundServer/api_template/paths/transfers_transferId.yaml +58 -0
  118. package/OutboundServer/handlers.js +622 -0
  119. package/OutboundServer/index.js +137 -0
  120. package/OutboundServer/middlewares.js +67 -0
  121. package/TestServer/api.yaml +62 -0
  122. package/TestServer/handlers.js +63 -0
  123. package/TestServer/index.js +215 -0
  124. package/audit-resolve.json +65 -0
  125. package/babel.config.js +3 -0
  126. package/config.js +158 -0
  127. package/index.d.ts +1 -0
  128. package/index.js +149 -0
  129. package/jest.config.js +15 -0
  130. package/lib/api/index.js +12 -0
  131. package/lib/cache.js +352 -0
  132. package/lib/check.js +25 -0
  133. package/lib/model/AccountsModel.js +396 -0
  134. package/lib/model/Async2SyncModel.js +283 -0
  135. package/lib/model/AuthorizationsModel.js +86 -0
  136. package/lib/model/InboundTransfersModel.js +730 -0
  137. package/lib/model/OutboundBulkQuotesModel.js +485 -0
  138. package/lib/model/OutboundBulkTransfersModel.js +479 -0
  139. package/lib/model/OutboundRequestToPayModel.js +517 -0
  140. package/lib/model/OutboundRequestToPayTransferModel.js +893 -0
  141. package/lib/model/OutboundTransfersModel.js +823 -0
  142. package/lib/model/PartiesModel.js +70 -0
  143. package/lib/model/ProxyModel/MatchRules/Expression.js +48 -0
  144. package/lib/model/ProxyModel/MatchRules/Headers.js +65 -0
  145. package/lib/model/ProxyModel/MatchRules/MatchRule.js +27 -0
  146. package/lib/model/ProxyModel/MatchRules/Path.js +36 -0
  147. package/lib/model/ProxyModel/MatchRules/Query.js +65 -0
  148. package/lib/model/ProxyModel/MatchRules/index.js +19 -0
  149. package/lib/model/ProxyModel/Route.js +82 -0
  150. package/lib/model/ProxyModel/configSchema.json +118 -0
  151. package/lib/model/ProxyModel/index.js +138 -0
  152. package/lib/model/QuotesModel.js +94 -0
  153. package/lib/model/TransfersModel.js +81 -0
  154. package/lib/model/common/BackendError.js +26 -0
  155. package/lib/model/common/PersistentStateMachine.js +93 -0
  156. package/lib/model/common/index.js +18 -0
  157. package/lib/model/index.js +43 -0
  158. package/lib/model/lib/deferredJob.js +113 -0
  159. package/lib/model/lib/index.js +9 -0
  160. package/lib/model/lib/requests/backendRequests.js +227 -0
  161. package/lib/model/lib/requests/common.js +76 -0
  162. package/lib/model/lib/requests/index.js +19 -0
  163. package/lib/model/lib/shared.js +468 -0
  164. package/lib/randomphrase/index.js +21 -0
  165. package/lib/randomphrase/words.json +3397 -0
  166. package/lib/router.js +28 -0
  167. package/lib/validate.js +205 -0
  168. package/package.json +102 -0
  169. package/test/__mocks__/@mojaloop/sdk-standard-components.js +152 -0
  170. package/test/__mocks__/javascript-state-machine.js +21 -0
  171. package/test/__mocks__/redis.js +49 -0
  172. package/test/__mocks__/uuidv4.js +16 -0
  173. package/test/config/integration.env +136 -0
  174. package/test/integration/lib/Outbound/authorizations.test.js +58 -0
  175. package/test/integration/lib/Outbound/data/authorizationsPostRequest.json +43 -0
  176. package/test/integration/lib/Outbound/data/quotesPostRequest.json +52 -0
  177. package/test/integration/lib/Outbound/data/transfersPostRequest.json +24 -0
  178. package/test/integration/lib/Outbound/parties.test.js +28 -0
  179. package/test/integration/lib/Outbound/quotes.test.js +58 -0
  180. package/test/integration/lib/Outbound/simpleTransfers.test.js +67 -0
  181. package/test/integration/lib/cache.test.js +80 -0
  182. package/test/integration/testEnv.js +7 -0
  183. package/test/unit/InboundServer.test.js +443 -0
  184. package/test/unit/TestServer.test.js +394 -0
  185. package/test/unit/api/accounts/accounts.test.js +128 -0
  186. package/test/unit/api/accounts/data/postAccountsBody.json +7 -0
  187. package/test/unit/api/accounts/data/postAccountsErrorMojaloopResponse.json +25 -0
  188. package/test/unit/api/accounts/data/postAccountsErrorTimeoutResponse.json +19 -0
  189. package/test/unit/api/accounts/data/postAccountsSuccessResponse.json +17 -0
  190. package/test/unit/api/accounts/data/postAccountsSuccessResponseWithError1.json +21 -0
  191. package/test/unit/api/accounts/data/postAccountsSuccessResponseWithError2.json +21 -0
  192. package/test/unit/api/accounts/utils.js +65 -0
  193. package/test/unit/api/proxy/data/proxyConfig.yaml +82 -0
  194. package/test/unit/api/proxy/data/requestBody.json +22 -0
  195. package/test/unit/api/proxy/data/requestHeaders.json +5 -0
  196. package/test/unit/api/proxy/data/requestQuery.json +6 -0
  197. package/test/unit/api/proxy/data/responseBody.json +21 -0
  198. package/test/unit/api/proxy/data/responseHeaders.json +5 -0
  199. package/test/unit/api/proxy/proxy.test.js +220 -0
  200. package/test/unit/api/proxy/utils.js +79 -0
  201. package/test/unit/api/transfers/data/getTransfersCommittedResponse.json +21 -0
  202. package/test/unit/api/transfers/data/getTransfersErrorNotFound.json +17 -0
  203. package/test/unit/api/transfers/data/postQuotesBody.json +52 -0
  204. package/test/unit/api/transfers/data/postTransfersBadBody.json +17 -0
  205. package/test/unit/api/transfers/data/postTransfersBody.json +24 -0
  206. package/test/unit/api/transfers/data/postTransfersErrorMojaloopResponse.json +53 -0
  207. package/test/unit/api/transfers/data/postTransfersErrorTimeoutResponse.json +47 -0
  208. package/test/unit/api/transfers/data/postTransfersSimpleBody.json +26 -0
  209. package/test/unit/api/transfers/data/postTransfersSuccessResponse.json +101 -0
  210. package/test/unit/api/transfers/data/putPartiesBody.json +20 -0
  211. package/test/unit/api/transfers/data/putQuotesBody.json +37 -0
  212. package/test/unit/api/transfers/data/putTransfersBody.json +17 -0
  213. package/test/unit/api/transfers/transfers.test.js +191 -0
  214. package/test/unit/api/transfers/utils.js +183 -0
  215. package/test/unit/api/utils.js +75 -0
  216. package/test/unit/config.test.js +119 -0
  217. package/test/unit/data/commonHttpHeaders.json +6 -0
  218. package/test/unit/data/defaultConfig.json +58 -0
  219. package/test/unit/data/postQuotesBody.json +52 -0
  220. package/test/unit/data/putParticipantsBody.json +12 -0
  221. package/test/unit/data/putPartiesBody.json +20 -0
  222. package/test/unit/data/testFile.json +29 -0
  223. package/test/unit/data/testFile.yaml +14 -0
  224. package/test/unit/inboundApi/data/mockArguments.json +117 -0
  225. package/test/unit/inboundApi/data/mockTransactionRequest.json +42 -0
  226. package/test/unit/inboundApi/handlers.test.js +799 -0
  227. package/test/unit/index.test.js +55 -0
  228. package/test/unit/lib/cache.test.js +146 -0
  229. package/test/unit/lib/model/AccountsModel.test.js +121 -0
  230. package/test/unit/lib/model/AuthorizationsModel.test.js +460 -0
  231. package/test/unit/lib/model/InboundTransfersModel.test.js +628 -0
  232. package/test/unit/lib/model/OutboundBulkQuotesModel.test.js +249 -0
  233. package/test/unit/lib/model/OutboundBulkTransfersModel.test.js +244 -0
  234. package/test/unit/lib/model/OutboundRequestToPayModel.test.js +166 -0
  235. package/test/unit/lib/model/OutboundRequestToPayTransferModel.test.js +245 -0
  236. package/test/unit/lib/model/OutboundTransfersModel.test.js +836 -0
  237. package/test/unit/lib/model/PartiesModel.test.js +468 -0
  238. package/test/unit/lib/model/QuotesModel.test.js +470 -0
  239. package/test/unit/lib/model/TransfersModel.test.js +474 -0
  240. package/test/unit/lib/model/common/PersistentStateMachine.test.js +179 -0
  241. package/test/unit/lib/model/data/authorizationsResponse.json +13 -0
  242. package/test/unit/lib/model/data/bulkQuoteRequest.json +27 -0
  243. package/test/unit/lib/model/data/bulkQuoteResponse.json +35 -0
  244. package/test/unit/lib/model/data/bulkTransferFulfil.json +13 -0
  245. package/test/unit/lib/model/data/bulkTransferRequest.json +29 -0
  246. package/test/unit/lib/model/data/defaultConfig.json +47 -0
  247. package/test/unit/lib/model/data/getBulkTransfersBackendResponse.json +42 -0
  248. package/test/unit/lib/model/data/getBulkTransfersMojaloopResponse.json +22 -0
  249. package/test/unit/lib/model/data/getTransfersBackendResponse.json +34 -0
  250. package/test/unit/lib/model/data/getTransfersMojaloopResponse.json +17 -0
  251. package/test/unit/lib/model/data/mockArguments.json +131 -0
  252. package/test/unit/lib/model/data/mockTxnRequestsArguments.json +63 -0
  253. package/test/unit/lib/model/data/notificationToPayee.json +10 -0
  254. package/test/unit/lib/model/data/payeeParty.json +16 -0
  255. package/test/unit/lib/model/data/putAuthorizationsResponse.json +10 -0
  256. package/test/unit/lib/model/data/putQuotesResponse.json +33 -0
  257. package/test/unit/lib/model/data/putTransfersResponse.json +5 -0
  258. package/test/unit/lib/model/data/quoteResponse.json +31 -0
  259. package/test/unit/lib/model/data/requestToPayRequest.json +20 -0
  260. package/test/unit/lib/model/data/requestToPayTransferRequest.json +27 -0
  261. package/test/unit/lib/model/data/transactionRequestResponse.json +18 -0
  262. package/test/unit/lib/model/data/transferFulfil.json +8 -0
  263. package/test/unit/lib/model/data/transferRequest.json +26 -0
  264. package/test/unit/lib/model/mockedLibRequests.js +74 -0
  265. package/test/unit/mockLogger.js +39 -0
  266. package/test/unit/outboundApi/data/bulkQuoteRequest.json +28 -0
  267. package/test/unit/outboundApi/data/bulkTransferRequest.json +28 -0
  268. package/test/unit/outboundApi/data/mockBulkQuoteError.json +45 -0
  269. package/test/unit/outboundApi/data/mockBulkTransferError.json +48 -0
  270. package/test/unit/outboundApi/data/mockError.json +41 -0
  271. package/test/unit/outboundApi/data/mockGetPartiesError.json +4 -0
  272. package/test/unit/outboundApi/data/mockRequestToPayError.json +32 -0
  273. package/test/unit/outboundApi/data/mockRequestToPayTransferError.json +39 -0
  274. package/test/unit/outboundApi/data/requestToPay.json +21 -0
  275. package/test/unit/outboundApi/data/requestToPayTransferRequest.json +20 -0
  276. package/test/unit/outboundApi/data/transferRequest.json +21 -0
  277. package/test/unit/outboundApi/handlers.test.js +986 -0
@@ -0,0 +1,19 @@
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
+ * James Bush - james.bush@modusbox.com *
9
+ **************************************************************************/
10
+
11
+ 'use strict';
12
+
13
+
14
+ const BackendRequests = require('./backendRequests.js');
15
+
16
+
17
+ module.exports = {
18
+ ...BackendRequests,
19
+ };
@@ -0,0 +1,468 @@
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
+ * James Bush - james.bush@modusbox.com *
9
+ **************************************************************************/
10
+
11
+ 'use strict';
12
+
13
+
14
+ /**
15
+ * Build a quote party object from an outgoing transfer API party
16
+ *
17
+ * @returns {object} - the constructed party object
18
+ */
19
+ const internalPartyToMojaloopParty = (internal, fspId) => {
20
+ const party = {
21
+ partyIdInfo: {
22
+ partyIdType: internal.idType,
23
+ partyIdentifier: internal.idValue,
24
+ partySubIdOrType: internal.idSubValue,
25
+ fspId: fspId
26
+ }
27
+ };
28
+ if (internal.extensionList) {
29
+ party.partyIdInfo.extensionList = {
30
+ extension: internal.extensionList
31
+ };
32
+ }
33
+
34
+ const hasComplexName = !!(internal.firstName || internal.middleName || internal.lastName);
35
+
36
+ if(hasComplexName || internal.dateOfBirth) {
37
+ party.personalInfo = {};
38
+ }
39
+
40
+ if(hasComplexName) {
41
+ party.personalInfo.complexName = {};
42
+ }
43
+
44
+ if(internal.displayName) { party.name = internal.displayName; }
45
+ if(internal.firstName) { party.personalInfo.complexName.firstName = internal.firstName; }
46
+ if(internal.middleName) { party.personalInfo.complexName.middleName = internal.middleName; }
47
+ if(internal.lastName) { party.personalInfo.complexName.lastName = internal.lastName; }
48
+
49
+ if(internal.dateOfBirth) { party.personalInfo.dateOfBirth = internal.dateOfBirth; }
50
+
51
+ if(typeof(internal.merchantClassificationCode) !== 'undefined') {
52
+ party.merchantClassificationCode = internal.merchantClassificationCode;
53
+ }
54
+
55
+ return party;
56
+ };
57
+
58
+
59
+ /**
60
+ * Converts a Mojaloop API spec party to an internal API spec party
61
+ *
62
+ * @returns {object} - the internal API spec party
63
+ */
64
+ const mojaloopPartyToInternalParty = (external) => {
65
+ const internal = {};
66
+
67
+ if(external.partyIdInfo) {
68
+ internal.idType = external.partyIdInfo.partyIdType;
69
+ internal.idValue = external.partyIdInfo.partyIdentifier;
70
+ internal.idSubValue = external.partyIdInfo.partySubIdOrType;
71
+ // Note: we dont map fspid to internal transferParty object
72
+ if(external.partyIdInfo.extensionList){
73
+ internal.extensionList = external.partyIdInfo.extensionList.extension;
74
+ }
75
+ }
76
+
77
+ if(external.name) {
78
+ internal.displayName = external.name;
79
+ }
80
+
81
+ if(external.personalInfo) {
82
+ if(external.personalInfo.dateOfBirth) {
83
+ internal.dateOfBirth = external.personalInfo.dateOfBirth;
84
+ }
85
+ if(external.personalInfo.complexName) {
86
+ if(external.personalInfo.complexName.firstName) {
87
+ internal.firstName = external.personalInfo.complexName.firstName;
88
+ }
89
+ if(external.personalInfo.complexName.middleName) {
90
+ internal.middleName = external.personalInfo.complexName.middleName;
91
+ }
92
+ if(external.personalInfo.complexName.lastName) {
93
+ internal.lastName = external.personalInfo.complexName.lastName;
94
+ }
95
+ }
96
+ }
97
+
98
+ return internal;
99
+ };
100
+
101
+ /**
102
+ * Converts a Mojaloop API spec partyIdInfo to an internal API spec party
103
+ *
104
+ * @returns {object} - the internal API spec party
105
+ */
106
+ const mojaloopPartyIdInfoToInternalPartyIdInfo = (external) => {
107
+ const internal = {};
108
+
109
+ internal.idType = external.partyIdType;
110
+ internal.idValue = external.partyIdentifier;
111
+ internal.idSubValue = external.partySubIdOrType;
112
+
113
+ return internal;
114
+ };
115
+
116
+ /**
117
+ * Projects a Mojaloop API spec quote request to internal form
118
+ *
119
+ * @returns {object} - the internal form quote request
120
+ */
121
+ const mojaloopQuoteRequestToInternal = (external) => {
122
+ const internal = {
123
+ quoteId: external.quoteId,
124
+ transactionId: external.transactionId,
125
+ to: mojaloopPartyToInternalParty(external.payee),
126
+ from: mojaloopPartyToInternalParty(external.payer),
127
+ amountType: external.amountType,
128
+ amount: external.amount.amount,
129
+ currency: external.amount.currency,
130
+ transactionType: external.transactionType.scenario,
131
+ initiator: external.transactionType.initiator,
132
+ initiatorType: external.transactionType.initiatorType
133
+ };
134
+
135
+ if(external.fees) {
136
+ internal.feesAmount = external.fees.amount;
137
+ internal.feesCurrency = external.fees.currency;
138
+ }
139
+
140
+ if(external.geoCode) {
141
+ internal.geoCode = external.geoCode;
142
+ }
143
+
144
+ if(external.note) {
145
+ internal.note = external.note;
146
+ }
147
+
148
+ if(external.expiration) {
149
+ internal.expiration = external.expiration;
150
+ }
151
+
152
+ if(external.extensionList) {
153
+ internal.extensionList = external.extensionList;
154
+ }
155
+
156
+ return internal;
157
+ };
158
+
159
+
160
+ /**
161
+ * Converts an internal quote response to mojaloop form
162
+ *
163
+ * @returns {object}
164
+ */
165
+ const internalQuoteResponseToMojaloop = (internal) => {
166
+ const external = {
167
+ transferAmount: {
168
+ amount: internal.transferAmount,
169
+ currency: internal.transferAmountCurrency
170
+ },
171
+ expiration: internal.expiration,
172
+ ilpPacket: internal.ilpPacket,
173
+ condition: internal.ilpCondition
174
+ };
175
+
176
+ if(internal.payeeReceiveAmount) {
177
+ external.payeeReceiveAmount = {
178
+ amount: internal.payeeReceiveAmount,
179
+ currency: internal.payeeReceiveAmountCurrency
180
+ };
181
+ }
182
+
183
+ if(internal.payeeFspFeeAmount) {
184
+ external.payeeFspFee = {
185
+ amount: internal.payeeFspFeeAmount,
186
+ currency: internal.payeeFspFeeAmountCurrency
187
+ };
188
+ }
189
+
190
+ if(internal.payeeFspCommissionAmount) {
191
+ external.payeeFspCommission = {
192
+ amount: internal.payeeFspCommissionAmount,
193
+ currency: internal.payeeFspCommissionAmountCurrency
194
+ };
195
+ }
196
+
197
+ if(internal.geoCode) {
198
+ external.geoCode = internal.geoCode;
199
+ }
200
+
201
+ if(internal.extensionList) {
202
+ external.extensionList = internal.extensionList;
203
+ }
204
+
205
+ return external;
206
+ };
207
+
208
+ /**
209
+ * Converts an internal quote response to mojaloop form
210
+ *
211
+ * @returns {object}
212
+ */
213
+ const internalTransactionRequestResponseToMojaloop = (internal) => {
214
+ const external = {
215
+ transactionId: internal.transactionId,
216
+ transactionRequestState: internal.transactionRequestState
217
+ };
218
+
219
+ if(internal.payeeReceiveAmount) {
220
+ external.payeeReceiveAmount = {
221
+ amount: internal.payeeReceiveAmount,
222
+ currency: internal.payeeReceiveAmountCurrency
223
+ };
224
+ }
225
+
226
+ if(internal.extensionList) {
227
+ external.extensionList = internal.extensionList;
228
+ }
229
+
230
+ return external;
231
+ };
232
+
233
+
234
+ /**
235
+ * Converts a mojaloop transfer prepare request to internal form
236
+ *
237
+ * @returns {object}
238
+ */
239
+ const mojaloopPrepareToInternalTransfer = (external, quote, ilp) => {
240
+ let internal = null;
241
+ if(quote) {
242
+ internal = {
243
+ transferId: external.transferId,
244
+ quote: quote.response,
245
+ from: quote.internalRequest.from,
246
+ to: quote.internalRequest.to,
247
+ amountType: quote.request.amountType,
248
+ currency: quote.request.amount.currency,
249
+ amount: quote.request.amount.amount,
250
+ transactionType: quote.request.transactionType.scenario,
251
+ ilpPacket: {
252
+ data: ilp.getTransactionObject(external.ilpPacket),
253
+ },
254
+ note: quote.request.note
255
+ };
256
+ if (quote.internalRequest && quote.internalRequest.extensionList && quote.internalRequest.extensionList.extension) {
257
+ internal.quoteRequestExtensions = { ...quote.internalRequest.extensionList.extension };
258
+ }
259
+ } else {
260
+ internal = {
261
+ transferId: external.transferId,
262
+ currency: external.amount.currency,
263
+ amount: external.amount.amount,
264
+ };
265
+ }
266
+
267
+ return internal;
268
+ };
269
+
270
+ /**
271
+ * Converts a mojaloop transactionRequest data to internal form
272
+ *
273
+ * @returns {object}
274
+ */
275
+ const mojaloopTransactionRequestToInternal = (external) => {
276
+ let internal = null;
277
+ internal = {
278
+ transactionRequestId: external.transactionRequestId,
279
+ to: mojaloopPartyToInternalParty(external.payee),
280
+ from: mojaloopPartyIdInfoToInternalPartyIdInfo(external.payer),
281
+ amount: external.amount.amount,
282
+ currency: external.amount.currency,
283
+ transactionType: external.transactionType.scenario,
284
+ initiator: external.transactionType.initiator,
285
+ initiatorType: external.transactionType.initiatorType
286
+ };
287
+
288
+ return internal;
289
+ };
290
+
291
+ /**
292
+ * Projects a Mojaloop API spec bulk quote request to internal form
293
+ *
294
+ * @returns {object} - the internal form bulk quote request
295
+ */
296
+ const mojaloopBulkQuotesRequestToInternal = (external) => {
297
+ const internal = {
298
+ bulkQuoteId: external.bulkQuoteId,
299
+ from: mojaloopPartyToInternalParty(external.payer),
300
+ };
301
+
302
+ if (external.geoCode) {
303
+ internal.geoCode = external.geoCode;
304
+ }
305
+
306
+ if (external.expiration) {
307
+ internal.expiration = external.expiration;
308
+ }
309
+
310
+ if (external.extensionList) {
311
+ internal.extensionList = external.extensionList.extension;
312
+ }
313
+
314
+ const internalIndividualQuotes = external.individualQuotes.map(quote => {
315
+ const internalQuote = {
316
+ quoteId: quote.quoteId,
317
+ transactionId: quote.transactionId,
318
+ to: mojaloopPartyToInternalParty(quote.payee),
319
+ amountType: quote.amountType,
320
+ amount: quote.amount.amount,
321
+ currency: quote.amount.currency,
322
+ transactionType: quote.transactionType.scenario,
323
+ initiator: quote.transactionType.initiator,
324
+ initiatorType: quote.transactionType.initiatorType
325
+ };
326
+
327
+ if (quote.fees) {
328
+ internal.feesAmount = quote.fees.amount;
329
+ internal.feesCurrency = quote.fees.currency;
330
+ }
331
+
332
+ if (quote.geoCode) {
333
+ internal.geoCode = quote.geoCode;
334
+ }
335
+
336
+ if (quote.note) {
337
+ internal.note = quote.note;
338
+ }
339
+
340
+ return internalQuote;
341
+ });
342
+
343
+ internal.individualQuotes = internalIndividualQuotes;
344
+
345
+ return internal;
346
+ };
347
+
348
+ /**
349
+ * Converts an internal bulk quotes response to mojaloop form
350
+ *
351
+ * @returns {object}
352
+ */
353
+ const internalBulkQuotesResponseToMojaloop = (internal) => {
354
+ const individualQuoteResults = internal.individualQuoteResults.map((quote) => {
355
+ const externalQuote = {
356
+ quoteId: quote.quoteId,
357
+ transferAmount: {
358
+ amount: quote.transferAmount,
359
+ currency: quote.transferAmountCurrency,
360
+ },
361
+ ilpPacket: quote.ilpPacket,
362
+ condition: quote.ilpCondition
363
+ };
364
+
365
+ if (quote.payeeReceiveAmount) {
366
+ externalQuote.payeeReceiveAmount = {
367
+ amount: quote.payeeReceiveAmount,
368
+ currency: quote.payeeReceiveAmountCurrency
369
+ };
370
+ }
371
+
372
+ if (quote.payeeFspFeeAmount) {
373
+ externalQuote.payeeFspFee = {
374
+ amount: quote.payeeFspFeeAmount,
375
+ currency: quote.payeeFspFeeAmountCurrency
376
+ };
377
+ }
378
+
379
+ if (quote.payeeFspCommissionAmount) {
380
+ externalQuote.payeeFspCommission = {
381
+ amount: quote.payeeFspCommissionAmount,
382
+ currency: quote.payeeFspCommissionAmountCurrency
383
+ };
384
+ }
385
+
386
+ return externalQuote;
387
+ });
388
+ const external = {
389
+ individualQuoteResults,
390
+ expiration: internal.expiration,
391
+ };
392
+
393
+ if (internal.geoCode) {
394
+ external.geoCode = internal.geoCode;
395
+ }
396
+
397
+ if (internal.extensionList) {
398
+ external.extensionList = internal.extensionList;
399
+ }
400
+
401
+ return external;
402
+ };
403
+
404
+ /**
405
+ * Converts a mojaloop bulk transfer prepare request to internal form
406
+ *
407
+ * @returns {object}
408
+ */
409
+ const mojaloopBulkPrepareToInternalBulkTransfer = (external, bulkQuotes, ilp) => {
410
+ let internal = null;
411
+ if (bulkQuotes) {
412
+ // create a map of internal individual quotes payees indexed by quotedId, for faster lookup
413
+ const internalQuotesPayeesByQuoteId = {};
414
+
415
+ for (const quote of bulkQuotes.internalRequest.individualQuotes) {
416
+ internalQuotesPayeesByQuoteId[quote.quoteId] = quote.to;
417
+ }
418
+
419
+ // create a map of external individual transfers indexed by quotedId, for faster lookup
420
+ const externalTransferIdsByQuoteId = {};
421
+
422
+ for (const transfer of external.individualTransfers) {
423
+ const transactionObject = ilp.getTransactionObject(transfer.ilpPacket);
424
+ externalTransferIdsByQuoteId[transactionObject.quoteId] = transfer.transferId;
425
+ }
426
+
427
+ internal = {
428
+ bulkTransferId: external.bulkTransferId,
429
+ bulkQuotes: bulkQuotes.response,
430
+ from: bulkQuotes.internalRequest.from,
431
+ };
432
+
433
+ internal.individualTransfers = bulkQuotes.request.individualQuotes.map((quote) => ({
434
+ transferId: externalTransferIdsByQuoteId[quote.quoteId],
435
+ to: internalQuotesPayeesByQuoteId[quote.quoteId],
436
+ amountType: quote.amountType,
437
+ currency: quote.amount.currency,
438
+ amount: quote.amount.amount,
439
+ transactionType: quote.transactionType.scenario,
440
+ note: quote.note
441
+ }));
442
+ } else {
443
+ internal = {
444
+ bulkTransferId: external.bulkTransferId,
445
+ individualTransfers: external.individualTransfers.map((transfer) => ({
446
+ transferId: transfer.transferId,
447
+ currency: transfer.transferAmount.currency,
448
+ amount: transfer.transferAmount.amount,
449
+ }))
450
+ };
451
+ }
452
+
453
+ return internal;
454
+ };
455
+
456
+ module.exports = {
457
+ internalPartyToMojaloopParty,
458
+ internalQuoteResponseToMojaloop,
459
+ internalTransactionRequestResponseToMojaloop,
460
+ mojaloopPartyToInternalParty,
461
+ mojaloopPartyIdInfoToInternalPartyIdInfo,
462
+ mojaloopQuoteRequestToInternal,
463
+ mojaloopPrepareToInternalTransfer,
464
+ mojaloopTransactionRequestToInternal,
465
+ mojaloopBulkQuotesRequestToInternal,
466
+ internalBulkQuotesResponseToMojaloop,
467
+ mojaloopBulkPrepareToInternalBulkTransfer
468
+ };