@subsquid/rpc-client
Advanced tools
@@ -16,2 +16,3 @@ import type { RpcClient } from './client'; | ||
| close(): void; | ||
| reset(): void; | ||
| } | ||
@@ -18,0 +19,0 @@ export declare class Subscriptions { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../src/subscriptions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,UAAU,CAAA;AAKvC,MAAM,WAAW,YAAY,CAAC,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;IAC3B,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAA;IAC7B,2BAA2B,CAAC,EAAE,OAAO,CAAA;IACrC,aAAa,CAAC,EAAE,MAAM,CAAA;CACzB;AAGD,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,KAAK,IAAI,IAAI,CAAA;CAChB;AAMD,qBAAa,aAAa;IAGV,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,MAAM,CAA2B;gBAErB,MAAM,EAAE,SAAS;IAKrC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,kBAAkB;IAIhD,OAAO,CAAC,cAAc;IA6BtB,OAAO,CAAC,OAAO;CAKlB"} | ||
| {"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../src/subscriptions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,UAAU,CAAA;AAKvC,MAAM,WAAW,YAAY,CAAC,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;IAC3B,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAA;IAC7B,2BAA2B,CAAC,EAAE,OAAO,CAAA;IACrC,aAAa,CAAC,EAAE,MAAM,CAAA;CACzB;AAGD,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,KAAK,IAAI,IAAI,CAAA;IACb,KAAK,IAAI,IAAI,CAAA;CAChB;AAOD,qBAAa,aAAa;IAGV,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,MAAM,CAA4B;gBAEtB,MAAM,EAAE,SAAS;IAKrC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,kBAAkB;IAIhD,OAAO,CAAC,cAAc;IA6BtB,OAAO,CAAC,OAAO;CAKlB"} |
+38
-11
| "use strict"; | ||
| var __importDefault = (this && this.__importDefault) || function (mod) { | ||
| return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.Subscriptions = void 0; | ||
| const util_internal_1 = require("@subsquid/util-internal"); | ||
| const assert_1 = __importDefault(require("assert")); | ||
| const errors_1 = require("./errors"); | ||
@@ -25,4 +29,4 @@ class Subscriptions { | ||
| } | ||
| let id = `${msg.method}::${subscription}`; | ||
| let handle = this.active.get(id); | ||
| let key = `${msg.method}::${subscription}`; | ||
| let handle = this.active.get(key); | ||
| if (handle == null) | ||
@@ -60,2 +64,6 @@ return; | ||
| } | ||
| getSubKey() { | ||
| (0, assert_1.default)(this.id != null); | ||
| return `${this.sub.notification}::${this.id}`; | ||
| } | ||
| close() { | ||
@@ -70,3 +78,3 @@ if (this.closed) | ||
| return; | ||
| this.active.delete(this.id); | ||
| this.active.delete(this.getSubKey()); | ||
| this.id = undefined; | ||
@@ -88,3 +96,3 @@ if (reason instanceof errors_1.RpcConnectionError && this.sub.resubscribeOnConnectionLoss) { | ||
| if (this.isActive) { | ||
| this.active.set(this.id, this); | ||
| this.active.set(this.getSubKey(), this); | ||
| } | ||
@@ -97,4 +105,9 @@ else { | ||
| return; | ||
| this.closed = true; | ||
| this.sub.onError(err); | ||
| if (err instanceof errors_1.RpcConnectionError && this.sub.resubscribeOnConnectionLoss) { | ||
| this.subscribe(); | ||
| } | ||
| else { | ||
| this.closed = true; | ||
| this.sub.onError(err); | ||
| } | ||
| }); | ||
@@ -105,4 +118,9 @@ } | ||
| return; | ||
| this.active.delete(this.id); | ||
| this.client.call(this.sub.unsubscribe, [this.id], { retryAttempts: 0 }).catch(err => { | ||
| this.doUnsubscribe().then(); | ||
| } | ||
| doUnsubscribe() { | ||
| this.active.delete(this.getSubKey()); | ||
| let id = this.id; | ||
| this.id = undefined; | ||
| return this.client.call(this.sub.unsubscribe, [id], { retryAttempts: 0 }).catch(err => { | ||
| if (err instanceof errors_1.RpcConnectionError) | ||
@@ -113,2 +131,11 @@ return; | ||
| } | ||
| reset() { | ||
| if (this.id == null) | ||
| return; | ||
| this.doUnsubscribe().then(() => { | ||
| if (this.closed) | ||
| return; | ||
| this.subscribe(); | ||
| }); | ||
| } | ||
| validateSubscriptionResult(result, req) { | ||
@@ -126,10 +153,10 @@ switch (typeof result) { | ||
| } | ||
| let id = `${this.sub.notification}::${result}`; | ||
| if (this.active.has(id)) { | ||
| let key = `${this.sub.notification}::${result}`; | ||
| if (this.active.has(key)) { | ||
| this.client.reset(); | ||
| throw new Error(`got duplicate subscription: ${result}`); | ||
| } | ||
| return id; | ||
| return result; | ||
| } | ||
| } | ||
| //# sourceMappingURL=subscriptions.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../src/subscriptions.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../src/subscriptions.ts"],"names":[],"mappings":"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"} |
+2
-2
| { | ||
| "name": "@subsquid/rpc-client", | ||
| "version": "4.12.0", | ||
| "version": "4.13.0", | ||
| "description": "Lightweight JSON-RPC client library", | ||
@@ -16,3 +16,3 @@ "license": "GPL-3.0-or-later", | ||
| "dependencies": { | ||
| "@subsquid/http-client": "^1.6.0", | ||
| "@subsquid/http-client": "^1.6.1", | ||
| "@subsquid/logger": "^1.4.0", | ||
@@ -19,0 +19,0 @@ "@subsquid/util-internal": "^3.2.0", |
+41
-15
| import {addErrorContext} from '@subsquid/util-internal' | ||
| import assert from 'assert' | ||
| import type {RpcClient} from './client' | ||
@@ -23,10 +24,12 @@ import {RpcConnectionError, RpcError} from './errors' | ||
| close(): void | ||
| reset(): void | ||
| } | ||
| type SubId = string | ||
| type SubKey = string // "{notification}::{id}" | ||
| type SubId = number | string | ||
| export class Subscriptions { | ||
| private active = new Map<SubId, Handle>() | ||
| private active = new Map<SubKey, Handle>() | ||
@@ -51,4 +54,4 @@ constructor(private client: RpcClient) { | ||
| } | ||
| let id = `${msg.method}::${subscription}` | ||
| let handle = this.active.get(id) | ||
| let key = `${msg.method}::${subscription}` | ||
| let handle = this.active.get(key) | ||
| if (handle == null) return | ||
@@ -87,3 +90,3 @@ | ||
| private client: RpcClient, | ||
| private active: Map<SubId, Handle> | ||
| private active: Map<SubKey, Handle> | ||
| ) { | ||
@@ -101,2 +104,7 @@ this.subscribe() | ||
| getSubKey(): string { | ||
| assert(this.id != null) | ||
| return `${this.sub.notification}::${this.id}` | ||
| } | ||
| close(): void { | ||
@@ -110,3 +118,3 @@ if (this.closed) return | ||
| if (this.closed) return | ||
| this.active.delete(this.id!) | ||
| this.active.delete(this.getSubKey()) | ||
| this.id = undefined | ||
@@ -128,3 +136,3 @@ if (reason instanceof RpcConnectionError && this.sub.resubscribeOnConnectionLoss) { | ||
| if (this.isActive) { | ||
| this.active.set(this.id, this) | ||
| this.active.set(this.getSubKey(), this) | ||
| } else { | ||
@@ -135,11 +143,21 @@ this.unsubscribe() | ||
| if (this.closed) return | ||
| this.closed = true | ||
| this.sub.onError(err) | ||
| if (err instanceof RpcConnectionError && this.sub.resubscribeOnConnectionLoss) { | ||
| this.subscribe() | ||
| } else { | ||
| this.closed = true | ||
| this.sub.onError(err) | ||
| } | ||
| }) | ||
| } | ||
| private unsubscribe(): void { | ||
| private unsubscribe() { | ||
| if (this.id == null) return | ||
| this.active.delete(this.id) | ||
| this.client.call(this.sub.unsubscribe, [this.id], {retryAttempts: 0}).catch(err => { | ||
| this.doUnsubscribe().then() | ||
| } | ||
| private doUnsubscribe(): Promise<void> { | ||
| this.active.delete(this.getSubKey()) | ||
| let id = this.id | ||
| this.id = undefined | ||
| return this.client.call(this.sub.unsubscribe, [id], {retryAttempts: 0}).catch(err => { | ||
| if (err instanceof RpcConnectionError) return | ||
@@ -155,2 +173,10 @@ this.client.reset( | ||
| reset(): void { | ||
| if (this.id == null) return | ||
| this.doUnsubscribe().then(() => { | ||
| if (this.closed) return | ||
| this.subscribe() | ||
| }) | ||
| } | ||
| private validateSubscriptionResult(result: unknown, req: RpcRequest): SubId { | ||
@@ -172,9 +198,9 @@ switch(typeof result) { | ||
| } | ||
| let id = `${this.sub.notification}::${result}` | ||
| if (this.active.has(id)) { | ||
| let key = `${this.sub.notification}::${result}` | ||
| if (this.active.has(key)) { | ||
| this.client.reset() | ||
| throw new Error(`got duplicate subscription: ${result}`) | ||
| } | ||
| return id | ||
| return result | ||
| } | ||
| } |
124095
1.91%2436
2.14%Updated