Comparing version 0.1.7-blockwallet.0 to 0.1.7-blockwallet.1
@@ -76,2 +76,8 @@ import { Request, Response } from '@rpch/common'; | ||
/** | ||
* Remove request from requestCache and add failed metric | ||
* @param req Request | ||
* @returns void | ||
*/ | ||
handleFailedRequest(req: Request): void; | ||
/** | ||
* Start the SDK and initialize necessary data. | ||
@@ -78,0 +84,0 @@ */ |
@@ -54,2 +54,3 @@ "use strict"; | ||
var import_cross_fetch = __toESM(require("cross-fetch")); | ||
var import_async_retry = __toESM(require("async-retry")); | ||
var import_reliability_score = __toESM(require("./reliability-score")); | ||
@@ -59,2 +60,3 @@ var import_request_cache = __toESM(require("./request-cache")); | ||
const log = (0, import_utils.createLogger)(); | ||
const MAXIMUM_SEGMENTS_PER_REQUEST = 100; | ||
const DEADLOCK_MS = 1e3 * 60 * 0.5; | ||
@@ -82,50 +84,57 @@ class SDK { | ||
return __async(this, null, function* () { | ||
log.verbose("Selecting entry node"); | ||
const rawResponse = yield (0, import_cross_fetch.default)( | ||
new URL( | ||
"/api/v1/request/entry-node", | ||
discoveryPlatformApiEndpoint | ||
).toString(), | ||
{ | ||
method: "POST", | ||
headers: { | ||
"Content-Type": "application/json", | ||
"Accept-Content": "application/json" | ||
}, | ||
body: JSON.stringify({ | ||
client: this.ops.client, | ||
exclusionList | ||
}) | ||
try { | ||
this.selectingEntryNode = true; | ||
log.verbose("Selecting entry node"); | ||
const rawResponse = yield (0, import_cross_fetch.default)( | ||
new URL( | ||
"/api/v1/request/entry-node", | ||
discoveryPlatformApiEndpoint | ||
).toString(), | ||
{ | ||
method: "POST", | ||
headers: { | ||
"Content-Type": "application/json", | ||
"Accept-Content": "application/json" | ||
}, | ||
body: JSON.stringify({ | ||
client: this.ops.client, | ||
exclusionList | ||
}) | ||
} | ||
); | ||
const response = yield rawResponse.json(); | ||
if (rawResponse.status !== 200) { | ||
log.error("Failed to request entry node", rawResponse.status, response); | ||
throw new Error(`Failed to request entry node`); | ||
} | ||
); | ||
const response = yield rawResponse.json(); | ||
if (rawResponse.status !== 200) { | ||
log.error("Failed to request entry node", rawResponse.status, response); | ||
throw new Error(`Failed to request entry node`); | ||
const apiEndpointUrl = new URL(response.hoprd_api_endpoint); | ||
this.entryNode = { | ||
apiEndpoint: apiEndpointUrl.toString(), | ||
apiToken: response.accessToken, | ||
peerId: response.id | ||
}; | ||
log.verbose("Selected entry node", this.entryNode); | ||
if (this.stopMessageListener) | ||
this.stopMessageListener(); | ||
this.stopMessageListener = yield import_common.hoprd.createMessageListener( | ||
this.entryNode.apiEndpoint, | ||
this.entryNode.apiToken, | ||
(message) => { | ||
try { | ||
const segment = import_common.Segment.fromString(message); | ||
this.segmentCache.onSegment(segment); | ||
} catch (e) { | ||
log.verbose( | ||
"rejected received data from HOPRd: not a valid segment", | ||
message | ||
); | ||
} | ||
} | ||
); | ||
return this.entryNode; | ||
} catch (error) { | ||
throw error; | ||
} finally { | ||
this.selectingEntryNode = false; | ||
} | ||
const apiEndpointUrl = new URL(response.hoprd_api_endpoint); | ||
this.entryNode = { | ||
apiEndpoint: apiEndpointUrl.toString(), | ||
apiToken: response.accessToken, | ||
peerId: response.id | ||
}; | ||
log.verbose("Selected entry node", this.entryNode); | ||
if (this.stopMessageListener) | ||
this.stopMessageListener(); | ||
this.stopMessageListener = yield import_common.hoprd.createMessageListener( | ||
this.entryNode.apiEndpoint, | ||
this.entryNode.apiToken, | ||
(message) => { | ||
try { | ||
const segment = import_common.Segment.fromString(message); | ||
this.segmentCache.onSegment(segment); | ||
} catch (e) { | ||
log.verbose( | ||
"rejected received data from HOPRd: not a valid segment", | ||
message | ||
); | ||
} | ||
} | ||
); | ||
return this.entryNode; | ||
}); | ||
@@ -163,32 +172,41 @@ } | ||
} | ||
const counter = yield this.getKeyVal( | ||
match.request.exitNodeDestination | ||
).then((k) => BigInt(k || "0")); | ||
const response = import_common.Response.fromMessage( | ||
this.crypto, | ||
match.request, | ||
message, | ||
counter, | ||
(exitNodeId, counter2) => { | ||
this.setKeyVal(exitNodeId, counter2.toString()); | ||
} | ||
); | ||
const responseTime = Date.now() - match.createdAt.getTime(); | ||
log.verbose( | ||
"response time for request %s: %s ms", | ||
match.request.id, | ||
responseTime, | ||
log.createMetric({ | ||
id: match.request.id, | ||
responseTime | ||
}) | ||
); | ||
match.resolve(response); | ||
this.reliabilityScore.addMetric( | ||
match.request.entryNodeDestination, | ||
match.request.id, | ||
"success" | ||
); | ||
this.requestCache.removeRequest(match.request); | ||
log.verbose("responded to %s with %s", match.request.body, response.body); | ||
try { | ||
const counter = yield this.getKeyVal( | ||
match.request.exitNodeDestination | ||
).then((k) => BigInt(k || "0")); | ||
const response = import_common.Response.fromMessage( | ||
this.crypto, | ||
match.request, | ||
message, | ||
counter, | ||
(exitNodeId, counter2) => { | ||
this.setKeyVal(exitNodeId, counter2.toString()); | ||
} | ||
); | ||
const responseTime = Date.now() - match.createdAt.getTime(); | ||
log.verbose( | ||
"response time for request %s: %s ms", | ||
match.request.id, | ||
responseTime, | ||
log.createMetric({ | ||
id: match.request.id, | ||
responseTime | ||
}) | ||
); | ||
match.resolve(response); | ||
this.reliabilityScore.addMetric( | ||
match.request.entryNodeDestination, | ||
match.request.id, | ||
"success" | ||
); | ||
this.requestCache.removeRequest(match.request); | ||
log.verbose("responded to %s with %s", match.request.body, response.body); | ||
} catch (e) { | ||
log.error( | ||
"failed to decrypt message id %s with body", | ||
message.id, | ||
message.body | ||
); | ||
this.handleFailedRequest(match.request); | ||
} | ||
}); | ||
@@ -200,2 +218,8 @@ } | ||
} | ||
handleFailedRequest(req) { | ||
var _a; | ||
this.onRequestRemoval(req); | ||
(_a = this.requestCache.getRequest(req.id)) == null ? void 0 : _a.reject("request failed"); | ||
this.requestCache.removeRequest(req); | ||
} | ||
start() { | ||
@@ -212,2 +236,22 @@ return __async(this, null, function* () { | ||
this.crypto.set_panic_hook(); | ||
yield (0, import_async_retry.default)( | ||
() => this.selectEntryNode(this.ops.discoveryPlatformApiEndpoint), | ||
{ | ||
retries: 5, | ||
onRetry: (e, attempt) => { | ||
log.error("Error while selecting entry node", e); | ||
log.verbose("Retrying to select entry node, attempt:", attempt); | ||
} | ||
} | ||
); | ||
yield (0, import_async_retry.default)( | ||
() => this.fetchExitNodes(this.ops.discoveryPlatformApiEndpoint), | ||
{ | ||
retries: 5, | ||
onRetry: (e, attempt) => { | ||
log.error("Error while fetching exit nodes", e); | ||
log.verbose("Retrying to fetch exit nodes, attempt:", attempt); | ||
} | ||
} | ||
); | ||
this.intervals.push( | ||
@@ -221,7 +265,9 @@ setInterval(() => { | ||
setInterval(() => { | ||
this.fetchExitNodes(this.ops.discoveryPlatformApiEndpoint); | ||
this.fetchExitNodes(this.ops.discoveryPlatformApiEndpoint).catch( | ||
(error) => { | ||
log.error("Failed to fetch exit nodes", error); | ||
} | ||
); | ||
}, 6e4) | ||
); | ||
yield this.selectEntryNode(this.ops.discoveryPlatformApiEndpoint); | ||
yield this.fetchExitNodes(this.ops.discoveryPlatformApiEndpoint); | ||
}); | ||
@@ -254,3 +300,2 @@ } | ||
try { | ||
this.selectingEntryNode = true; | ||
yield this.selectEntryNode( | ||
@@ -260,6 +305,4 @@ this.ops.discoveryPlatformApiEndpoint, | ||
); | ||
this.selectingEntryNode = false; | ||
} catch (error) { | ||
log.error("Couldn't find elegible node: ", error); | ||
this.selectingEntryNode = false; | ||
log.error("Couldn't find new entry node: ", error); | ||
this.setDeadlock(DEADLOCK_MS); | ||
@@ -311,2 +354,9 @@ } | ||
const segments = message.toSegments(); | ||
if (segments.length > MAXIMUM_SEGMENTS_PER_REQUEST) { | ||
log.error( | ||
"Request exceeds maximum amount of segments with %s segments", | ||
segments.length | ||
); | ||
return reject("Request is too big"); | ||
} | ||
this.requestCache.addRequest(req, resolve, reject); | ||
@@ -328,11 +378,7 @@ const sendMessagePromises = segments.map((segment) => { | ||
if (rejectedResults.length > 0) { | ||
this.onRequestRemoval(req); | ||
this.requestCache.removeRequest(req); | ||
reject("failed to send message to hoprd"); | ||
this.handleFailedRequest(req); | ||
} | ||
} catch (e) { | ||
log.error("failed to send message to hoprd", e); | ||
this.onRequestRemoval(req); | ||
this.requestCache.removeRequest(req); | ||
reject("failed to send message to hoprd"); | ||
this.handleFailedRequest(req); | ||
} | ||
@@ -339,0 +385,0 @@ })); |
# @rpch/sdk | ||
## 0.1.7-blockwallet.1 | ||
### Patch Changes | ||
- Add large request blocker | ||
- Updated dependencies | ||
- @rpch/crypto-bridge@0.1.7-blockwallet.1 | ||
- @rpch/common@0.1.7-blockwallet.1 | ||
## 0.1.7-blockwallet.0 | ||
@@ -4,0 +13,0 @@ |
@@ -1,5 +0,5 @@ | ||
{"/Users/nioni/Documents/work/hopr/rpch/rpch/packages/sdk/src/index.ts": {"path":"/Users/nioni/Documents/work/hopr/rpch/rpch/packages/sdk/src/index.ts","statementMap":{"0":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"1":{"start":{"line":13,"column":0},"end":{"line":13,"column":45}},"2":{"start":{"line":14,"column":0},"end":{"line":14,"column":32}},"3":{"start":{"line":15,"column":0},"end":{"line":15,"column":62}},"4":{"start":{"line":16,"column":0},"end":{"line":16,"column":43}},"5":{"start":{"line":17,"column":0},"end":{"line":17,"column":39}},"6":{"start":{"line":19,"column":12},"end":{"line":19,"column":26}},"7":{"start":{"line":20,"column":20},"end":{"line":20,"column":34}},"8":{"start":{"line":73,"column":21},"end":{"line":73,"column":36}},"9":{"start":{"line":74,"column":12},"end":{"line":74,"column":65}},"10":{"start":{"line":75,"column":12},"end":{"line":75,"column":67}},"11":{"start":{"line":57,"column":10},"end":{"line":57,"column":41}},"12":{"start":{"line":64,"column":10},"end":{"line":64,"column":37}},"13":{"start":{"line":77,"column":4},"end":{"line":77,"column":79}},"14":{"start":{"line":77,"column":54},"end":{"line":77,"column":77}},"15":{"start":{"line":78,"column":4},"end":{"line":80,"column":6}},"16":{"start":{"line":79,"column":6},"end":{"line":79,"column":36}},"17":{"start":{"line":81,"column":4},"end":{"line":84,"column":6}},"18":{"start":{"line":91,"column":4},"end":{"line":91,"column":57}},"19":{"start":{"line":107,"column":4},"end":{"line":107,"column":40}},"20":{"start":{"line":108,"column":45},"end":{"line":123,"column":null}},"21":{"start":{"line":130,"column":8},"end":{"line":130,"column":32}},"22":{"start":{"line":133,"column":4},"end":{"line":136,"column":null}},"23":{"start":{"line":134,"column":6},"end":{"line":134,"column":78}},"24":{"start":{"line":135,"column":6},"end":{"line":135,"column":54}},"25":{"start":{"line":138,"column":27},"end":{"line":138,"column":63}},"26":{"start":{"line":140,"column":4},"end":{"line":144,"column":6}},"27":{"start":{"line":145,"column":4},"end":{"line":145,"column":55}},"28":{"start":{"line":148,"column":4},"end":{"line":148,"column":61}},"29":{"start":{"line":148,"column":34},"end":{"line":148,"column":61}},"30":{"start":{"line":149,"column":4},"end":{"line":163,"column":6}},"31":{"start":{"line":153,"column":8},"end":{"line":161,"column":null}},"32":{"start":{"line":154,"column":26},"end":{"line":154,"column":53}},"33":{"start":{"line":155,"column":10},"end":{"line":155,"column":47}},"34":{"start":{"line":157,"column":10},"end":{"line":160,"column":12}},"35":{"start":{"line":164,"column":4},"end":{"line":164,"column":26}},"36":{"start":{"line":175,"column":4},"end":{"line":175,"column":39}},"37":{"start":{"line":179,"column":10},"end":{"line":184,"column":31}},"38":{"start":{"line":184,"column":20},"end":{"line":184,"column":30}},"39":{"start":{"line":186,"column":4},"end":{"line":189,"column":8}},"40":{"start":{"line":186,"column":45},"end":{"line":189,"column":6}},"41":{"start":{"line":191,"column":4},"end":{"line":191,"column":76}},"42":{"start":{"line":191,"column":37},"end":{"line":191,"column":76}},"43":{"start":{"line":193,"column":4},"end":{"line":193,"column":61}},"44":{"start":{"line":194,"column":4},"end":{"line":194,"column":26}},"45":{"start":{"line":203,"column":18},"end":{"line":203,"column":58}},"46":{"start":{"line":204,"column":4},"end":{"line":211,"column":null}},"47":{"start":{"line":205,"column":6},"end":{"line":209,"column":8}},"48":{"start":{"line":210,"column":6},"end":{"line":210,"column":13}},"49":{"start":{"line":213,"column":20},"end":{"line":215,"column":35}},"50":{"start":{"line":215,"column":18},"end":{"line":215,"column":34}},"51":{"start":{"line":218,"column":21},"end":{"line":225,"column":null}},"52":{"start":{"line":224,"column":8},"end":{"line":224,"column":55}},"53":{"start":{"line":228,"column":25},"end":{"line":228,"column":63}},"54":{"start":{"line":229,"column":4},"end":{"line":237,"column":6}},"55":{"start":{"line":239,"column":4},"end":{"line":239,"column":28}},"56":{"start":{"line":240,"column":4},"end":{"line":244,"column":6}},"57":{"start":{"line":245,"column":4},"end":{"line":245,"column":51}},"58":{"start":{"line":247,"column":4},"end":{"line":247,"column":78}},"59":{"start":{"line":257,"column":4},"end":{"line":257,"column":80}},"60":{"start":{"line":258,"column":4},"end":{"line":258,"column":45}},"61":{"start":{"line":265,"column":4},"end":{"line":265,"column":29}},"62":{"start":{"line":265,"column":22},"end":{"line":265,"column":29}},"63":{"start":{"line":268,"column":4},"end":{"line":290,"column":null}},"64":{"start":{"line":272,"column":6},"end":{"line":272,"column":61}},"65":{"start":{"line":273,"column":6},"end":{"line":274,"column":71}},"66":{"start":{"line":277,"column":9},"end":{"line":290,"column":null}},"67":{"start":{"line":278,"column":6},"end":{"line":280,"column":39}},"68":{"start":{"line":278,"column":21},"end":{"line":279,"column":null}},"69":{"start":{"line":284,"column":6},"end":{"line":284,"column":60}},"70":{"start":{"line":285,"column":6},"end":{"line":287,"column":33}},"71":{"start":{"line":285,"column":21},"end":{"line":286,"column":null}},"72":{"start":{"line":289,"column":6},"end":{"line":289,"column":31}},"73":{"start":{"line":293,"column":4},"end":{"line":298,"column":6}},"74":{"start":{"line":295,"column":8},"end":{"line":295,"column":58}},"75":{"start":{"line":296,"column":8},"end":{"line":296,"column":58}},"76":{"start":{"line":300,"column":4},"end":{"line":304,"column":6}},"77":{"start":{"line":302,"column":8},"end":{"line":302,"column":67}},"78":{"start":{"line":306,"column":4},"end":{"line":306,"column":70}},"79":{"start":{"line":307,"column":4},"end":{"line":307,"column":69}},"80":{"start":{"line":314,"column":4},"end":{"line":314,"column":61}},"81":{"start":{"line":314,"column":34},"end":{"line":314,"column":61}},"82":{"start":{"line":315,"column":4},"end":{"line":317,"column":null}},"83":{"start":{"line":316,"column":6},"end":{"line":316,"column":30}},"84":{"start":{"line":327,"column":4},"end":{"line":327,"column":71}},"85":{"start":{"line":327,"column":23},"end":{"line":327,"column":71}},"86":{"start":{"line":328,"column":4},"end":{"line":328,"column":62}},"87":{"start":{"line":328,"column":29},"end":{"line":328,"column":62}},"88":{"start":{"line":329,"column":4},"end":{"line":329,"column":76}},"89":{"start":{"line":329,"column":33},"end":{"line":329,"column":76}},"90":{"start":{"line":331,"column":33},"end":{"line":332,"column":null}},"91":{"start":{"line":334,"column":36},"end":{"line":334,"column":38}},"92":{"start":{"line":335,"column":4},"end":{"line":354,"column":null}},"93":{"start":{"line":339,"column":6},"end":{"line":339,"column":75}},"94":{"start":{"line":340,"column":6},"end":{"line":340,"column":49}},"95":{"start":{"line":341,"column":6},"end":{"line":352,"column":null}},"96":{"start":{"line":342,"column":8},"end":{"line":342,"column":39}},"97":{"start":{"line":343,"column":8},"end":{"line":346,"column":10}},"98":{"start":{"line":347,"column":8},"end":{"line":347,"column":40}},"99":{"start":{"line":349,"column":8},"end":{"line":349,"column":58}},"100":{"start":{"line":350,"column":8},"end":{"line":350,"column":40}},"101":{"start":{"line":351,"column":8},"end":{"line":351,"column":38}},"102":{"start":{"line":353,"column":6},"end":{"line":353,"column":40}},"103":{"start":{"line":357,"column":30},"end":{"line":358,"column":null}},"104":{"start":{"line":358,"column":16},"end":{"line":358,"column":null}},"105":{"start":{"line":360,"column":21},"end":{"line":360,"column":69}},"106":{"start":{"line":361,"column":4},"end":{"line":368,"column":6}},"107":{"start":{"line":376,"column":4},"end":{"line":376,"column":46}},"108":{"start":{"line":376,"column":33},"end":{"line":376,"column":46}},"109":{"start":{"line":377,"column":16},"end":{"line":377,"column":26}},"110":{"start":{"line":378,"column":4},"end":{"line":380,"column":null}},"111":{"start":{"line":379,"column":6},"end":{"line":379,"column":69}},"112":{"start":{"line":381,"column":4},"end":{"line":381,"column":40}},"113":{"start":{"line":389,"column":16},"end":{"line":389,"column":26}},"114":{"start":{"line":390,"column":4},"end":{"line":390,"column":44}},"115":{"start":{"line":391,"column":4},"end":{"line":391,"column":66}},"116":{"start":{"line":400,"column":4},"end":{"line":400,"column":69}},"117":{"start":{"line":400,"column":23},"end":{"line":400,"column":69}},"118":{"start":{"line":401,"column":4},"end":{"line":401,"column":62}},"119":{"start":{"line":401,"column":29},"end":{"line":401,"column":62}},"120":{"start":{"line":403,"column":4},"end":{"line":428,"column":7}},"121":{"start":{"line":403,"column":49},"end":{"line":428,"column":6}},"122":{"start":{"line":404,"column":22},"end":{"line":404,"column":37}},"123":{"start":{"line":405,"column":23},"end":{"line":405,"column":43}},"124":{"start":{"line":406,"column":6},"end":{"line":406,"column":57}},"125":{"start":{"line":407,"column":29},"end":{"line":407,"column":34}},"126":{"start":{"line":408,"column":6},"end":{"line":421,"column":null}},"127":{"start":{"line":409,"column":8},"end":{"line":420,"column":13}},"128":{"start":{"line":418,"column":12},"end":{"line":418,"column":80}},"129":{"start":{"line":419,"column":12},"end":{"line":419,"column":36}},"130":{"start":{"line":423,"column":6},"end":{"line":427,"column":null}},"131":{"start":{"line":424,"column":8},"end":{"line":424,"column":35}},"132":{"start":{"line":425,"column":8},"end":{"line":425,"column":45}},"133":{"start":{"line":426,"column":8},"end":{"line":426,"column":50}},"134":{"start":{"line":54,"column":0},"end":{"line":54,"column":21}}},"fnMap":{"0":{"name":"(anonymous_14)","decl":{"start":{"line":72,"column":2},"end":{"line":72,"column":null}},"loc":{"start":{"line":75,"column":67},"end":{"line":85,"column":3}}},"1":{"name":"(anonymous_15)","decl":{"start":{"line":77,"column":41},"end":{"line":77,"column":42}},"loc":{"start":{"line":77,"column":54},"end":{"line":77,"column":77}}},"2":{"name":"(anonymous_16)","decl":{"start":{"line":78,"column":41},"end":{"line":78,"column":42}},"loc":{"start":{"line":79,"column":6},"end":{"line":79,"column":36}}},"3":{"name":"(anonymous_17)","decl":{"start":{"line":90,"column":2},"end":{"line":90,"column":13}},"loc":{"start":{"line":90,"column":20},"end":{"line":92,"column":3}}},"4":{"name":"(anonymous_18)","decl":{"start":{"line":99,"column":16},"end":{"line":99,"column":31}},"loc":{"start":{"line":101,"column":28},"end":{"line":165,"column":null}}},"5":{"name":"(anonymous_20)","decl":{"start":{"line":152,"column":6},"end":{"line":152,"column":7}},"loc":{"start":{"line":152,"column":18},"end":{"line":162,"column":7}}},"6":{"name":"(anonymous_21)","decl":{"start":{"line":172,"column":16},"end":{"line":172,"column":30}},"loc":{"start":{"line":173,"column":40},"end":{"line":195,"column":null}}},"7":{"name":"(anonymous_23)","decl":{"start":{"line":184,"column":11},"end":{"line":184,"column":12}},"loc":{"start":{"line":184,"column":20},"end":{"line":184,"column":30}}},"8":{"name":"(anonymous_24)","decl":{"start":{"line":186,"column":34},"end":{"line":186,"column":35}},"loc":{"start":{"line":186,"column":45},"end":{"line":189,"column":6}}},"9":{"name":"(anonymous_25)","decl":{"start":{"line":201,"column":16},"end":{"line":201,"column":25}},"loc":{"start":{"line":201,"column":42},"end":{"line":248,"column":null}}},"10":{"name":"(anonymous_27)","decl":{"start":{"line":215,"column":11},"end":{"line":215,"column":12}},"loc":{"start":{"line":215,"column":18},"end":{"line":215,"column":34}}},"11":{"name":"(anonymous_28)","decl":{"start":{"line":223,"column":6},"end":{"line":223,"column":7}},"loc":{"start":{"line":223,"column":30},"end":{"line":225,"column":7}}},"12":{"name":"(anonymous_29)","decl":{"start":{"line":255,"column":10},"end":{"line":255,"column":26}},"loc":{"start":{"line":255,"column":39},"end":{"line":259,"column":3}}},"13":{"name":"(anonymous_30)","decl":{"start":{"line":264,"column":15},"end":{"line":264,"column":20}},"loc":{"start":{"line":264,"column":20},"end":{"line":308,"column":null}}},"14":{"name":"(anonymous_32)","decl":{"start":{"line":278,"column":21},"end":{"line":278,"column":null}},"loc":{"start":{"line":278,"column":21},"end":{"line":279,"column":null}}},"15":{"name":"(anonymous_33)","decl":{"start":{"line":285,"column":21},"end":{"line":285,"column":null}},"loc":{"start":{"line":285,"column":21},"end":{"line":286,"column":null}}},"16":{"name":"(anonymous_34)","decl":{"start":{"line":294,"column":18},"end":{"line":294,"column":21}},"loc":{"start":{"line":294,"column":23},"end":{"line":297,"column":7}}},"17":{"name":"(anonymous_35)","decl":{"start":{"line":301,"column":18},"end":{"line":301,"column":21}},"loc":{"start":{"line":301,"column":23},"end":{"line":303,"column":7}}},"18":{"name":"(anonymous_36)","decl":{"start":{"line":313,"column":15},"end":{"line":313,"column":19}},"loc":{"start":{"line":313,"column":19},"end":{"line":318,"column":null}}},"19":{"name":"(anonymous_38)","decl":{"start":{"line":326,"column":15},"end":{"line":326,"column":28}},"loc":{"start":{"line":326,"column":59},"end":{"line":369,"column":null}}},"20":{"name":"(anonymous_40)","decl":{"start":{"line":358,"column":6},"end":{"line":358,"column":7}},"loc":{"start":{"line":358,"column":15},"end":{"line":358,"column":null}}},"21":{"name":"(anonymous_41)","decl":{"start":{"line":375,"column":10},"end":{"line":375,"column":22}},"loc":{"start":{"line":375,"column":22},"end":{"line":382,"column":3}}},"22":{"name":"(anonymous_42)","decl":{"start":{"line":388,"column":9},"end":{"line":388,"column":20}},"loc":{"start":{"line":388,"column":37},"end":{"line":392,"column":3}}},"23":{"name":"(anonymous_43)","decl":{"start":{"line":399,"column":15},"end":{"line":399,"column":26}},"loc":{"start":{"line":399,"column":39},"end":{"line":429,"column":null}}},"24":{"name":"(anonymous_45)","decl":{"start":{"line":403,"column":23},"end":{"line":403,"column":30}},"loc":{"start":{"line":403,"column":49},"end":{"line":428,"column":6}}},"25":{"name":"(anonymous_46)","decl":{"start":{"line":403,"column":49},"end":{"line":403,"column":null}},"loc":{"start":{"line":403,"column":49},"end":{"line":428,"column":5}}},"26":{"name":"(anonymous_47)","decl":{"start":{"line":417,"column":17},"end":{"line":417,"column":18}},"loc":{"start":{"line":417,"column":23},"end":{"line":420,"column":11}}}},"branchMap":{"0":{"loc":{"start":{"line":82,"column":6},"end":{"line":82,"column":50}},"type":"binary-expr","locations":[{"start":{"line":82,"column":6},"end":{"line":82,"column":44}},{"start":{"line":82,"column":48},"end":{"line":82,"column":50}}]},"1":{"loc":{"start":{"line":83,"column":6},"end":{"line":83,"column":45}},"type":"binary-expr","locations":[{"start":{"line":83,"column":6},"end":{"line":83,"column":38}},{"start":{"line":83,"column":42},"end":{"line":83,"column":45}}]},"2":{"loc":{"start":{"line":91,"column":11},"end":{"line":91,"column":56}},"type":"binary-expr","locations":[{"start":{"line":91,"column":11},"end":{"line":91,"column":27}},{"start":{"line":91,"column":31},"end":{"line":91,"column":56}}]},"3":{"loc":{"start":{"line":133,"column":4},"end":{"line":136,"column":null}},"type":"if","locations":[{"start":{"line":133,"column":4},"end":{"line":136,"column":null}}]},"4":{"loc":{"start":{"line":148,"column":4},"end":{"line":148,"column":61}},"type":"if","locations":[{"start":{"line":148,"column":4},"end":{"line":148,"column":61}}]},"5":{"loc":{"start":{"line":191,"column":4},"end":{"line":191,"column":76}},"type":"if","locations":[{"start":{"line":191,"column":4},"end":{"line":191,"column":76}}]},"6":{"loc":{"start":{"line":204,"column":4},"end":{"line":211,"column":null}},"type":"if","locations":[{"start":{"line":204,"column":4},"end":{"line":211,"column":null}}]},"7":{"loc":{"start":{"line":215,"column":25},"end":{"line":215,"column":33}},"type":"binary-expr","locations":[{"start":{"line":215,"column":25},"end":{"line":215,"column":26}},{"start":{"line":215,"column":30},"end":{"line":215,"column":33}}]},"8":{"loc":{"start":{"line":265,"column":4},"end":{"line":265,"column":29}},"type":"if","locations":[{"start":{"line":265,"column":4},"end":{"line":265,"column":29}}]},"9":{"loc":{"start":{"line":268,"column":4},"end":{"line":290,"column":null}},"type":"if","locations":[{"start":{"line":268,"column":4},"end":{"line":290,"column":null}},{"start":{"line":277,"column":9},"end":{"line":290,"column":null}}]},"10":{"loc":{"start":{"line":269,"column":6},"end":{"line":270,"column":72}},"type":"binary-expr","locations":[{"start":{"line":269,"column":6},"end":{"line":269,"column":49}},{"start":{"line":270,"column":7},"end":{"line":270,"column":38}},{"start":{"line":270,"column":42},"end":{"line":270,"column":71}}]},"11":{"loc":{"start":{"line":277,"column":9},"end":{"line":290,"column":null}},"type":"if","locations":[{"start":{"line":277,"column":9},"end":{"line":290,"column":null}},{"start":{"line":283,"column":9},"end":{"line":290,"column":null}}]},"12":{"loc":{"start":{"line":314,"column":4},"end":{"line":314,"column":61}},"type":"if","locations":[{"start":{"line":314,"column":4},"end":{"line":314,"column":61}}]},"13":{"loc":{"start":{"line":327,"column":4},"end":{"line":327,"column":71}},"type":"if","locations":[{"start":{"line":327,"column":4},"end":{"line":327,"column":71}}]},"14":{"loc":{"start":{"line":328,"column":4},"end":{"line":328,"column":62}},"type":"if","locations":[{"start":{"line":328,"column":4},"end":{"line":328,"column":62}}]},"15":{"loc":{"start":{"line":329,"column":4},"end":{"line":329,"column":76}},"type":"if","locations":[{"start":{"line":329,"column":4},"end":{"line":329,"column":76}}]},"16":{"loc":{"start":{"line":335,"column":4},"end":{"line":354,"column":null}},"type":"if","locations":[{"start":{"line":335,"column":4},"end":{"line":354,"column":null}}]},"17":{"loc":{"start":{"line":336,"column":6},"end":{"line":337,"column":77}},"type":"binary-expr","locations":[{"start":{"line":336,"column":6},"end":{"line":336,"column":26}},{"start":{"line":337,"column":6},"end":{"line":337,"column":77}}]},"18":{"loc":{"start":{"line":358,"column":32},"end":{"line":358,"column":54}},"type":"cond-expr","locations":[{"start":{"line":358,"column":46},"end":{"line":358,"column":48}},{"start":{"line":358,"column":46},"end":{"line":358,"column":54}}]},"19":{"loc":{"start":{"line":358,"column":32},"end":{"line":358,"column":48}},"type":"binary-expr","locations":[{"start":{"line":358,"column":32},"end":{"line":358,"column":48}},{"start":{"line":358,"column":46},"end":{"line":358,"column":48}}]},"20":{"loc":{"start":{"line":376,"column":4},"end":{"line":376,"column":46}},"type":"if","locations":[{"start":{"line":376,"column":4},"end":{"line":376,"column":46}}]},"21":{"loc":{"start":{"line":378,"column":4},"end":{"line":380,"column":null}},"type":"if","locations":[{"start":{"line":378,"column":4},"end":{"line":380,"column":null}}]},"22":{"loc":{"start":{"line":400,"column":4},"end":{"line":400,"column":69}},"type":"if","locations":[{"start":{"line":400,"column":4},"end":{"line":400,"column":69}}]},"23":{"loc":{"start":{"line":401,"column":4},"end":{"line":401,"column":62}},"type":"if","locations":[{"start":{"line":401,"column":4},"end":{"line":401,"column":62}}]},"24":{"loc":{"start":{"line":423,"column":6},"end":{"line":427,"column":null}},"type":"if","locations":[{"start":{"line":423,"column":6},"end":{"line":427,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":20,"9":20,"10":20,"11":20,"12":20,"13":20,"14":0,"15":20,"16":0,"17":20,"18":36,"19":21,"20":21,"21":21,"22":21,"23":1,"24":1,"25":20,"26":20,"27":20,"28":20,"29":2,"30":20,"31":0,"32":0,"33":0,"34":0,"35":20,"36":18,"37":18,"38":18,"39":18,"40":18,"41":18,"42":0,"43":18,"44":18,"45":5,"46":5,"47":1,"48":1,"49":4,"50":4,"51":4,"52":4,"53":4,"54":4,"55":4,"56":4,"57":4,"58":4,"59":6,"60":6,"61":18,"62":0,"63":18,"64":18,"65":18,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":18,"74":0,"75":0,"76":18,"77":0,"78":18,"79":18,"80":18,"81":18,"82":18,"83":36,"84":11,"85":1,"86":10,"87":1,"88":9,"89":2,"90":7,"91":7,"92":7,"93":4,"94":4,"95":4,"96":4,"97":4,"98":4,"99":0,"100":0,"101":0,"102":4,"103":7,"104":7,"105":7,"106":7,"107":16,"108":14,"109":2,"110":2,"111":2,"112":2,"113":3,"114":3,"115":3,"116":7,"117":1,"118":6,"119":1,"120":5,"121":5,"122":5,"123":5,"124":5,"125":5,"126":5,"127":16,"128":16,"129":16,"130":5,"131":5,"132":5,"133":5,"134":1},"f":{"0":20,"1":0,"2":0,"3":36,"4":21,"5":0,"6":18,"7":18,"8":18,"9":5,"10":4,"11":4,"12":6,"13":18,"14":0,"15":0,"16":0,"17":0,"18":18,"19":11,"20":7,"21":16,"22":3,"23":7,"24":5,"25":5,"26":16},"b":{"0":[20,0],"1":[20,20],"2":[36,16],"3":[1],"4":[2],"5":[0],"6":[1],"7":[4,4],"8":[0],"9":[18,0],"10":[18,18,18],"11":[0,0],"12":[18],"13":[1],"14":[1],"15":[2],"16":[4],"17":[7,6],"18":[0,7],"19":[7,7],"20":[14],"21":[2],"22":[1],"23":[1],"24":[5]}} | ||
,"/Users/nioni/Documents/work/hopr/rpch/rpch/packages/sdk/src/reliability-score.ts": {"path":"/Users/nioni/Documents/work/hopr/rpch/rpch/packages/sdk/src/reliability-score.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":39}},"1":{"start":{"line":3,"column":12},"end":{"line":3,"column":47}},"2":{"start":{"line":5,"column":33},"end":{"line":5,"column":36}},"3":{"start":{"line":34,"column":10},"end":{"line":42,"column":6}},"4":{"start":{"line":48,"column":10},"end":{"line":48,"column":44}},"5":{"start":{"line":53,"column":4},"end":{"line":53,"column":51}},"6":{"start":{"line":54,"column":4},"end":{"line":54,"column":38}},"7":{"start":{"line":63,"column":4},"end":{"line":65,"column":null}},"8":{"start":{"line":64,"column":6},"end":{"line":64,"column":53}},"9":{"start":{"line":67,"column":22},"end":{"line":67,"column":69}},"10":{"start":{"line":68,"column":4},"end":{"line":80,"column":6}},"11":{"start":{"line":70,"column":8},"end":{"line":76,"column":null}},"12":{"start":{"line":71,"column":10},"end":{"line":71,"column":24}},"13":{"start":{"line":72,"column":15},"end":{"line":76,"column":null}},"14":{"start":{"line":73,"column":10},"end":{"line":73,"column":26}},"15":{"start":{"line":74,"column":15},"end":{"line":76,"column":null}},"16":{"start":{"line":75,"column":10},"end":{"line":75,"column":23}},"17":{"start":{"line":77,"column":8},"end":{"line":77,"column":19}},"18":{"start":{"line":90,"column":22},"end":{"line":90,"column":46}},"19":{"start":{"line":91,"column":4},"end":{"line":96,"column":6}},"20":{"start":{"line":98,"column":4},"end":{"line":106,"column":null}},"21":{"start":{"line":99,"column":6},"end":{"line":104,"column":8}},"22":{"start":{"line":105,"column":6},"end":{"line":105,"column":44}},"23":{"start":{"line":108,"column":4},"end":{"line":111,"column":7}},"24":{"start":{"line":113,"column":4},"end":{"line":113,"column":26}},"25":{"start":{"line":114,"column":4},"end":{"line":114,"column":53}},"26":{"start":{"line":116,"column":4},"end":{"line":120,"column":6}},"27":{"start":{"line":122,"column":4},"end":{"line":126,"column":6}},"28":{"start":{"line":128,"column":4},"end":{"line":130,"column":6}},"29":{"start":{"line":133,"column":4},"end":{"line":157,"column":null}},"30":{"start":{"line":134,"column":44},"end":{"line":136,"column":42}},"31":{"start":{"line":138,"column":6},"end":{"line":142,"column":null}},"32":{"start":{"line":139,"column":8},"end":{"line":141,"column":null}},"33":{"start":{"line":140,"column":10},"end":{"line":140,"column":50}},"34":{"start":{"line":143,"column":6},"end":{"line":143,"column":61}},"35":{"start":{"line":145,"column":6},"end":{"line":145,"column":27}},"36":{"start":{"line":146,"column":6},"end":{"line":146,"column":55}},"37":{"start":{"line":147,"column":27},"end":{"line":147,"column":48}},"38":{"start":{"line":148,"column":6},"end":{"line":148,"column":43}},"39":{"start":{"line":149,"column":6},"end":{"line":153,"column":8}},"40":{"start":{"line":154,"column":6},"end":{"line":156,"column":8}},"41":{"start":{"line":166,"column":4},"end":{"line":191,"column":null}},"42":{"start":{"line":167,"column":19},"end":{"line":167,"column":49}},"43":{"start":{"line":168,"column":24},"end":{"line":168,"column":65}},"44":{"start":{"line":169,"column":21},"end":{"line":169,"column":59}},"45":{"start":{"line":171,"column":6},"end":{"line":187,"column":null}},"46":{"start":{"line":172,"column":8},"end":{"line":172,"column":34}},"47":{"start":{"line":173,"column":8},"end":{"line":176,"column":10}},"48":{"start":{"line":177,"column":13},"end":{"line":187,"column":null}},"49":{"start":{"line":178,"column":8},"end":{"line":178,"column":49}},"50":{"start":{"line":179,"column":8},"end":{"line":182,"column":10}},"51":{"start":{"line":184,"column":22},"end":{"line":184,"column":44}},"52":{"start":{"line":185,"column":8},"end":{"line":185,"column":38}},"53":{"start":{"line":186,"column":8},"end":{"line":186,"column":72}},"54":{"start":{"line":188,"column":6},"end":{"line":188,"column":37}},"55":{"start":{"line":190,"column":6},"end":{"line":190,"column":30}},"56":{"start":{"line":199,"column":20},"end":{"line":199,"column":44}},"57":{"start":{"line":200,"column":4},"end":{"line":203,"column":7}},"58":{"start":{"line":201,"column":20},"end":{"line":201,"column":41}},"59":{"start":{"line":202,"column":6},"end":{"line":202,"column":31}},"60":{"start":{"line":207,"column":17},"end":{"line":207,"column":52}},"61":{"start":{"line":208,"column":4},"end":{"line":212,"column":null}},"62":{"start":{"line":209,"column":6},"end":{"line":209,"column":21}},"63":{"start":{"line":211,"column":6},"end":{"line":211,"column":25}},"64":{"start":{"line":30,"column":0},"end":{"line":30,"column":21}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":52,"column":2},"end":{"line":52,"column":14}},"loc":{"start":{"line":52,"column":62},"end":{"line":55,"column":3}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":62,"column":10},"end":{"line":62,"column":25}},"loc":{"start":{"line":62,"column":40},"end":{"line":81,"column":3}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":69,"column":6},"end":{"line":69,"column":7}},"loc":{"start":{"line":69,"column":29},"end":{"line":78,"column":7}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":89,"column":9},"end":{"line":89,"column":18}},"loc":{"start":{"line":89,"column":68},"end":{"line":158,"column":3}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":165,"column":9},"end":{"line":165,"column":17}},"loc":{"start":{"line":165,"column":32},"end":{"line":192,"column":3}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":198,"column":9},"end":{"line":198,"column":18}},"loc":{"start":{"line":198,"column":18},"end":{"line":204,"column":3}}},"6":{"name":"(anonymous_6)","decl":{"start":{"line":200,"column":23},"end":{"line":200,"column":24}},"loc":{"start":{"line":200,"column":36},"end":{"line":203,"column":5}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":206,"column":9},"end":{"line":206,"column":18}},"loc":{"start":{"line":206,"column":33},"end":{"line":213,"column":3}}}},"branchMap":{"0":{"loc":{"start":{"line":63,"column":4},"end":{"line":65,"column":null}},"type":"if","locations":[{"start":{"line":63,"column":4},"end":{"line":65,"column":null}}]},"1":{"loc":{"start":{"line":70,"column":8},"end":{"line":76,"column":null}},"type":"if","locations":[{"start":{"line":70,"column":8},"end":{"line":76,"column":null}},{"start":{"line":72,"column":15},"end":{"line":76,"column":null}}]},"2":{"loc":{"start":{"line":72,"column":15},"end":{"line":76,"column":null}},"type":"if","locations":[{"start":{"line":72,"column":15},"end":{"line":76,"column":null}},{"start":{"line":74,"column":15},"end":{"line":76,"column":null}}]},"3":{"loc":{"start":{"line":74,"column":15},"end":{"line":76,"column":null}},"type":"if","locations":[{"start":{"line":74,"column":15},"end":{"line":76,"column":null}}]},"4":{"loc":{"start":{"line":98,"column":4},"end":{"line":106,"column":null}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":106,"column":null}}]},"5":{"loc":{"start":{"line":124,"column":8},"end":{"line":124,"column":null}},"type":"cond-expr","locations":[{"start":{"line":124,"column":32},"end":{"line":124,"column":34}},{"start":{"line":124,"column":32},"end":{"line":124,"column":null}}]},"6":{"loc":{"start":{"line":124,"column":8},"end":{"line":124,"column":34}},"type":"binary-expr","locations":[{"start":{"line":124,"column":8},"end":{"line":124,"column":34}},{"start":{"line":124,"column":32},"end":{"line":124,"column":34}}]},"7":{"loc":{"start":{"line":133,"column":4},"end":{"line":157,"column":null}},"type":"if","locations":[{"start":{"line":133,"column":4},"end":{"line":157,"column":null}}]},"8":{"loc":{"start":{"line":139,"column":8},"end":{"line":141,"column":null}},"type":"if","locations":[{"start":{"line":139,"column":8},"end":{"line":141,"column":null}}]},"9":{"loc":{"start":{"line":166,"column":4},"end":{"line":191,"column":null}},"type":"if","locations":[{"start":{"line":166,"column":4},"end":{"line":191,"column":null}},{"start":{"line":189,"column":11},"end":{"line":191,"column":null}}]},"10":{"loc":{"start":{"line":171,"column":6},"end":{"line":187,"column":null}},"type":"if","locations":[{"start":{"line":171,"column":6},"end":{"line":187,"column":null}},{"start":{"line":177,"column":13},"end":{"line":187,"column":null}}]},"11":{"loc":{"start":{"line":177,"column":13},"end":{"line":187,"column":null}},"type":"if","locations":[{"start":{"line":177,"column":13},"end":{"line":187,"column":null}},{"start":{"line":183,"column":13},"end":{"line":187,"column":null}}]},"12":{"loc":{"start":{"line":207,"column":17},"end":{"line":207,"column":52}},"type":"binary-expr","locations":[{"start":{"line":207,"column":17},"end":{"line":207,"column":47}},{"start":{"line":207,"column":51},"end":{"line":207,"column":52}}]},"13":{"loc":{"start":{"line":207,"column":17},"end":{"line":207,"column":47}},"type":"cond-expr","locations":[{"start":{"line":207,"column":41},"end":{"line":207,"column":43}},{"start":{"line":207,"column":41},"end":{"line":207,"column":47}}]},"14":{"loc":{"start":{"line":207,"column":17},"end":{"line":207,"column":43}},"type":"binary-expr","locations":[{"start":{"line":207,"column":17},"end":{"line":207,"column":43}},{"start":{"line":207,"column":41},"end":{"line":207,"column":43}}]},"15":{"loc":{"start":{"line":208,"column":4},"end":{"line":212,"column":null}},"type":"if","locations":[{"start":{"line":208,"column":4},"end":{"line":212,"column":null}},{"start":{"line":210,"column":11},"end":{"line":212,"column":null}}]}},"s":{"0":2,"1":2,"2":2,"3":30,"4":30,"5":30,"6":30,"7":756,"8":1,"9":755,"10":755,"11":31939,"12":30631,"13":1308,"14":44,"15":1264,"16":1264,"17":31939,"18":376,"19":376,"20":376,"21":21,"22":21,"23":376,"24":376,"25":376,"26":376,"27":376,"28":376,"29":376,"30":3,"31":3,"32":303,"33":301,"34":3,"35":3,"36":3,"37":3,"38":3,"39":3,"40":3,"41":774,"42":771,"43":771,"44":771,"45":771,"46":38,"47":38,"48":733,"49":214,"50":214,"51":519,"52":519,"53":519,"54":771,"55":3,"56":1,"57":1,"58":3,"59":3,"60":6,"61":6,"62":2,"63":4,"64":2},"f":{"0":30,"1":756,"2":31939,"3":376,"4":774,"5":1,"6":3,"7":6},"b":{"0":[1],"1":[30631,1308],"2":[44,1264],"3":[1264],"4":[21],"5":[0,376],"6":[376,376],"7":[3],"8":[301],"9":[771,3],"10":[38,733],"11":[214,519],"12":[6,2],"13":[2,4],"14":[6,6],"15":[2,4]}} | ||
,"/Users/nioni/Documents/work/hopr/rpch/rpch/packages/sdk/src/request-cache.ts": {"path":"/Users/nioni/Documents/work/hopr/rpch/rpch/packages/sdk/src/request-cache.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":56}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":39}},"2":{"start":{"line":4,"column":12},"end":{"line":4,"column":43}},"3":{"start":{"line":22,"column":22},"end":{"line":22,"column":62}},"4":{"start":{"line":12,"column":10},"end":{"line":20,"column":6}},"5":{"start":{"line":35,"column":4},"end":{"line":40,"column":7}},"6":{"start":{"line":48,"column":4},"end":{"line":48,"column":33}},"7":{"start":{"line":56,"column":4},"end":{"line":56,"column":33}},"8":{"start":{"line":64,"column":16},"end":{"line":64,"column":26}},"9":{"start":{"line":66,"column":4},"end":{"line":66,"column":48}},"10":{"start":{"line":67,"column":4},"end":{"line":73,"column":null}},"11":{"start":{"line":68,"column":6},"end":{"line":72,"column":null}},"12":{"start":{"line":69,"column":8},"end":{"line":69,"column":42}},"13":{"start":{"line":70,"column":8},"end":{"line":70,"column":45}},"14":{"start":{"line":71,"column":8},"end":{"line":71,"column":34}},"15":{"start":{"line":10,"column":0},"end":{"line":10,"column":21}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":22,"column":2},"end":{"line":22,"column":22}},"loc":{"start":{"line":22,"column":62},"end":{"line":22,"column":66}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":30,"column":9},"end":{"line":30,"column":19}},"loc":{"start":{"line":33,"column":34},"end":{"line":41,"column":3}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":47,"column":9},"end":{"line":47,"column":19}},"loc":{"start":{"line":47,"column":30},"end":{"line":49,"column":3}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":55,"column":9},"end":{"line":55,"column":22}},"loc":{"start":{"line":55,"column":35},"end":{"line":57,"column":3}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":63,"column":9},"end":{"line":63,"column":22}},"loc":{"start":{"line":63,"column":38},"end":{"line":74,"column":3}}}},"branchMap":{"0":{"loc":{"start":{"line":68,"column":6},"end":{"line":72,"column":null}},"type":"if","locations":[{"start":{"line":68,"column":6},"end":{"line":72,"column":null}}]}},"s":{"0":2,"1":2,"2":2,"3":23,"4":23,"5":11,"6":12,"7":10,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":2},"f":{"0":23,"1":11,"2":12,"3":10,"4":1},"b":{"0":[1]}} | ||
,"/Users/nioni/Documents/work/hopr/rpch/rpch/packages/sdk/src/utils.ts": {"path":"/Users/nioni/Documents/work/hopr/rpch/rpch/packages/sdk/src/utils.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":37}},"1":{"start":{"line":3,"column":13},"end":{"line":3,"column":55}}},"fnMap":{},"branchMap":{},"s":{"0":3,"1":3},"f":{},"b":{}} | ||
{"/Users/nioni/Documents/work/hopr/rpch/rpch/packages/sdk/src/index.ts": {"path":"/Users/nioni/Documents/work/hopr/rpch/rpch/packages/sdk/src/index.ts","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":3,"column":null}},"1":{"start":{"line":12,"column":0},"end":{"line":12,"column":45}},"2":{"start":{"line":13,"column":0},"end":{"line":13,"column":32}},"3":{"start":{"line":14,"column":0},"end":{"line":14,"column":32}},"4":{"start":{"line":15,"column":0},"end":{"line":15,"column":62}},"5":{"start":{"line":16,"column":0},"end":{"line":16,"column":43}},"6":{"start":{"line":17,"column":0},"end":{"line":17,"column":39}},"7":{"start":{"line":19,"column":12},"end":{"line":19,"column":26}},"8":{"start":{"line":20,"column":20},"end":{"line":20,"column":34}},"9":{"start":{"line":72,"column":21},"end":{"line":72,"column":36}},"10":{"start":{"line":73,"column":12},"end":{"line":73,"column":65}},"11":{"start":{"line":74,"column":12},"end":{"line":74,"column":67}},"12":{"start":{"line":56,"column":10},"end":{"line":56,"column":41}},"13":{"start":{"line":63,"column":10},"end":{"line":63,"column":37}},"14":{"start":{"line":76,"column":4},"end":{"line":76,"column":79}},"15":{"start":{"line":76,"column":54},"end":{"line":76,"column":77}},"16":{"start":{"line":77,"column":4},"end":{"line":79,"column":6}},"17":{"start":{"line":78,"column":6},"end":{"line":78,"column":36}},"18":{"start":{"line":80,"column":4},"end":{"line":83,"column":6}},"19":{"start":{"line":90,"column":4},"end":{"line":90,"column":57}},"20":{"start":{"line":106,"column":4},"end":{"line":170,"column":null}},"21":{"start":{"line":107,"column":6},"end":{"line":107,"column":37}},"22":{"start":{"line":108,"column":6},"end":{"line":108,"column":42}},"23":{"start":{"line":109,"column":47},"end":{"line":124,"column":null}},"24":{"start":{"line":131,"column":10},"end":{"line":131,"column":34}},"25":{"start":{"line":134,"column":6},"end":{"line":137,"column":null}},"26":{"start":{"line":135,"column":8},"end":{"line":135,"column":80}},"27":{"start":{"line":136,"column":8},"end":{"line":136,"column":56}},"28":{"start":{"line":139,"column":29},"end":{"line":139,"column":65}},"29":{"start":{"line":141,"column":6},"end":{"line":145,"column":8}},"30":{"start":{"line":146,"column":6},"end":{"line":146,"column":57}},"31":{"start":{"line":149,"column":6},"end":{"line":149,"column":63}},"32":{"start":{"line":149,"column":36},"end":{"line":149,"column":63}},"33":{"start":{"line":150,"column":6},"end":{"line":164,"column":8}},"34":{"start":{"line":154,"column":10},"end":{"line":162,"column":null}},"35":{"start":{"line":155,"column":28},"end":{"line":155,"column":55}},"36":{"start":{"line":156,"column":12},"end":{"line":156,"column":49}},"37":{"start":{"line":158,"column":12},"end":{"line":161,"column":14}},"38":{"start":{"line":165,"column":6},"end":{"line":165,"column":28}},"39":{"start":{"line":167,"column":6},"end":{"line":167,"column":18}},"40":{"start":{"line":169,"column":6},"end":{"line":169,"column":38}},"41":{"start":{"line":181,"column":4},"end":{"line":181,"column":39}},"42":{"start":{"line":185,"column":10},"end":{"line":190,"column":31}},"43":{"start":{"line":190,"column":20},"end":{"line":190,"column":30}},"44":{"start":{"line":192,"column":4},"end":{"line":195,"column":8}},"45":{"start":{"line":192,"column":45},"end":{"line":195,"column":6}},"46":{"start":{"line":197,"column":4},"end":{"line":197,"column":76}},"47":{"start":{"line":197,"column":37},"end":{"line":197,"column":76}},"48":{"start":{"line":199,"column":4},"end":{"line":199,"column":61}},"49":{"start":{"line":200,"column":4},"end":{"line":200,"column":26}},"50":{"start":{"line":209,"column":18},"end":{"line":209,"column":58}},"51":{"start":{"line":210,"column":4},"end":{"line":217,"column":null}},"52":{"start":{"line":211,"column":6},"end":{"line":215,"column":8}},"53":{"start":{"line":216,"column":6},"end":{"line":216,"column":13}},"54":{"start":{"line":219,"column":20},"end":{"line":221,"column":35}},"55":{"start":{"line":221,"column":18},"end":{"line":221,"column":34}},"56":{"start":{"line":224,"column":21},"end":{"line":231,"column":null}},"57":{"start":{"line":230,"column":8},"end":{"line":230,"column":55}},"58":{"start":{"line":234,"column":25},"end":{"line":234,"column":63}},"59":{"start":{"line":235,"column":4},"end":{"line":243,"column":6}},"60":{"start":{"line":245,"column":4},"end":{"line":245,"column":28}},"61":{"start":{"line":246,"column":4},"end":{"line":250,"column":6}},"62":{"start":{"line":251,"column":4},"end":{"line":251,"column":51}},"63":{"start":{"line":253,"column":4},"end":{"line":253,"column":78}},"64":{"start":{"line":263,"column":4},"end":{"line":263,"column":80}},"65":{"start":{"line":264,"column":4},"end":{"line":264,"column":45}},"66":{"start":{"line":271,"column":4},"end":{"line":271,"column":29}},"67":{"start":{"line":271,"column":22},"end":{"line":271,"column":29}},"68":{"start":{"line":273,"column":4},"end":{"line":284,"column":null}},"69":{"start":{"line":274,"column":6},"end":{"line":274,"column":61}},"70":{"start":{"line":275,"column":6},"end":{"line":276,"column":71}},"71":{"start":{"line":278,"column":6},"end":{"line":278,"column":60}},"72":{"start":{"line":279,"column":6},"end":{"line":281,"column":33}},"73":{"start":{"line":279,"column":21},"end":{"line":280,"column":null}},"74":{"start":{"line":283,"column":6},"end":{"line":283,"column":31}},"75":{"start":{"line":287,"column":4},"end":{"line":296,"column":6}},"76":{"start":{"line":288,"column":12},"end":{"line":288,"column":71}},"77":{"start":{"line":292,"column":10},"end":{"line":292,"column":59}},"78":{"start":{"line":293,"column":10},"end":{"line":293,"column":74}},"79":{"start":{"line":297,"column":4},"end":{"line":306,"column":6}},"80":{"start":{"line":298,"column":12},"end":{"line":298,"column":70}},"81":{"start":{"line":302,"column":10},"end":{"line":302,"column":58}},"82":{"start":{"line":303,"column":10},"end":{"line":303,"column":73}},"83":{"start":{"line":309,"column":4},"end":{"line":314,"column":6}},"84":{"start":{"line":311,"column":8},"end":{"line":311,"column":58}},"85":{"start":{"line":312,"column":8},"end":{"line":312,"column":58}},"86":{"start":{"line":316,"column":4},"end":{"line":320,"column":6}},"87":{"start":{"line":318,"column":8},"end":{"line":318,"column":67}},"88":{"start":{"line":327,"column":4},"end":{"line":327,"column":61}},"89":{"start":{"line":327,"column":34},"end":{"line":327,"column":61}},"90":{"start":{"line":328,"column":4},"end":{"line":330,"column":null}},"91":{"start":{"line":329,"column":6},"end":{"line":329,"column":30}},"92":{"start":{"line":340,"column":4},"end":{"line":340,"column":71}},"93":{"start":{"line":340,"column":23},"end":{"line":340,"column":71}},"94":{"start":{"line":341,"column":4},"end":{"line":341,"column":62}},"95":{"start":{"line":341,"column":29},"end":{"line":341,"column":62}},"96":{"start":{"line":342,"column":4},"end":{"line":342,"column":76}},"97":{"start":{"line":342,"column":33},"end":{"line":342,"column":76}},"98":{"start":{"line":344,"column":33},"end":{"line":345,"column":null}},"99":{"start":{"line":347,"column":36},"end":{"line":347,"column":38}},"100":{"start":{"line":348,"column":4},"end":{"line":364,"column":null}},"101":{"start":{"line":352,"column":6},"end":{"line":352,"column":75}},"102":{"start":{"line":353,"column":6},"end":{"line":353,"column":49}},"103":{"start":{"line":354,"column":6},"end":{"line":362,"column":null}},"104":{"start":{"line":355,"column":8},"end":{"line":358,"column":10}},"105":{"start":{"line":360,"column":8},"end":{"line":360,"column":59}},"106":{"start":{"line":361,"column":8},"end":{"line":361,"column":38}},"107":{"start":{"line":363,"column":6},"end":{"line":363,"column":40}},"108":{"start":{"line":367,"column":30},"end":{"line":368,"column":null}},"109":{"start":{"line":368,"column":16},"end":{"line":368,"column":null}},"110":{"start":{"line":370,"column":21},"end":{"line":370,"column":69}},"111":{"start":{"line":371,"column":4},"end":{"line":378,"column":6}},"112":{"start":{"line":386,"column":4},"end":{"line":386,"column":46}},"113":{"start":{"line":386,"column":33},"end":{"line":386,"column":46}},"114":{"start":{"line":387,"column":16},"end":{"line":387,"column":26}},"115":{"start":{"line":388,"column":4},"end":{"line":390,"column":null}},"116":{"start":{"line":389,"column":6},"end":{"line":389,"column":69}},"117":{"start":{"line":391,"column":4},"end":{"line":391,"column":40}},"118":{"start":{"line":399,"column":16},"end":{"line":399,"column":26}},"119":{"start":{"line":400,"column":4},"end":{"line":400,"column":44}},"120":{"start":{"line":401,"column":4},"end":{"line":401,"column":66}},"121":{"start":{"line":411,"column":4},"end":{"line":413,"column":null}},"122":{"start":{"line":412,"column":6},"end":{"line":412,"column":52}},"123":{"start":{"line":416,"column":4},"end":{"line":418,"column":null}},"124":{"start":{"line":417,"column":6},"end":{"line":417,"column":39}},"125":{"start":{"line":420,"column":4},"end":{"line":459,"column":7}},"126":{"start":{"line":420,"column":49},"end":{"line":459,"column":6}},"127":{"start":{"line":421,"column":22},"end":{"line":421,"column":37}},"128":{"start":{"line":422,"column":23},"end":{"line":422,"column":43}},"129":{"start":{"line":425,"column":6},"end":{"line":425,"column":57}},"130":{"start":{"line":428,"column":34},"end":{"line":436,"column":8}},"131":{"start":{"line":429,"column":8},"end":{"line":435,"column":11}},"132":{"start":{"line":439,"column":6},"end":{"line":458,"column":null}},"133":{"start":{"line":440,"column":24},"end":{"line":440,"column":69}},"134":{"start":{"line":442,"column":32},"end":{"line":443,"column":null}},"135":{"start":{"line":443,"column":22},"end":{"line":443,"column":50}},"136":{"start":{"line":446,"column":8},"end":{"line":451,"column":null}},"137":{"start":{"line":448,"column":10},"end":{"line":448,"column":37}},"138":{"start":{"line":449,"column":10},"end":{"line":449,"column":47}},"139":{"start":{"line":450,"column":10},"end":{"line":450,"column":52}},"140":{"start":{"line":454,"column":8},"end":{"line":454,"column":56}},"141":{"start":{"line":455,"column":8},"end":{"line":455,"column":35}},"142":{"start":{"line":456,"column":8},"end":{"line":456,"column":45}},"143":{"start":{"line":457,"column":8},"end":{"line":457,"column":50}},"144":{"start":{"line":53,"column":0},"end":{"line":53,"column":21}}},"fnMap":{"0":{"name":"(anonymous_14)","decl":{"start":{"line":71,"column":2},"end":{"line":71,"column":null}},"loc":{"start":{"line":74,"column":67},"end":{"line":84,"column":3}}},"1":{"name":"(anonymous_15)","decl":{"start":{"line":76,"column":41},"end":{"line":76,"column":42}},"loc":{"start":{"line":76,"column":54},"end":{"line":76,"column":77}}},"2":{"name":"(anonymous_16)","decl":{"start":{"line":77,"column":41},"end":{"line":77,"column":42}},"loc":{"start":{"line":78,"column":6},"end":{"line":78,"column":36}}},"3":{"name":"(anonymous_17)","decl":{"start":{"line":89,"column":2},"end":{"line":89,"column":13}},"loc":{"start":{"line":89,"column":20},"end":{"line":91,"column":3}}},"4":{"name":"(anonymous_18)","decl":{"start":{"line":98,"column":16},"end":{"line":98,"column":31}},"loc":{"start":{"line":100,"column":28},"end":{"line":171,"column":null}}},"5":{"name":"(anonymous_20)","decl":{"start":{"line":153,"column":8},"end":{"line":153,"column":9}},"loc":{"start":{"line":153,"column":20},"end":{"line":163,"column":9}}},"6":{"name":"(anonymous_21)","decl":{"start":{"line":178,"column":16},"end":{"line":178,"column":30}},"loc":{"start":{"line":179,"column":40},"end":{"line":201,"column":null}}},"7":{"name":"(anonymous_23)","decl":{"start":{"line":190,"column":11},"end":{"line":190,"column":12}},"loc":{"start":{"line":190,"column":20},"end":{"line":190,"column":30}}},"8":{"name":"(anonymous_24)","decl":{"start":{"line":192,"column":34},"end":{"line":192,"column":35}},"loc":{"start":{"line":192,"column":45},"end":{"line":195,"column":6}}},"9":{"name":"(anonymous_25)","decl":{"start":{"line":207,"column":16},"end":{"line":207,"column":25}},"loc":{"start":{"line":207,"column":42},"end":{"line":254,"column":null}}},"10":{"name":"(anonymous_27)","decl":{"start":{"line":221,"column":11},"end":{"line":221,"column":12}},"loc":{"start":{"line":221,"column":18},"end":{"line":221,"column":34}}},"11":{"name":"(anonymous_28)","decl":{"start":{"line":229,"column":6},"end":{"line":229,"column":7}},"loc":{"start":{"line":229,"column":30},"end":{"line":231,"column":7}}},"12":{"name":"(anonymous_29)","decl":{"start":{"line":261,"column":10},"end":{"line":261,"column":26}},"loc":{"start":{"line":261,"column":39},"end":{"line":265,"column":3}}},"13":{"name":"(anonymous_30)","decl":{"start":{"line":270,"column":15},"end":{"line":270,"column":20}},"loc":{"start":{"line":270,"column":20},"end":{"line":321,"column":null}}},"14":{"name":"(anonymous_32)","decl":{"start":{"line":279,"column":21},"end":{"line":279,"column":null}},"loc":{"start":{"line":279,"column":21},"end":{"line":280,"column":null}}},"15":{"name":"(anonymous_33)","decl":{"start":{"line":288,"column":6},"end":{"line":288,"column":9}},"loc":{"start":{"line":288,"column":12},"end":{"line":288,"column":71}}},"16":{"name":"(anonymous_34)","decl":{"start":{"line":291,"column":17},"end":{"line":291,"column":18}},"loc":{"start":{"line":291,"column":32},"end":{"line":294,"column":9}}},"17":{"name":"(anonymous_35)","decl":{"start":{"line":298,"column":6},"end":{"line":298,"column":9}},"loc":{"start":{"line":298,"column":12},"end":{"line":298,"column":70}}},"18":{"name":"(anonymous_36)","decl":{"start":{"line":301,"column":17},"end":{"line":301,"column":18}},"loc":{"start":{"line":301,"column":32},"end":{"line":304,"column":9}}},"19":{"name":"(anonymous_37)","decl":{"start":{"line":310,"column":18},"end":{"line":310,"column":21}},"loc":{"start":{"line":310,"column":23},"end":{"line":313,"column":7}}},"20":{"name":"(anonymous_38)","decl":{"start":{"line":317,"column":18},"end":{"line":317,"column":21}},"loc":{"start":{"line":317,"column":23},"end":{"line":319,"column":7}}},"21":{"name":"(anonymous_39)","decl":{"start":{"line":326,"column":15},"end":{"line":326,"column":19}},"loc":{"start":{"line":326,"column":19},"end":{"line":331,"column":null}}},"22":{"name":"(anonymous_41)","decl":{"start":{"line":339,"column":15},"end":{"line":339,"column":28}},"loc":{"start":{"line":339,"column":59},"end":{"line":379,"column":null}}},"23":{"name":"(anonymous_43)","decl":{"start":{"line":368,"column":6},"end":{"line":368,"column":7}},"loc":{"start":{"line":368,"column":15},"end":{"line":368,"column":null}}},"24":{"name":"(anonymous_44)","decl":{"start":{"line":385,"column":10},"end":{"line":385,"column":22}},"loc":{"start":{"line":385,"column":22},"end":{"line":392,"column":3}}},"25":{"name":"(anonymous_45)","decl":{"start":{"line":398,"column":9},"end":{"line":398,"column":20}},"loc":{"start":{"line":398,"column":37},"end":{"line":402,"column":3}}},"26":{"name":"(anonymous_46)","decl":{"start":{"line":409,"column":15},"end":{"line":409,"column":26}},"loc":{"start":{"line":409,"column":39},"end":{"line":460,"column":null}}},"27":{"name":"(anonymous_48)","decl":{"start":{"line":420,"column":23},"end":{"line":420,"column":30}},"loc":{"start":{"line":420,"column":49},"end":{"line":459,"column":6}}},"28":{"name":"(anonymous_49)","decl":{"start":{"line":420,"column":49},"end":{"line":420,"column":null}},"loc":{"start":{"line":420,"column":49},"end":{"line":459,"column":5}}},"29":{"name":"(anonymous_50)","decl":{"start":{"line":428,"column":47},"end":{"line":428,"column":48}},"loc":{"start":{"line":428,"column":59},"end":{"line":436,"column":7}}},"30":{"name":"(anonymous_51)","decl":{"start":{"line":443,"column":10},"end":{"line":443,"column":11}},"loc":{"start":{"line":443,"column":22},"end":{"line":443,"column":50}}}},"branchMap":{"0":{"loc":{"start":{"line":81,"column":6},"end":{"line":81,"column":50}},"type":"binary-expr","locations":[{"start":{"line":81,"column":6},"end":{"line":81,"column":44}},{"start":{"line":81,"column":48},"end":{"line":81,"column":50}}]},"1":{"loc":{"start":{"line":82,"column":6},"end":{"line":82,"column":45}},"type":"binary-expr","locations":[{"start":{"line":82,"column":6},"end":{"line":82,"column":38}},{"start":{"line":82,"column":42},"end":{"line":82,"column":45}}]},"2":{"loc":{"start":{"line":90,"column":11},"end":{"line":90,"column":56}},"type":"binary-expr","locations":[{"start":{"line":90,"column":11},"end":{"line":90,"column":27}},{"start":{"line":90,"column":31},"end":{"line":90,"column":56}}]},"3":{"loc":{"start":{"line":134,"column":6},"end":{"line":137,"column":null}},"type":"if","locations":[{"start":{"line":134,"column":6},"end":{"line":137,"column":null}}]},"4":{"loc":{"start":{"line":149,"column":6},"end":{"line":149,"column":63}},"type":"if","locations":[{"start":{"line":149,"column":6},"end":{"line":149,"column":63}}]},"5":{"loc":{"start":{"line":197,"column":4},"end":{"line":197,"column":76}},"type":"if","locations":[{"start":{"line":197,"column":4},"end":{"line":197,"column":76}}]},"6":{"loc":{"start":{"line":210,"column":4},"end":{"line":217,"column":null}},"type":"if","locations":[{"start":{"line":210,"column":4},"end":{"line":217,"column":null}}]},"7":{"loc":{"start":{"line":221,"column":25},"end":{"line":221,"column":33}},"type":"binary-expr","locations":[{"start":{"line":221,"column":25},"end":{"line":221,"column":26}},{"start":{"line":221,"column":30},"end":{"line":221,"column":33}}]},"8":{"loc":{"start":{"line":271,"column":4},"end":{"line":271,"column":29}},"type":"if","locations":[{"start":{"line":271,"column":4},"end":{"line":271,"column":29}}]},"9":{"loc":{"start":{"line":273,"column":4},"end":{"line":284,"column":null}},"type":"if","locations":[{"start":{"line":273,"column":4},"end":{"line":284,"column":null}},{"start":{"line":277,"column":11},"end":{"line":284,"column":null}}]},"10":{"loc":{"start":{"line":327,"column":4},"end":{"line":327,"column":61}},"type":"if","locations":[{"start":{"line":327,"column":4},"end":{"line":327,"column":61}}]},"11":{"loc":{"start":{"line":340,"column":4},"end":{"line":340,"column":71}},"type":"if","locations":[{"start":{"line":340,"column":4},"end":{"line":340,"column":71}}]},"12":{"loc":{"start":{"line":341,"column":4},"end":{"line":341,"column":62}},"type":"if","locations":[{"start":{"line":341,"column":4},"end":{"line":341,"column":62}}]},"13":{"loc":{"start":{"line":342,"column":4},"end":{"line":342,"column":76}},"type":"if","locations":[{"start":{"line":342,"column":4},"end":{"line":342,"column":76}}]},"14":{"loc":{"start":{"line":348,"column":4},"end":{"line":364,"column":null}},"type":"if","locations":[{"start":{"line":348,"column":4},"end":{"line":364,"column":null}}]},"15":{"loc":{"start":{"line":349,"column":6},"end":{"line":350,"column":77}},"type":"binary-expr","locations":[{"start":{"line":349,"column":6},"end":{"line":349,"column":26}},{"start":{"line":350,"column":6},"end":{"line":350,"column":77}}]},"16":{"loc":{"start":{"line":368,"column":32},"end":{"line":368,"column":54}},"type":"cond-expr","locations":[{"start":{"line":368,"column":46},"end":{"line":368,"column":48}},{"start":{"line":368,"column":46},"end":{"line":368,"column":54}}]},"17":{"loc":{"start":{"line":368,"column":32},"end":{"line":368,"column":48}},"type":"binary-expr","locations":[{"start":{"line":368,"column":32},"end":{"line":368,"column":48}},{"start":{"line":368,"column":46},"end":{"line":368,"column":48}}]},"18":{"loc":{"start":{"line":386,"column":4},"end":{"line":386,"column":46}},"type":"if","locations":[{"start":{"line":386,"column":4},"end":{"line":386,"column":46}}]},"19":{"loc":{"start":{"line":388,"column":4},"end":{"line":390,"column":null}},"type":"if","locations":[{"start":{"line":388,"column":4},"end":{"line":390,"column":null}}]},"20":{"loc":{"start":{"line":411,"column":4},"end":{"line":413,"column":null}},"type":"if","locations":[{"start":{"line":411,"column":4},"end":{"line":413,"column":null}}]},"21":{"loc":{"start":{"line":416,"column":4},"end":{"line":418,"column":null}},"type":"if","locations":[{"start":{"line":416,"column":4},"end":{"line":418,"column":null}}]},"22":{"loc":{"start":{"line":446,"column":8},"end":{"line":451,"column":null}},"type":"if","locations":[{"start":{"line":446,"column":8},"end":{"line":451,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":22,"10":22,"11":22,"12":22,"13":22,"14":22,"15":0,"16":22,"17":0,"18":22,"19":38,"20":24,"21":24,"22":24,"23":24,"24":24,"25":23,"26":1,"27":1,"28":22,"29":22,"30":22,"31":22,"32":2,"33":22,"34":0,"35":0,"36":0,"37":0,"38":22,"39":2,"40":24,"41":21,"42":21,"43":21,"44":20,"45":20,"46":20,"47":0,"48":20,"49":20,"50":5,"51":5,"52":1,"53":1,"54":4,"55":4,"56":4,"57":4,"58":4,"59":4,"60":4,"61":4,"62":4,"63":4,"64":6,"65":6,"66":20,"67":0,"68":20,"69":20,"70":20,"71":0,"72":0,"73":0,"74":0,"75":20,"76":21,"77":1,"78":1,"79":20,"80":21,"81":1,"82":1,"83":20,"84":0,"85":0,"86":20,"87":0,"88":20,"89":20,"90":20,"91":40,"92":11,"93":1,"94":10,"95":1,"96":9,"97":0,"98":9,"99":9,"100":9,"101":4,"102":4,"103":4,"104":4,"105":0,"106":0,"107":4,"108":9,"109":9,"110":9,"111":9,"112":16,"113":14,"114":2,"115":2,"116":2,"117":2,"118":3,"119":3,"120":3,"121":7,"122":1,"123":6,"124":1,"125":5,"126":5,"127":5,"128":5,"129":5,"130":5,"131":16,"132":5,"133":5,"134":5,"135":16,"136":5,"137":5,"138":5,"139":5,"140":0,"141":0,"142":0,"143":0,"144":1},"f":{"0":22,"1":0,"2":0,"3":38,"4":24,"5":0,"6":21,"7":21,"8":20,"9":5,"10":4,"11":4,"12":6,"13":20,"14":0,"15":21,"16":1,"17":21,"18":1,"19":0,"20":0,"21":20,"22":11,"23":9,"24":16,"25":3,"26":7,"27":5,"28":5,"29":16,"30":16},"b":{"0":[22,0],"1":[22,22],"2":[38,16],"3":[1],"4":[2],"5":[0],"6":[1],"7":[4,4],"8":[0],"9":[20,0],"10":[20],"11":[1],"12":[1],"13":[0],"14":[4],"15":[9,8],"16":[0,9],"17":[9,9],"18":[14],"19":[2],"20":[1],"21":[1],"22":[5]}} | ||
,"/Users/nioni/Documents/work/hopr/rpch/rpch/packages/sdk/src/reliability-score.ts": {"path":"/Users/nioni/Documents/work/hopr/rpch/rpch/packages/sdk/src/reliability-score.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":39}},"1":{"start":{"line":3,"column":12},"end":{"line":3,"column":47}},"2":{"start":{"line":5,"column":33},"end":{"line":5,"column":36}},"3":{"start":{"line":34,"column":10},"end":{"line":42,"column":6}},"4":{"start":{"line":48,"column":10},"end":{"line":48,"column":44}},"5":{"start":{"line":53,"column":4},"end":{"line":53,"column":51}},"6":{"start":{"line":54,"column":4},"end":{"line":54,"column":38}},"7":{"start":{"line":63,"column":4},"end":{"line":65,"column":null}},"8":{"start":{"line":64,"column":6},"end":{"line":64,"column":53}},"9":{"start":{"line":67,"column":22},"end":{"line":67,"column":69}},"10":{"start":{"line":68,"column":4},"end":{"line":80,"column":6}},"11":{"start":{"line":70,"column":8},"end":{"line":76,"column":null}},"12":{"start":{"line":71,"column":10},"end":{"line":71,"column":24}},"13":{"start":{"line":72,"column":15},"end":{"line":76,"column":null}},"14":{"start":{"line":73,"column":10},"end":{"line":73,"column":26}},"15":{"start":{"line":74,"column":15},"end":{"line":76,"column":null}},"16":{"start":{"line":75,"column":10},"end":{"line":75,"column":23}},"17":{"start":{"line":77,"column":8},"end":{"line":77,"column":19}},"18":{"start":{"line":90,"column":22},"end":{"line":90,"column":46}},"19":{"start":{"line":91,"column":4},"end":{"line":96,"column":6}},"20":{"start":{"line":98,"column":4},"end":{"line":106,"column":null}},"21":{"start":{"line":99,"column":6},"end":{"line":104,"column":8}},"22":{"start":{"line":105,"column":6},"end":{"line":105,"column":44}},"23":{"start":{"line":108,"column":4},"end":{"line":111,"column":7}},"24":{"start":{"line":113,"column":4},"end":{"line":113,"column":26}},"25":{"start":{"line":114,"column":4},"end":{"line":114,"column":53}},"26":{"start":{"line":116,"column":4},"end":{"line":120,"column":6}},"27":{"start":{"line":122,"column":4},"end":{"line":126,"column":6}},"28":{"start":{"line":128,"column":4},"end":{"line":130,"column":6}},"29":{"start":{"line":133,"column":4},"end":{"line":157,"column":null}},"30":{"start":{"line":134,"column":44},"end":{"line":136,"column":42}},"31":{"start":{"line":138,"column":6},"end":{"line":142,"column":null}},"32":{"start":{"line":139,"column":8},"end":{"line":141,"column":null}},"33":{"start":{"line":140,"column":10},"end":{"line":140,"column":50}},"34":{"start":{"line":143,"column":6},"end":{"line":143,"column":61}},"35":{"start":{"line":145,"column":6},"end":{"line":145,"column":27}},"36":{"start":{"line":146,"column":6},"end":{"line":146,"column":55}},"37":{"start":{"line":147,"column":27},"end":{"line":147,"column":48}},"38":{"start":{"line":148,"column":6},"end":{"line":148,"column":43}},"39":{"start":{"line":149,"column":6},"end":{"line":153,"column":8}},"40":{"start":{"line":154,"column":6},"end":{"line":156,"column":8}},"41":{"start":{"line":166,"column":4},"end":{"line":191,"column":null}},"42":{"start":{"line":167,"column":19},"end":{"line":167,"column":49}},"43":{"start":{"line":168,"column":24},"end":{"line":168,"column":65}},"44":{"start":{"line":169,"column":21},"end":{"line":169,"column":59}},"45":{"start":{"line":171,"column":6},"end":{"line":187,"column":null}},"46":{"start":{"line":172,"column":8},"end":{"line":172,"column":34}},"47":{"start":{"line":173,"column":8},"end":{"line":176,"column":10}},"48":{"start":{"line":177,"column":13},"end":{"line":187,"column":null}},"49":{"start":{"line":178,"column":8},"end":{"line":178,"column":49}},"50":{"start":{"line":179,"column":8},"end":{"line":182,"column":10}},"51":{"start":{"line":184,"column":22},"end":{"line":184,"column":44}},"52":{"start":{"line":185,"column":8},"end":{"line":185,"column":38}},"53":{"start":{"line":186,"column":8},"end":{"line":186,"column":72}},"54":{"start":{"line":188,"column":6},"end":{"line":188,"column":37}},"55":{"start":{"line":190,"column":6},"end":{"line":190,"column":30}},"56":{"start":{"line":199,"column":20},"end":{"line":199,"column":44}},"57":{"start":{"line":200,"column":4},"end":{"line":203,"column":7}},"58":{"start":{"line":201,"column":20},"end":{"line":201,"column":41}},"59":{"start":{"line":202,"column":6},"end":{"line":202,"column":31}},"60":{"start":{"line":207,"column":17},"end":{"line":207,"column":52}},"61":{"start":{"line":208,"column":4},"end":{"line":212,"column":null}},"62":{"start":{"line":209,"column":6},"end":{"line":209,"column":21}},"63":{"start":{"line":211,"column":6},"end":{"line":211,"column":25}},"64":{"start":{"line":30,"column":0},"end":{"line":30,"column":21}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":52,"column":2},"end":{"line":52,"column":14}},"loc":{"start":{"line":52,"column":62},"end":{"line":55,"column":3}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":62,"column":10},"end":{"line":62,"column":25}},"loc":{"start":{"line":62,"column":40},"end":{"line":81,"column":3}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":69,"column":6},"end":{"line":69,"column":7}},"loc":{"start":{"line":69,"column":29},"end":{"line":78,"column":7}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":89,"column":9},"end":{"line":89,"column":18}},"loc":{"start":{"line":89,"column":68},"end":{"line":158,"column":3}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":165,"column":9},"end":{"line":165,"column":17}},"loc":{"start":{"line":165,"column":32},"end":{"line":192,"column":3}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":198,"column":9},"end":{"line":198,"column":18}},"loc":{"start":{"line":198,"column":18},"end":{"line":204,"column":3}}},"6":{"name":"(anonymous_6)","decl":{"start":{"line":200,"column":23},"end":{"line":200,"column":24}},"loc":{"start":{"line":200,"column":36},"end":{"line":203,"column":5}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":206,"column":9},"end":{"line":206,"column":18}},"loc":{"start":{"line":206,"column":33},"end":{"line":213,"column":3}}}},"branchMap":{"0":{"loc":{"start":{"line":63,"column":4},"end":{"line":65,"column":null}},"type":"if","locations":[{"start":{"line":63,"column":4},"end":{"line":65,"column":null}}]},"1":{"loc":{"start":{"line":70,"column":8},"end":{"line":76,"column":null}},"type":"if","locations":[{"start":{"line":70,"column":8},"end":{"line":76,"column":null}},{"start":{"line":72,"column":15},"end":{"line":76,"column":null}}]},"2":{"loc":{"start":{"line":72,"column":15},"end":{"line":76,"column":null}},"type":"if","locations":[{"start":{"line":72,"column":15},"end":{"line":76,"column":null}},{"start":{"line":74,"column":15},"end":{"line":76,"column":null}}]},"3":{"loc":{"start":{"line":74,"column":15},"end":{"line":76,"column":null}},"type":"if","locations":[{"start":{"line":74,"column":15},"end":{"line":76,"column":null}}]},"4":{"loc":{"start":{"line":98,"column":4},"end":{"line":106,"column":null}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":106,"column":null}}]},"5":{"loc":{"start":{"line":124,"column":8},"end":{"line":124,"column":null}},"type":"cond-expr","locations":[{"start":{"line":124,"column":32},"end":{"line":124,"column":34}},{"start":{"line":124,"column":32},"end":{"line":124,"column":null}}]},"6":{"loc":{"start":{"line":124,"column":8},"end":{"line":124,"column":34}},"type":"binary-expr","locations":[{"start":{"line":124,"column":8},"end":{"line":124,"column":34}},{"start":{"line":124,"column":32},"end":{"line":124,"column":34}}]},"7":{"loc":{"start":{"line":133,"column":4},"end":{"line":157,"column":null}},"type":"if","locations":[{"start":{"line":133,"column":4},"end":{"line":157,"column":null}}]},"8":{"loc":{"start":{"line":139,"column":8},"end":{"line":141,"column":null}},"type":"if","locations":[{"start":{"line":139,"column":8},"end":{"line":141,"column":null}}]},"9":{"loc":{"start":{"line":166,"column":4},"end":{"line":191,"column":null}},"type":"if","locations":[{"start":{"line":166,"column":4},"end":{"line":191,"column":null}},{"start":{"line":189,"column":11},"end":{"line":191,"column":null}}]},"10":{"loc":{"start":{"line":171,"column":6},"end":{"line":187,"column":null}},"type":"if","locations":[{"start":{"line":171,"column":6},"end":{"line":187,"column":null}},{"start":{"line":177,"column":13},"end":{"line":187,"column":null}}]},"11":{"loc":{"start":{"line":177,"column":13},"end":{"line":187,"column":null}},"type":"if","locations":[{"start":{"line":177,"column":13},"end":{"line":187,"column":null}},{"start":{"line":183,"column":13},"end":{"line":187,"column":null}}]},"12":{"loc":{"start":{"line":207,"column":17},"end":{"line":207,"column":52}},"type":"binary-expr","locations":[{"start":{"line":207,"column":17},"end":{"line":207,"column":47}},{"start":{"line":207,"column":51},"end":{"line":207,"column":52}}]},"13":{"loc":{"start":{"line":207,"column":17},"end":{"line":207,"column":47}},"type":"cond-expr","locations":[{"start":{"line":207,"column":41},"end":{"line":207,"column":43}},{"start":{"line":207,"column":41},"end":{"line":207,"column":47}}]},"14":{"loc":{"start":{"line":207,"column":17},"end":{"line":207,"column":43}},"type":"binary-expr","locations":[{"start":{"line":207,"column":17},"end":{"line":207,"column":43}},{"start":{"line":207,"column":41},"end":{"line":207,"column":43}}]},"15":{"loc":{"start":{"line":208,"column":4},"end":{"line":212,"column":null}},"type":"if","locations":[{"start":{"line":208,"column":4},"end":{"line":212,"column":null}},{"start":{"line":210,"column":11},"end":{"line":212,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":22,"4":22,"5":22,"6":22,"7":40,"8":0,"9":40,"10":40,"11":54,"12":16,"13":38,"14":24,"15":14,"16":14,"17":54,"18":20,"19":20,"20":20,"21":11,"22":11,"23":20,"24":20,"25":20,"26":20,"27":20,"28":20,"29":20,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":49,"42":45,"43":45,"44":45,"45":45,"46":20,"47":20,"48":25,"49":0,"50":0,"51":25,"52":25,"53":25,"54":45,"55":4,"56":0,"57":0,"58":0,"59":0,"60":8,"61":8,"62":4,"63":4,"64":1},"f":{"0":22,"1":40,"2":54,"3":20,"4":49,"5":0,"6":0,"7":8},"b":{"0":[0],"1":[16,38],"2":[24,14],"3":[14],"4":[11],"5":[0,20],"6":[20,20],"7":[0],"8":[0],"9":[45,4],"10":[20,25],"11":[0,25],"12":[8,4],"13":[4,4],"14":[8,8],"15":[4,4]}} | ||
,"/Users/nioni/Documents/work/hopr/rpch/rpch/packages/sdk/src/request-cache.ts": {"path":"/Users/nioni/Documents/work/hopr/rpch/rpch/packages/sdk/src/request-cache.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":56}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":39}},"2":{"start":{"line":4,"column":12},"end":{"line":4,"column":43}},"3":{"start":{"line":22,"column":22},"end":{"line":22,"column":62}},"4":{"start":{"line":12,"column":10},"end":{"line":20,"column":6}},"5":{"start":{"line":35,"column":4},"end":{"line":40,"column":7}},"6":{"start":{"line":48,"column":4},"end":{"line":48,"column":33}},"7":{"start":{"line":56,"column":4},"end":{"line":56,"column":33}},"8":{"start":{"line":64,"column":16},"end":{"line":64,"column":26}},"9":{"start":{"line":66,"column":4},"end":{"line":66,"column":48}},"10":{"start":{"line":67,"column":4},"end":{"line":73,"column":null}},"11":{"start":{"line":68,"column":6},"end":{"line":72,"column":null}},"12":{"start":{"line":69,"column":8},"end":{"line":69,"column":42}},"13":{"start":{"line":70,"column":8},"end":{"line":70,"column":45}},"14":{"start":{"line":71,"column":8},"end":{"line":71,"column":34}},"15":{"start":{"line":10,"column":0},"end":{"line":10,"column":21}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":22,"column":2},"end":{"line":22,"column":22}},"loc":{"start":{"line":22,"column":62},"end":{"line":22,"column":66}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":30,"column":9},"end":{"line":30,"column":19}},"loc":{"start":{"line":33,"column":34},"end":{"line":41,"column":3}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":47,"column":9},"end":{"line":47,"column":19}},"loc":{"start":{"line":47,"column":30},"end":{"line":49,"column":3}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":55,"column":9},"end":{"line":55,"column":22}},"loc":{"start":{"line":55,"column":35},"end":{"line":57,"column":3}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":63,"column":9},"end":{"line":63,"column":22}},"loc":{"start":{"line":63,"column":38},"end":{"line":74,"column":3}}}},"branchMap":{"0":{"loc":{"start":{"line":68,"column":6},"end":{"line":72,"column":null}},"type":"if","locations":[{"start":{"line":68,"column":6},"end":{"line":72,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":22,"4":22,"5":8,"6":9,"7":9,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":1},"f":{"0":22,"1":8,"2":9,"3":9,"4":0},"b":{"0":[0]}} | ||
,"/Users/nioni/Documents/work/hopr/rpch/rpch/packages/sdk/src/utils.ts": {"path":"/Users/nioni/Documents/work/hopr/rpch/rpch/packages/sdk/src/utils.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":37}},"1":{"start":{"line":3,"column":13},"end":{"line":3,"column":55}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1},"f":{},"b":{}} | ||
} |
{ | ||
"name": "@rpch/sdk", | ||
"version": "0.1.7-blockwallet.0", | ||
"version": "0.1.7-blockwallet.1", | ||
"license": "LGPL-3.0", | ||
@@ -20,10 +20,12 @@ "main": "./build/index.js", | ||
"@rpch/configs-typescript": "*", | ||
"nock": "^13.2.9" | ||
"nock": "^13.2.9", | ||
"@types/async-retry": "^1.4.5" | ||
}, | ||
"dependencies": { | ||
"@rpch/common": "0.1.7-blockwallet.0", | ||
"@rpch/crypto-bridge": "0.1.7-blockwallet.0", | ||
"@rpch/common": "0.1.7-blockwallet.1", | ||
"@rpch/crypto-bridge": "0.1.7-blockwallet.1", | ||
"cross-fetch": "^3.1.5", | ||
"ethers": "^5.7.2" | ||
"ethers": "^5.7.2", | ||
"async-retry": "^1.3.3" | ||
} | ||
} |
@@ -1,7 +0,7 @@ | ||
import assert from "assert"; | ||
import { expect } from "@jest/globals"; | ||
import { Request, hoprd } from "@rpch/common"; | ||
import * as fixtures from "@rpch/common/build/fixtures"; | ||
import assert from "assert"; | ||
import nock from "nock"; | ||
import SDK, { type HoprSdkOps } from "./index"; | ||
import { expect } from "@jest/globals"; | ||
@@ -85,2 +85,74 @@ const TIMEOUT = 5e3; | ||
describe("started unstable", function () { | ||
let mock: ReturnType<typeof createSdkMock>; | ||
beforeEach(async function () { | ||
mock = createSdkMock(); | ||
}); | ||
afterEach(async function () { | ||
await mock.sdk.stop(); | ||
jest.clearAllMocks(); | ||
}); | ||
it("should select entry node after 2 tries", async function () { | ||
//@ts-ignore | ||
const selectEntryNodeMock = jest.spyOn(mock.sdk, "selectEntryNode"); | ||
DP_GET_NODES.reply(200, [ | ||
{ | ||
exit_node_pub_key: EXIT_NODE_PUB_KEY, | ||
id: EXIT_NODE_PEER_ID, | ||
}, | ||
]); | ||
// fail 3 times, work after wards | ||
nock(DISCOVERY_PLATFORM_API_ENDPOINT) | ||
.post("/api/v1/request/entry-node") | ||
.once() | ||
.reply(500) | ||
.post("/api/v1/request/entry-node") | ||
.once() | ||
.reply(200, { | ||
hoprd_api_endpoint: ENTRY_NODE_API_ENDPOINT, | ||
hoprd_api_port: ENTRY_NODE_API_PORT, | ||
accessToken: ENTRY_NODE_API_TOKEN, | ||
id: ENTRY_NODE_PEER_ID, | ||
}); | ||
await mock.sdk.start(); | ||
assert.equal(selectEntryNodeMock.mock.calls.length, 2); | ||
}); | ||
it("should fetch exit nodes after 2 tries", async function () { | ||
//@ts-ignore | ||
const fetchExitNodesMock = jest.spyOn(mock.sdk, "fetchExitNodes"); | ||
DP_REQ_ENTRY_NOCK.reply(200, { | ||
hoprd_api_endpoint: ENTRY_NODE_API_ENDPOINT, | ||
hoprd_api_port: ENTRY_NODE_API_PORT, | ||
accessToken: ENTRY_NODE_API_TOKEN, | ||
id: ENTRY_NODE_PEER_ID, | ||
}); | ||
nock(DISCOVERY_PLATFORM_API_ENDPOINT) | ||
.get("/api/v1/node?hasExitNode=true") | ||
.once() | ||
.reply(500) | ||
.get("/api/v1/node?hasExitNode=true") | ||
.once() | ||
.reply(200, [ | ||
{ | ||
exit_node_pub_key: EXIT_NODE_PUB_KEY, | ||
id: EXIT_NODE_PEER_ID, | ||
}, | ||
]); | ||
await mock.sdk.start(); | ||
assert.equal(fetchExitNodesMock.mock.calls.length, 2); | ||
}); | ||
}); | ||
describe("started", function () { | ||
@@ -318,2 +390,30 @@ let ops: HoprSdkOps; | ||
}); | ||
it("should handle failed request", async function () { | ||
HOPRD_SEND_MESSAGE_NOCK.reply(400, "error"); | ||
const [clientRequest] = fixtures.generateMockedFlow(3); | ||
const resolveFunc = jest.fn(() => {}); | ||
const rejectFunc = jest.fn(() => {}); | ||
// @ts-ignore | ||
sdk.requestCache.addRequest(clientRequest, resolveFunc, rejectFunc); | ||
// call function to handle request failed | ||
sdk.handleFailedRequest(clientRequest); | ||
// should reject promise | ||
assert.equal(rejectFunc.mock.calls.length, 1); | ||
// request should not be in request cache | ||
// @ts-ignore | ||
assert.equal(sdk.requestCache.getRequest(clientRequest.id), undefined); | ||
// should add failed metric | ||
assert.equal( | ||
// @ts-ignore | ||
sdk.reliabilityScore.metrics.get(sdk.entryNode?.peerId)?.stats.failed, | ||
1 | ||
); | ||
}); | ||
it("should not save request to requestCache if request to hoprd fails", async function () { | ||
@@ -325,2 +425,3 @@ HOPRD_SEND_MESSAGE_NOCK.reply(400, "error"); | ||
} catch (e: any) { | ||
// this will run if request is rejected | ||
// @ts-ignore | ||
@@ -394,2 +495,62 @@ assert.equal(sdk.requestCache.getRequest(clientRequest.id), undefined); | ||
describe("handling request size", function () { | ||
it("should not send requests larger than max amount of segments", async function () { | ||
const hoprdSendMessageSpy = jest.spyOn(hoprd, "sendMessage"); | ||
const MAXIMUM_SEGMENTS_PER_REQUEST = 100; | ||
const bigReq = await sdk.createRequest( | ||
fixtures.PROVIDER, | ||
// create an rpc call that will exceed MAXIMUM_SEGMENTS_PER_REQUEST size | ||
fixtures.RPC_REQ_LARGE.repeat(MAXIMUM_SEGMENTS_PER_REQUEST) | ||
); | ||
try { | ||
await sdk.sendRequest(bigReq); | ||
} catch (e) { | ||
expect(e).toEqual("Request is too big"); | ||
// request should not be in request cache | ||
// @ts-ignore | ||
expect(sdk.requestCache.getRequest(bigReq.id)).toEqual(undefined); | ||
// hopr send message should never be called | ||
expect(hoprdSendMessageSpy.mock.calls.length).toEqual(0); | ||
} | ||
}); | ||
it("should send requests smaller than max amount of segments", function (done) { | ||
HOPRD_SEND_MESSAGE_NOCK.reply(202, "someresponse"); | ||
const MAXIMUM_SEGMENTS_PER_REQUEST = 100; | ||
sdk | ||
.createRequest(fixtures.PROVIDER, fixtures.RPC_REQ_LARGE) | ||
.then((normalRequest) => { | ||
// how many times request cas increase without passing MAXIMUM_SEGMENTS_PER_REQUEST | ||
const numberOfRepetitions = Math.floor( | ||
MAXIMUM_SEGMENTS_PER_REQUEST / | ||
normalRequest.toMessage().toSegments().length | ||
); | ||
const [clientRequest, , exitNodeResponse] = | ||
fixtures.generateMockedFlow( | ||
3, | ||
// create an rpc call that is close to MAXIMUM_SEGMENTS_PER_REQUEST | ||
fixtures.RPC_REQ_LARGE.repeat(numberOfRepetitions) | ||
); | ||
sdk.sendRequest(clientRequest).then((response) => { | ||
// this will run when .onMessage resolves request | ||
assert.equal(response.id, clientRequest.id); | ||
// @ts-ignore | ||
const pendingRequest = sdk.requestCache.getRequest( | ||
clientRequest.id | ||
); | ||
assert.equal(pendingRequest, undefined); | ||
done(); | ||
}); | ||
// return response for sdk sendRequest | ||
// @ts-ignore | ||
sdk.onMessage(exitNodeResponse.toMessage()); | ||
}); | ||
}); | ||
}); | ||
describe("should handle requests correctly when receiving a response", function () { | ||
@@ -396,0 +557,0 @@ it("should remove request with matching response", async function () { |
250
src/index.ts
@@ -14,2 +14,3 @@ // @ts-ignore | ||
import fetch from "cross-fetch"; | ||
import retry from "async-retry"; | ||
import ReliabilityScore, { Stats } from "./reliability-score"; | ||
@@ -20,2 +21,4 @@ import RequestCache from "./request-cache"; | ||
const log = createLogger(); | ||
// max number of segments sdk can send to entry node | ||
const MAXIMUM_SEGMENTS_PER_REQUEST = 100; | ||
const DEADLOCK_MS = 1e3 * 60 * 0.5; // 30s | ||
@@ -109,60 +112,67 @@ | ||
}> { | ||
log.verbose("Selecting entry node"); | ||
const rawResponse: globalThis.Response = await fetch( | ||
new URL( | ||
"/api/v1/request/entry-node", | ||
discoveryPlatformApiEndpoint | ||
).toString(), | ||
{ | ||
method: "POST", | ||
headers: { | ||
"Content-Type": "application/json", | ||
"Accept-Content": "application/json", | ||
}, | ||
body: JSON.stringify({ | ||
client: this.ops.client, | ||
exclusionList, | ||
}), | ||
} | ||
); | ||
try { | ||
this.selectingEntryNode = true; | ||
log.verbose("Selecting entry node"); | ||
const rawResponse: globalThis.Response = await fetch( | ||
new URL( | ||
"/api/v1/request/entry-node", | ||
discoveryPlatformApiEndpoint | ||
).toString(), | ||
{ | ||
method: "POST", | ||
headers: { | ||
"Content-Type": "application/json", | ||
"Accept-Content": "application/json", | ||
}, | ||
body: JSON.stringify({ | ||
client: this.ops.client, | ||
exclusionList, | ||
}), | ||
} | ||
); | ||
const response: { | ||
hoprd_api_endpoint: string; | ||
accessToken: string; | ||
id: string; | ||
} = await rawResponse.json(); | ||
const response: { | ||
hoprd_api_endpoint: string; | ||
accessToken: string; | ||
id: string; | ||
} = await rawResponse.json(); | ||
// Check for error response | ||
if (rawResponse.status !== 200) { | ||
log.error("Failed to request entry node", rawResponse.status, response); | ||
throw new Error(`Failed to request entry node`); | ||
} | ||
// Check for error response | ||
if (rawResponse.status !== 200) { | ||
log.error("Failed to request entry node", rawResponse.status, response); | ||
throw new Error(`Failed to request entry node`); | ||
} | ||
const apiEndpointUrl = new URL(response.hoprd_api_endpoint); | ||
const apiEndpointUrl = new URL(response.hoprd_api_endpoint); | ||
this.entryNode = { | ||
apiEndpoint: apiEndpointUrl.toString(), | ||
apiToken: response.accessToken, | ||
peerId: response.id, | ||
}; | ||
log.verbose("Selected entry node", this.entryNode); | ||
this.entryNode = { | ||
apiEndpoint: apiEndpointUrl.toString(), | ||
apiToken: response.accessToken, | ||
peerId: response.id, | ||
}; | ||
log.verbose("Selected entry node", this.entryNode); | ||
// Refresh messageListener | ||
if (this.stopMessageListener) this.stopMessageListener(); | ||
this.stopMessageListener = await hoprd.createMessageListener( | ||
this.entryNode!.apiEndpoint, | ||
this.entryNode!.apiToken, | ||
(message) => { | ||
try { | ||
const segment = Segment.fromString(message); | ||
this.segmentCache.onSegment(segment); | ||
} catch (e) { | ||
log.verbose( | ||
"rejected received data from HOPRd: not a valid segment", | ||
message | ||
); | ||
// Refresh messageListener | ||
if (this.stopMessageListener) this.stopMessageListener(); | ||
this.stopMessageListener = await hoprd.createMessageListener( | ||
this.entryNode!.apiEndpoint, | ||
this.entryNode!.apiToken, | ||
(message) => { | ||
try { | ||
const segment = Segment.fromString(message); | ||
this.segmentCache.onSegment(segment); | ||
} catch (e) { | ||
log.verbose( | ||
"rejected received data from HOPRd: not a valid segment", | ||
message | ||
); | ||
} | ||
} | ||
} | ||
); | ||
return this.entryNode; | ||
); | ||
return this.entryNode; | ||
} catch (error) { | ||
throw error; | ||
} finally { | ||
this.selectingEntryNode = false; | ||
} | ||
} | ||
@@ -216,37 +226,46 @@ | ||
const counter = await this.getKeyVal( | ||
match.request.exitNodeDestination | ||
).then((k) => BigInt(k || "0")); | ||
try { | ||
const counter = await this.getKeyVal( | ||
match.request.exitNodeDestination | ||
).then((k) => BigInt(k || "0")); | ||
// construct Response from Message | ||
const response = Response.fromMessage( | ||
this.crypto!, | ||
match.request, | ||
message, | ||
counter, | ||
(exitNodeId, counter) => { | ||
this.setKeyVal(exitNodeId, counter.toString()); | ||
} | ||
); | ||
// construct Response from Message | ||
const response = Response.fromMessage( | ||
this.crypto!, | ||
match.request, | ||
message, | ||
counter, | ||
(exitNodeId, counter) => { | ||
this.setKeyVal(exitNodeId, counter.toString()); | ||
} | ||
); | ||
const responseTime = Date.now() - match.createdAt.getTime(); | ||
log.verbose( | ||
"response time for request %s: %s ms", | ||
match.request.id, | ||
responseTime, | ||
log.createMetric({ | ||
id: match.request.id, | ||
responseTime: responseTime, | ||
}) | ||
); | ||
const responseTime = Date.now() - match.createdAt.getTime(); | ||
log.verbose( | ||
"response time for request %s: %s ms", | ||
match.request.id, | ||
responseTime, | ||
log.createMetric({ | ||
id: match.request.id, | ||
responseTime: responseTime, | ||
}) | ||
); | ||
match.resolve(response); | ||
this.reliabilityScore.addMetric( | ||
match.request.entryNodeDestination, | ||
match.request.id, | ||
"success" | ||
); | ||
this.requestCache.removeRequest(match.request); | ||
match.resolve(response); | ||
this.reliabilityScore.addMetric( | ||
match.request.entryNodeDestination, | ||
match.request.id, | ||
"success" | ||
); | ||
this.requestCache.removeRequest(match.request); | ||
log.verbose("responded to %s with %s", match.request.body, response.body); | ||
log.verbose("responded to %s with %s", match.request.body, response.body); | ||
} catch (e) { | ||
log.error( | ||
"failed to decrypt message id %s with body", | ||
message.id, | ||
message.body | ||
); | ||
this.handleFailedRequest(match.request); | ||
} | ||
} | ||
@@ -266,2 +285,15 @@ | ||
/** | ||
* Remove request from requestCache and add failed metric | ||
* @param req Request | ||
* @returns void | ||
*/ | ||
public handleFailedRequest(req: Request) { | ||
// add metric failed metric | ||
this.onRequestRemoval(req); | ||
// reject request promise | ||
this.requestCache.getRequest(req.id)?.reject("request failed"); | ||
this.requestCache.removeRequest(req); | ||
} | ||
/** | ||
* Start the SDK and initialize necessary data. | ||
@@ -313,2 +345,24 @@ */ | ||
// fetch required data from discovery platform | ||
await retry( | ||
() => this.selectEntryNode(this.ops.discoveryPlatformApiEndpoint), | ||
{ | ||
retries: 5, | ||
onRetry: (e, attempt) => { | ||
log.error("Error while selecting entry node", e); | ||
log.verbose("Retrying to select entry node, attempt:", attempt); | ||
}, | ||
} | ||
); | ||
await retry( | ||
() => this.fetchExitNodes(this.ops.discoveryPlatformApiEndpoint), | ||
{ | ||
retries: 5, | ||
onRetry: (e, attempt) => { | ||
log.error("Error while fetching exit nodes", e); | ||
log.verbose("Retrying to fetch exit nodes, attempt:", attempt); | ||
}, | ||
} | ||
); | ||
// check for expires caches every second | ||
@@ -324,8 +378,9 @@ this.intervals.push( | ||
setInterval(() => { | ||
this.fetchExitNodes(this.ops.discoveryPlatformApiEndpoint); | ||
this.fetchExitNodes(this.ops.discoveryPlatformApiEndpoint).catch( | ||
(error) => { | ||
log.error("Failed to fetch exit nodes", error); | ||
} | ||
); | ||
}, 60e3) | ||
); | ||
await this.selectEntryNode(this.ops.discoveryPlatformApiEndpoint); | ||
await this.fetchExitNodes(this.ops.discoveryPlatformApiEndpoint); | ||
} | ||
@@ -365,3 +420,2 @@ | ||
try { | ||
this.selectingEntryNode = true; | ||
await this.selectEntryNode( | ||
@@ -371,6 +425,4 @@ this.ops.discoveryPlatformApiEndpoint, | ||
); | ||
this.selectingEntryNode = false; | ||
} catch (error) { | ||
log.error("Couldn't find elegible node: ", error); | ||
this.selectingEntryNode = false; | ||
log.error("Couldn't find new entry node: ", error); | ||
this.setDeadlock(DEADLOCK_MS); | ||
@@ -439,2 +491,10 @@ } | ||
if (segments.length > MAXIMUM_SEGMENTS_PER_REQUEST) { | ||
log.error( | ||
"Request exceeds maximum amount of segments with %s segments", | ||
segments.length | ||
); | ||
return reject("Request is too big"); | ||
} | ||
// Add request to request cache | ||
@@ -464,5 +524,3 @@ this.requestCache.addRequest(req, resolve, reject); | ||
// If any promises were rejected, remove request from cache and reject promise | ||
this.onRequestRemoval(req); | ||
this.requestCache.removeRequest(req); | ||
reject("failed to send message to hoprd"); | ||
this.handleFailedRequest(req); | ||
} | ||
@@ -472,5 +530,3 @@ } catch (e) { | ||
log.error("failed to send message to hoprd", e); | ||
this.onRequestRemoval(req); | ||
this.requestCache.removeRequest(req); | ||
reject("failed to send message to hoprd"); | ||
this.handleFailedRequest(req); | ||
} | ||
@@ -477,0 +533,0 @@ }); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
311658
3209
5
7
+ Addedasync-retry@^1.3.3
+ Added@rpch/common@0.1.7-blockwallet.1(transitive)
+ Added@rpch/crypto-bridge@0.1.7-blockwallet.1(transitive)
+ Addedasync-retry@1.3.3(transitive)
+ Addedretry@0.13.1(transitive)
- Removed@rpch/common@0.1.7-blockwallet.0(transitive)
- Removed@rpch/crypto-bridge@0.1.7-blockwallet.0(transitive)