@substrate/api-sidecar 12.0.1 → 12.1.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.
- package/build/package.json +4 -4
- package/build/src/controllers/node/NodeTransactionPoolController.d.ts +6 -2
- package/build/src/controllers/node/NodeTransactionPoolController.js +9 -4
- package/build/src/controllers/node/NodeTransactionPoolController.js.map +1 -1
- package/build/src/logging/transports/consoleTransport.js +1 -1
- package/build/src/logging/transports/consoleTransport.js.map +1 -1
- package/build/src/middleware/error/errorMiddleware.spec.js +4 -0
- package/build/src/middleware/error/errorMiddleware.spec.js.map +1 -1
- package/build/src/middleware/error/httpErrorMiddleware.spec.js +4 -0
- package/build/src/middleware/error/httpErrorMiddleware.spec.js.map +1 -1
- package/build/src/middleware/error/internalErrorMiddleware.spec.js +4 -0
- package/build/src/middleware/error/internalErrorMiddleware.spec.js.map +1 -1
- package/build/src/middleware/error/legacyErrorMiddleware.spec.js +4 -0
- package/build/src/middleware/error/legacyErrorMiddleware.spec.js.map +1 -1
- package/build/src/middleware/error/txErrorMiddleware.spec.js +4 -0
- package/build/src/middleware/error/txErrorMiddleware.spec.js.map +1 -1
- package/build/src/services/node/NodeTransactionPoolService.d.ts +43 -1
- package/build/src/services/node/NodeTransactionPoolService.js +129 -6
- package/build/src/services/node/NodeTransactionPoolService.js.map +1 -1
- package/build/src/services/node/NodeTransactionPoolService.spec.js +31 -4
- package/build/src/services/node/NodeTransactionPoolService.spec.js.map +1 -1
- package/build/src/types/responses/NodeTransactionPool.d.ts +20 -0
- package/package.json +4 -4
package/build/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "12.0
|
|
2
|
+
"version": "12.1.0",
|
|
3
3
|
"name": "@substrate/api-sidecar",
|
|
4
4
|
"description": "REST service that makes it easy to interact with blockchain nodes built using Substrate's FRAME framework.",
|
|
5
5
|
"homepage": "https://github.com/paritytech/substrate-api-sidecar#readme",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"start:log-rpc": "yarn run build && NODE_ENV=test yarn run main ",
|
|
36
36
|
"dev": "tsc-watch --onSuccess \"yarn run main\"",
|
|
37
37
|
"test": "NODE_ENV=test substrate-exec-jest --detectOpenHandles",
|
|
38
|
-
"test:watch": "substrate-exec-jest --watch",
|
|
38
|
+
"test:watch": "NODE_ENV=test substrate-exec-jest --watch",
|
|
39
39
|
"test:cov": "NODE_ENV=test substrate-exec-jest --detectOpenHandles --coverage",
|
|
40
40
|
"lint:e2e-tests": "cd e2e-tests && substrate-dev-run-lint",
|
|
41
41
|
"build:e2e-tests": "substrate-exec-tsc --project e2e-tests/tsconfig.json",
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
"update-pjs-deps": "substrate-update-pjs-deps && yarn"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@polkadot/api": "8.
|
|
58
|
-
"@polkadot/util-crypto": "9.
|
|
57
|
+
"@polkadot/api": "^8.7.1",
|
|
58
|
+
"@polkadot/util-crypto": "^9.4.1",
|
|
59
59
|
"@substrate/calc": "^0.2.8",
|
|
60
60
|
"argparse": "^2.0.1",
|
|
61
61
|
"confmgr": "1.0.7",
|
|
@@ -8,14 +8,18 @@ import AbstractController from '../AbstractController';
|
|
|
8
8
|
* - `pool`: array of
|
|
9
9
|
* - `hash`: H256 hash of the extrinsic.
|
|
10
10
|
* - `encodedExtrinsic`: Scale encoded extrinsic.
|
|
11
|
+
* - `tip`: Tip included into the extrinsic. Available when the `includeFee` query param is set to true.
|
|
12
|
+
* - `priority`: Priority of the transaction. Calculated by tip * (max_block_{weight|length} / bounded_{weight|length}).
|
|
13
|
+
* Available when the `includeFee` query param is set to true.
|
|
14
|
+
* - `partialFee`: PartialFee for a transaction. Available when the `includeFee` query param is set to true.
|
|
11
15
|
*/
|
|
12
16
|
export default class NodeTransactionPoolController extends AbstractController<NodeTransactionPoolService> {
|
|
13
17
|
constructor(api: ApiPromise);
|
|
14
18
|
protected initRoutes(): void;
|
|
15
19
|
/**
|
|
16
|
-
|
|
20
|
+
* GET pending extrinsics from the Substrate node.
|
|
17
21
|
*
|
|
18
|
-
* @param
|
|
22
|
+
* @param req Express Request, accepts the query param `includeFee`
|
|
19
23
|
* @param res Express Response
|
|
20
24
|
*/
|
|
21
25
|
private getNodeTransactionPool;
|
|
@@ -27,18 +27,23 @@ const AbstractController_1 = __importDefault(require("../AbstractController"));
|
|
|
27
27
|
* - `pool`: array of
|
|
28
28
|
* - `hash`: H256 hash of the extrinsic.
|
|
29
29
|
* - `encodedExtrinsic`: Scale encoded extrinsic.
|
|
30
|
+
* - `tip`: Tip included into the extrinsic. Available when the `includeFee` query param is set to true.
|
|
31
|
+
* - `priority`: Priority of the transaction. Calculated by tip * (max_block_{weight|length} / bounded_{weight|length}).
|
|
32
|
+
* Available when the `includeFee` query param is set to true.
|
|
33
|
+
* - `partialFee`: PartialFee for a transaction. Available when the `includeFee` query param is set to true.
|
|
30
34
|
*/
|
|
31
35
|
class NodeTransactionPoolController extends AbstractController_1.default {
|
|
32
36
|
constructor(api) {
|
|
33
37
|
super(api, '/node/transaction-pool', new services_1.NodeTransactionPoolService(api));
|
|
34
38
|
/**
|
|
35
|
-
|
|
39
|
+
* GET pending extrinsics from the Substrate node.
|
|
36
40
|
*
|
|
37
|
-
* @param
|
|
41
|
+
* @param req Express Request, accepts the query param `includeFee`
|
|
38
42
|
* @param res Express Response
|
|
39
43
|
*/
|
|
40
|
-
this.getNodeTransactionPool = async (
|
|
41
|
-
|
|
44
|
+
this.getNodeTransactionPool = async ({ query: { includeFee } }, res) => {
|
|
45
|
+
const shouldIncludeFee = includeFee === 'true';
|
|
46
|
+
NodeTransactionPoolController.sanitizedSend(res, await this.service.fetchTransactionPool(shouldIncludeFee));
|
|
42
47
|
};
|
|
43
48
|
this.initRoutes();
|
|
44
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeTransactionPoolController.js","sourceRoot":"","sources":["../../../../src/controllers/node/NodeTransactionPoolController.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;;;AAKxE,6CAA4D;AAC5D,+EAAuD;AAEvD
|
|
1
|
+
{"version":3,"file":"NodeTransactionPoolController.js","sourceRoot":"","sources":["../../../../src/controllers/node/NodeTransactionPoolController.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;;;AAKxE,6CAA4D;AAC5D,+EAAuD;AAEvD;;;;;;;;;;;GAWG;AACH,MAAqB,6BAA8B,SAAQ,4BAA8C;IACxG,YAAY,GAAe;QAC1B,KAAK,CAAC,GAAG,EAAE,wBAAwB,EAAE,IAAI,qCAA0B,CAAC,GAAG,CAAC,CAAC,CAAC;QAQ3E;;;;;WAKG;QACK,2BAAsB,GAAmB,KAAK,EACrD,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EACzB,GAAG,EACa,EAAE;YAClB,MAAM,gBAAgB,GAAG,UAAU,KAAK,MAAM,CAAC;YAE/C,6BAA6B,CAAC,aAAa,CAC1C,GAAG,EACH,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CACzD,CAAC;QACH,CAAC,CAAC;QAvBD,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;IAES,UAAU;QACnB,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;CAmBD;AA3BD,gDA2BC"}
|
|
@@ -52,7 +52,7 @@ function consoleTransport() {
|
|
|
52
52
|
handleExceptions: true,
|
|
53
53
|
format: winston_1.format.combine(...transformers),
|
|
54
54
|
// Silence using `jest --silent`
|
|
55
|
-
silent: process.
|
|
55
|
+
silent: process.env.NODE_ENV === 'test',
|
|
56
56
|
});
|
|
57
57
|
}
|
|
58
58
|
exports.consoleTransport = consoleTransport;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consoleTransport.js","sourceRoot":"","sources":["../../../../src/logging/transports/consoleTransport.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;AAGxE,qCAA6C;AAE7C,uDAAoD;AACpD,kDAMyB;AAEzB;;GAEG;AACH,SAAgB,gBAAgB;IAC/B,MAAM,EACL,MAAM,EAAE,EAAE,GAAG,EAAE,GACf,GAAG,6BAAa,CAAC;IAClB;;OAEG;IACH,MAAM,WAAW,GAAG,gBAAM,CAAC,MAAM,CAAC,CAAC,IAAuB,EAAE,EAAE;QAC7D,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE;YAChB,yEAAyE;YACzE,OAAO,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAmB,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,KACjD,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OACP,OAAO,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAe,EAAE,CAAC;SAC/B;QAED,OAAO,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAmB,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,KAAK,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,EAAE,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,CAAC,IAAA,6BAAc,GAAE,EAAE,IAAA,6BAAc,GAAE,EAAE,wBAAS,CAAC,CAAC;IAErE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;QACd,YAAY,CAAC,IAAI,CAAC,gBAAM,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAC,CAAC;KAClD;SAAM;QACN,YAAY,CAAC,IAAI,CAAC,gBAAM,CAAC,WAAW,EAAE,CAAC,CAAC;KACxC;IAED,IAAI,GAAG,CAAC,UAAU,EAAE;QACnB,YAAY,CAAC,OAAO,CAAC,IAAA,wBAAS,GAAE,CAAC,CAAC;KAClC;IAED,IAAI,GAAG,CAAC,UAAU,EAAE;QACnB,YAAY,CAAC,OAAO,CAAC,IAAA,2BAAY,GAAE,CAAC,CAAC;KACrC;IAED,OAAO,IAAI,oBAAU,CAAC,OAAO,CAAC;QAC7B,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM;QAC1B,gBAAgB,EAAE,IAAI;QACtB,MAAM,EAAE,gBAAM,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC;QACvC,gCAAgC;QAChC,MAAM,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"consoleTransport.js","sourceRoot":"","sources":["../../../../src/logging/transports/consoleTransport.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;AAGxE,qCAA6C;AAE7C,uDAAoD;AACpD,kDAMyB;AAEzB;;GAEG;AACH,SAAgB,gBAAgB;IAC/B,MAAM,EACL,MAAM,EAAE,EAAE,GAAG,EAAE,GACf,GAAG,6BAAa,CAAC;IAClB;;OAEG;IACH,MAAM,WAAW,GAAG,gBAAM,CAAC,MAAM,CAAC,CAAC,IAAuB,EAAE,EAAE;QAC7D,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE;YAChB,yEAAyE;YACzE,OAAO,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAmB,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,KACjD,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OACP,OAAO,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAe,EAAE,CAAC;SAC/B;QAED,OAAO,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAmB,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,KAAK,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,EAAE,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,CAAC,IAAA,6BAAc,GAAE,EAAE,IAAA,6BAAc,GAAE,EAAE,wBAAS,CAAC,CAAC;IAErE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;QACd,YAAY,CAAC,IAAI,CAAC,gBAAM,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAC,CAAC;KAClD;SAAM;QACN,YAAY,CAAC,IAAI,CAAC,gBAAM,CAAC,WAAW,EAAE,CAAC,CAAC;KACxC;IAED,IAAI,GAAG,CAAC,UAAU,EAAE;QACnB,YAAY,CAAC,OAAO,CAAC,IAAA,wBAAS,GAAE,CAAC,CAAC;KAClC;IAED,IAAI,GAAG,CAAC,UAAU,EAAE;QACnB,YAAY,CAAC,OAAO,CAAC,IAAA,2BAAY,GAAE,CAAC,CAAC;KACrC;IAED,OAAO,IAAI,oBAAU,CAAC,OAAO,CAAC;QAC7B,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM;QAC1B,gBAAgB,EAAE,IAAI;QACtB,MAAM,EAAE,gBAAM,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC;QACvC,gCAAgC;QAChC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM;KACvC,CAAC,CAAC;AACJ,CAAC;AAzCD,4CAyCC"}
|
|
@@ -21,6 +21,10 @@ const testTools_1 = require("./testTools");
|
|
|
21
21
|
const errorMiddlewareCallsNextWithErr = (0, testTools_1.callsNextWithErr)(errorMiddleware_1.errorMiddleware);
|
|
22
22
|
const errorMiddlewareCatchesErrWithStatus = (0, testTools_1.catchesErrWithStatus)(errorMiddleware_1.errorMiddleware);
|
|
23
23
|
describe('errorMiddleware', () => {
|
|
24
|
+
// Necessary since the consolveOverride is called after the getter for the logger is launced
|
|
25
|
+
beforeAll(() => {
|
|
26
|
+
jest.spyOn(console, 'log').mockImplementation(() => ({}));
|
|
27
|
+
});
|
|
24
28
|
errorMiddlewareCallsNextWithErr('ILegacyError', {
|
|
25
29
|
error: 'legacy error',
|
|
26
30
|
statusCode: 500,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorMiddleware.spec.js","sourceRoot":"","sources":["../../../../src/middleware/error/errorMiddleware.spec.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;AAExE,6CAA8D;AAE9D,uDAAoD;AACpD,2CAIqB;AAErB,MAAM,+BAA+B,GAAG,IAAA,4BAAgB,EAAC,iCAAe,CAAC,CAAC;AAE1E,MAAM,mCAAmC,GACxC,IAAA,gCAAoB,EAAC,iCAAe,CAAC,CAAC;AAEvC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAChC,+BAA+B,CAAC,cAAc,EAAE;QAC/C,KAAK,EAAE,cAAc;QACrB,UAAU,EAAE,GAAG;KACf,CAAC,CAAC;IAEH,+BAA+B,CAAC,aAAa,EAAE;QAC9C,KAAK,EAAE,aAAa;KACpB,CAAC,CAAC;IAEH,+BAA+B,CAAC,gBAAgB,EAAE;QACjD,IAAI,EAAE,2BAA2B;QACjC,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,UAAU;KACjB,CAAC,CAAC;IAEH,+BAA+B,CAAC,iBAAiB,EAAE;QAClD,oBAAoB,EAAE,KAAK;KAC3B,CAAC,CAAC;IAEH,mCAAmC,CAClC,OAAO,EACP,IAAI,KAAK,CAAC,kBAAkB,CAAC,EAC7B,GAAG,CACH,CAAC;IAEF,mCAAmC,CAClC,wEAAwE,EACxE,IAAI,wBAAU,CAAC,aAAa,CAAC,EAC7B,GAAG,CACH,CAAC;IAEF,mCAAmC,CAClC,sDAAsD,EACtD,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,EACzC,GAAG,CACH,CAAC;IAEF,IAAA,oCAAwB,EAAC,iCAAe,EAAE,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC1E,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"errorMiddleware.spec.js","sourceRoot":"","sources":["../../../../src/middleware/error/errorMiddleware.spec.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;AAExE,6CAA8D;AAE9D,uDAAoD;AACpD,2CAIqB;AAErB,MAAM,+BAA+B,GAAG,IAAA,4BAAgB,EAAC,iCAAe,CAAC,CAAC;AAE1E,MAAM,mCAAmC,GACxC,IAAA,gCAAoB,EAAC,iCAAe,CAAC,CAAC;AAEvC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAChC,4FAA4F;IAC5F,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,+BAA+B,CAAC,cAAc,EAAE;QAC/C,KAAK,EAAE,cAAc;QACrB,UAAU,EAAE,GAAG;KACf,CAAC,CAAC;IAEH,+BAA+B,CAAC,aAAa,EAAE;QAC9C,KAAK,EAAE,aAAa;KACpB,CAAC,CAAC;IAEH,+BAA+B,CAAC,gBAAgB,EAAE;QACjD,IAAI,EAAE,2BAA2B;QACjC,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,UAAU;KACjB,CAAC,CAAC;IAEH,+BAA+B,CAAC,iBAAiB,EAAE;QAClD,oBAAoB,EAAE,KAAK;KAC3B,CAAC,CAAC;IAEH,mCAAmC,CAClC,OAAO,EACP,IAAI,KAAK,CAAC,kBAAkB,CAAC,EAC7B,GAAG,CACH,CAAC;IAEF,mCAAmC,CAClC,wEAAwE,EACxE,IAAI,wBAAU,CAAC,aAAa,CAAC,EAC7B,GAAG,CACH,CAAC;IAEF,mCAAmC,CAClC,sDAAsD,EACtD,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,EACzC,GAAG,CACH,CAAC;IAEF,IAAA,oCAAwB,EAAC,iCAAe,EAAE,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC1E,CAAC,CAAC,CAAC"}
|
|
@@ -25,6 +25,10 @@ const testTools_1 = require("./testTools");
|
|
|
25
25
|
const httpErrorMiddlewareCallsNextWithErr = (0, testTools_1.callsNextWithErr)(httpErrorMiddleware_1.httpErrorMiddleware);
|
|
26
26
|
const httpErrorMiddlewareCatchesErrWithStatus = (0, testTools_1.catchesErrWithStatus)(httpErrorMiddleware_1.httpErrorMiddleware);
|
|
27
27
|
describe('httpErrorMiddleware', () => {
|
|
28
|
+
// Necessary since the consolveOverride is called after the getter for the logger is launced
|
|
29
|
+
beforeAll(() => {
|
|
30
|
+
jest.spyOn(console, 'log').mockImplementation(() => ({}));
|
|
31
|
+
});
|
|
28
32
|
httpErrorMiddlewareCallsNextWithErr('Error', new Error('This is an error'));
|
|
29
33
|
httpErrorMiddlewareCallsNextWithErr('IBasicError', {
|
|
30
34
|
error: 'basic error',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpErrorMiddleware.spec.js","sourceRoot":"","sources":["../../../../src/middleware/error/httpErrorMiddleware.spec.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;;;AAExE,8DAA+C;AAC/C,6CAA8D;AAE9D,+DAA4D;AAC5D,2CAIqB;AAErB,MAAM,mCAAmC,GACxC,IAAA,4BAAgB,EAAC,yCAAmB,CAAC,CAAC;AAEvC,MAAM,uCAAuC,GAC5C,IAAA,gCAAoB,EAAC,yCAAmB,CAAC,CAAC;AAE3C,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACpC,mCAAmC,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAE5E,mCAAmC,CAAC,aAAa,EAAE;QAClD,KAAK,EAAE,aAAa;KACpB,CAAC,CAAC;IAEH,mCAAmC,CAAC,cAAc,EAAE;QACnD,KAAK,EAAE,cAAc;QACrB,UAAU,EAAE,GAAG;KACf,CAAC,CAAC;IAEH,mCAAmC,CAAC,gBAAgB,EAAE;QACrD,IAAI,EAAE,2BAA2B;QACjC,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,UAAU;KACjB,CAAC,CAAC;IAEH,mCAAmC,CAAC,iBAAiB,EAAE;QACtD,oBAAoB,EAAE,KAAK;KAC3B,CAAC,CAAC;IAEH,uCAAuC,CACtC,0BAA0B,EAC1B,IAAA,qBAAoB,EAAC,GAAG,EAAE,aAAa,CAAC,EACxC,GAAG,CACH,CAAC;IAEF,uCAAuC,CACtC,YAAY,EACZ,IAAI,wBAAU,CAAC,aAAa,CAAC,EAC7B,GAAG,CACH,CAAC;IAEF,uCAAuC,CACtC,qBAAqB,EACrB,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,EACzC,GAAG,CACH,CAAC;IAEF,IAAA,oCAAwB,EACvB,yCAAmB,EACnB,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"httpErrorMiddleware.spec.js","sourceRoot":"","sources":["../../../../src/middleware/error/httpErrorMiddleware.spec.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;;;AAExE,8DAA+C;AAC/C,6CAA8D;AAE9D,+DAA4D;AAC5D,2CAIqB;AAErB,MAAM,mCAAmC,GACxC,IAAA,4BAAgB,EAAC,yCAAmB,CAAC,CAAC;AAEvC,MAAM,uCAAuC,GAC5C,IAAA,gCAAoB,EAAC,yCAAmB,CAAC,CAAC;AAE3C,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACpC,4FAA4F;IAC5F,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,mCAAmC,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAE5E,mCAAmC,CAAC,aAAa,EAAE;QAClD,KAAK,EAAE,aAAa;KACpB,CAAC,CAAC;IAEH,mCAAmC,CAAC,cAAc,EAAE;QACnD,KAAK,EAAE,cAAc;QACrB,UAAU,EAAE,GAAG;KACf,CAAC,CAAC;IAEH,mCAAmC,CAAC,gBAAgB,EAAE;QACrD,IAAI,EAAE,2BAA2B;QACjC,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,UAAU;KACjB,CAAC,CAAC;IAEH,mCAAmC,CAAC,iBAAiB,EAAE;QACtD,oBAAoB,EAAE,KAAK;KAC3B,CAAC,CAAC;IAEH,uCAAuC,CACtC,0BAA0B,EAC1B,IAAA,qBAAoB,EAAC,GAAG,EAAE,aAAa,CAAC,EACxC,GAAG,CACH,CAAC;IAEF,uCAAuC,CACtC,YAAY,EACZ,IAAI,wBAAU,CAAC,aAAa,CAAC,EAC7B,GAAG,CACH,CAAC;IAEF,uCAAuC,CACtC,qBAAqB,EACrB,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,EACzC,GAAG,CACH,CAAC;IAEF,IAAA,oCAAwB,EACvB,yCAAmB,EACnB,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -24,6 +24,10 @@ const internalErrorMiddleware_1 = require("./internalErrorMiddleware");
|
|
|
24
24
|
const testTools_1 = require("./testTools");
|
|
25
25
|
const internalErrorMiddlewareCatchesErrWithResponse = (0, testTools_1.catchesErrWithResponse)(internalErrorMiddleware_1.internalErrorMiddleware);
|
|
26
26
|
describe('internalErrorMiddleware', () => {
|
|
27
|
+
// Necessary since the consolveOverride is called after the getter for the logger is launced
|
|
28
|
+
beforeAll(() => {
|
|
29
|
+
jest.spyOn(console, 'log').mockImplementation(() => ({}));
|
|
30
|
+
});
|
|
27
31
|
internalErrorMiddlewareCatchesErrWithResponse('ITxLegacyError', {
|
|
28
32
|
data: 'tx could not be processed',
|
|
29
33
|
cause: 'unknown',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internalErrorMiddleware.spec.js","sourceRoot":"","sources":["../../../../src/middleware/error/internalErrorMiddleware.spec.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;;;AAExE,6CAA8D;AAC9D,8DAA+C;AAE/C,uEAAoE;AACpE,2CAA+E;AAE/E,MAAM,6CAA6C,GAAG,IAAA,kCAAsB,EAC3E,iDAAuB,CACvB,CAAC;AAEF,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACxC,6CAA6C,CAC5C,gBAAgB,EAChB;QACC,IAAI,EAAE,2BAA2B;QACjC,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,UAAU;KACjB,EACD,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,aAAa,EACb;QACC,KAAK,EAAE,aAAa;KACpB,EACD,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,cAAc,EACd;QACC,KAAK,EAAE,gCAAgC;QACvC,UAAU,EAAE,GAAG;KACf,EACD,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,OAAO,EACP,IAAI,KAAK,CAAC,kBAAkB,CAAC,EAC7B,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,YAAY,EACZ,IAAI,wBAAU,CAAC,aAAa,CAAC,EAC7B,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,qBAAqB,EACrB,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,EACzC,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,0BAA0B,EAC1B,IAAA,qBAAoB,EAAC,GAAG,EAAE,aAAa,CAAC,EACxC,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,QAAQ,EACR,OAAO,EACP,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,MAAM,EACN,IAAI,EACJ,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,WAAW,EACX,SAAS,EACT,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,IAAI,EACJ,CAAC,CAAC,EACF,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,eAAe,EACf,EAAE,OAAO,EAAE,uBAAuB,EAAE,EACpC,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,IAAA,oCAAwB,EAAC,iDAAuB,EAAE;QACjD,EAAE,GAAG,EAAE,qBAAqB,EAAE;KAC9B,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"internalErrorMiddleware.spec.js","sourceRoot":"","sources":["../../../../src/middleware/error/internalErrorMiddleware.spec.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;;;AAExE,6CAA8D;AAC9D,8DAA+C;AAE/C,uEAAoE;AACpE,2CAA+E;AAE/E,MAAM,6CAA6C,GAAG,IAAA,kCAAsB,EAC3E,iDAAuB,CACvB,CAAC;AAEF,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACxC,4FAA4F;IAC5F,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,6CAA6C,CAC5C,gBAAgB,EAChB;QACC,IAAI,EAAE,2BAA2B;QACjC,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,UAAU;KACjB,EACD,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,aAAa,EACb;QACC,KAAK,EAAE,aAAa;KACpB,EACD,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,cAAc,EACd;QACC,KAAK,EAAE,gCAAgC;QACvC,UAAU,EAAE,GAAG;KACf,EACD,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,OAAO,EACP,IAAI,KAAK,CAAC,kBAAkB,CAAC,EAC7B,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,YAAY,EACZ,IAAI,wBAAU,CAAC,aAAa,CAAC,EAC7B,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,qBAAqB,EACrB,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,EACzC,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,0BAA0B,EAC1B,IAAA,qBAAoB,EAAC,GAAG,EAAE,aAAa,CAAC,EACxC,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,QAAQ,EACR,OAAO,EACP,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,MAAM,EACN,IAAI,EACJ,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,WAAW,EACX,SAAS,EACT,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,IAAI,EACJ,CAAC,CAAC,EACF,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,6CAA6C,CAC5C,eAAe,EACf,EAAE,OAAO,EAAE,uBAAuB,EAAE,EACpC,GAAG,EACH,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,IAAA,oCAAwB,EAAC,iDAAuB,EAAE;QACjD,EAAE,GAAG,EAAE,qBAAqB,EAAE;KAC9B,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -25,6 +25,10 @@ const testTools_1 = require("./testTools");
|
|
|
25
25
|
const legacyErrorMiddlewareCallsNextWithErr = (0, testTools_1.callsNextWithErr)(legacyErrorMiddleware_1.legacyErrorMiddleware);
|
|
26
26
|
const legacyErrorMiddlewareCatchesErrWithResponse = (0, testTools_1.catchesErrWithResponse)(legacyErrorMiddleware_1.legacyErrorMiddleware);
|
|
27
27
|
describe('legacyErrorMiddleware', () => {
|
|
28
|
+
// Necessary since the consolveOverride is called after the getter for the logger is launced
|
|
29
|
+
beforeAll(() => {
|
|
30
|
+
jest.spyOn(console, 'log').mockImplementation(() => ({}));
|
|
31
|
+
});
|
|
28
32
|
legacyErrorMiddlewareCallsNextWithErr('Error', new Error('This is an error'));
|
|
29
33
|
legacyErrorMiddlewareCallsNextWithErr('BadRequest', new http_errors_1.BadRequest('bad request'));
|
|
30
34
|
legacyErrorMiddlewareCallsNextWithErr('InternalServerError (http-error which extends Error)', new http_errors_1.InternalServerError('internal error'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacyErrorMiddleware.spec.js","sourceRoot":"","sources":["../../../../src/middleware/error/legacyErrorMiddleware.spec.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;;;AAExE,6CAA8D;AAC9D,8DAA+C;AAE/C,mEAAgE;AAChE,2CAIqB;AAErB,MAAM,qCAAqC,GAAG,IAAA,4BAAgB,EAC7D,6CAAqB,CACrB,CAAC;AAEF,MAAM,2CAA2C,GAAG,IAAA,kCAAsB,EACzE,6CAAqB,CACrB,CAAC;AAEF,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACtC,qCAAqC,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAE9E,qCAAqC,CACpC,YAAY,EACZ,IAAI,wBAAU,CAAC,aAAa,CAAC,CAC7B,CAAC;IAEF,qCAAqC,CACpC,sDAAsD,EACtD,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,qCAAqC,CAAC,iBAAiB,EAAE;QACxD,oBAAoB,EAAE,MAAM;KAC5B,CAAC,CAAC;IAEH,2CAA2C;IAC1C,sEAAsE;IACtE,6CAA6C;IAC7C,4CAA4C,EAC5C;QACC,IAAI,EAAE,2BAA2B;QACjC,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,UAAU;KACjB,EACD,GAAG,EACH,IAAI,iCAAmB,CAAC,UAAU,CAAC,CACnC,CAAC;IAEF,2CAA2C,CAC1C,aAAa,EACb;QACC,KAAK,EAAE,aAAa;KACpB,EACD,GAAG,EACH,IAAI,iCAAmB,CAAC,aAAa,CAAC,CACtC,CAAC;IAEF,2CAA2C,CAC1C,cAAc,EACd;QACC,KAAK,EAAE,gCAAgC;QACvC,UAAU,EAAE,GAAG;KACf,EACD,GAAG,EACH,IAAA,qBAAoB,EAAC,GAAG,EAAE,gCAAgC,CAAC,CAC3D,CAAC;IAEF,IAAA,oCAAwB,EAAC,6CAAqB,EAAE;QAC/C,KAAK,EAAE,gCAAgC;QACvC,UAAU,EAAE,GAAG;KACf,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"legacyErrorMiddleware.spec.js","sourceRoot":"","sources":["../../../../src/middleware/error/legacyErrorMiddleware.spec.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;;;AAExE,6CAA8D;AAC9D,8DAA+C;AAE/C,mEAAgE;AAChE,2CAIqB;AAErB,MAAM,qCAAqC,GAAG,IAAA,4BAAgB,EAC7D,6CAAqB,CACrB,CAAC;AAEF,MAAM,2CAA2C,GAAG,IAAA,kCAAsB,EACzE,6CAAqB,CACrB,CAAC;AAEF,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACtC,4FAA4F;IAC5F,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,qCAAqC,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAE9E,qCAAqC,CACpC,YAAY,EACZ,IAAI,wBAAU,CAAC,aAAa,CAAC,CAC7B,CAAC;IAEF,qCAAqC,CACpC,sDAAsD,EACtD,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,qCAAqC,CAAC,iBAAiB,EAAE;QACxD,oBAAoB,EAAE,MAAM;KAC5B,CAAC,CAAC;IAEH,2CAA2C;IAC1C,sEAAsE;IACtE,6CAA6C;IAC7C,4CAA4C,EAC5C;QACC,IAAI,EAAE,2BAA2B;QACjC,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,UAAU;KACjB,EACD,GAAG,EACH,IAAI,iCAAmB,CAAC,UAAU,CAAC,CACnC,CAAC;IAEF,2CAA2C,CAC1C,aAAa,EACb;QACC,KAAK,EAAE,aAAa;KACpB,EACD,GAAG,EACH,IAAI,iCAAmB,CAAC,aAAa,CAAC,CACtC,CAAC;IAEF,2CAA2C,CAC1C,cAAc,EACd;QACC,KAAK,EAAE,gCAAgC;QACvC,UAAU,EAAE,GAAG;KACf,EACD,GAAG,EACH,IAAA,qBAAoB,EAAC,GAAG,EAAE,gCAAgC,CAAC,CAC3D,CAAC;IAEF,IAAA,oCAAwB,EAAC,6CAAqB,EAAE;QAC/C,KAAK,EAAE,gCAAgC;QACvC,UAAU,EAAE,GAAG;KACf,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -21,6 +21,10 @@ const txErrorMiddleware_1 = require("./txErrorMiddleware");
|
|
|
21
21
|
const txErrorMiddlewareCallsNextWithErr = (0, testTools_1.callsNextWithErr)(txErrorMiddleware_1.txErrorMiddleware);
|
|
22
22
|
const txErrorMiddlewareCatchesErrWithResponse = (0, testTools_1.catchesErrWithResponse)(txErrorMiddleware_1.txErrorMiddleware);
|
|
23
23
|
describe('txErrorMiddleware', () => {
|
|
24
|
+
// Necessary since the consolveOverride is called after the getter for the logger is launced
|
|
25
|
+
beforeAll(() => {
|
|
26
|
+
jest.spyOn(console, 'log').mockImplementation(() => ({}));
|
|
27
|
+
});
|
|
24
28
|
txErrorMiddlewareCallsNextWithErr('Error', new Error('This is an error'));
|
|
25
29
|
txErrorMiddlewareCallsNextWithErr('BadRequest', new http_errors_1.BadRequest('bad request'));
|
|
26
30
|
txErrorMiddlewareCallsNextWithErr('InternalServerError (http-error which extends Error)', new http_errors_1.InternalServerError('internal error'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"txErrorMiddleware.spec.js","sourceRoot":"","sources":["../../../../src/middleware/error/txErrorMiddleware.spec.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;AAExE,6CAA8D;AAE9D,2CAIqB;AACrB,2DAAwD;AAExD,MAAM,iCAAiC,GAAG,IAAA,4BAAgB,EAAC,qCAAiB,CAAC,CAAC;AAE9E,MAAM,uCAAuC,GAC5C,IAAA,kCAAsB,EAAC,qCAAiB,CAAC,CAAC;AAE3C,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,iCAAiC,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAE1E,iCAAiC,CAChC,YAAY,EACZ,IAAI,wBAAU,CAAC,aAAa,CAAC,CAC7B,CAAC;IAEF,iCAAiC,CAChC,sDAAsD,EACtD,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,iCAAiC,CAAC,iBAAiB,EAAE;QACpD,GAAG,EAAE,UAAU;KACf,CAAC,CAAC;IAEH,iCAAiC,CAAC,cAAc,EAAE;QACjD,KAAK,EAAE,cAAc;QACrB,UAAU,EAAE,GAAG;KACf,CAAC,CAAC;IAEH,iCAAiC,CAAC,aAAa,EAAE;QAChD,KAAK,EAAE,aAAa;KACpB,CAAC,CAAC;IAEH,uCAAuC,CACtC,4BAA4B,EAC5B;QACC,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,WAAW;KAClB,EACD,GAAG,EACH;QACC,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,WAAW;KAClB,CACD,CAAC;IAEF,uCAAuC,CACtC,+BAA+B,EAC/B;QACC,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,WAAW;KAClB,EACD,GAAG,EACH;QACC,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,WAAW;KAClB,CACD,CAAC;IAEF,IAAA,oCAAwB,EAAC,qCAAiB,EAAE;QAC3C,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,WAAW;KAClB,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"txErrorMiddleware.spec.js","sourceRoot":"","sources":["../../../../src/middleware/error/txErrorMiddleware.spec.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;AAExE,6CAA8D;AAE9D,2CAIqB;AACrB,2DAAwD;AAExD,MAAM,iCAAiC,GAAG,IAAA,4BAAgB,EAAC,qCAAiB,CAAC,CAAC;AAE9E,MAAM,uCAAuC,GAC5C,IAAA,kCAAsB,EAAC,qCAAiB,CAAC,CAAC;AAE3C,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,4FAA4F;IAC5F,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,iCAAiC,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAE1E,iCAAiC,CAChC,YAAY,EACZ,IAAI,wBAAU,CAAC,aAAa,CAAC,CAC7B,CAAC;IAEF,iCAAiC,CAChC,sDAAsD,EACtD,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CACzC,CAAC;IAEF,iCAAiC,CAAC,iBAAiB,EAAE;QACpD,GAAG,EAAE,UAAU;KACf,CAAC,CAAC;IAEH,iCAAiC,CAAC,cAAc,EAAE;QACjD,KAAK,EAAE,cAAc;QACrB,UAAU,EAAE,GAAG;KACf,CAAC,CAAC;IAEH,iCAAiC,CAAC,aAAa,EAAE;QAChD,KAAK,EAAE,aAAa;KACpB,CAAC,CAAC;IAEH,uCAAuC,CACtC,4BAA4B,EAC5B;QACC,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,WAAW;KAClB,EACD,GAAG,EACH;QACC,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,WAAW;KAClB,CACD,CAAC;IAEF,uCAAuC,CACtC,+BAA+B,EAC/B;QACC,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,WAAW;KAClB,EACD,GAAG,EACH;QACC,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,WAAW;KAClB,CACD,CAAC;IAEF,IAAA,oCAAwB,EAAC,qCAAiB,EAAE;QAC3C,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,WAAW;KAClB,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -1,5 +1,47 @@
|
|
|
1
1
|
import { INodeTransactionPool } from '../../types/responses';
|
|
2
2
|
import { AbstractService } from '../AbstractService';
|
|
3
3
|
export declare class NodeTransactionPoolService extends AbstractService {
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Fetch the transaction pool, and provide relevant extrinsic information.
|
|
6
|
+
*
|
|
7
|
+
* @param includeFee Whether or not to include the fee's and priority of a extrinsic
|
|
8
|
+
* in the transaction pool.
|
|
9
|
+
*/
|
|
10
|
+
fetchTransactionPool(includeFee: boolean): Promise<INodeTransactionPool>;
|
|
11
|
+
/**
|
|
12
|
+
* Extract all information related to the extrinsic, and compute it's
|
|
13
|
+
* priority in the transaction pool.
|
|
14
|
+
*
|
|
15
|
+
* @param ext Extrinsic we want to provide all the information for.
|
|
16
|
+
*/
|
|
17
|
+
private extractExtrinsicInfo;
|
|
18
|
+
/**
|
|
19
|
+
* We calculate the priority of an extrinsic in the transaction pool depending
|
|
20
|
+
* on its dispatch class, ie. 'normal', 'operational', 'mandatory'.
|
|
21
|
+
*
|
|
22
|
+
* The following formula can summarize the below logic.
|
|
23
|
+
* tip * (max_block_{weight|length} / bounded_{weight|length})
|
|
24
|
+
*
|
|
25
|
+
* Please reference this link for more information
|
|
26
|
+
* ref: https://github.com/paritytech/substrate/blob/fe5bf49290d166b9552f65e751d46ec592173ebd/frame/transaction-payment/src/lib.rs#L610
|
|
27
|
+
*
|
|
28
|
+
* @param ext
|
|
29
|
+
* @param c
|
|
30
|
+
* @param weight
|
|
31
|
+
*/
|
|
32
|
+
private computeExtPriority;
|
|
33
|
+
/**
|
|
34
|
+
* Explicitly define the type of class an extrinsic is.
|
|
35
|
+
*
|
|
36
|
+
* @param c DispatchClass of an extrinsic
|
|
37
|
+
*/
|
|
38
|
+
private defineDispatchClassType;
|
|
39
|
+
/**
|
|
40
|
+
* Multiply a value (tip) by its maxTxPerBlock multiplier.
|
|
41
|
+
* ref: https://github.com/paritytech/substrate/blob/fe5bf49290d166b9552f65e751d46ec592173ebd/frame/transaction-payment/src/lib.rs#L633
|
|
42
|
+
*
|
|
43
|
+
* @param val Value to be multiplied by the maxTxPerBlock. Usually a tip.
|
|
44
|
+
* @param maxTxPerBlock The minimum value between maxTxPerBlockWeight and maxTxPerBlockLength
|
|
45
|
+
*/
|
|
46
|
+
private maxReward;
|
|
5
47
|
}
|
|
@@ -14,23 +14,146 @@
|
|
|
14
14
|
//
|
|
15
15
|
// You should have received a copy of the GNU General Public License
|
|
16
16
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
17
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
21
|
exports.NodeTransactionPoolService = void 0;
|
|
22
|
+
const bn_js_1 = __importDefault(require("bn.js"));
|
|
19
23
|
const AbstractService_1 = require("../AbstractService");
|
|
20
24
|
class NodeTransactionPoolService extends AbstractService_1.AbstractService {
|
|
21
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Fetch the transaction pool, and provide relevant extrinsic information.
|
|
27
|
+
*
|
|
28
|
+
* @param includeFee Whether or not to include the fee's and priority of a extrinsic
|
|
29
|
+
* in the transaction pool.
|
|
30
|
+
*/
|
|
31
|
+
async fetchTransactionPool(includeFee) {
|
|
22
32
|
const { api } = this;
|
|
23
33
|
const extrinsics = await api.rpc.author.pendingExtrinsics();
|
|
24
|
-
|
|
34
|
+
if (includeFee) {
|
|
35
|
+
const pool = await Promise.all(extrinsics.map((ext) => this.extractExtrinsicInfo(ext)));
|
|
25
36
|
return {
|
|
26
|
-
|
|
27
|
-
encodedExtrinsic: ext.toHex(),
|
|
37
|
+
pool,
|
|
28
38
|
};
|
|
29
|
-
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
return {
|
|
42
|
+
pool: extrinsics.map((ext) => {
|
|
43
|
+
return {
|
|
44
|
+
hash: ext.hash.toHex(),
|
|
45
|
+
encodedExtrinsic: ext.toHex(),
|
|
46
|
+
};
|
|
47
|
+
}),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Extract all information related to the extrinsic, and compute it's
|
|
53
|
+
* priority in the transaction pool.
|
|
54
|
+
*
|
|
55
|
+
* @param ext Extrinsic we want to provide all the information for.
|
|
56
|
+
*/
|
|
57
|
+
async extractExtrinsicInfo(ext) {
|
|
58
|
+
const { api } = this;
|
|
59
|
+
const { hash, tip } = ext;
|
|
60
|
+
const { class: c, partialFee, weight, } = await api.rpc.payment.queryInfo(ext.toHex());
|
|
61
|
+
const priority = await this.computeExtPriority(ext, c, weight);
|
|
30
62
|
return {
|
|
31
|
-
|
|
63
|
+
hash: hash.toHex(),
|
|
64
|
+
encodedExtrinsic: ext.toHex(),
|
|
65
|
+
tip: tip.toString(),
|
|
66
|
+
priority: priority,
|
|
67
|
+
partialFee: partialFee,
|
|
32
68
|
};
|
|
33
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* We calculate the priority of an extrinsic in the transaction pool depending
|
|
72
|
+
* on its dispatch class, ie. 'normal', 'operational', 'mandatory'.
|
|
73
|
+
*
|
|
74
|
+
* The following formula can summarize the below logic.
|
|
75
|
+
* tip * (max_block_{weight|length} / bounded_{weight|length})
|
|
76
|
+
*
|
|
77
|
+
* Please reference this link for more information
|
|
78
|
+
* ref: https://github.com/paritytech/substrate/blob/fe5bf49290d166b9552f65e751d46ec592173ebd/frame/transaction-payment/src/lib.rs#L610
|
|
79
|
+
*
|
|
80
|
+
* @param ext
|
|
81
|
+
* @param c
|
|
82
|
+
* @param weight
|
|
83
|
+
*/
|
|
84
|
+
async computeExtPriority(ext, dispatchClass, weight) {
|
|
85
|
+
const { api } = this;
|
|
86
|
+
const { tip, encodedLength: len } = ext;
|
|
87
|
+
const BN_ONE = new bn_js_1.default(1);
|
|
88
|
+
const sanitizedClass = this.defineDispatchClassType(dispatchClass);
|
|
89
|
+
const maxBlockWeight = api.consts.system.blockWeights.maxBlock;
|
|
90
|
+
const maxLength = api.consts.system.blockLength.max[sanitizedClass];
|
|
91
|
+
const boundedWeight = bn_js_1.default.min(bn_js_1.default.max(weight.toBn(), BN_ONE), maxBlockWeight);
|
|
92
|
+
const boundedLength = bn_js_1.default.min(bn_js_1.default.max(new bn_js_1.default(len), BN_ONE), maxLength);
|
|
93
|
+
const maxTxPerBlockWeight = maxBlockWeight.div(boundedWeight);
|
|
94
|
+
const maxTxPerBlockLength = maxLength.div(boundedLength);
|
|
95
|
+
const maxTxPerBlock = bn_js_1.default.min(maxTxPerBlockWeight, maxTxPerBlockLength);
|
|
96
|
+
const saturatedTip = tip.toBn().add(BN_ONE);
|
|
97
|
+
const scaledTip = this.maxReward(saturatedTip, maxTxPerBlock);
|
|
98
|
+
let priority;
|
|
99
|
+
switch (sanitizedClass) {
|
|
100
|
+
case 'normal': {
|
|
101
|
+
priority = scaledTip.toString();
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
case 'mandatory': {
|
|
105
|
+
priority = scaledTip.toString();
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
case 'operational': {
|
|
109
|
+
const { inclusionFee } = await api.rpc.payment.queryFeeDetails(ext.toHex());
|
|
110
|
+
const { operationalFeeMultiplier } = api.consts.transactionPayment;
|
|
111
|
+
if (inclusionFee.isNone) {
|
|
112
|
+
// This is an unsigned_extrinsic, and does not have priority
|
|
113
|
+
priority = '0';
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
const { baseFee, lenFee, adjustedWeightFee } = inclusionFee.unwrap();
|
|
117
|
+
const computedInclusionFee = baseFee.add(lenFee).add(adjustedWeightFee);
|
|
118
|
+
const finalFee = computedInclusionFee.add(tip.toBn());
|
|
119
|
+
const virtualTip = finalFee.mul(operationalFeeMultiplier);
|
|
120
|
+
const scaledVirtualTip = this.maxReward(virtualTip, maxTxPerBlock);
|
|
121
|
+
priority = scaledTip.add(scaledVirtualTip).toString();
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
default: {
|
|
125
|
+
priority = '0';
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return priority;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Explicitly define the type of class an extrinsic is.
|
|
133
|
+
*
|
|
134
|
+
* @param c DispatchClass of an extrinsic
|
|
135
|
+
*/
|
|
136
|
+
defineDispatchClassType(c) {
|
|
137
|
+
const cString = c.type.toLowerCase();
|
|
138
|
+
if (cString === 'normal')
|
|
139
|
+
return 'normal';
|
|
140
|
+
if (cString === 'mandatory')
|
|
141
|
+
return 'mandatory';
|
|
142
|
+
if (cString === 'operational')
|
|
143
|
+
return 'operational';
|
|
144
|
+
// This will never be reached, but is here to satisfy the TS compiler.
|
|
145
|
+
return 'normal';
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Multiply a value (tip) by its maxTxPerBlock multiplier.
|
|
149
|
+
* ref: https://github.com/paritytech/substrate/blob/fe5bf49290d166b9552f65e751d46ec592173ebd/frame/transaction-payment/src/lib.rs#L633
|
|
150
|
+
*
|
|
151
|
+
* @param val Value to be multiplied by the maxTxPerBlock. Usually a tip.
|
|
152
|
+
* @param maxTxPerBlock The minimum value between maxTxPerBlockWeight and maxTxPerBlockLength
|
|
153
|
+
*/
|
|
154
|
+
maxReward(val, maxTxPerBlock) {
|
|
155
|
+
return val.mul(maxTxPerBlock);
|
|
156
|
+
}
|
|
34
157
|
}
|
|
35
158
|
exports.NodeTransactionPoolService = NodeTransactionPoolService;
|
|
36
159
|
//# sourceMappingURL=NodeTransactionPoolService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeTransactionPoolService.js","sourceRoot":"","sources":["../../../../src/services/node/NodeTransactionPoolService.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE
|
|
1
|
+
{"version":3,"file":"NodeTransactionPoolService.js","sourceRoot":"","sources":["../../../../src/services/node/NodeTransactionPoolService.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,24 +21,51 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
21
21
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
22
22
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
23
23
|
const sanitizeNumbers_1 = require("../../sanitize/sanitizeNumbers");
|
|
24
|
+
const registries_1 = require("../../test-helpers/registries");
|
|
24
25
|
const mock_1 = require("../test-helpers/mock");
|
|
25
26
|
const transactionPool_json_1 = __importDefault(require("../test-helpers/responses/node/transactionPool.json"));
|
|
27
|
+
const transactionPoolWithTip_json_1 = __importDefault(require("../test-helpers/responses/node/transactionPoolWithTip.json"));
|
|
28
|
+
const transactionPoolWithTipOperational_json_1 = __importDefault(require("../test-helpers/responses/node/transactionPoolWithTipOperational.json"));
|
|
26
29
|
const _1 = require(".");
|
|
27
30
|
const nodeTranstionPoolService = new _1.NodeTransactionPoolService(mock_1.defaultMockApi);
|
|
28
31
|
describe('NodeTransactionPoolService', () => {
|
|
29
32
|
describe('fetchTransactionPool', () => {
|
|
30
33
|
it('works when ApiPromiseWorks (no txs)', async () => {
|
|
31
|
-
expect((0, sanitizeNumbers_1.sanitizeNumbers)(await nodeTranstionPoolService
|
|
32
|
-
|
|
34
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(await nodeTranstionPoolService.fetchTransactionPool(
|
|
35
|
+
// blockHash789629
|
|
36
|
+
false))).toStrictEqual({ pool: [] });
|
|
33
37
|
});
|
|
34
38
|
it('works when ApiPromiseWorks (1 tx)', async () => {
|
|
35
39
|
const ext = mock_1.defaultMockApi.createType('Extrinsic', '0x4d0284d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d015c41b5e704d89787e5208b863fa815a146a19ade0cd95f2378815d72c52b2644c05f0dd6be3bf219b9963ac9ddeec8d379c0cd1d86d8f33f2c1d1a8006efc180050000001a00040500e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e0f0040767b10c403');
|
|
36
40
|
const pool = mock_1.defaultMockApi.createType('Vec<Extrinsic>', [ext]);
|
|
37
41
|
mock_1.defaultMockApi.rpc.author.pendingExtrinsics = () => Promise.resolve().then(() => pool);
|
|
38
|
-
expect((0, sanitizeNumbers_1.sanitizeNumbers)(await nodeTranstionPoolService
|
|
39
|
-
|
|
42
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(await nodeTranstionPoolService.fetchTransactionPool(
|
|
43
|
+
// blockHash789629
|
|
44
|
+
false))).toStrictEqual(transactionPool_json_1.default);
|
|
40
45
|
mock_1.defaultMockApi.rpc.author.pendingExtrinsics = mock_1.pendingExtrinsics;
|
|
41
46
|
});
|
|
47
|
+
it('works when query param `includeFee` is set to true for normal extrinsics', async () => {
|
|
48
|
+
// This test does not use the same metadata in defaultMockApi. It changes it to v9190,
|
|
49
|
+
// and sets it back to the default value after.
|
|
50
|
+
const normalExt = registries_1.polkadotRegistryV9190.createType('Extrinsic', '0x4d028400d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0196a6cd1652fc83c449884f67e8f444587b69c5874512f1d746ff6f062a097b2acedfe8d2e07915b4c93cc1c3b48a16ebccc1db8eb810146373ba53c9f42ab48e4500000284d717050300e281b7ec09fb8420ca7ba3fbd627fbe203ff04b2ba0777ae1d8a6942257af0230700e8764817');
|
|
51
|
+
const pool = registries_1.polkadotRegistryV9190.createType('Vec<Extrinsic>', [
|
|
52
|
+
normalExt,
|
|
53
|
+
]);
|
|
54
|
+
mock_1.defaultMockApi.rpc.author.pendingExtrinsics = () => Promise.resolve().then(() => pool);
|
|
55
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(await nodeTranstionPoolService.fetchTransactionPool(true))).toStrictEqual(transactionPoolWithTip_json_1.default);
|
|
56
|
+
mock_1.defaultMockApi.rpc.author.pendingExtrinsics = mock_1.pendingExtrinsics;
|
|
57
|
+
});
|
|
58
|
+
it('works when query param `includeFee` is set to true for operational extrinsics', async () => {
|
|
59
|
+
const operationalExt = registries_1.polkadotRegistryV9190.createType('Extrinsic', '0x350284004adf51a47b72795366d52285e329229c836ea7bbfe139dbe8fa0700c4f86fc5601fc44dcd1994c111671b3577b02e391be8aff10f7ccf766f3189859ea343db041779a67f9357cba0ba051f83d63e45e7a88b5e2ca642181592052acd9f4ccc8821501c107000f03f2af187bbc8a4a2b5a28c2a3c2d85bf7e5b1700cbf1207a8e4c1eb7d8e7e4037350301');
|
|
60
|
+
const pool = registries_1.polkadotRegistryV9190.createType('Vec<Extrinsic>', [
|
|
61
|
+
operationalExt,
|
|
62
|
+
]);
|
|
63
|
+
mock_1.defaultMockApi.rpc.author.pendingExtrinsics = () => Promise.resolve().then(() => pool);
|
|
64
|
+
mock_1.defaultMockApi.rpc.payment.queryInfo = mock_1.queryInfoCouncilVote;
|
|
65
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(await nodeTranstionPoolService.fetchTransactionPool(true))).toStrictEqual(transactionPoolWithTipOperational_json_1.default);
|
|
66
|
+
mock_1.defaultMockApi.rpc.author.pendingExtrinsics = mock_1.pendingExtrinsics;
|
|
67
|
+
mock_1.defaultMockApi.rpc.payment.queryInfo = mock_1.queryInfoBalancesTransfer;
|
|
68
|
+
});
|
|
42
69
|
});
|
|
43
70
|
});
|
|
44
71
|
//# sourceMappingURL=NodeTransactionPoolService.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeTransactionPoolService.spec.js","sourceRoot":"","sources":["../../../../src/services/node/NodeTransactionPoolService.spec.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;;;AAExE,uDAAuD;AACvD,+DAA+D;AAC/D,oEAAiE;AACjE,+
|
|
1
|
+
{"version":3,"file":"NodeTransactionPoolService.spec.js","sourceRoot":"","sources":["../../../../src/services/node/NodeTransactionPoolService.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,26 @@
|
|
|
1
|
+
import { Balance } from '@polkadot/types/interfaces';
|
|
1
2
|
interface IPoolExtrinsic {
|
|
3
|
+
/**
|
|
4
|
+
* H256 hash of the extrinsic
|
|
5
|
+
*/
|
|
2
6
|
hash: string;
|
|
7
|
+
/**
|
|
8
|
+
* SCALE encoded extrinsic
|
|
9
|
+
*/
|
|
3
10
|
encodedExtrinsic: string;
|
|
11
|
+
/**
|
|
12
|
+
* The tip within an extrinsic. Available when the `tip` query parameter
|
|
13
|
+
* for `/node/transaction-pool` is set to true.
|
|
14
|
+
*/
|
|
15
|
+
tip?: string;
|
|
16
|
+
/**
|
|
17
|
+
* PartialFee for a transaction
|
|
18
|
+
*/
|
|
19
|
+
partialFee?: Balance;
|
|
20
|
+
/**
|
|
21
|
+
* Priority of the transaction. Calculated by tip * (max_block_{weight|length} / bounded_{weight|length})
|
|
22
|
+
*/
|
|
23
|
+
priority?: string;
|
|
4
24
|
}
|
|
5
25
|
export interface INodeTransactionPool {
|
|
6
26
|
pool: IPoolExtrinsic[];
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "12.0
|
|
2
|
+
"version": "12.1.0",
|
|
3
3
|
"name": "@substrate/api-sidecar",
|
|
4
4
|
"description": "REST service that makes it easy to interact with blockchain nodes built using Substrate's FRAME framework.",
|
|
5
5
|
"homepage": "https://github.com/paritytech/substrate-api-sidecar#readme",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"start:log-rpc": "yarn run build && NODE_ENV=test yarn run main ",
|
|
36
36
|
"dev": "tsc-watch --onSuccess \"yarn run main\"",
|
|
37
37
|
"test": "NODE_ENV=test substrate-exec-jest --detectOpenHandles",
|
|
38
|
-
"test:watch": "substrate-exec-jest --watch",
|
|
38
|
+
"test:watch": "NODE_ENV=test substrate-exec-jest --watch",
|
|
39
39
|
"test:cov": "NODE_ENV=test substrate-exec-jest --detectOpenHandles --coverage",
|
|
40
40
|
"lint:e2e-tests": "cd e2e-tests && substrate-dev-run-lint",
|
|
41
41
|
"build:e2e-tests": "substrate-exec-tsc --project e2e-tests/tsconfig.json",
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
"update-pjs-deps": "substrate-update-pjs-deps && yarn"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@polkadot/api": "8.
|
|
58
|
-
"@polkadot/util-crypto": "9.
|
|
57
|
+
"@polkadot/api": "^8.7.1",
|
|
58
|
+
"@polkadot/util-crypto": "^9.4.1",
|
|
59
59
|
"@substrate/calc": "^0.2.8",
|
|
60
60
|
"argparse": "^2.0.1",
|
|
61
61
|
"confmgr": "1.0.7",
|