@mojaloop/sdk-scheme-adapter 16.0.0 → 17.0.2-snapshot.6
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.
- package/.circleci/config.yml +463 -178
- package/CHANGELOG.md +24 -0
- package/Dockerfile +4 -0
- package/audit-resolve.json +27 -93
- package/package.json +20 -19
- package/src/InboundServer/index.js +4 -2
- package/src/InboundServer/middlewares.js +12 -4
- package/src/OutboundServer/index.js +3 -2
- package/src/OutboundServer/middlewares.js +6 -2
- package/src/TestServer/index.js +4 -2
- package/src/index.js +0 -2
- package/src/lib/metrics.js +0 -2
- package/src/lib/model/AccountsModel.js +4 -7
- package/src/lib/model/Async2SyncModel.js +4 -3
- package/src/lib/model/InboundTransfersModel.js +16 -14
- package/src/lib/model/OutboundBulkQuotesModel.js +4 -7
- package/src/lib/model/OutboundBulkTransfersModel.js +4 -7
- package/src/lib/model/OutboundRequestToPayModel.js +5 -10
- package/src/lib/model/OutboundRequestToPayTransferModel.js +6 -12
- package/src/lib/model/OutboundTransfersModel.js +10 -9
- package/src/lib/model/common/BackendError.js +1 -13
- package/src/lib/model/common/Enums.js +30 -0
- package/src/lib/model/common/index.js +3 -2
- package/src/lib/router.js +3 -1
- package/src/lib/validate.js +10 -1
- package/test/integration/lib/Outbound/parties.test.js +2 -1
- package/test/integration/lib/Outbound/quotes.test.js +3 -1
- package/test/integration/lib/Outbound/simpleTransfers.test.js +2 -1
- package/test/unit/inboundApi/handlers.test.js +3 -1
- package/test/unit/lib/model/AccountsModel.test.js +2 -1
- package/test/unit/lib/model/InboundTransfersModel.test.js +10 -6
- package/test/unit/lib/model/OutboundBulkQuotesModel.test.js +5 -3
- package/test/unit/lib/model/OutboundBulkTransfersModel.test.js +4 -3
- package/test/unit/lib/model/OutboundRequestToPayModel.test.js +3 -2
- package/test/unit/lib/model/OutboundRequestToPayTransferModel.test.js +4 -3
- package/test/unit/lib/model/OutboundTransfersModel.test.js +37 -34
- package/test/unit/lib/model/PartiesModel.test.js +2 -1
- package/test/unit/lib/model/QuotesModel.test.js +2 -1
- package/test/unit/lib/model/TransfersModel.test.js +2 -1
- package/test/unit/lib/model/data/getBulkTransfersBackendResponse.json +1 -1
- package/test/unit/lib/model/data/getBulkTransfersMojaloopResponse.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,28 @@
|
|
|
1
1
|
# Changelog: [mojaloop/thirdparty-api-svc](https://github.com/mojaloop/thirdparty-api-svc)
|
|
2
|
+
### [17.0.1](https://github.com/mojaloop/sdk-scheme-adapter/compare/v17.0.0...v17.0.1) (2022-07-04)
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
* creating inbound server ([#329](https://github.com/mojaloop/sdk-scheme-adapter/issues/329)) ([962420f](https://github.com/mojaloop/sdk-scheme-adapter/commit/962420f6fed02722c5a9aeee6c108b6fbc9f021d))
|
|
8
|
+
|
|
9
|
+
## [17.0.0](https://github.com/mojaloop/sdk-scheme-adapter/compare/v15.0.1...v17.0.0) (2022-07-04)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### ⚠ BREAKING CHANGES
|
|
13
|
+
|
|
14
|
+
* add dummy pr to major version bump due to unsquashed title (#327)
|
|
15
|
+
|
|
16
|
+
### Features
|
|
17
|
+
|
|
18
|
+
* suppress health check logs ([#328](https://github.com/mojaloop/sdk-scheme-adapter/issues/328)) ([64fadde](https://github.com/mojaloop/sdk-scheme-adapter/commit/64faddea8307aa0c19d56466d0afe8f8208c4d66))
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Chore
|
|
22
|
+
|
|
23
|
+
* add dummy pr to major version bump due to unsquashed title ([#327](https://github.com/mojaloop/sdk-scheme-adapter/issues/327)) ([ff0f29b](https://github.com/mojaloop/sdk-scheme-adapter/commit/ff0f29b7ce560565ee21cf6ae84118e1b391b5b5))
|
|
24
|
+
* **release:** 16.0.0 [skip ci] ([0071c65](https://github.com/mojaloop/sdk-scheme-adapter/commit/0071c65c3665239d0a482e76498f9eec5c288043))
|
|
25
|
+
|
|
2
26
|
## [16.0.0](https://github.com/mojaloop/sdk-scheme-adapter/compare/v15.0.1...v16.0.0) (2022-07-01)
|
|
3
27
|
|
|
4
28
|
|
package/Dockerfile
CHANGED
|
@@ -28,6 +28,10 @@ LABEL org.label-schema.vcs-ref=$VCS_REF
|
|
|
28
28
|
LABEL org.label-schema.url="https://mojaloop.io/"
|
|
29
29
|
LABEL org.label-schema.version=$VERSION
|
|
30
30
|
|
|
31
|
+
# Create a non-root user: ml-user
|
|
32
|
+
RUN adduser -D ml-user
|
|
33
|
+
USER ml-user
|
|
34
|
+
|
|
31
35
|
COPY --from=builder /src/ /src
|
|
32
36
|
COPY ./src ./src
|
|
33
37
|
COPY ./secrets /
|
package/audit-resolve.json
CHANGED
|
@@ -2,124 +2,58 @@
|
|
|
2
2
|
"decisions": {
|
|
3
3
|
"1075703|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs": {
|
|
4
4
|
"decision": "ignore",
|
|
5
|
-
"madeAt":
|
|
5
|
+
"madeAt": 1657188195403,
|
|
6
|
+
"expiresAt": 1659780190646
|
|
6
7
|
},
|
|
7
8
|
"1075704|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs": {
|
|
8
9
|
"decision": "ignore",
|
|
9
|
-
"madeAt":
|
|
10
|
+
"madeAt": 1657188196343,
|
|
11
|
+
"expiresAt": 1659780190646
|
|
10
12
|
},
|
|
11
|
-
"
|
|
13
|
+
"1080944|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>moment": {
|
|
12
14
|
"decision": "ignore",
|
|
13
|
-
"madeAt":
|
|
15
|
+
"madeAt": 1657188197274,
|
|
16
|
+
"expiresAt": 1659780190646
|
|
14
17
|
},
|
|
15
|
-
"
|
|
16
|
-
"decision": "ignore",
|
|
17
|
-
"madeAt": 1656679958471
|
|
18
|
-
},
|
|
19
|
-
"1070030|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>shins>ejs>markdown-it": {
|
|
18
|
+
"1070030|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>moment>shins>markdown-it": {
|
|
20
19
|
"decision": "ignore",
|
|
21
|
-
"madeAt":
|
|
20
|
+
"madeAt": 1657188198190,
|
|
21
|
+
"expiresAt": 1659780190646
|
|
22
22
|
},
|
|
23
23
|
"1070030|widdershins>markdown-it": {
|
|
24
24
|
"decision": "ignore",
|
|
25
|
-
"madeAt":
|
|
25
|
+
"madeAt": 1657188198190,
|
|
26
|
+
"expiresAt": 1659780190646
|
|
26
27
|
},
|
|
27
|
-
"1068155|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>shins>
|
|
28
|
+
"1068155|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>moment>shins>markdown-it>sanitize-html": {
|
|
28
29
|
"decision": "ignore",
|
|
29
|
-
"madeAt":
|
|
30
|
+
"madeAt": 1657188199040,
|
|
31
|
+
"expiresAt": 1659780190646
|
|
30
32
|
},
|
|
31
|
-
"1070260|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>shins>
|
|
33
|
+
"1070260|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>moment>shins>markdown-it>sanitize-html": {
|
|
32
34
|
"decision": "ignore",
|
|
33
|
-
"madeAt":
|
|
35
|
+
"madeAt": 1657188199954,
|
|
36
|
+
"expiresAt": 1659780190646
|
|
34
37
|
},
|
|
35
|
-
"
|
|
38
|
+
"1070412|ejs": {
|
|
36
39
|
"decision": "ignore",
|
|
37
|
-
"madeAt":
|
|
40
|
+
"madeAt": 1657188200902,
|
|
41
|
+
"expiresAt": 1659780190646
|
|
38
42
|
},
|
|
39
43
|
"1067553|swagger2openapi>better-ajv-errors>jsonpointer": {
|
|
40
44
|
"decision": "ignore",
|
|
41
|
-
"madeAt":
|
|
42
|
-
|
|
43
|
-
"1067553|widdershins>markdown-it>swagger2openapi>better-ajv-errors>jsonpointer": {
|
|
44
|
-
"decision": "ignore",
|
|
45
|
-
"madeAt": 1656679000804
|
|
46
|
-
},
|
|
47
|
-
"1067946|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>shins>ejs>markdown-it>sanitize-html>widdershins>swagger2openapi>better-ajv-errors>jsonpointer>oas-validator>ajv": {
|
|
48
|
-
"decision": "ignore",
|
|
49
|
-
"madeAt": 1656679005322
|
|
45
|
+
"madeAt": 1657188201786,
|
|
46
|
+
"expiresAt": 1659780190646
|
|
50
47
|
},
|
|
51
48
|
"1067946|swagger2openapi>better-ajv-errors>jsonpointer>oas-validator>ajv": {
|
|
52
49
|
"decision": "ignore",
|
|
53
|
-
"madeAt":
|
|
54
|
-
|
|
55
|
-
"1067946|widdershins>markdown-it>swagger2openapi>better-ajv-errors>jsonpointer>oas-validator>ajv": {
|
|
56
|
-
"decision": "ignore",
|
|
57
|
-
"madeAt": 1656679005322
|
|
58
|
-
},
|
|
59
|
-
"1068310|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>shins>ejs>markdown-it>sanitize-html>widdershins>swagger2openapi>better-ajv-errors>jsonpointer>oas-validator>ajv>yargs>yargs-parser": {
|
|
60
|
-
"decision": "ignore",
|
|
61
|
-
"madeAt": 1656679007475
|
|
62
|
-
},
|
|
63
|
-
"1068310|widdershins>markdown-it>swagger2openapi>better-ajv-errors>jsonpointer>oas-validator>ajv>yargs>yargs-parser": {
|
|
64
|
-
"decision": "ignore",
|
|
65
|
-
"madeAt": 1656679007475
|
|
66
|
-
},
|
|
67
|
-
"1070412|shins>ejs": {
|
|
68
|
-
"decision": "ignore",
|
|
69
|
-
"madeAt": 1656679958471
|
|
70
|
-
},
|
|
71
|
-
"1070030|shins>ejs>markdown-it": {
|
|
72
|
-
"decision": "ignore",
|
|
73
|
-
"madeAt": 1656679961621
|
|
74
|
-
},
|
|
75
|
-
"1068155|shins>ejs>markdown-it>sanitize-html": {
|
|
76
|
-
"decision": "ignore",
|
|
77
|
-
"madeAt": 1656679964361
|
|
78
|
-
},
|
|
79
|
-
"1070260|shins>ejs>markdown-it>sanitize-html": {
|
|
80
|
-
"decision": "ignore",
|
|
81
|
-
"madeAt": 1656679966871
|
|
82
|
-
},
|
|
83
|
-
"1070030|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>shins>markdown-it": {
|
|
84
|
-
"decision": "ignore",
|
|
85
|
-
"madeAt": 1656681873020
|
|
86
|
-
},
|
|
87
|
-
"1068155|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>shins>markdown-it>sanitize-html": {
|
|
88
|
-
"decision": "ignore",
|
|
89
|
-
"madeAt": 1656681876693
|
|
90
|
-
},
|
|
91
|
-
"1070260|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>shins>markdown-it>sanitize-html": {
|
|
92
|
-
"decision": "ignore",
|
|
93
|
-
"madeAt": 1656681880214
|
|
50
|
+
"madeAt": 1657188202661,
|
|
51
|
+
"expiresAt": 1659780190646
|
|
94
52
|
},
|
|
95
53
|
"1068310|widdershins>markdown-it>yargs>yargs-parser": {
|
|
96
54
|
"decision": "ignore",
|
|
97
|
-
"madeAt":
|
|
98
|
-
|
|
99
|
-
"1070030|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>widdershins>markdown-it": {
|
|
100
|
-
"decision": "ignore",
|
|
101
|
-
"madeAt": 1656691882275,
|
|
102
|
-
"expiresAt": 1659283873047
|
|
103
|
-
},
|
|
104
|
-
"1070030|shins>markdown-it": {
|
|
105
|
-
"decision": "ignore",
|
|
106
|
-
"madeAt": 1656691882275,
|
|
107
|
-
"expiresAt": 1659283873047
|
|
108
|
-
},
|
|
109
|
-
"1068310|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>widdershins>markdown-it>yargs>yargs-parser": {
|
|
110
|
-
"decision": "ignore",
|
|
111
|
-
"madeAt": 1656691883964,
|
|
112
|
-
"expiresAt": 1659283873047
|
|
113
|
-
},
|
|
114
|
-
"1068155|shins>markdown-it>sanitize-html": {
|
|
115
|
-
"decision": "ignore",
|
|
116
|
-
"madeAt": 1656691885077,
|
|
117
|
-
"expiresAt": 1659283873047
|
|
118
|
-
},
|
|
119
|
-
"1070260|shins>markdown-it>sanitize-html": {
|
|
120
|
-
"decision": "ignore",
|
|
121
|
-
"madeAt": 1656691886045,
|
|
122
|
-
"expiresAt": 1659283873047
|
|
55
|
+
"madeAt": 1657188203603,
|
|
56
|
+
"expiresAt": 1659780190646
|
|
123
57
|
}
|
|
124
58
|
},
|
|
125
59
|
"rules": {},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mojaloop/sdk-scheme-adapter",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "17.0.2-snapshot.6",
|
|
4
4
|
"description": "An adapter for connecting to Mojaloop API enabled switches.",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"types": "src/index.d.ts",
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"~": "src"
|
|
12
12
|
},
|
|
13
13
|
"scripts": {
|
|
14
|
-
"audit:resolve": "
|
|
15
|
-
"audit:check": "
|
|
14
|
+
"audit:resolve": "npx resolve-audit --production",
|
|
15
|
+
"audit:check": "npx check-audit --production",
|
|
16
16
|
"build": "npm run build:openapi; npm run build:dto:outbound",
|
|
17
17
|
"build:openapi": "npm run build:openapi:inbound && npm run build:openapi:outbound",
|
|
18
18
|
"build:openapi:inbound": "openapi bundle --output ./src/InboundServer/api.yaml --ext yaml ./src/InboundServer/api_template.yaml",
|
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
"build:dto:outbound": "openapi-typescript ./src/OutboundServer/api.yaml --output ./src/OutboundServer/api_interfaces/openapi.d.ts",
|
|
21
21
|
"lint": "eslint ./src/",
|
|
22
22
|
"lint:fix": "eslint ./src/ --fix",
|
|
23
|
-
"test": "
|
|
23
|
+
"test": "npm run test:unit",
|
|
24
|
+
"test:unit": "jest --runInBand --ci --reporters=default --reporters=jest-junit --env=node test/unit/",
|
|
24
25
|
"test:int": "jest --ci --reporters=default --reporters=jest-junit --env=node test/integration",
|
|
25
26
|
"validate:api": "npm run validate:api:in; npm run validate:api:out",
|
|
26
27
|
"validate:api:in": "swagger-cli validate ./src/InboundServer/api.yaml",
|
|
@@ -55,20 +56,20 @@
|
|
|
55
56
|
"url": "git@github.com:mojaloop/sdk-scheme-adapter.git"
|
|
56
57
|
},
|
|
57
58
|
"dependencies": {
|
|
58
|
-
"@koa/cors": "^3.
|
|
59
|
+
"@koa/cors": "^3.3.0",
|
|
59
60
|
"@mojaloop/central-services-shared": "17.0.2",
|
|
60
|
-
"@mojaloop/sdk-standard-components": "^17.0
|
|
61
|
+
"@mojaloop/sdk-standard-components": "^17.1.0",
|
|
61
62
|
"ajv": "8.11.0",
|
|
62
63
|
"axios": "^0.27.2",
|
|
63
64
|
"co-body": "^6.1.0",
|
|
64
65
|
"dotenv": "^16.0.1",
|
|
65
|
-
"env-var": "^7.
|
|
66
|
-
"express": "^4.
|
|
66
|
+
"env-var": "^7.1.1",
|
|
67
|
+
"express": "^4.18.1",
|
|
67
68
|
"fast-json-patch": "^3.1.1",
|
|
68
69
|
"javascript-state-machine": "^3.1.0",
|
|
69
70
|
"js-yaml": "^4.1.0",
|
|
70
71
|
"json-schema-ref-parser": "^9.0.9",
|
|
71
|
-
"koa": "^2.13.
|
|
72
|
+
"koa": "^2.13.4",
|
|
72
73
|
"koa-body": "^5.0.0",
|
|
73
74
|
"lodash": "^4.17.21",
|
|
74
75
|
"module-alias": "^2.2.2",
|
|
@@ -77,31 +78,31 @@
|
|
|
77
78
|
"prom-client": "^14.0.1",
|
|
78
79
|
"promise-timeout": "^1.3.0",
|
|
79
80
|
"random-word-slugs": "^0.1.6",
|
|
80
|
-
"redis": "^4.
|
|
81
|
-
"uuidv4": "^6.2.
|
|
81
|
+
"redis": "^4.2.0",
|
|
82
|
+
"uuidv4": "^6.2.13",
|
|
82
83
|
"ws": "^8.8.0"
|
|
83
84
|
},
|
|
84
85
|
"devDependencies": {
|
|
85
86
|
"@babel/core": "^7.18.6",
|
|
86
87
|
"@babel/preset-env": "^7.18.6",
|
|
87
88
|
"@mojaloop/api-snippets": "^14.0.0",
|
|
88
|
-
"@redocly/openapi-cli": "^1.0.0-beta.
|
|
89
|
+
"@redocly/openapi-cli": "^1.0.0-beta.94",
|
|
89
90
|
"@types/jest": "^28.1.4",
|
|
90
91
|
"babel-jest": "^28.1.2",
|
|
91
|
-
"eslint": "^8.
|
|
92
|
+
"eslint": "^8.19.0",
|
|
92
93
|
"eslint-config-airbnb-base": "^15.0.0",
|
|
93
|
-
"eslint-plugin-import": "^2.
|
|
94
|
+
"eslint-plugin-import": "^2.26.0",
|
|
94
95
|
"eslint-plugin-jest": "^26.5.3",
|
|
95
96
|
"jest": "^28.1.2",
|
|
96
97
|
"jest-junit": "^14.0.0",
|
|
97
98
|
"nock": "^13.2.8",
|
|
98
|
-
"npm-audit-resolver": "^3.0.0-
|
|
99
|
-
"npm-check-updates": "^15.
|
|
99
|
+
"npm-audit-resolver": "^3.0.0-7",
|
|
100
|
+
"npm-check-updates": "^15.2.1",
|
|
100
101
|
"openapi-response-validator": "^12.0.0",
|
|
101
|
-
"openapi-typescript": "^5.4.
|
|
102
|
+
"openapi-typescript": "^5.4.1",
|
|
102
103
|
"redis-mock": "^0.56.3",
|
|
103
|
-
"standard-version": "^9.
|
|
104
|
-
"supertest": "^6.
|
|
104
|
+
"standard-version": "^9.5.0",
|
|
105
|
+
"supertest": "^6.2.4",
|
|
105
106
|
"swagger-cli": "^4.0.4"
|
|
106
107
|
}
|
|
107
108
|
}
|
|
@@ -23,6 +23,8 @@ const router = require('../lib/router');
|
|
|
23
23
|
const handlers = require('./handlers');
|
|
24
24
|
const middlewares = require('./middlewares');
|
|
25
25
|
|
|
26
|
+
const logExcludePaths = ['/'];
|
|
27
|
+
|
|
26
28
|
class InboundApi extends EventEmitter {
|
|
27
29
|
constructor(conf, logger, cache, validator, wso2) {
|
|
28
30
|
super({ captureExceptions: true });
|
|
@@ -99,7 +101,7 @@ class InboundApi extends EventEmitter {
|
|
|
99
101
|
api.use(middlewares.createJwsValidator(logger, jwsVerificationKeys, jwsExclusions));
|
|
100
102
|
}
|
|
101
103
|
|
|
102
|
-
api.use(middlewares.applyState({ cache, wso2, conf }));
|
|
104
|
+
api.use(middlewares.applyState({ cache, wso2, conf, logExcludePaths }));
|
|
103
105
|
api.use(middlewares.createLogger(logger));
|
|
104
106
|
api.use(middlewares.createRequestValidator(validator));
|
|
105
107
|
api.use(middlewares.assignFspiopIdentifier());
|
|
@@ -133,7 +135,7 @@ class InboundServer extends EventEmitter {
|
|
|
133
135
|
constructor(conf, logger, cache, wso2) {
|
|
134
136
|
super({ captureExceptions: true });
|
|
135
137
|
this._conf = conf;
|
|
136
|
-
this._validator = new Validate();
|
|
138
|
+
this._validator = new Validate({ logExcludePaths });
|
|
137
139
|
this._logger = logger;
|
|
138
140
|
this._api = new InboundApi(
|
|
139
141
|
conf,
|
|
@@ -353,13 +353,17 @@ const createLogger = (logger) => async (ctx, next) => {
|
|
|
353
353
|
path: ctx.path,
|
|
354
354
|
method: ctx.method
|
|
355
355
|
}});
|
|
356
|
-
ctx.state.
|
|
356
|
+
if (!ctx.state.logExcludePaths.includes(ctx.path)) {
|
|
357
|
+
ctx.state.logger.push({body: ctx.request.body}).log('Request received');
|
|
358
|
+
}
|
|
357
359
|
try {
|
|
358
360
|
await next();
|
|
359
361
|
} catch (err) {
|
|
360
362
|
ctx.state.logger.push(err).log('Error');
|
|
361
363
|
}
|
|
362
|
-
|
|
364
|
+
if (!ctx.state.logExcludePaths.includes(ctx.path)) {
|
|
365
|
+
await ctx.state.logger.log('Request processed');
|
|
366
|
+
}
|
|
363
367
|
};
|
|
364
368
|
|
|
365
369
|
|
|
@@ -369,10 +373,14 @@ const createLogger = (logger) => async (ctx, next) => {
|
|
|
369
373
|
* @return {Function}
|
|
370
374
|
*/
|
|
371
375
|
const createRequestValidator = (validator) => async (ctx, next) => {
|
|
372
|
-
ctx.state.
|
|
376
|
+
if (!ctx.state.logExcludePaths.includes(ctx.path)) {
|
|
377
|
+
ctx.state.logger.log('Validating request');
|
|
378
|
+
}
|
|
373
379
|
try {
|
|
374
380
|
ctx.state.path = validator.validateRequest(ctx, ctx.state.logger);
|
|
375
|
-
ctx.state.
|
|
381
|
+
if (!ctx.state.logExcludePaths.includes(ctx.path)) {
|
|
382
|
+
ctx.state.logger.log('Request passed validation');
|
|
383
|
+
}
|
|
376
384
|
await next();
|
|
377
385
|
} catch (err) {
|
|
378
386
|
ctx.state.logger.push({ err }).log('Request failed validation.');
|
|
@@ -23,6 +23,7 @@ const handlers = require('./handlers');
|
|
|
23
23
|
const middlewares = require('./middlewares');
|
|
24
24
|
|
|
25
25
|
const endpointRegex = /\/.*/g;
|
|
26
|
+
const logExcludePaths = ['/'];
|
|
26
27
|
|
|
27
28
|
class OutboundApi extends EventEmitter {
|
|
28
29
|
constructor(conf, logger, cache, validator, metricsClient, wso2) {
|
|
@@ -36,7 +37,7 @@ class OutboundApi extends EventEmitter {
|
|
|
36
37
|
this._api.use(middlewares.createErrorHandler(this._logger));
|
|
37
38
|
this._api.use(middlewares.createRequestIdGenerator());
|
|
38
39
|
this._api.use(koaBody()); // outbound always expects application/json
|
|
39
|
-
this._api.use(middlewares.applyState({ cache, wso2, conf, metricsClient }));
|
|
40
|
+
this._api.use(middlewares.applyState({ cache, wso2, conf, metricsClient, logExcludePaths }));
|
|
40
41
|
this._api.use(middlewares.createLogger(this._logger));
|
|
41
42
|
|
|
42
43
|
//Note that we strip off any path on peerEndpoint config after the origin.
|
|
@@ -69,7 +70,7 @@ class OutboundApi extends EventEmitter {
|
|
|
69
70
|
class OutboundServer extends EventEmitter {
|
|
70
71
|
constructor(conf, logger, cache, metricsClient, wso2) {
|
|
71
72
|
super({ captureExceptions: true });
|
|
72
|
-
this._validator = new Validate();
|
|
73
|
+
this._validator = new Validate({ logExcludePaths });
|
|
73
74
|
this._conf = conf;
|
|
74
75
|
this._logger = logger;
|
|
75
76
|
this._server = null;
|
|
@@ -20,10 +20,14 @@ const { applyState, createErrorHandler, createLogger, createRequestIdGenerator }
|
|
|
20
20
|
* @return {Function}
|
|
21
21
|
*/
|
|
22
22
|
const createRequestValidator = (validator) => async (ctx, next) => {
|
|
23
|
-
ctx.state.
|
|
23
|
+
if (!ctx.state.logExcludePaths.includes(ctx.path)) {
|
|
24
|
+
ctx.state.logger.log('Validating request');
|
|
25
|
+
}
|
|
24
26
|
try {
|
|
25
27
|
ctx.state.path = validator.validateRequest(ctx, ctx.state.logger);
|
|
26
|
-
ctx.state.
|
|
28
|
+
if (!ctx.state.logExcludePaths.includes(ctx.path)) {
|
|
29
|
+
ctx.state.logger.log('Request passed validation');
|
|
30
|
+
}
|
|
27
31
|
await next();
|
|
28
32
|
} catch (err) {
|
|
29
33
|
ctx.state.logger.push({ err }).log('Request failed validation.');
|
package/src/TestServer/index.js
CHANGED
|
@@ -21,6 +21,8 @@ const router = require('../lib/router');
|
|
|
21
21
|
const handlers = require('./handlers');
|
|
22
22
|
const middlewares = require('../InboundServer/middlewares');
|
|
23
23
|
|
|
24
|
+
const logExcludePaths = ['/'];
|
|
25
|
+
|
|
24
26
|
const getWsIp = (req) => [
|
|
25
27
|
req.socket.remoteAddress,
|
|
26
28
|
...(
|
|
@@ -36,7 +38,7 @@ class TestApi {
|
|
|
36
38
|
|
|
37
39
|
this._api.use(middlewares.createErrorHandler(logger));
|
|
38
40
|
this._api.use(middlewares.createRequestIdGenerator());
|
|
39
|
-
this._api.use(middlewares.applyState({ cache }));
|
|
41
|
+
this._api.use(middlewares.applyState({ cache, logExcludePaths }));
|
|
40
42
|
this._api.use(middlewares.createLogger(logger));
|
|
41
43
|
|
|
42
44
|
this._api.use(middlewares.createRequestValidator(validator));
|
|
@@ -174,7 +176,7 @@ class TestServer {
|
|
|
174
176
|
constructor({ port, logger, cache }) {
|
|
175
177
|
this._port = port;
|
|
176
178
|
this._logger = logger;
|
|
177
|
-
this._validator = new Validate();
|
|
179
|
+
this._validator = new Validate({ logExcludePaths });
|
|
178
180
|
this._api = new TestApi(this._logger.push({ component: 'api' }), this._validator, cache);
|
|
179
181
|
this._server = http.createServer(this._api.callback());
|
|
180
182
|
// TODO: why does this appear to need to be called after creating this._server (try reorder
|
package/src/index.js
CHANGED
|
@@ -78,7 +78,6 @@ class Server extends EventEmitter {
|
|
|
78
78
|
this.conf,
|
|
79
79
|
this.logger.push(LOG_ID.INBOUND),
|
|
80
80
|
this.cache,
|
|
81
|
-
this.metricsClient,
|
|
82
81
|
this.wso2,
|
|
83
82
|
);
|
|
84
83
|
this.inboundServer.on('error', (...args) => {
|
|
@@ -195,7 +194,6 @@ class Server extends EventEmitter {
|
|
|
195
194
|
newConf,
|
|
196
195
|
this.logger.push(LOG_ID.INBOUND),
|
|
197
196
|
this.cache,
|
|
198
|
-
this.metricsClient,
|
|
199
197
|
this.wso2,
|
|
200
198
|
);
|
|
201
199
|
this.inboundServer.on('error', (...args) => {
|
package/src/lib/metrics.js
CHANGED
|
@@ -131,8 +131,6 @@ class MetricsServer {
|
|
|
131
131
|
|
|
132
132
|
result.use(koaBody());
|
|
133
133
|
result.use(async ctx => {
|
|
134
|
-
this._logger.log('Metrics request received');
|
|
135
|
-
|
|
136
134
|
ctx.response.set('Content-Type', this._prometheusRegister.contentType);
|
|
137
135
|
ctx.response.body = await this._prometheusRegister.metrics();
|
|
138
136
|
});
|
|
@@ -16,10 +16,7 @@ const StateMachine = require('javascript-state-machine');
|
|
|
16
16
|
const { MojaloopRequests, Errors } = require('@mojaloop/sdk-standard-components');
|
|
17
17
|
const { BackendError } = require('./common');
|
|
18
18
|
|
|
19
|
-
const
|
|
20
|
-
'ERROR_OCCURRED': 'ERROR_OCCURRED',
|
|
21
|
-
'COMPLETED': 'COMPLETED',
|
|
22
|
-
};
|
|
19
|
+
const { SDKStateEnum } = require('./common');
|
|
23
20
|
|
|
24
21
|
|
|
25
22
|
/**
|
|
@@ -283,11 +280,11 @@ class AccountsModel {
|
|
|
283
280
|
|
|
284
281
|
switch(this._data.currentState) {
|
|
285
282
|
case 'succeeded':
|
|
286
|
-
resp.currentState =
|
|
283
|
+
resp.currentState = SDKStateEnum.COMPLETED;
|
|
287
284
|
break;
|
|
288
285
|
|
|
289
286
|
case 'errored':
|
|
290
|
-
resp.currentState =
|
|
287
|
+
resp.currentState = SDKStateEnum.ERROR_OCCURRED;
|
|
291
288
|
break;
|
|
292
289
|
|
|
293
290
|
default:
|
|
@@ -295,7 +292,7 @@ class AccountsModel {
|
|
|
295
292
|
`Account model response being returned from an unexpected state: ${this._data.currentState}. ` +
|
|
296
293
|
'Returning ERROR_OCCURRED state'
|
|
297
294
|
);
|
|
298
|
-
resp.currentState =
|
|
295
|
+
resp.currentState = SDKStateEnum.ERROR_OCCURRED;
|
|
299
296
|
break;
|
|
300
297
|
}
|
|
301
298
|
return resp;
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
const util = require('util');
|
|
13
13
|
|
|
14
14
|
const PSM = require('./common').PersistentStateMachine;
|
|
15
|
+
const { SDKStateEnum } = require('./common');
|
|
15
16
|
const MojaloopRequests = require('@mojaloop/sdk-standard-components').MojaloopRequests;
|
|
16
17
|
const deferredJob = require('./lib').deferredJob;
|
|
17
18
|
|
|
@@ -123,9 +124,9 @@ function generate({
|
|
|
123
124
|
}
|
|
124
125
|
|
|
125
126
|
const mapCurrentState = {
|
|
126
|
-
start:
|
|
127
|
-
succeeded:
|
|
128
|
-
errored:
|
|
127
|
+
start: SDKStateEnum.WAITING_FOR_ACTION,
|
|
128
|
+
succeeded: SDKStateEnum.COMPLETED,
|
|
129
|
+
errored: SDKStateEnum.ERROR_OCCURRED
|
|
129
130
|
};
|
|
130
131
|
|
|
131
132
|
/**
|
|
@@ -22,7 +22,9 @@ const {
|
|
|
22
22
|
Errors,
|
|
23
23
|
} = require('@mojaloop/sdk-standard-components');
|
|
24
24
|
const shared = require('./lib/shared');
|
|
25
|
-
const {
|
|
25
|
+
const { SDKStateEnum } = require('./common');
|
|
26
|
+
const FSPIOPTransferStateEnum = require('@mojaloop/central-services-shared').Enum.Transfers.TransferState;
|
|
27
|
+
const FSPIOPBulkTransferStateEnum = require('@mojaloop/central-services-shared').Enum.Transfers.BulkTransferState;
|
|
26
28
|
|
|
27
29
|
/**
|
|
28
30
|
* Models the operations required for performing inbound transfers
|
|
@@ -74,7 +76,7 @@ class InboundTransfersModel {
|
|
|
74
76
|
|
|
75
77
|
updateStateWithError(err) {
|
|
76
78
|
this.data.lastError = err;
|
|
77
|
-
this.data.currentState =
|
|
79
|
+
this.data.currentState = SDKStateEnum.ERROR_OCCURRED;
|
|
78
80
|
return this._save();
|
|
79
81
|
}
|
|
80
82
|
|
|
@@ -188,7 +190,7 @@ class InboundTransfersModel {
|
|
|
188
190
|
headers: request.headers,
|
|
189
191
|
body: request.body
|
|
190
192
|
},
|
|
191
|
-
currentState:
|
|
193
|
+
currentState: SDKStateEnum.QUOTE_REQUEST_RECEIVED,
|
|
192
194
|
initiatedTimestamp: new Date().toISOString(),
|
|
193
195
|
};
|
|
194
196
|
|
|
@@ -237,7 +239,7 @@ class InboundTransfersModel {
|
|
|
237
239
|
headers: res.originalRequest.headers,
|
|
238
240
|
body: res.originalRequest.body,
|
|
239
241
|
};
|
|
240
|
-
this.data.currentState =
|
|
242
|
+
this.data.currentState = SDKStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE;
|
|
241
243
|
await this._save();
|
|
242
244
|
return res;
|
|
243
245
|
}
|
|
@@ -342,7 +344,7 @@ class InboundTransfersModel {
|
|
|
342
344
|
|
|
343
345
|
// persist our state so we have a record if we crash during processing the prepare
|
|
344
346
|
this.data.prepare = request;
|
|
345
|
-
this.data.currentState =
|
|
347
|
+
this.data.currentState = SDKStateEnum.PREPARE_RECEIVED;
|
|
346
348
|
await this._save();
|
|
347
349
|
|
|
348
350
|
// Calculate or retrieve fulfilment and condition
|
|
@@ -390,7 +392,7 @@ class InboundTransfersModel {
|
|
|
390
392
|
// create a mojaloop transfer fulfil response
|
|
391
393
|
const mojaloopResponse = {
|
|
392
394
|
completedTimestamp: response.completedTimestamp || new Date(),
|
|
393
|
-
transferState: response.transferState || (this._reserveNotification ?
|
|
395
|
+
transferState: response.transferState || (this._reserveNotification ? FSPIOPTransferStateEnum.RESERVED : FSPIOPTransferStateEnum.COMMITTED),
|
|
394
396
|
fulfilment: response.fulfilment || fulfilment,
|
|
395
397
|
...response.extensionList && {
|
|
396
398
|
extensionList: {
|
|
@@ -406,7 +408,7 @@ class InboundTransfersModel {
|
|
|
406
408
|
headers: res.originalRequest.headers,
|
|
407
409
|
body: res.originalRequest.body,
|
|
408
410
|
};
|
|
409
|
-
this.data.currentState = response.transferState || (this._reserveNotification ?
|
|
411
|
+
this.data.currentState = response.transferState || (this._reserveNotification ? SDKStateEnum.RESERVED : SDKStateEnum.COMPLETED);
|
|
410
412
|
await this._save();
|
|
411
413
|
return res;
|
|
412
414
|
} catch(err) {
|
|
@@ -679,7 +681,7 @@ class InboundTransfersModel {
|
|
|
679
681
|
// create a mojaloop transfer fulfil response
|
|
680
682
|
const mojaloopResponse = {
|
|
681
683
|
completedTimestamp: new Date(),
|
|
682
|
-
bulkTransferState:
|
|
684
|
+
bulkTransferState: FSPIOPBulkTransferStateEnum.COMMITTED,
|
|
683
685
|
};
|
|
684
686
|
|
|
685
687
|
if (response.individualTransferResults && response.individualTransferResults.length) {
|
|
@@ -784,18 +786,18 @@ class InboundTransfersModel {
|
|
|
784
786
|
// tag the final notification body on to the state
|
|
785
787
|
this.data.finalNotification = body;
|
|
786
788
|
|
|
787
|
-
if(body.transferState ===
|
|
789
|
+
if(body.transferState === FSPIOPTransferStateEnum.COMMITTED) {
|
|
788
790
|
// if the transfer was successful in the switch, set the overall transfer state to COMPLETED
|
|
789
|
-
this.data.currentState =
|
|
791
|
+
this.data.currentState = SDKStateEnum.COMPLETED;
|
|
790
792
|
}
|
|
791
|
-
else if(body.transferState ===
|
|
793
|
+
else if(body.transferState === FSPIOPTransferStateEnum.ABORTED) {
|
|
792
794
|
// if the transfer was ABORTED in the switch, set the overall transfer state to ABORTED
|
|
793
|
-
this.data.currentState =
|
|
795
|
+
this.data.currentState = SDKStateEnum.ABORTED;
|
|
794
796
|
}
|
|
795
797
|
else {
|
|
796
798
|
// if the final notification has anything other than COMMITTED as the final state, set an error
|
|
797
799
|
// in the transfer state.
|
|
798
|
-
this.data.currentState =
|
|
800
|
+
this.data.currentState = SDKStateEnum.ERROR_OCCURED;
|
|
799
801
|
this.data.lastError = 'Final notification state not COMMITTED';
|
|
800
802
|
}
|
|
801
803
|
|
|
@@ -845,7 +847,7 @@ class InboundTransfersModel {
|
|
|
845
847
|
originalError: err.stack || util.inspect(err),
|
|
846
848
|
mojaloopError: mojaloopError,
|
|
847
849
|
};
|
|
848
|
-
this.data.currentState =
|
|
850
|
+
this.data.currentState = SDKStateEnum.ERROR_OCCURRED;
|
|
849
851
|
await this._save();
|
|
850
852
|
}
|
|
851
853
|
return mojaloopError;
|
|
@@ -17,10 +17,7 @@ const { MojaloopRequests } = require('@mojaloop/sdk-standard-components');
|
|
|
17
17
|
const shared = require('./lib/shared');
|
|
18
18
|
const { BackendError } = require('./common');
|
|
19
19
|
|
|
20
|
-
const
|
|
21
|
-
'ERROR_OCCURRED': 'ERROR_OCCURRED',
|
|
22
|
-
'COMPLETED': 'COMPLETED',
|
|
23
|
-
};
|
|
20
|
+
const { SDKStateEnum } = require('./common');
|
|
24
21
|
|
|
25
22
|
|
|
26
23
|
/**
|
|
@@ -381,16 +378,16 @@ class OutboundBulkQuotesModel {
|
|
|
381
378
|
|
|
382
379
|
switch(this.data.currentState) {
|
|
383
380
|
case 'succeeded':
|
|
384
|
-
resp.currentState =
|
|
381
|
+
resp.currentState = SDKStateEnum.COMPLETED;
|
|
385
382
|
break;
|
|
386
383
|
|
|
387
384
|
case 'errored':
|
|
388
|
-
resp.currentState =
|
|
385
|
+
resp.currentState = SDKStateEnum.ERROR_OCCURRED;
|
|
389
386
|
break;
|
|
390
387
|
|
|
391
388
|
default:
|
|
392
389
|
this._logger.log(`Bulk quote model response being returned from an unexpected state: ${this.data.currentState}. Returning ERROR_OCCURRED state`);
|
|
393
|
-
resp.currentState =
|
|
390
|
+
resp.currentState = SDKStateEnum.ERROR_OCCURRED;
|
|
394
391
|
break;
|
|
395
392
|
}
|
|
396
393
|
|