@mojaloop/sdk-scheme-adapter 12.2.2 → 13.0.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 (76) hide show
  1. package/.env.example +3 -0
  2. package/CHANGELOG.md +26 -0
  3. package/audit-resolve.json +71 -1
  4. package/docker/ml-testing-toolkit/spec_files/api_definitions/fspiop_1.1/trigger_templates/transaction_request_followup.json +2 -2
  5. package/docker/ml-testing-toolkit/spec_files/rules_callback/default.json +7 -7
  6. package/docker/ml-testing-toolkit/spec_files/rules_response/default.json +16 -16
  7. package/docker/ml-testing-toolkit/spec_files/rules_response/default_pisp_rules.json +5 -5
  8. package/docker/ml-testing-toolkit/spec_files/rules_validation/default.json +10 -10
  9. package/package.json +4 -1
  10. package/src/ControlAgent/index.js +2 -3
  11. package/src/ControlServer/index.js +2 -2
  12. package/src/InboundServer/handlers.js +114 -52
  13. package/src/InboundServer/index.js +7 -7
  14. package/src/InboundServer/middlewares.js +2 -2
  15. package/src/OutboundServer/api.yaml +54 -3
  16. package/src/OutboundServer/api_interfaces/openapi.d.ts +24 -3
  17. package/src/OutboundServer/api_template/components/schemas/accountsResponse.yaml +9 -0
  18. package/src/OutboundServer/api_template/components/schemas/transferRequest.yaml +3 -0
  19. package/src/OutboundServer/api_template/components/schemas/transferResponse.yaml +28 -2
  20. package/src/OutboundServer/api_template/components/schemas/transferStatusResponse.yaml +8 -1
  21. package/src/OutboundServer/handlers.js +4 -1
  22. package/src/OutboundServer/index.js +10 -11
  23. package/src/config.js +29 -12
  24. package/src/index.js +198 -10
  25. package/src/lib/cache.js +110 -52
  26. package/src/lib/metrics.js +148 -0
  27. package/src/lib/model/AccountsModel.js +17 -12
  28. package/src/lib/model/Async2SyncModel.js +4 -1
  29. package/src/lib/model/InboundTransfersModel.js +170 -25
  30. package/src/lib/model/OutboundBulkQuotesModel.js +4 -1
  31. package/src/lib/model/OutboundBulkTransfersModel.js +4 -1
  32. package/src/lib/model/OutboundRequestToPayModel.js +9 -7
  33. package/src/lib/model/OutboundRequestToPayTransferModel.js +6 -3
  34. package/src/lib/model/OutboundTransfersModel.js +318 -53
  35. package/src/lib/model/PartiesModel.js +1 -1
  36. package/src/lib/model/ProxyModel/index.js +4 -2
  37. package/src/lib/model/common/BackendError.js +28 -4
  38. package/src/lib/model/common/index.js +2 -1
  39. package/src/lib/validate.js +2 -2
  40. package/test/__mocks__/@mojaloop/sdk-standard-components.js +3 -2
  41. package/test/__mocks__/redis.js +4 -0
  42. package/test/config/integration.env +5 -0
  43. package/test/integration/lib/Outbound/parties.test.js +1 -1
  44. package/test/unit/ControlServer/index.js +3 -3
  45. package/test/unit/InboundServer.test.js +10 -10
  46. package/test/unit/TestServer.test.js +11 -13
  47. package/test/unit/api/accounts/data/postAccountsErrorMojaloopResponse.json +11 -3
  48. package/test/unit/api/accounts/data/postAccountsSuccessResponse.json +14 -0
  49. package/test/unit/api/accounts/data/postAccountsSuccessResponseWithError1.json +13 -0
  50. package/test/unit/api/accounts/data/postAccountsSuccessResponseWithError2.json +18 -0
  51. package/test/unit/api/accounts/utils.js +15 -1
  52. package/test/unit/api/transfers/data/getTransfersCommittedResponse.json +18 -15
  53. package/test/unit/api/transfers/data/getTransfersErrorNotFound.json +1 -0
  54. package/test/unit/api/transfers/data/postTransfersErrorMojaloopResponse.json +9 -0
  55. package/test/unit/api/transfers/data/postTransfersErrorTimeoutResponse.json +1 -0
  56. package/test/unit/api/transfers/data/postTransfersSuccessResponse.json +74 -47
  57. package/test/unit/api/transfers/utils.js +85 -4
  58. package/test/unit/api/utils.js +4 -1
  59. package/test/unit/config.test.js +2 -2
  60. package/test/unit/data/commonHttpHeaders.json +1 -0
  61. package/test/unit/data/defaultConfig.json +23 -7
  62. package/test/unit/inboundApi/handlers.test.js +45 -14
  63. package/test/unit/index.test.js +95 -4
  64. package/test/unit/lib/model/AccountsModel.test.js +9 -6
  65. package/test/unit/lib/model/InboundTransfersModel.test.js +210 -30
  66. package/test/unit/lib/model/OutboundRequestToPayModel.test.js +1 -1
  67. package/test/unit/lib/model/OutboundRequestToPayTransferModel.test.js +3 -3
  68. package/test/unit/lib/model/OutboundTransfersModel.test.js +863 -158
  69. package/test/unit/lib/model/data/defaultConfig.json +25 -10
  70. package/test/unit/lib/model/data/mockArguments.json +97 -40
  71. package/test/unit/lib/model/data/payeeParty.json +13 -11
  72. package/test/unit/lib/model/data/quoteResponse.json +36 -25
  73. package/test/unit/lib/model/data/transferFulfil.json +5 -3
  74. package/src/lib/api/index.js +0 -12
  75. package/src/lib/randomphrase/index.js +0 -21
  76. package/src/lib/randomphrase/words.json +0 -3397
