@requestnetwork/request-client.js 0.30.1-next.1351 → 0.30.1-next.709
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/README.md +9 -13
- package/dist/api/content-data-extension.js +3 -3
- package/dist/api/content-data-extension.js.map +1 -1
- package/dist/api/request-network.d.ts +50 -15
- package/dist/api/request-network.d.ts.map +1 -1
- package/dist/api/request-network.js +187 -87
- package/dist/api/request-network.js.map +1 -1
- package/dist/api/request.d.ts +55 -6
- package/dist/api/request.d.ts.map +1 -1
- package/dist/api/request.js +171 -149
- package/dist/api/request.js.map +1 -1
- package/dist/api/utils.d.ts +5 -6
- package/dist/api/utils.d.ts.map +1 -1
- package/dist/api/utils.js +1 -3
- package/dist/api/utils.js.map +1 -1
- package/dist/http-config-defaults.d.ts +4 -0
- package/dist/http-config-defaults.d.ts.map +1 -0
- package/dist/http-config-defaults.js +16 -0
- package/dist/http-config-defaults.js.map +1 -0
- package/dist/http-data-access.d.ts +40 -9
- package/dist/http-data-access.d.ts.map +1 -1
- package/dist/http-data-access.js +113 -95
- package/dist/http-data-access.js.map +1 -1
- package/dist/http-metamask-data-access.d.ts +7 -7
- package/dist/http-metamask-data-access.d.ts.map +1 -1
- package/dist/http-metamask-data-access.js +57 -61
- package/dist/http-metamask-data-access.js.map +1 -1
- package/dist/http-request-network.d.ts +15 -15
- package/dist/http-request-network.d.ts.map +1 -1
- package/dist/http-request-network.js +23 -25
- package/dist/http-request-network.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/mock-storage.d.ts +2 -5
- package/dist/mock-storage.d.ts.map +1 -1
- package/dist/mock-storage.js +24 -77
- package/dist/mock-storage.js.map +1 -1
- package/dist/no-persist-http-data-access.d.ts +10 -0
- package/dist/no-persist-http-data-access.d.ts.map +1 -0
- package/dist/no-persist-http-data-access.js +36 -0
- package/dist/no-persist-http-data-access.js.map +1 -0
- package/dist/report.html +9 -24
- package/dist/requestnetwork.min.js +441 -1
- package/dist/requestnetwork.min.js.LICENSE.txt +11 -24
- package/dist/requestnetwork.min.js.map +1 -1
- package/dist/types.js +2 -11
- package/dist/types.js.map +1 -1
- package/package.json +32 -43
- package/CHANGELOG.md +0 -2077
- package/dist/api/currency/erc20/celo.d.ts +0 -14
- package/dist/api/currency/erc20/celo.d.ts.map +0 -1
- package/dist/api/currency/erc20/celo.js +0 -26
- package/dist/api/currency/erc20/celo.js.map +0 -1
- package/dist/api/currency/erc20/networks.d.ts +0 -25
- package/dist/api/currency/erc20/networks.d.ts.map +0 -1
- package/dist/api/currency/erc20/networks.js +0 -14
- package/dist/api/currency/erc20/networks.js.map +0 -1
- package/dist/api/currency/erc20/rinkeby.d.ts +0 -19
- package/dist/api/currency/erc20/rinkeby.d.ts.map +0 -1
- package/dist/api/currency/erc20/rinkeby.js +0 -43
- package/dist/api/currency/erc20/rinkeby.js.map +0 -1
- package/dist/api/currency/erc20.d.ts +0 -62
- package/dist/api/currency/erc20.d.ts.map +0 -1
- package/dist/api/currency/erc20.js +0 -136
- package/dist/api/currency/erc20.js.map +0 -1
- package/dist/api/currency.d.ts +0 -45
- package/dist/api/currency.d.ts.map +0 -1
- package/dist/api/currency.js +0 -162
- package/dist/api/currency.js.map +0 -1
- package/dist/mock-data-access.d.ts +0 -11
- package/dist/mock-data-access.d.ts.map +0 -1
- package/dist/mock-data-access.js +0 -16
- package/dist/mock-data-access.js.map +0 -1
package/dist/api/utils.js
CHANGED
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("@requestnetwork/utils");
|
|
4
|
-
const currency_1 = require("./currency");
|
|
5
4
|
/**
|
|
6
5
|
* Collection of utils functions related to the library, meant to simplify its use.
|
|
7
6
|
*/
|
|
8
7
|
exports.default = {
|
|
9
8
|
formatGetRequestFromIdError,
|
|
10
|
-
getDecimalsForCurrency: currency_1.getDecimalsForCurrency,
|
|
11
9
|
/**
|
|
12
10
|
* Returns the current timestamp in second
|
|
13
11
|
*
|
|
14
12
|
* @returns current timestamp in second
|
|
15
13
|
*/
|
|
16
|
-
getCurrentTimestampInSecond: utils_1.
|
|
14
|
+
getCurrentTimestampInSecond: utils_1.getCurrentTimestampInSecond,
|
|
17
15
|
};
|
|
18
16
|
/**
|
|
19
17
|
* Formats a human readable message from ignored transactions
|
package/dist/api/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/api/utils.ts"],"names":[],"mappings":";;AACA,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/api/utils.ts"],"names":[],"mappings":";;AACA,iDAAoE;AACpE;;GAEG;AACH,kBAAe;IACb,2BAA2B;IAE3B;;;;OAIG;IACH,2BAA2B,EAA3B,mCAA2B;CAC5B,CAAC;AAEF;;;;;GAKG;AACH,SAAS,2BAA2B,CAClC,cAAyD;IAEzD,IACE,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB;QACtC,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC,CAAC;QACvD,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAC3E;QACA,OAAO,iCAAiC,IAAI,CAAC,SAAS,CACpD,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,mBAAmB;aAC3D,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,IAAI,EAAE,CAAC;aACrD,MAAM,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,CACpC,EAAE,CAAC;KACL;IAED,OAAO,sBAAsB,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-config-defaults.d.ts","sourceRoot":"","sources":["../src/http-config-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,QAAA,MAAM,MAAM,EAAE,WAAW,CAAC,qBAWzB,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const config = {
|
|
4
|
+
requestClientVersionHeader: 'X-Request-Network-Client-Version',
|
|
5
|
+
httpRequestMaxRetry: 3,
|
|
6
|
+
httpRequestRetryDelay: 100,
|
|
7
|
+
httpRequestExponentialBackoffDelay: 0,
|
|
8
|
+
httpRequestMaxExponentialBackoffDelay: 30000,
|
|
9
|
+
getConfirmationMaxRetry: 30,
|
|
10
|
+
getConfirmationRetryDelay: 1000,
|
|
11
|
+
getConfirmationExponentialBackoffDelay: 0,
|
|
12
|
+
getConfirmationMaxExponentialBackoffDelay: 30000,
|
|
13
|
+
getConfirmationDeferDelay: 3000,
|
|
14
|
+
};
|
|
15
|
+
exports.default = config;
|
|
16
|
+
//# sourceMappingURL=http-config-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-config-defaults.js","sourceRoot":"","sources":["../src/http-config-defaults.ts"],"names":[],"mappings":";;AAEA,MAAM,MAAM,GAAsC;IAChD,0BAA0B,EAAE,kCAAkC;IAC9D,mBAAmB,EAAE,CAAC;IACtB,qBAAqB,EAAE,GAAG;IAC1B,kCAAkC,EAAE,CAAC;IACrC,qCAAqC,EAAE,KAAK;IAC5C,uBAAuB,EAAE,EAAE;IAC3B,yBAAyB,EAAE,IAAI;IAC/B,sCAAsC,EAAE,CAAC;IACzC,yCAAyC,EAAE,KAAK;IAChD,yBAAyB,EAAE,IAAI;CAChC,CAAC;AAEF,kBAAe,MAAM,CAAC"}
|
|
@@ -1,25 +1,42 @@
|
|
|
1
|
-
import { DataAccessTypes } from '@requestnetwork/types';
|
|
2
|
-
|
|
1
|
+
import { ClientTypes, DataAccessTypes } from '@requestnetwork/types';
|
|
2
|
+
export type NodeConnectionConfig = {
|
|
3
|
+
baseURL: string;
|
|
4
|
+
headers: Record<string, string>;
|
|
5
|
+
};
|
|
3
6
|
/**
|
|
4
7
|
* Exposes a Data-Access module over HTTP
|
|
5
8
|
*/
|
|
6
9
|
export default class HttpDataAccess implements DataAccessTypes.IDataAccess {
|
|
7
10
|
/**
|
|
8
|
-
* Configuration that
|
|
9
|
-
*
|
|
11
|
+
* Configuration that overrides http-config-defaults,
|
|
12
|
+
* @see httpConfigDefaults for the default configuration.
|
|
10
13
|
*/
|
|
11
|
-
protected
|
|
14
|
+
protected httpConfig: ClientTypes.IHttpDataAccessConfig;
|
|
15
|
+
/**
|
|
16
|
+
* Configuration that will be sent at each request.
|
|
17
|
+
*/
|
|
18
|
+
protected nodeConnectionConfig: NodeConnectionConfig;
|
|
12
19
|
/**
|
|
13
20
|
* Creates an instance of HttpDataAccess.
|
|
14
|
-
* @param
|
|
21
|
+
* @param httpConfig @see ClientTypes.IHttpDataAccessConfig for available options.
|
|
22
|
+
* @param nodeConnectionConfig Configuration options to connect to the node.
|
|
15
23
|
*/
|
|
16
|
-
constructor(nodeConnectionConfig?:
|
|
24
|
+
constructor({ httpConfig, nodeConnectionConfig, }?: {
|
|
25
|
+
httpConfig?: Partial<ClientTypes.IHttpDataAccessConfig>;
|
|
26
|
+
nodeConnectionConfig?: Partial<NodeConnectionConfig>;
|
|
27
|
+
});
|
|
17
28
|
/**
|
|
18
29
|
* Initialize the module. Does nothing, exists only to implement IDataAccess
|
|
19
30
|
*
|
|
20
31
|
* @returns nothing
|
|
21
32
|
*/
|
|
22
33
|
initialize(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Closes the module. Does nothing, exists only to implement IDataAccess
|
|
36
|
+
*
|
|
37
|
+
* @returns nothing
|
|
38
|
+
*/
|
|
39
|
+
close(): Promise<void>;
|
|
23
40
|
/**
|
|
24
41
|
* Persists a new transaction on a node through HTTP.
|
|
25
42
|
*
|
|
@@ -51,8 +68,22 @@ export default class HttpDataAccess implements DataAccessTypes.IDataAccess {
|
|
|
51
68
|
/**
|
|
52
69
|
* Gets information from the node (version, files etc...)
|
|
53
70
|
*
|
|
54
|
-
* @param detailed if true get the list of files hashes
|
|
55
71
|
*/
|
|
56
|
-
_getStatus(
|
|
72
|
+
_getStatus(): Promise<any>;
|
|
73
|
+
/**
|
|
74
|
+
* Sends an HTTP GET request to the node and retries until it succeeds.
|
|
75
|
+
* Throws when the retry count reaches a maximum.
|
|
76
|
+
*
|
|
77
|
+
* @param url HTTP GET request url
|
|
78
|
+
* @param params HTTP GET request parameters
|
|
79
|
+
* @param retryConfig Maximum retry count, delay between retries, exponential backoff delay, and maximum exponential backoff delay
|
|
80
|
+
*/
|
|
81
|
+
protected fetchAndRetry<T = unknown>(path: string, params: Record<string, unknown>, retryConfig?: {
|
|
82
|
+
maxRetries?: number;
|
|
83
|
+
retryDelay?: number;
|
|
84
|
+
exponentialBackoffDelay?: number;
|
|
85
|
+
maxExponentialBackoffDelay?: number;
|
|
86
|
+
}): Promise<T>;
|
|
87
|
+
protected fetch<T = unknown>(method: 'GET' | 'POST', path: string, params: Record<string, unknown> | undefined, body?: Record<string, unknown>): Promise<T>;
|
|
57
88
|
}
|
|
58
89
|
//# sourceMappingURL=http-data-access.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-data-access.d.ts","sourceRoot":"","sources":["../src/http-data-access.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"http-data-access.d.ts","sourceRoot":"","sources":["../src/http-data-access.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAUrE,MAAM,MAAM,oBAAoB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC;AAExF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,YAAW,eAAe,CAAC,WAAW;IACxE;;;OAGG;IACH,SAAS,CAAC,UAAU,EAAE,WAAW,CAAC,qBAAqB,CAAC;IAExD;;OAEG;IACH,SAAS,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IAErD;;;;OAIG;gBAED,EACE,UAAU,EACV,oBAAoB,GACrB,GAAE;QACD,UAAU,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QACxD,oBAAoB,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;KAItD;IAiBH;;;;OAIG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKxC;;;;OAIG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKnC;;;;;OAKG;IACU,kBAAkB,CAC7B,eAAe,EAAE,eAAe,CAAC,YAAY,EAC7C,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,eAAe,CAAC,yBAAyB,CAAC;IAyDrD;;;;;OAKG;IACU,0BAA0B,CACrC,SAAS,EAAE,MAAM,EACjB,mBAAmB,CAAC,EAAE,eAAe,CAAC,oBAAoB,GACzD,OAAO,CAAC,eAAe,CAAC,sBAAsB,CAAC;IAUlD;;;;;OAKG;IACU,kBAAkB,CAC7B,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,eAAe,CAAC,oBAAoB,GACpD,OAAO,CAAC,eAAe,CAAC,yBAAyB,CAAC;IAOrD;;;;;OAKG;IACU,2BAA2B,CACtC,MAAM,EAAE,MAAM,EAAE,EAChB,cAAc,CAAC,EAAE,eAAe,CAAC,oBAAoB,GACpD,OAAO,CAAC,eAAe,CAAC,yBAAyB,CAAC;IAOrD;;;OAGG;IACU,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC;IAIvC;;;;;;;OAOG;cACa,aAAa,CAAC,CAAC,GAAG,OAAO,EACvC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,GAAE;QACX,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,0BAA0B,CAAC,EAAE,MAAM,CAAC;KAChC,GACL,OAAO,CAAC,CAAC,CAAC;cAWG,KAAK,CAAC,CAAC,GAAG,OAAO,EAC/B,MAAM,EAAE,KAAK,GAAG,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC3C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,CAAC,CAAC;CA8Bd"}
|
package/dist/http-data-access.js
CHANGED
|
@@ -1,44 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
const
|
|
13
|
-
const axios_1 = require("axios");
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
14
4
|
const events_1 = require("events");
|
|
5
|
+
const http_config_defaults_1 = require("./http-config-defaults");
|
|
6
|
+
const utils_1 = require("@requestnetwork/utils");
|
|
7
|
+
const qs_1 = require("qs");
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
15
9
|
const packageJson = require('../package.json');
|
|
16
|
-
const REQUEST_CLIENT_VERSION_HEADER = 'X-Request-Network-Client-Version';
|
|
17
|
-
// Maximum number of retries to attempt when http requests to the Node fail
|
|
18
|
-
const HTTP_REQUEST_MAX_RETRY = 3;
|
|
19
|
-
// Delay between retry in ms
|
|
20
|
-
const HTTP_REQUEST_RETRY_DELAY = 100;
|
|
21
|
-
// Maximum number of retries to get the confirmation of a persistTransaction
|
|
22
|
-
const GET_CONFIRMATION_MAX_RETRY = 500;
|
|
23
|
-
// Delay between retry in ms to get the confirmation of a persistTransaction
|
|
24
|
-
const GET_CONFIRMATION_RETRY_DELAY = 3000;
|
|
25
10
|
/**
|
|
26
11
|
* Exposes a Data-Access module over HTTP
|
|
27
12
|
*/
|
|
28
13
|
class HttpDataAccess {
|
|
29
14
|
/**
|
|
30
15
|
* Creates an instance of HttpDataAccess.
|
|
31
|
-
* @param
|
|
16
|
+
* @param httpConfig @see ClientTypes.IHttpDataAccessConfig for available options.
|
|
17
|
+
* @param nodeConnectionConfig Configuration options to connect to the node.
|
|
32
18
|
*/
|
|
33
|
-
constructor(nodeConnectionConfig = {
|
|
19
|
+
constructor({ httpConfig, nodeConnectionConfig, } = {
|
|
20
|
+
httpConfig: {},
|
|
21
|
+
nodeConnectionConfig: {},
|
|
22
|
+
}) {
|
|
34
23
|
// Get Request Client version to set it in the header
|
|
35
24
|
const requestClientVersion = packageJson.version;
|
|
36
|
-
this.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
},
|
|
41
|
-
}, nodeConnectionConfig);
|
|
25
|
+
this.httpConfig = Object.assign(Object.assign({}, http_config_defaults_1.default), httpConfig);
|
|
26
|
+
this.nodeConnectionConfig = Object.assign({ baseURL: 'http://localhost:3000', headers: {
|
|
27
|
+
[this.httpConfig.requestClientVersionHeader]: requestClientVersion,
|
|
28
|
+
} }, nodeConnectionConfig);
|
|
42
29
|
}
|
|
43
30
|
/**
|
|
44
31
|
* Initialize the module. Does nothing, exists only to implement IDataAccess
|
|
@@ -46,7 +33,18 @@ class HttpDataAccess {
|
|
|
46
33
|
* @returns nothing
|
|
47
34
|
*/
|
|
48
35
|
initialize() {
|
|
49
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
36
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
// no-op, nothing to do
|
|
38
|
+
return;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Closes the module. Does nothing, exists only to implement IDataAccess
|
|
43
|
+
*
|
|
44
|
+
* @returns nothing
|
|
45
|
+
*/
|
|
46
|
+
close() {
|
|
47
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
50
48
|
// no-op, nothing to do
|
|
51
49
|
return;
|
|
52
50
|
});
|
|
@@ -58,39 +56,40 @@ class HttpDataAccess {
|
|
|
58
56
|
* @param topics The topics used to index the transaction
|
|
59
57
|
*/
|
|
60
58
|
persistTransaction(transactionData, channelId, topics) {
|
|
61
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
62
60
|
// We don't retry this request since it may fail because of a slow Storage
|
|
63
61
|
// For example, if the Ethereum network is slow and we retry the request three times
|
|
64
62
|
// three data will be persisted at the end
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
topics,
|
|
68
|
-
transactionData,
|
|
69
|
-
}, this.axiosConfig);
|
|
70
|
-
const transactionHash = utils_1.default.crypto.normalizeKeccak256Hash(transactionData).value;
|
|
63
|
+
const data = yield this.fetch('POST', '/persistTransaction', undefined, { channelId, topics, transactionData });
|
|
64
|
+
const transactionHash = (0, utils_1.normalizeKeccak256Hash)(transactionData).value;
|
|
71
65
|
// Create the return result with EventEmitter
|
|
72
66
|
const result = Object.assign(new events_1.EventEmitter(), data);
|
|
73
67
|
// Try to get the confirmation
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
68
|
+
new Promise((r) => setTimeout(r, this.httpConfig.getConfirmationDeferDelay))
|
|
69
|
+
.then(() => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
70
|
+
const confirmedData = yield this.fetchAndRetry('/getConfirmedTransaction', {
|
|
71
|
+
transactionHash,
|
|
72
|
+
}, {
|
|
73
|
+
maxRetries: this.httpConfig.getConfirmationMaxRetry,
|
|
74
|
+
retryDelay: this.httpConfig.getConfirmationRetryDelay,
|
|
75
|
+
exponentialBackoffDelay: this.httpConfig.getConfirmationExponentialBackoffDelay,
|
|
76
|
+
maxExponentialBackoffDelay: this.httpConfig.getConfirmationMaxExponentialBackoffDelay,
|
|
77
|
+
});
|
|
83
78
|
// when found, emit the event 'confirmed'
|
|
84
|
-
result.emit('confirmed',
|
|
85
|
-
})
|
|
79
|
+
result.emit('confirmed', confirmedData);
|
|
80
|
+
}))
|
|
86
81
|
.catch((e) => {
|
|
87
|
-
|
|
88
|
-
if (e.
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
82
|
+
let error = e;
|
|
83
|
+
if (e.status === 404) {
|
|
84
|
+
error = new Error(`Transaction confirmation not received. Try polling
|
|
85
|
+
getTransactionsByChannelId() until the transaction is confirmed.
|
|
86
|
+
deferDelay: ${this.httpConfig.getConfirmationDeferDelay}ms,
|
|
87
|
+
maxRetries: ${this.httpConfig.getConfirmationMaxRetry},
|
|
88
|
+
retryDelay: ${this.httpConfig.getConfirmationRetryDelay}ms,
|
|
89
|
+
exponentialBackoffDelay: ${this.httpConfig.getConfirmationExponentialBackoffDelay}ms,
|
|
90
|
+
maxExponentialBackoffDelay: ${this.httpConfig.getConfirmationMaxExponentialBackoffDelay}ms`);
|
|
93
91
|
}
|
|
92
|
+
result.emit('error', error);
|
|
94
93
|
});
|
|
95
94
|
return result;
|
|
96
95
|
});
|
|
@@ -102,16 +101,11 @@ class HttpDataAccess {
|
|
|
102
101
|
* @param timestampBoundaries filter timestamp boundaries
|
|
103
102
|
*/
|
|
104
103
|
getTransactionsByChannelId(channelId, timestampBoundaries) {
|
|
105
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}), {
|
|
111
|
-
maxRetries: HTTP_REQUEST_MAX_RETRY,
|
|
112
|
-
retryDelay: HTTP_REQUEST_RETRY_DELAY,
|
|
113
|
-
})();
|
|
114
|
-
return data;
|
|
104
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
105
|
+
return yield this.fetchAndRetry('/getTransactionsByChannelId', {
|
|
106
|
+
channelId,
|
|
107
|
+
timestampBoundaries,
|
|
108
|
+
});
|
|
115
109
|
});
|
|
116
110
|
}
|
|
117
111
|
/**
|
|
@@ -121,16 +115,11 @@ class HttpDataAccess {
|
|
|
121
115
|
* @param updatedBetween filter timestamp boundaries
|
|
122
116
|
*/
|
|
123
117
|
getChannelsByTopic(topic, updatedBetween) {
|
|
124
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
}), {
|
|
130
|
-
maxRetries: HTTP_REQUEST_MAX_RETRY,
|
|
131
|
-
retryDelay: HTTP_REQUEST_RETRY_DELAY,
|
|
132
|
-
})();
|
|
133
|
-
return data;
|
|
118
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
119
|
+
return yield this.fetchAndRetry('/getChannelsByTopic', {
|
|
120
|
+
topic,
|
|
121
|
+
updatedBetween,
|
|
122
|
+
});
|
|
134
123
|
});
|
|
135
124
|
}
|
|
136
125
|
/**
|
|
@@ -140,34 +129,63 @@ class HttpDataAccess {
|
|
|
140
129
|
* @param updatedBetween filter timestamp boundaries
|
|
141
130
|
*/
|
|
142
131
|
getChannelsByMultipleTopics(topics, updatedBetween) {
|
|
143
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}), {
|
|
149
|
-
maxRetries: HTTP_REQUEST_MAX_RETRY,
|
|
150
|
-
retryDelay: HTTP_REQUEST_RETRY_DELAY,
|
|
151
|
-
})();
|
|
152
|
-
return data;
|
|
132
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
133
|
+
return yield this.fetchAndRetry('/getChannelsByMultipleTopics', {
|
|
134
|
+
topics,
|
|
135
|
+
updatedBetween,
|
|
136
|
+
});
|
|
153
137
|
});
|
|
154
138
|
}
|
|
155
139
|
/**
|
|
156
140
|
* Gets information from the node (version, files etc...)
|
|
157
141
|
*
|
|
158
|
-
* @param detailed if true get the list of files hashes
|
|
159
142
|
*/
|
|
160
|
-
_getStatus(
|
|
161
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
143
|
+
_getStatus() {
|
|
144
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
145
|
+
return yield this.fetchAndRetry('/information', {});
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Sends an HTTP GET request to the node and retries until it succeeds.
|
|
150
|
+
* Throws when the retry count reaches a maximum.
|
|
151
|
+
*
|
|
152
|
+
* @param url HTTP GET request url
|
|
153
|
+
* @param params HTTP GET request parameters
|
|
154
|
+
* @param retryConfig Maximum retry count, delay between retries, exponential backoff delay, and maximum exponential backoff delay
|
|
155
|
+
*/
|
|
156
|
+
fetchAndRetry(path, params, retryConfig = {}) {
|
|
157
|
+
var _a, _b, _c, _d;
|
|
158
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
159
|
+
retryConfig.maxRetries = (_a = retryConfig.maxRetries) !== null && _a !== void 0 ? _a : this.httpConfig.httpRequestMaxRetry;
|
|
160
|
+
retryConfig.retryDelay = (_b = retryConfig.retryDelay) !== null && _b !== void 0 ? _b : this.httpConfig.httpRequestRetryDelay;
|
|
161
|
+
retryConfig.exponentialBackoffDelay =
|
|
162
|
+
(_c = retryConfig.exponentialBackoffDelay) !== null && _c !== void 0 ? _c : this.httpConfig.httpRequestExponentialBackoffDelay;
|
|
163
|
+
retryConfig.maxExponentialBackoffDelay =
|
|
164
|
+
(_d = retryConfig.maxExponentialBackoffDelay) !== null && _d !== void 0 ? _d : this.httpConfig.httpRequestMaxExponentialBackoffDelay;
|
|
165
|
+
return yield (0, utils_1.retry)(() => tslib_1.__awaiter(this, void 0, void 0, function* () { return yield this.fetch('GET', path, params); }), retryConfig)();
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
fetch(method, path, params, body) {
|
|
169
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
170
|
+
const _a = this.nodeConnectionConfig, { baseURL, headers } = _a, options = tslib_1.__rest(_a, ["baseURL", "headers"]);
|
|
171
|
+
const url = new URL(path, baseURL);
|
|
172
|
+
if (params) {
|
|
173
|
+
// qs.parse doesn't handle well mixes of string and object params
|
|
174
|
+
for (const [key, value] of Object.entries(params)) {
|
|
175
|
+
if (typeof value === 'object') {
|
|
176
|
+
params[key] = JSON.stringify(value);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
url.search = (0, qs_1.stringify)(params);
|
|
180
|
+
}
|
|
181
|
+
const r = yield fetch(url, Object.assign({ method, body: body ? JSON.stringify(body) : undefined, headers: Object.assign({ 'Content-Type': 'application/json' }, headers) }, options));
|
|
182
|
+
if (r.ok) {
|
|
183
|
+
return yield r.json();
|
|
184
|
+
}
|
|
185
|
+
throw Object.assign(new Error(r.statusText), {
|
|
186
|
+
status: r.status,
|
|
187
|
+
statusText: r.statusText,
|
|
188
|
+
});
|
|
171
189
|
});
|
|
172
190
|
}
|
|
173
191
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-data-access.js","sourceRoot":"","sources":["../src/http-data-access.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http-data-access.js","sourceRoot":"","sources":["../src/http-data-access.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { DataAccessTypes } from '@requestnetwork/types';
|
|
2
|
-
import {
|
|
3
|
-
import HttpDataAccess from './http-data-access';
|
|
1
|
+
import { ClientTypes, DataAccessTypes } from '@requestnetwork/types';
|
|
2
|
+
import HttpDataAccess, { NodeConnectionConfig } from './http-data-access';
|
|
4
3
|
/**
|
|
5
4
|
* Exposes a Data-Access module over HTTP
|
|
6
5
|
*/
|
|
@@ -17,15 +16,16 @@ export default class HttpMetaMaskDataAccess extends HttpDataAccess {
|
|
|
17
16
|
} | null;
|
|
18
17
|
};
|
|
19
18
|
};
|
|
20
|
-
private submitterContract;
|
|
21
19
|
private provider;
|
|
22
20
|
private networkName;
|
|
23
21
|
/**
|
|
24
22
|
* Creates an instance of HttpDataAccess.
|
|
25
|
-
* @param
|
|
23
|
+
* @param httpConfig Http config that will be used by the underlying http-data-access. @see ClientTypes.IHttpDataAccessConfig
|
|
24
|
+
* @param nodeConnectionConfig Configuration options to connect to the node.
|
|
26
25
|
*/
|
|
27
|
-
constructor({ nodeConnectionConfig, web3, ethereumProviderUrl, }?: {
|
|
28
|
-
|
|
26
|
+
constructor({ httpConfig, nodeConnectionConfig, web3, ethereumProviderUrl, }?: {
|
|
27
|
+
httpConfig?: Partial<ClientTypes.IHttpDataAccessConfig>;
|
|
28
|
+
nodeConnectionConfig?: NodeConnectionConfig;
|
|
29
29
|
web3?: any;
|
|
30
30
|
ethereumProviderUrl?: string;
|
|
31
31
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-metamask-data-access.d.ts","sourceRoot":"","sources":["../src/http-metamask-data-access.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"http-metamask-data-access.d.ts","sourceRoot":"","sources":["../src/http-metamask-data-access.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAiB,eAAe,EAAgB,MAAM,uBAAuB,CAAC;AAGlG,OAAO,cAAc,EAAE,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1E;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,cAAc;IAChE;;;OAGG;IACI,KAAK,EAAE;QACZ,CAAC,SAAS,EAAE,MAAM,GAAG;YACnB,CAAC,QAAQ,EAAE,MAAM,GAAG;gBAAE,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC;gBAAC,WAAW,EAAE,GAAG,CAAA;aAAE,GAAG,IAAI,CAAC;SAChF,CAAC;KACH,CAAM;IAEP,OAAO,CAAC,QAAQ,CAAmE;IACnF,OAAO,CAAC,WAAW,CAAyC;IAE5D;;;;OAIG;gBAED,EACE,UAAU,EACV,oBAAoB,EACpB,IAAI,EACJ,mBAAmB,GACpB,GAAE;QACD,UAAU,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QACxD,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;QAC5C,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAG9B;IAYH;;;;OAIG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKxC;;;;;OAKG;IACU,kBAAkB,CAC7B,eAAe,EAAE,eAAe,CAAC,YAAY,EAC7C,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,eAAe,CAAC,yBAAyB,CAAC;IAsGrD;;;;;OAKG;IACU,0BAA0B,CACrC,SAAS,EAAE,MAAM,EACjB,mBAAmB,CAAC,EAAE,eAAe,CAAC,oBAAoB,GACzD,OAAO,CAAC,eAAe,CAAC,sBAAsB,CAAC;IAiClD;;;;;;;OAOG;IACI,kCAAkC,CACvC,SAAS,EAAE,MAAM,EACjB,uBAAuB,EAAE,MAAM,EAAE,EACjC,mBAAmB,CAAC,EAAE,eAAe,CAAC,oBAAoB,GACzD,eAAe,CAAC,sBAAsB;CAqC1C"}
|