@blackglory/geyser-js 0.9.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -6
- package/lib/geyser-client.d.ts +6 -6
- package/lib/geyser-client.js +23 -24
- package/lib/geyser-client.js.map +1 -1
- package/package.json +32 -36
- package/src/geyser-client.ts +30 -38
package/README.md
CHANGED
|
@@ -25,29 +25,32 @@ class GeyserClient {
|
|
|
25
25
|
|
|
26
26
|
close(): Promise<void>
|
|
27
27
|
|
|
28
|
-
getAllRateLimiterIds(
|
|
28
|
+
getAllRateLimiterIds(signal?: AbortSignal): Promise<string[]>
|
|
29
29
|
|
|
30
|
-
getRateLimiter(
|
|
30
|
+
getRateLimiter(
|
|
31
|
+
rateLimiterId: string
|
|
32
|
+
, signal?: AbortSignal
|
|
33
|
+
): Promise<IRateLimiterConfig | null>
|
|
31
34
|
|
|
32
35
|
setRateLimiter(
|
|
33
36
|
rateLimiterId: string
|
|
34
37
|
, config: IRateLimiterConfig
|
|
35
|
-
,
|
|
38
|
+
, signal?: AbortSignal
|
|
36
39
|
): Promise<void>
|
|
37
40
|
|
|
38
|
-
removeRateLimiter(rateLimiterId: string,
|
|
41
|
+
removeRateLimiter(rateLimiterId: string, signal?: AbortSignal): Promise<void>
|
|
39
42
|
|
|
40
43
|
/**
|
|
41
44
|
* 重置速率限制器的状态.
|
|
42
45
|
*
|
|
43
46
|
* @throws {RateLimiterNotFound}
|
|
44
47
|
*/
|
|
45
|
-
resetRateLimiter(rateLimiterId: string,
|
|
48
|
+
resetRateLimiter(rateLimiterId: string, signal?: AbortSignal): Promise<void>
|
|
46
49
|
|
|
47
50
|
/**
|
|
48
51
|
* @throws {RateLimiterNotFound}
|
|
49
52
|
*/
|
|
50
|
-
acquireToken(rateLimiterId: string,
|
|
53
|
+
acquireToken(rateLimiterId: string, signal?: AbortSignal): Promise<void>
|
|
51
54
|
}
|
|
52
55
|
|
|
53
56
|
/**
|
package/lib/geyser-client.d.ts
CHANGED
|
@@ -12,11 +12,11 @@ export declare class GeyserClient {
|
|
|
12
12
|
static create(options: IGeyserClientOptions): Promise<GeyserClient>;
|
|
13
13
|
private constructor();
|
|
14
14
|
close(): Promise<void>;
|
|
15
|
-
getAllRateLimiterIds(
|
|
16
|
-
getRateLimiter(rateLimiterId: string,
|
|
17
|
-
setRateLimiter(rateLimiterId: string, config: IRateLimiterConfig,
|
|
18
|
-
removeRateLimiter(rateLimiterId: string,
|
|
19
|
-
resetRateLimiter(rateLimiterId: string,
|
|
20
|
-
acquireToken(rateLimiterId: string,
|
|
15
|
+
getAllRateLimiterIds(signal?: AbortSignal): Promise<string[]>;
|
|
16
|
+
getRateLimiter(rateLimiterId: string, signal?: AbortSignal): Promise<IRateLimiterConfig | null>;
|
|
17
|
+
setRateLimiter(rateLimiterId: string, config: IRateLimiterConfig, signal?: AbortSignal): Promise<void>;
|
|
18
|
+
removeRateLimiter(rateLimiterId: string, signal?: AbortSignal): Promise<void>;
|
|
19
|
+
resetRateLimiter(rateLimiterId: string, signal?: AbortSignal): Promise<void>;
|
|
20
|
+
acquireToken(rateLimiterId: string, signal?: AbortSignal): Promise<void>;
|
|
21
21
|
private withTimeout;
|
|
22
22
|
}
|
package/lib/geyser-client.js
CHANGED
|
@@ -1,44 +1,43 @@
|
|
|
1
1
|
import { createRPCClient } from "./utils/rpc-client.js";
|
|
2
|
-
import {
|
|
2
|
+
import { raceAbortSignals, timeoutSignal } from 'extra-abort';
|
|
3
|
+
import { isntUndefined } from '@blackglory/prelude';
|
|
3
4
|
export { RateLimiterNotFound } from './contract.js';
|
|
4
5
|
export class GeyserClient {
|
|
6
|
+
static async create(options) {
|
|
7
|
+
const { client, close } = await createRPCClient(options.server, options.retryIntervalForReconnection);
|
|
8
|
+
return new GeyserClient(client, close, options.timeout);
|
|
9
|
+
}
|
|
5
10
|
constructor(client, closeClients, timeout) {
|
|
6
11
|
this.client = client;
|
|
7
12
|
this.closeClients = closeClients;
|
|
8
13
|
this.timeout = timeout;
|
|
9
14
|
}
|
|
10
|
-
static async create(options) {
|
|
11
|
-
const { client, close } = await createRPCClient(options.server, options.retryIntervalForReconnection);
|
|
12
|
-
return new GeyserClient(client, close, options.timeout);
|
|
13
|
-
}
|
|
14
15
|
async close() {
|
|
15
16
|
await this.closeClients();
|
|
16
17
|
}
|
|
17
|
-
async getAllRateLimiterIds(
|
|
18
|
-
return await this.
|
|
18
|
+
async getAllRateLimiterIds(signal) {
|
|
19
|
+
return await this.client.getAllRateLimiterIds(this.withTimeout(signal));
|
|
19
20
|
}
|
|
20
|
-
async getRateLimiter(rateLimiterId,
|
|
21
|
-
return await this.
|
|
21
|
+
async getRateLimiter(rateLimiterId, signal) {
|
|
22
|
+
return await this.client.getRateLimiter(rateLimiterId, this.withTimeout(signal));
|
|
22
23
|
}
|
|
23
|
-
async setRateLimiter(rateLimiterId, config,
|
|
24
|
-
await this.
|
|
24
|
+
async setRateLimiter(rateLimiterId, config, signal) {
|
|
25
|
+
await this.client.setRateLimiter(rateLimiterId, config, this.withTimeout(signal));
|
|
25
26
|
}
|
|
26
|
-
async removeRateLimiter(rateLimiterId,
|
|
27
|
-
await this.
|
|
27
|
+
async removeRateLimiter(rateLimiterId, signal) {
|
|
28
|
+
await this.client.removeRateLimiter(rateLimiterId, this.withTimeout(signal));
|
|
28
29
|
}
|
|
29
|
-
async resetRateLimiter(rateLimiterId,
|
|
30
|
-
await this.
|
|
30
|
+
async resetRateLimiter(rateLimiterId, signal) {
|
|
31
|
+
await this.client.removeRateLimiter(rateLimiterId, this.withTimeout(signal));
|
|
31
32
|
}
|
|
32
|
-
async acquireToken(rateLimiterId,
|
|
33
|
-
await this.
|
|
33
|
+
async acquireToken(rateLimiterId, signal) {
|
|
34
|
+
await this.client.acquireToken(rateLimiterId, this.withTimeout(signal));
|
|
34
35
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
return await fn();
|
|
41
|
-
}
|
|
36
|
+
withTimeout(signal) {
|
|
37
|
+
return raceAbortSignals([
|
|
38
|
+
isntUndefined(this.timeout) && timeoutSignal(this.timeout),
|
|
39
|
+
signal
|
|
40
|
+
]);
|
|
42
41
|
}
|
|
43
42
|
}
|
|
44
43
|
//# sourceMappingURL=geyser-client.js.map
|
package/lib/geyser-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geyser-client.js","sourceRoot":"","sources":["../src/geyser-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,8BAA4B;AAEtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"geyser-client.js","sourceRoot":"","sources":["../src/geyser-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,8BAA4B;AAEtD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAsB,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAQvE,MAAM,OAAO,YAAY;IACvB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAA6B;QAC/C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,eAAe,CAC7C,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,4BAA4B,CACrC,CAAA;QACD,OAAO,IAAI,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACzD,CAAC;IAED,YACU,MAAyB,EACzB,YAAiC,EACjC,OAAgB;QAFhB,WAAM,GAAN,MAAM,CAAmB;QACzB,iBAAY,GAAZ,YAAY,CAAqB;QACjC,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEJ,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,MAAoB;QAC7C,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAA;IACzE,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,aAAqB,EACrB,MAAoB;QAEpB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CACrC,aAAa,EACb,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CACzB,CAAA;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,aAAqB,EACrB,MAA0B,EAC1B,MAAoB;QAEpB,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAC9B,aAAa,EACb,MAAM,EACN,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CACzB,CAAA;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,aAAqB,EACrB,MAAoB;QAEpB,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAA;IAC9E,CAAC;IAOD,KAAK,CAAC,gBAAgB,CACpB,aAAqB,EACrB,MAAoB;QAEpB,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAA;IAC9E,CAAC;IAKD,KAAK,CAAC,YAAY,CAAC,aAAqB,EAAE,MAAoB;QAC5D,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAA;IACzE,CAAC;IAEO,WAAW,CAAC,MAAoB;QACtC,OAAO,gBAAgB,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;YAC1D,MAAM;SACP,CAAC,CAAA;IACJ,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blackglory/geyser-js",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"files": [
|
|
@@ -18,22 +18,20 @@
|
|
|
18
18
|
"license": "MIT",
|
|
19
19
|
"sideEffects": false,
|
|
20
20
|
"engines": {
|
|
21
|
-
"node": ">=
|
|
21
|
+
"node": ">=22"
|
|
22
22
|
},
|
|
23
23
|
"scripts": {
|
|
24
24
|
"prepare": "ts-patch install -s",
|
|
25
|
-
"lint": "eslint --
|
|
26
|
-
"test": "
|
|
27
|
-
"test:debug": "cross-env NODE_OPTIONS=--experimental-vm-modules node --inspect-brk node_modules/.bin/jest --runInBand jest.config.cjs",
|
|
28
|
-
"test:coverage": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --coverage --config jest.config.cjs",
|
|
25
|
+
"lint": "eslint --quiet src __tests__",
|
|
26
|
+
"test": "vitest --run",
|
|
29
27
|
"prepublishOnly": "run-s prepare clean build",
|
|
30
28
|
"clean": "rimraf lib",
|
|
31
29
|
"build": "tsc --project tsconfig.build.json",
|
|
32
30
|
"docker:test": "run-s docker:test:clean docker:test:build docker:test:run docker:test:clean",
|
|
33
31
|
"docker:coverage": "run-s docker:test:clean docker:test:build docker:test:coverage docker:test:clean",
|
|
34
|
-
"docker:test:build": "docker
|
|
35
|
-
"docker:test:run": "docker
|
|
36
|
-
"docker:test:clean": "docker
|
|
32
|
+
"docker:test:build": "docker compose --project-name estore-js --file docker-compose.test.yml build",
|
|
33
|
+
"docker:test:run": "docker compose --project-name estore-js --file docker-compose.test.yml run --no-TTY --rm test",
|
|
34
|
+
"docker:test:clean": "docker compose --project-name estore-js --file docker-compose.test.yml down",
|
|
37
35
|
"release": "standard-version"
|
|
38
36
|
},
|
|
39
37
|
"husky": {
|
|
@@ -43,39 +41,37 @@
|
|
|
43
41
|
}
|
|
44
42
|
},
|
|
45
43
|
"devDependencies": {
|
|
46
|
-
"@
|
|
47
|
-
"@commitlint/
|
|
48
|
-
"@
|
|
49
|
-
"@types/
|
|
50
|
-
"@types/ws": "^8.5.4",
|
|
51
|
-
"@typescript-eslint/eslint-plugin": "^5.57.0",
|
|
52
|
-
"@typescript-eslint/parser": "^5.57.0",
|
|
44
|
+
"@commitlint/cli": "^19.8.1",
|
|
45
|
+
"@commitlint/config-conventional": "^19.8.1",
|
|
46
|
+
"@eslint/js": "^9.27.0",
|
|
47
|
+
"@types/ws": "^8.18.1",
|
|
53
48
|
"cross-env": "^7.0.3",
|
|
54
|
-
"eslint": "^
|
|
49
|
+
"eslint": "^9.27.0",
|
|
55
50
|
"husky": "4",
|
|
56
|
-
"
|
|
57
|
-
"jest-resolve": "^29.5.0",
|
|
58
|
-
"msw": "^1.2.1",
|
|
51
|
+
"msw": "^2.8.6",
|
|
59
52
|
"npm-run-all": "^4.1.5",
|
|
60
|
-
"return-style": "^3.0.
|
|
61
|
-
"rimraf": "^
|
|
53
|
+
"return-style": "^3.0.1",
|
|
54
|
+
"rimraf": "^6.0.1",
|
|
62
55
|
"standard-version": "^9.3.2",
|
|
63
|
-
"ts-
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"typescript": "
|
|
67
|
-
"typescript-transform-paths": "^3.
|
|
56
|
+
"ts-patch": "^3.3.0",
|
|
57
|
+
"tslib": "^2.8.1",
|
|
58
|
+
"typescript": "5.8.3",
|
|
59
|
+
"typescript-eslint": "^8.33.0",
|
|
60
|
+
"typescript-transform-paths": "^3.5.5",
|
|
61
|
+
"vite": "^6.3.5",
|
|
62
|
+
"vite-tsconfig-paths": "^5.1.4",
|
|
63
|
+
"vitest": "^3.1.4"
|
|
68
64
|
},
|
|
69
65
|
"dependencies": {
|
|
70
|
-
"@blackglory/errors": "^3.0.
|
|
71
|
-
"@blackglory/prelude": "^0.
|
|
72
|
-
"@delight-rpc/extra-native-websocket": "^0.
|
|
73
|
-
"@delight-rpc/extra-websocket": "^0.
|
|
66
|
+
"@blackglory/errors": "^3.0.3",
|
|
67
|
+
"@blackglory/prelude": "^0.4.0",
|
|
68
|
+
"@delight-rpc/extra-native-websocket": "^0.6.0",
|
|
69
|
+
"@delight-rpc/extra-websocket": "^0.7.0",
|
|
74
70
|
"delight-rpc": "^6.1.2",
|
|
75
|
-
"extra-abort": "^0.
|
|
76
|
-
"extra-native-websocket": "^0.
|
|
77
|
-
"extra-websocket": "^0.
|
|
78
|
-
"justypes": "^4.
|
|
79
|
-
"ws": "^8.
|
|
71
|
+
"extra-abort": "^0.4.0",
|
|
72
|
+
"extra-native-websocket": "^0.4.1",
|
|
73
|
+
"extra-websocket": "^0.4.2",
|
|
74
|
+
"justypes": "^4.4.1",
|
|
75
|
+
"ws": "^8.18.2"
|
|
80
76
|
}
|
|
81
77
|
}
|
package/src/geyser-client.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { createRPCClient } from '@utils/rpc-client.js'
|
|
2
2
|
import { ClientProxy } from 'delight-rpc'
|
|
3
|
-
import {
|
|
3
|
+
import { raceAbortSignals, timeoutSignal } from 'extra-abort'
|
|
4
4
|
import { IAPI, IRateLimiterConfig } from './contract.js'
|
|
5
|
+
import { isntUndefined } from '@blackglory/prelude'
|
|
5
6
|
export { IRateLimiterConfig, RateLimiterNotFound } from './contract.js'
|
|
6
7
|
|
|
7
8
|
export interface IGeyserClientOptions {
|
|
@@ -29,39 +30,37 @@ export class GeyserClient {
|
|
|
29
30
|
await this.closeClients()
|
|
30
31
|
}
|
|
31
32
|
|
|
32
|
-
async getAllRateLimiterIds(
|
|
33
|
-
return await this.withTimeout(
|
|
34
|
-
() => this.client.getAllRateLimiterIds()
|
|
35
|
-
, timeout ?? this.timeout
|
|
36
|
-
)
|
|
33
|
+
async getAllRateLimiterIds(signal?: AbortSignal): Promise<string[]> {
|
|
34
|
+
return await this.client.getAllRateLimiterIds(this.withTimeout(signal))
|
|
37
35
|
}
|
|
38
36
|
|
|
39
37
|
async getRateLimiter(
|
|
40
38
|
rateLimiterId: string
|
|
41
|
-
,
|
|
39
|
+
, signal?: AbortSignal
|
|
42
40
|
): Promise<IRateLimiterConfig | null> {
|
|
43
|
-
return await this.
|
|
44
|
-
|
|
45
|
-
,
|
|
41
|
+
return await this.client.getRateLimiter(
|
|
42
|
+
rateLimiterId
|
|
43
|
+
, this.withTimeout(signal)
|
|
46
44
|
)
|
|
47
45
|
}
|
|
48
46
|
|
|
49
47
|
async setRateLimiter(
|
|
50
48
|
rateLimiterId: string
|
|
51
49
|
, config: IRateLimiterConfig
|
|
52
|
-
,
|
|
50
|
+
, signal?: AbortSignal
|
|
53
51
|
): Promise<void> {
|
|
54
|
-
await this.
|
|
55
|
-
|
|
56
|
-
,
|
|
52
|
+
await this.client.setRateLimiter(
|
|
53
|
+
rateLimiterId
|
|
54
|
+
, config
|
|
55
|
+
, this.withTimeout(signal)
|
|
57
56
|
)
|
|
58
57
|
}
|
|
59
58
|
|
|
60
|
-
async removeRateLimiter(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
)
|
|
59
|
+
async removeRateLimiter(
|
|
60
|
+
rateLimiterId: string
|
|
61
|
+
, signal?: AbortSignal
|
|
62
|
+
): Promise<void> {
|
|
63
|
+
await this.client.removeRateLimiter(rateLimiterId, this.withTimeout(signal))
|
|
65
64
|
}
|
|
66
65
|
|
|
67
66
|
/**
|
|
@@ -69,31 +68,24 @@ export class GeyserClient {
|
|
|
69
68
|
*
|
|
70
69
|
* @throws {RateLimiterNotFound}
|
|
71
70
|
*/
|
|
72
|
-
async resetRateLimiter(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
)
|
|
71
|
+
async resetRateLimiter(
|
|
72
|
+
rateLimiterId: string
|
|
73
|
+
, signal?: AbortSignal
|
|
74
|
+
): Promise<void> {
|
|
75
|
+
await this.client.removeRateLimiter(rateLimiterId, this.withTimeout(signal))
|
|
77
76
|
}
|
|
78
77
|
|
|
79
78
|
/**
|
|
80
79
|
* @throws {RateLimiterNotFound}
|
|
81
80
|
*/
|
|
82
|
-
async acquireToken(rateLimiterId: string,
|
|
83
|
-
await this.withTimeout(
|
|
84
|
-
() => this.client.acquireToken(rateLimiterId)
|
|
85
|
-
, timeout ?? this.timeout
|
|
86
|
-
)
|
|
81
|
+
async acquireToken(rateLimiterId: string, signal?: AbortSignal): Promise<void> {
|
|
82
|
+
await this.client.acquireToken(rateLimiterId, this.withTimeout(signal))
|
|
87
83
|
}
|
|
88
84
|
|
|
89
|
-
private
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
return await withAbortSignal(timeoutSignal(timeout), fn)
|
|
95
|
-
} else {
|
|
96
|
-
return await fn()
|
|
97
|
-
}
|
|
85
|
+
private withTimeout(signal?: AbortSignal): AbortSignal {
|
|
86
|
+
return raceAbortSignals([
|
|
87
|
+
isntUndefined(this.timeout) && timeoutSignal(this.timeout)
|
|
88
|
+
, signal
|
|
89
|
+
])
|
|
98
90
|
}
|
|
99
91
|
}
|