@@ -1,14 +1,26 @@
1
1
  {
2
- "tls": {
3
- "enabled": false,
4
- "creds": {
5
- "ca": null,
6
- "cert": null,
7
- "key": null
8
- }
2
+ "inbound": {
3
+ "port": 4000,
4
+ "tls": {
5
+ "mutualTLS": { "enabled": false },
6
+ "creds": {
7
+ "ca": null,
8
+ "cert": null,
9
+ "key": null
10
+ }
11
+ }
12
+ },
13
+ "outbound": {
14
+ "port": 4001,
15
+ "tls": {
16
+ "mutualTLS": { "enabled": false },
17
+ "creds": {
18
+ "ca": null,
19
+ "cert": null,
20
+ "key": null
21
+ }
22
+ }
9
23
  },
10
- "inboundServerPort": 4000,
11
- "outboundServerPort": 4001,
12
24
  "peerEndpoint": "172.17.0.2:3001",
13
25
  "backendEndpoint": "172.17.0.2:3001",
14
26
  "alsEndpoint": "127.0.0.1:6500",
@@ -43,5 +55,8 @@
43
55
  "rejectExpiredQuoteResponses": false,
44
56
  "rejectExpiredTransferFulfils": false,
45
57
  "rejectTransfersOnExpiredQuotes": false,
46
- "logIndent": 2
58
+ "logIndent": 2,
59
+ "metrics": {
60
+ "port": 4004
61
+ }
47
62
  }
@@ -1,50 +1,100 @@
1
1
  {
2
2
  "quoteRequest": {
3
- "quoteId": "fake-quote-id",
4
- "transactionId": "fake-transaction-id",
5
- "amountType": "SEND",
6
- "amount": {
7
- "currency": "XOF",
8
- "amount": 10
9
- },
10
- "expiration": "2019-06-04T04:02:10.378Z",
11
- "payer": {
12
- "partyIdInfo": {
13
- "partyIdType": "MSISDN",
14
- "partyIdentifier": "17855501914",
15
- "fspId": "mojaloop-sdk"
3
+ "body": {
4
+ "quoteId": "fake-quote-id",
5
+ "transactionId": "fake-transaction-id",
6
+ "amountType": "SEND",
7
+ "amount": {
8
+ "currency": "XOF",
9
+ "amount": 10
16
10
  },
17
- "personalInfo": {
18
- "complexName": {
19
- "firstName": "Murthy",
20
- "lastName": "Kakarlamudi"
11
+ "expiration": "2019-06-04T04:02:10.378Z",
12
+ "payer": {
13
+ "partyIdInfo": {
14
+ "partyIdType": "MSISDN",
15
+ "partyIdentifier": "17855501914",
16
+ "fspId": "mojaloop-sdk"
21
17
  },
22
- "dateOfBirth": "2010-10-10"
23
- },
24
- "name": "Murthy Kakarlamudi",
25
- "merchantClassificationCode": "123"
26
- },
27
- "payee": {
28
- "partyIdInfo": {
29
- "partyIdType": "PERSONAL_ID",
30
- "partyIdentifier": "123456789",
31
- "partySubIdOrType": "PASSPORT",
32
- "fspId": "goldenpayeefsp"
18
+ "personalInfo": {
19
+ "complexName": {
20
+ "firstName": "Murthy",
21
+ "lastName": "Kakarlamudi"
22
+ },
23
+ "dateOfBirth": "2010-10-10"
24
+ },
25
+ "name": "Murthy Kakarlamudi",
26
+ "merchantClassificationCode": "123"
33
27
  },
34
- "personalInfo": {
35
- "complexName": {
36
- "firstName": "Sridevi",
37
- "lastName": "Miriyala"
28
+ "payee": {
29
+ "partyIdInfo": {
30
+ "partyIdType": "PERSONAL_ID",
31
+ "partyIdentifier": "123456789",
32
+ "partySubIdOrType": "PASSPORT",
33
+ "fspId": "goldenpayeefsp"
38
34
  },
39
- "dateOfBirth": "2010-10-10"
35
+ "personalInfo": {
36
+ "complexName": {
37
+ "firstName": "Sridevi",
38
+ "lastName": "Miriyala"
39
+ },
40
+ "dateOfBirth": "2010-10-10"
41
+ },
42
+ "name": "Sridevi Miriyala",
43
+ "merchantClassificationCode": "456"
44
+ },
45
+ "transactionType": {
46
+ "scenario": "TRANSFER",
47
+ "initiator": "PAYER",
48
+ "initiatorType": "CONSUMER"
40
49
  },
41
- "name": "Sridevi Miriyala",
42
- "merchantClassificationCode": "456"
50
+ "extensionList": {
51
+ "extension": [{
52
+ "key": "qkey1",
53
+ "value": "qvalue1"
54
+ }, {
55
+ "key": "qkey2",
56
+ "value": "qvalue2"
57
+ }]
58
+ }
59
+ }
60
+ },
61
+ "internalQuoteRequest": {
62
+ "quoteId": "fake-quote-id",
63
+ "transactionId": "fake-transaction-id",
64
+ "to": {
65
+ "idType": "PERSONAL_ID",
66
+ "idValue": "123456789",
67
+ "idSubValue": "PASSPORT",
68
+ "fspId": "goldenpayeefsp",
69
+ "displayName": "Sridevi Miriyala",
70
+ "dateOfBirth": "2010-10-10",
71
+ "firstName": "Sridevi",
72
+ "lastName": "Miriyala"
73
+ },
74
+ "from": {
75
+ "idType": "MSISDN",
76
+ "idValue": "17855501914",
77
+ "fspId": "mojaloop-sdk",
78
+ "displayName": "Murthy Kakarlamudi",
79
+ "dateOfBirth": "2010-10-10",
80
+ "firstName": "Murthy",
81
+ "lastName": "Kakarlamudi"
43
82
  },
44
- "transactionType": {
45
- "scenario": "TRANSFER",
46
- "initiator": "PAYER",
47
- "initiatorType": "CONSUMER"
83
+ "amountType": "SEND",
84
+ "amount": 10,
85
+ "currency": "XOF",
86
+ "transactionType": "TRANSFER",
87
+ "initiator": "PAYER",
88
+ "initiatorType": "CONSUMER",
89
+ "expiration": "2019-06-04T04:02:10.378Z",
90
+ "extensionList": {
91
+ "extension": [{
92
+ "key": "qkey1",
93
+ "value": "qvalue1"
94
+ }, {
95
+ "key": "qkey2",
96
+ "value": "qvalue2"
97
+ }]
48
98
  }
49
99
  },
50
100
  "internalQuoteResponse": {
@@ -55,7 +105,14 @@
55
105
  "payeeFspCommission": 0,
56
106
  "condition": "fH9pAYDQbmoZLPbvv3CSW2RfjU4jvM4ApG_fqGnR7Xs",
57
107
  "expiration": "2019-11-12T09:02:10.378Z",
58
- "isValid": 1
108
+ "isValid": 1,
109
+ "extensionList": [{
110
+ "key": "qkey1",
111
+ "value": "qvalue1"
112
+ }, {
113
+ "key": "qkey2",
114
+ "value": "qvalue2"
115
+ }]
59
116
  },
60
117
  "internalGetOTPResponse" : {
61
118
  "value": "123456"
@@ -1,15 +1,17 @@
1
1
  {
2
- "party": {
3
- "partyIdInfo": {
4
- "partyIdType": "PERSONAL_ID",
5
- "partyIdentifier": "123456789",
6
- "partySubIdOrType": "PASSPORT",
7
- "fspId": "MobileMoney"
8
- },
9
- "personalInfo": {
10
- "complexName": {
11
- "firstName": "John",
12
- "lastName": "Doe"
2
+ "body": {
3
+ "party": {
4
+ "partyIdInfo": {
5
+ "partyIdType": "PERSONAL_ID",
6
+ "partyIdentifier": "123456789",
7
+ "partySubIdOrType": "PASSPORT",
8
+ "fspId": "MobileMoney"
9
+ },
10
+ "personalInfo": {
11
+ "complexName": {
12
+ "firstName": "John",
13
+ "lastName": "Doe"
14
+ }
13
15
  }
14
16
  }
15
17
  }
@@ -1,31 +1,42 @@
1
1
  {
2
2
  "type": "quoteResponse",
3
3
  "data": {
4
- "transferAmount": {
5
- "amount": "500",
6
- "currency": "USD"
4
+ "body": {
5
+ "transferAmount": {
6
+ "amount": "500",
7
+ "currency": "USD"
8
+ },
9
+ "payeeReceiveAmount": {
10
+ "amount": "490",
11
+ "currency": "USD"
12
+ },
13
+ "payeeFspFee": {
14
+ "amount": "5",
15
+ "currency": "USD"
16
+ },
17
+ "payeeFspCommission": {
18
+ "amount": "5",
19
+ "currency": "USD"
20
+ },
21
+ "geoCode": {
22
+ "latitude": "53.295971",
23
+ "longitude": "-0.038500"
24
+ },
25
+ "expiration": "2017-11-15T14:17:09.663+01:00",
26
+ "ilpPacket": "AQAAAAAAACasIWcuc2UubW9iaWxlbW9uZXkubXNpc2RuLjEyMzQ1Njc4OYIEIXsNCiAgICAidHJhbnNhY3Rpb25JZCI6ICI4NWZlYWMyZi0zOWIyLTQ5MWItODE3ZS00YTAzMjAzZDRmMTQiLA0KICAgICJxdW90ZUlkIjogIjdjMjNlODBjLWQwNzgtNDA3Ny04MjYzLTJjMDQ3ODc2ZmNmNiIsDQogICAgInBheWVlIjogew0KICAgICAgICAicGFydHlJZEluZm8iOiB7DQogICAgICAgICAgICAicGFydHlJZFR5cGUiOiAiTVNJU0ROIiwNCiAgICAgICAgICAgICJwYXJ0eUlkZW50aWZpZXIiOiAiMTIzNDU2Nzg5IiwNCiAgICAgICAgICAgICJmc3BJZCI6ICJNb2JpbGVNb25leSINCiAgICAgICAgfSwNCiAgICAgICAgInBlcnNvbmFsSW5mbyI6IHsNCiAgICAgICAgICAgICJjb21wbGV4TmFtZSI6IHsNCiAgICAgICAgICAgICAgICAiZmlyc3ROYW1lIjogIkhlbnJpayIsDQogICAgICAgICAgICAgICAgImxhc3ROYW1lIjogIkthcmxzc29uIg0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfSwNCiAgICAicGF5ZXIiOiB7DQogICAgICAgICJwZXJzb25hbEluZm8iOiB7DQogICAgICAgICAgICAiY29tcGxleE5hbWUiOiB7DQogICAgICAgICAgICAgICAgImZpcnN0TmFtZSI6ICJNYXRzIiwNCiAgICAgICAgICAgICAgICAibGFzdE5hbWUiOiAiSGFnbWFuIg0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAicGFydHlJZEluZm8iOiB7DQogICAgICAgICAgICAicGFydHlJZFR5cGUiOiAiSUJBTiIsDQogICAgICAgICAgICAicGFydHlJZGVudGlmaWVyIjogIlNFNDU1MDAwMDAwMDA1ODM5ODI1NzQ2NiIsDQogICAgICAgICAgICAiZnNwSWQiOiAiQmFua05yT25lIg0KICAgICAgICB9DQogICAgfSwNCiAgICAiYW1vdW50Ijogew0KICAgICAgICAiYW1vdW50IjogIjEwMCIsDQogICAgICAgICJjdXJyZW5jeSI6ICJVU0QiDQogICAgfSwNCiAgICAidHJhbnNhY3Rpb25UeXBlIjogew0KICAgICAgICAic2NlbmFyaW8iOiAiVFJBTlNGRVIiLA0KICAgICAgICAiaW5pdGlhdG9yIjogIlBBWUVSIiwNCiAgICAgICAgImluaXRpYXRvclR5cGUiOiAiQ09OU1VNRVIiDQogICAgfSwNCiAgICAibm90ZSI6ICJGcm9tIE1hdHMiDQp9DQo\u003d\u003d",
27
+ "condition": "fH9pAYDQbmoZLPbvv3CSW2RfjU4jvM4ApG_fqGnR7Xs",
28
+ "extensionList": {
29
+ "extension": [{
30
+ "key": "qkey1",
31
+ "value": "qvalue1"
32
+ }, {
33
+ "key": "qkey2",
34
+ "value": "qvalue2"
35
+ }]
36
+ }
7
37
  },
8
- "payeeReceiveAmount": {
9
- "amount": "490",
10
- "currency": "USD"
11
- },
12
- "payeeFspFee": {
13
- "amount": "5",
14
- "currency": "USD"
15
- },
16
- "payeeFspCommission": {
17
- "amount": "5",
18
- "currency": "USD"
19
- },
20
- "geoCode": {
21
- "latitude": "53.295971",
22
- "longitude": "-0.038500"
23
- },
24
- "expiration": "2017-11-15T14:17:09.663+01:00",
25
- "ilpPacket": "AQAAAAAAACasIWcuc2UubW9iaWxlbW9uZXkubXNpc2RuLjEyMzQ1Njc4OYIEIXsNCiAgICAidHJhbnNhY3Rpb25JZCI6ICI4NWZlYWMyZi0zOWIyLTQ5MWItODE3ZS00YTAzMjAzZDRmMTQiLA0KICAgICJxdW90ZUlkIjogIjdjMjNlODBjLWQwNzgtNDA3Ny04MjYzLTJjMDQ3ODc2ZmNmNiIsDQogICAgInBheWVlIjogew0KICAgICAgICAicGFydHlJZEluZm8iOiB7DQogICAgICAgICAgICAicGFydHlJZFR5cGUiOiAiTVNJU0ROIiwNCiAgICAgICAgICAgICJwYXJ0eUlkZW50aWZpZXIiOiAiMTIzNDU2Nzg5IiwNCiAgICAgICAgICAgICJmc3BJZCI6ICJNb2JpbGVNb25leSINCiAgICAgICAgfSwNCiAgICAgICAgInBlcnNvbmFsSW5mbyI6IHsNCiAgICAgICAgICAgICJjb21wbGV4TmFtZSI6IHsNCiAgICAgICAgICAgICAgICAiZmlyc3ROYW1lIjogIkhlbnJpayIsDQogICAgICAgICAgICAgICAgImxhc3ROYW1lIjogIkthcmxzc29uIg0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfSwNCiAgICAicGF5ZXIiOiB7DQogICAgICAgICJwZXJzb25hbEluZm8iOiB7DQogICAgICAgICAgICAiY29tcGxleE5hbWUiOiB7DQogICAgICAgICAgICAgICAgImZpcnN0TmFtZSI6ICJNYXRzIiwNCiAgICAgICAgICAgICAgICAibGFzdE5hbWUiOiAiSGFnbWFuIg0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAicGFydHlJZEluZm8iOiB7DQogICAgICAgICAgICAicGFydHlJZFR5cGUiOiAiSUJBTiIsDQogICAgICAgICAgICAicGFydHlJZGVudGlmaWVyIjogIlNFNDU1MDAwMDAwMDA1ODM5ODI1NzQ2NiIsDQogICAgICAgICAgICAiZnNwSWQiOiAiQmFua05yT25lIg0KICAgICAgICB9DQogICAgfSwNCiAgICAiYW1vdW50Ijogew0KICAgICAgICAiYW1vdW50IjogIjEwMCIsDQogICAgICAgICJjdXJyZW5jeSI6ICJVU0QiDQogICAgfSwNCiAgICAidHJhbnNhY3Rpb25UeXBlIjogew0KICAgICAgICAic2NlbmFyaW8iOiAiVFJBTlNGRVIiLA0KICAgICAgICAiaW5pdGlhdG9yIjogIlBBWUVSIiwNCiAgICAgICAgImluaXRpYXRvclR5cGUiOiAiQ09OU1VNRVIiDQogICAgfSwNCiAgICAibm90ZSI6ICJGcm9tIE1hdHMiDQp9DQo\u003d\u003d",
26
- "condition": "fH9pAYDQbmoZLPbvv3CSW2RfjU4jvM4ApG_fqGnR7Xs"
27
- },
28
- "headers": {
29
- "fspiop-source": "foo"
38
+ "headers": {
39
+ "fspiop-source": "foo"
40
+ }
30
41
  }
31
42
  }
@@ -1,8 +1,10 @@
1
1
  {
2
2
  "type": "transferFulfil",
3
3
  "data": {
4
- "fulfilment": "87mm1-reS3SAi8oIWXgBkLmgWc1MkZ_yLbFDX5XAdo5o",
5
- "completedTimestamp": "2017-11-15T14:16:09.663+01:00",
6
- "transferState": "COMMITTED"
4
+ "body": {
5
+ "fulfilment": "87mm1-reS3SAi8oIWXgBkLmgWc1MkZ_yLbFDX5XAdo5o",
6
+ "completedTimestamp": "2017-11-15T14:16:09.663+01:00",
7
+ "transferState": "COMMITTED"
8
+ }
7
9
  }
8
10
  }
@@ -1,12 +0,0 @@
1
- class ApiServer {
2
- constructor(conf) {
3
- this.conf = conf;
4
- this.api = null;
5
- this.server = null;
6
- this.logger = null;
7
- }
8
-
9
-
10
- }
11
-
12
- module.exports = ApiServer;
@@ -1,21 +0,0 @@
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
- * Matt Kingston - matt.kingston@modusbox.com *
9
- **************************************************************************/
10
-
11
- 'use strict';
12
-
13
- const words = require('./words.json');
14
-
15
- const randomEl = arr => arr[Math.floor(Math.random() * arr.length)];
16
- module.exports = (separator = '-') => [
17
- randomEl(words.adjectives),
18
- randomEl(words.nouns),
19
- randomEl(words.adjectives),
20
- randomEl(words.nouns)
21
- ].join(separator);