@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 CHANGED
@@ -25,29 +25,32 @@ class GeyserClient {
25
25
 
26
26
  close(): Promise<void>
27
27
 
28
- getAllRateLimiterIds(timeout?: number): Promise<string[]>
28
+ getAllRateLimiterIds(signal?: AbortSignal): Promise<string[]>
29
29
 
30
- getRateLimiter(rateLimiterId: string, timeout?: number): Promise<IRateLimiterConfig | null>
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
- , timeout?: number
38
+ , signal?: AbortSignal
36
39
  ): Promise<void>
37
40
 
38
- removeRateLimiter(rateLimiterId: string, timeout?: number): Promise<void>
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, timeout?: number): Promise<void>
48
+ resetRateLimiter(rateLimiterId: string, signal?: AbortSignal): Promise<void>
46
49
 
47
50
  /**
48
51
  * @throws {RateLimiterNotFound}
49
52
  */
50
- acquireToken(rateLimiterId: string, timeout?: number): Promise<void>
53
+ acquireToken(rateLimiterId: string, signal?: AbortSignal): Promise<void>
51
54
  }
52
55
 
53
56
  /**
@@ -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(timeout?: number): Promise<string[]>;
16
- getRateLimiter(rateLimiterId: string, timeout?: number): Promise<IRateLimiterConfig | null>;
17
- setRateLimiter(rateLimiterId: string, config: IRateLimiterConfig, timeout?: number): Promise<void>;
18
- removeRateLimiter(rateLimiterId: string, timeout?: number): Promise<void>;
19
- resetRateLimiter(rateLimiterId: string, timeout?: number): Promise<void>;
20
- acquireToken(rateLimiterId: string, timeout?: number): Promise<void>;
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
  }
@@ -1,44 +1,43 @@
1
1
  import { createRPCClient } from "./utils/rpc-client.js";
2
- import { timeoutSignal, withAbortSignal } from 'extra-abort';
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(timeout) {
18
- return await this.withTimeout(() => this.client.getAllRateLimiterIds(), timeout !== null && timeout !== void 0 ? timeout : this.timeout);
18
+ async getAllRateLimiterIds(signal) {
19
+ return await this.client.getAllRateLimiterIds(this.withTimeout(signal));
19
20
  }
20
- async getRateLimiter(rateLimiterId, timeout) {
21
- return await this.withTimeout(() => this.client.getRateLimiter(rateLimiterId), timeout !== null && timeout !== void 0 ? timeout : this.timeout);
21
+ async getRateLimiter(rateLimiterId, signal) {
22
+ return await this.client.getRateLimiter(rateLimiterId, this.withTimeout(signal));
22
23
  }
23
- async setRateLimiter(rateLimiterId, config, timeout) {
24
- await this.withTimeout(() => this.client.setRateLimiter(rateLimiterId, config), timeout !== null && timeout !== void 0 ? timeout : this.timeout);
24
+ async setRateLimiter(rateLimiterId, config, signal) {
25
+ await this.client.setRateLimiter(rateLimiterId, config, this.withTimeout(signal));
25
26
  }
26
- async removeRateLimiter(rateLimiterId, timeout) {
27
- await this.withTimeout(() => this.client.removeRateLimiter(rateLimiterId), timeout !== null && timeout !== void 0 ? timeout : this.timeout);
27
+ async removeRateLimiter(rateLimiterId, signal) {
28
+ await this.client.removeRateLimiter(rateLimiterId, this.withTimeout(signal));
28
29
  }
29
- async resetRateLimiter(rateLimiterId, timeout) {
30
- await this.withTimeout(() => this.client.removeRateLimiter(rateLimiterId), timeout !== null && timeout !== void 0 ? timeout : this.timeout);
30
+ async resetRateLimiter(rateLimiterId, signal) {
31
+ await this.client.removeRateLimiter(rateLimiterId, this.withTimeout(signal));
31
32
  }
32
- async acquireToken(rateLimiterId, timeout) {
33
- await this.withTimeout(() => this.client.acquireToken(rateLimiterId), timeout !== null && timeout !== void 0 ? timeout : this.timeout);
33
+ async acquireToken(rateLimiterId, signal) {
34
+ await this.client.acquireToken(rateLimiterId, this.withTimeout(signal));
34
35
  }
35
- async withTimeout(fn, timeout = this.timeout) {
36
- if (timeout) {
37
- return await withAbortSignal(timeoutSignal(timeout), fn);
38
- }
39
- else {
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
@@ -1 +1 @@
1
- {"version":3,"file":"geyser-client.js","sourceRoot":"","sources":["../src/geyser-client.ts"],"names":[],"mappings":"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"}
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.9.1",
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": ">=16"
21
+ "node": ">=22"
22
22
  },
23
23
  "scripts": {
24
24
  "prepare": "ts-patch install -s",
25
- "lint": "eslint --ext .js,.jsx,.ts,.tsx --quiet src __tests__",
26
- "test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --no-cache --runInBand --config jest.config.cjs",
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-compose --project-name estore-js --file docker-compose.test.yml build",
35
- "docker:test:run": "docker-compose --project-name estore-js --file docker-compose.test.yml run --rm test",
36
- "docker:test:clean": "docker-compose --project-name estore-js --file docker-compose.test.yml down",
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
- "@blackglory/jest-resolver": "^0.3.0",
47
- "@commitlint/cli": "^17.5.1",
48
- "@commitlint/config-conventional": "^17.4.4",
49
- "@types/jest": "^29.5.0",
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": "^8.36.0",
49
+ "eslint": "^9.27.0",
55
50
  "husky": "4",
56
- "jest": "^29.5.0",
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.0",
61
- "rimraf": "^3.0.2",
53
+ "return-style": "^3.0.1",
54
+ "rimraf": "^6.0.1",
62
55
  "standard-version": "^9.3.2",
63
- "ts-jest": "^29.0.5",
64
- "ts-patch": "^2.1.0",
65
- "tslib": "^2.5.0",
66
- "typescript": "4.8",
67
- "typescript-transform-paths": "^3.4.6"
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.0",
71
- "@blackglory/prelude": "^0.3.1",
72
- "@delight-rpc/extra-native-websocket": "^0.5.2",
73
- "@delight-rpc/extra-websocket": "^0.6.2",
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.3.6",
76
- "extra-native-websocket": "^0.3.1",
77
- "extra-websocket": "^0.3.1",
78
- "justypes": "^4.2.0",
79
- "ws": "^8.13.0"
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
  }
@@ -1,7 +1,8 @@
1
1
  import { createRPCClient } from '@utils/rpc-client.js'
2
2
  import { ClientProxy } from 'delight-rpc'
3
- import { timeoutSignal, withAbortSignal } from 'extra-abort'
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(timeout?: number): Promise<string[]> {
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
- , timeout?: number
39
+ , signal?: AbortSignal
42
40
  ): Promise<IRateLimiterConfig | null> {
43
- return await this.withTimeout(
44
- () => this.client.getRateLimiter(rateLimiterId)
45
- , timeout ?? this.timeout
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
- , timeout?: number
50
+ , signal?: AbortSignal
53
51
  ): Promise<void> {
54
- await this.withTimeout(
55
- () => this.client.setRateLimiter(rateLimiterId, config)
56
- , timeout ?? this.timeout
52
+ await this.client.setRateLimiter(
53
+ rateLimiterId
54
+ , config
55
+ , this.withTimeout(signal)
57
56
  )
58
57
  }
59
58
 
60
- async removeRateLimiter(rateLimiterId: string, timeout?: number): Promise<void> {
61
- await this.withTimeout(
62
- () => this.client.removeRateLimiter(rateLimiterId)
63
- , timeout ?? this.timeout
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(rateLimiterId: string, timeout?: number): Promise<void> {
73
- await this.withTimeout(
74
- () => this.client.removeRateLimiter(rateLimiterId)
75
- , timeout ?? this.timeout
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, timeout?: number): Promise<void> {
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 async withTimeout<T>(
90
- fn: () => PromiseLike<T>
91
- , timeout: number | undefined = this.timeout
92
- ): Promise<T> {
93
- if (timeout) {
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
  }