@mojaloop/sdk-scheme-adapter 17.0.1 → 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 +456 -171
- package/Dockerfile +4 -0
- package/audit-resolve.json +27 -68
- package/package.json +17 -16
- 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/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/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,99 +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":
|
|
55
|
+
"madeAt": 1657188203603,
|
|
56
|
+
"expiresAt": 1659780190646
|
|
98
57
|
}
|
|
99
58
|
},
|
|
100
59
|
"rules": {},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mojaloop/sdk-scheme-adapter",
|
|
3
|
-
"version": "17.0.
|
|
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": "resolve-audit --production",
|
|
15
|
-
"audit:check": "check-audit --production",
|
|
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
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,30 +78,30 @@
|
|
|
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
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
|
+
"standard-version": "^9.5.0",
|
|
104
105
|
"supertest": "^6.2.4",
|
|
105
106
|
"swagger-cli": "^4.0.4"
|
|
106
107
|
}
|
|
@@ -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
|
|
|
@@ -16,10 +16,7 @@ const StateMachine = require('javascript-state-machine');
|
|
|
16
16
|
const { MojaloopRequests } = 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
|
* Models the state machine and operations required for performing an outbound bulk transfer
|
|
@@ -373,16 +370,16 @@ class OutboundBulkTransfersModel {
|
|
|
373
370
|
|
|
374
371
|
switch(this.data.currentState) {
|
|
375
372
|
case 'succeeded':
|
|
376
|
-
resp.currentState =
|
|
373
|
+
resp.currentState = SDKStateEnum.COMPLETED;
|
|
377
374
|
break;
|
|
378
375
|
|
|
379
376
|
case 'errored':
|
|
380
|
-
resp.currentState =
|
|
377
|
+
resp.currentState = SDKStateEnum.ERROR_OCCURRED;
|
|
381
378
|
break;
|
|
382
379
|
|
|
383
380
|
default:
|
|
384
381
|
this._logger.log(`Bulk transfer model response being returned from an unexpected state: ${this.data.currentState}. Returning ERROR_OCCURRED state`);
|
|
385
|
-
resp.currentState =
|
|
382
|
+
resp.currentState = SDKStateEnum.ERROR_OCCURRED;
|
|
386
383
|
break;
|
|
387
384
|
}
|
|
388
385
|
|
|
@@ -17,12 +17,7 @@ const { MojaloopRequests } = require('@mojaloop/sdk-standard-components');
|
|
|
17
17
|
const { BackendError } = require('./common');
|
|
18
18
|
const PartiesModel = require('./PartiesModel');
|
|
19
19
|
|
|
20
|
-
const
|
|
21
|
-
'WAITING_FOR_PARTY_ACCEPTANCE': 'WAITING_FOR_PARTY_ACCEPTANCE',
|
|
22
|
-
'WAITING_FOR_QUOTE_ACCEPTANCE': 'WAITING_FOR_QUOTE_ACCEPTANCE',
|
|
23
|
-
'ERROR_OCCURRED': 'ERROR_OCCURRED',
|
|
24
|
-
'COMPLETED': 'COMPLETED',
|
|
25
|
-
};
|
|
20
|
+
const { SDKStateEnum } = require('./common');
|
|
26
21
|
|
|
27
22
|
class OutboundRequestToPayModel {
|
|
28
23
|
|
|
@@ -480,20 +475,20 @@ class OutboundRequestToPayModel {
|
|
|
480
475
|
|
|
481
476
|
switch(this.data.currentState) {
|
|
482
477
|
case 'payeeResolved':
|
|
483
|
-
resp.currentState =
|
|
478
|
+
resp.currentState = SDKStateEnum.WAITING_FOR_PARTY_ACCEPTANCE;
|
|
484
479
|
break;
|
|
485
480
|
|
|
486
481
|
case 'succeeded':
|
|
487
|
-
resp.currentState =
|
|
482
|
+
resp.currentState = SDKStateEnum.COMPLETED;
|
|
488
483
|
break;
|
|
489
484
|
|
|
490
485
|
case 'errored':
|
|
491
|
-
resp.currentState =
|
|
486
|
+
resp.currentState = SDKStateEnum.ERROR_OCCURRED;
|
|
492
487
|
break;
|
|
493
488
|
|
|
494
489
|
default:
|
|
495
490
|
this._logger.log(`Transaction Request model response being returned from an unexpected state: ${this.data.currentState}. Returning ERROR_OCCURRED state`);
|
|
496
|
-
resp.currentState =
|
|
491
|
+
resp.currentState = SDKStateEnum.ERROR_OCCURRED;
|
|
497
492
|
break;
|
|
498
493
|
}
|
|
499
494
|
|
|
@@ -18,13 +18,7 @@ const shared = require('./lib/shared');
|
|
|
18
18
|
const { BackendError } = require('./common');
|
|
19
19
|
const PartiesModel = require('./PartiesModel');
|
|
20
20
|
|
|
21
|
-
const
|
|
22
|
-
'WAITING_FOR_QUOTE_ACCEPTANCE': 'WAITING_FOR_QUOTE_ACCEPTANCE',
|
|
23
|
-
'WAITING_FOR_OTP_ACCEPTANCE': 'WAITING_FOR_OTP_ACCEPTANCE',
|
|
24
|
-
'ERROR_OCCURRED': 'ERROR_OCCURRED',
|
|
25
|
-
'COMPLETED': 'COMPLETED',
|
|
26
|
-
};
|
|
27
|
-
|
|
21
|
+
const { SDKStateEnum } = require('./common');
|
|
28
22
|
|
|
29
23
|
/**
|
|
30
24
|
* Models the state machine and operations required for performing an outbound transfer
|
|
@@ -826,24 +820,24 @@ class OutboundRequestToPayTransferModel {
|
|
|
826
820
|
|
|
827
821
|
switch(this.data.currentState) {
|
|
828
822
|
case 'quoteReceived':
|
|
829
|
-
resp.currentState =
|
|
823
|
+
resp.currentState = SDKStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE;
|
|
830
824
|
break;
|
|
831
825
|
|
|
832
826
|
case 'otpReceived':
|
|
833
|
-
resp.currentState =
|
|
827
|
+
resp.currentState = SDKStateEnum.WAITING_FOR_OTP_ACCEPTANCE;
|
|
834
828
|
break;
|
|
835
829
|
|
|
836
830
|
case 'succeeded':
|
|
837
|
-
resp.currentState =
|
|
831
|
+
resp.currentState = SDKStateEnum.COMPLETED;
|
|
838
832
|
break;
|
|
839
833
|
|
|
840
834
|
case 'errored':
|
|
841
|
-
resp.currentState =
|
|
835
|
+
resp.currentState = SDKStateEnum.ERROR_OCCURRED;
|
|
842
836
|
break;
|
|
843
837
|
|
|
844
838
|
default:
|
|
845
839
|
this._logger.log(`Transfer model response being returned from an unexpected state: ${this.data.currentState}. Returning ERROR_OCCURRED state`);
|
|
846
|
-
resp.currentState =
|
|
840
|
+
resp.currentState = SDKStateEnum.ERROR_OCCURRED;
|
|
847
841
|
break;
|
|
848
842
|
}
|
|
849
843
|
|
|
@@ -15,7 +15,8 @@ const { uuid } = require('uuidv4');
|
|
|
15
15
|
const StateMachine = require('javascript-state-machine');
|
|
16
16
|
const { Ilp, MojaloopRequests } = require('@mojaloop/sdk-standard-components');
|
|
17
17
|
const shared = require('./lib/shared');
|
|
18
|
-
const { BackendError,
|
|
18
|
+
const { BackendError, SDKStateEnum } = require('./common');
|
|
19
|
+
const FSPIOPTransferStateEnum = require('@mojaloop/central-services-shared').Enum.Transfers.TransferState;
|
|
19
20
|
const PartiesModel = require('./PartiesModel');
|
|
20
21
|
|
|
21
22
|
/**
|
|
@@ -685,7 +686,7 @@ class OutboundTransfersModel {
|
|
|
685
686
|
if(this._checkIlp && !this._ilp.validateFulfil(fulfil.body.fulfilment, this.data.quoteResponse.body.condition)) {
|
|
686
687
|
throw new Error('Invalid fulfilment received from peer DFSP.');
|
|
687
688
|
}
|
|
688
|
-
if(this._sendFinalNotificationIfRequested && fulfil.body.transferState ===
|
|
689
|
+
if(this._sendFinalNotificationIfRequested && fulfil.body.transferState === FSPIOPTransferStateEnum.RESERVED) {
|
|
689
690
|
// we need to send a PATCH notification back to say we have committed the transfer.
|
|
690
691
|
// Note that this is normally a switch only responsibility but the capability is
|
|
691
692
|
// implemented here to support testing use cases where the mojaloop-connector is
|
|
@@ -695,7 +696,7 @@ class OutboundTransfersModel {
|
|
|
695
696
|
// we will use the current server time as committed timestamp.
|
|
696
697
|
const patchNotification = {
|
|
697
698
|
completedTimestamp: (new Date()).toISOString(),
|
|
698
|
-
transferState:
|
|
699
|
+
transferState: FSPIOPTransferStateEnum.COMMITTED,
|
|
699
700
|
};
|
|
700
701
|
const res = this._requests.patchTransfers(this.data.transferId,
|
|
701
702
|
patchNotification, this.data.quoteResponseSource);
|
|
@@ -885,28 +886,28 @@ class OutboundTransfersModel {
|
|
|
885
886
|
|
|
886
887
|
switch(this.data.currentState) {
|
|
887
888
|
case 'payeeResolved':
|
|
888
|
-
resp.currentState =
|
|
889
|
+
resp.currentState = SDKStateEnum.WAITING_FOR_PARTY_ACCEPTANCE;
|
|
889
890
|
break;
|
|
890
891
|
|
|
891
892
|
case 'quoteReceived':
|
|
892
|
-
resp.currentState =
|
|
893
|
+
resp.currentState = SDKStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE;
|
|
893
894
|
break;
|
|
894
895
|
|
|
895
896
|
case 'succeeded':
|
|
896
|
-
resp.currentState =
|
|
897
|
+
resp.currentState = SDKStateEnum.COMPLETED;
|
|
897
898
|
break;
|
|
898
899
|
|
|
899
900
|
case 'aborted':
|
|
900
|
-
resp.currentState =
|
|
901
|
+
resp.currentState = SDKStateEnum.ABORTED;
|
|
901
902
|
break;
|
|
902
903
|
|
|
903
904
|
case 'errored':
|
|
904
|
-
resp.currentState =
|
|
905
|
+
resp.currentState = SDKStateEnum.ERROR_OCCURRED;
|
|
905
906
|
break;
|
|
906
907
|
|
|
907
908
|
default:
|
|
908
909
|
this._logger.log(`Transfer model response being returned from an unexpected state: ${this.data.currentState}. Returning ERROR_OCCURRED state`);
|
|
909
|
-
resp.currentState =
|
|
910
|
+
resp.currentState = SDKStateEnum.ERROR_OCCURRED;
|
|
910
911
|
break;
|
|
911
912
|
}
|
|
912
913
|
|
|
@@ -10,17 +10,6 @@
|
|
|
10
10
|
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
const TransferStateEnum = {
|
|
14
|
-
'WAITING_FOR_PARTY_ACCEPTANCE': 'WAITING_FOR_PARTY_ACCEPTANCE',
|
|
15
|
-
'QUOTE_REQUEST_RECEIVED': 'QUOTE_REQUEST_RECEIVED',
|
|
16
|
-
'WAITING_FOR_QUOTE_ACCEPTANCE': 'WAITING_FOR_QUOTE_ACCEPTANCE',
|
|
17
|
-
'PREPARE_RECEIVED': 'PREPARE_RECEIVED',
|
|
18
|
-
'ERROR_OCCURRED': 'ERROR_OCCURRED',
|
|
19
|
-
'COMPLETED': 'COMPLETED',
|
|
20
|
-
'ABORTED': 'ABORTED',
|
|
21
|
-
'RESERVED': 'RESERVED',
|
|
22
|
-
};
|
|
23
|
-
|
|
24
13
|
class BackendError extends Error {
|
|
25
14
|
constructor(msg, httpStatusCode) {
|
|
26
15
|
super(msg);
|
|
@@ -45,6 +34,5 @@ class BackendError extends Error {
|
|
|
45
34
|
|
|
46
35
|
|
|
47
36
|
module.exports = {
|
|
48
|
-
BackendError
|
|
49
|
-
TransferStateEnum,
|
|
37
|
+
BackendError
|
|
50
38
|
};
|