viem 2.18.0 → 2.18.2
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/CHANGELOG.md +18 -0
- package/_cjs/accounts/index.js +3 -1
- package/_cjs/accounts/index.js.map +1 -1
- package/_cjs/actions/public/getLogs.js +2 -1
- package/_cjs/actions/public/getLogs.js.map +1 -1
- package/_cjs/chains/definitions/bobaSepolia.js +1 -0
- package/_cjs/chains/definitions/bobaSepolia.js.map +1 -1
- package/_cjs/chains/definitions/cronoszkEVMTestnet.js +24 -0
- package/_cjs/chains/definitions/cronoszkEVMTestnet.js.map +1 -0
- package/_cjs/chains/index.js +8 -6
- package/_cjs/chains/index.js.map +1 -1
- package/_cjs/clients/transports/webSocket.js +5 -2
- package/_cjs/clients/transports/webSocket.js.map +1 -1
- package/_cjs/errors/version.js +1 -1
- package/_cjs/utils/abi/parseEventLogs.js +70 -2
- package/_cjs/utils/abi/parseEventLogs.js.map +1 -1
- package/_cjs/utils/rpc/socket.js +27 -6
- package/_cjs/utils/rpc/socket.js.map +1 -1
- package/_cjs/utils/rpc/webSocket.js +22 -5
- package/_cjs/utils/rpc/webSocket.js.map +1 -1
- package/_esm/accounts/index.js +1 -0
- package/_esm/accounts/index.js.map +1 -1
- package/_esm/actions/public/getLogs.js +2 -1
- package/_esm/actions/public/getLogs.js.map +1 -1
- package/_esm/chains/definitions/bobaSepolia.js +1 -0
- package/_esm/chains/definitions/bobaSepolia.js.map +1 -1
- package/_esm/chains/definitions/cronoszkEVMTestnet.js +21 -0
- package/_esm/chains/definitions/cronoszkEVMTestnet.js.map +1 -0
- package/_esm/chains/index.js +1 -0
- package/_esm/chains/index.js.map +1 -1
- package/_esm/clients/transports/webSocket.js +5 -2
- package/_esm/clients/transports/webSocket.js.map +1 -1
- package/_esm/errors/version.js +1 -1
- package/_esm/utils/abi/parseEventLogs.js +72 -2
- package/_esm/utils/abi/parseEventLogs.js.map +1 -1
- package/_esm/utils/rpc/socket.js +29 -6
- package/_esm/utils/rpc/socket.js.map +1 -1
- package/_esm/utils/rpc/webSocket.js +22 -5
- package/_esm/utils/rpc/webSocket.js.map +1 -1
- package/_types/accounts/index.d.ts +1 -0
- package/_types/accounts/index.d.ts.map +1 -1
- package/_types/actions/public/getLogs.d.ts.map +1 -1
- package/_types/chains/definitions/bobaSepolia.d.ts +1 -1
- package/_types/chains/definitions/bobaSepolia.d.ts.map +1 -1
- package/_types/chains/definitions/cronoszkEVMTestnet.d.ts +35 -0
- package/_types/chains/definitions/cronoszkEVMTestnet.d.ts.map +1 -0
- package/_types/chains/index.d.ts +1 -0
- package/_types/chains/index.d.ts.map +1 -1
- package/_types/clients/transports/webSocket.d.ts +5 -0
- package/_types/clients/transports/webSocket.d.ts.map +1 -1
- package/_types/errors/version.d.ts +1 -1
- package/_types/utils/abi/parseEventLogs.d.ts +9 -3
- package/_types/utils/abi/parseEventLogs.d.ts.map +1 -1
- package/_types/utils/rpc/compat.d.ts +1 -0
- package/_types/utils/rpc/compat.d.ts.map +1 -1
- package/_types/utils/rpc/socket.d.ts +16 -2
- package/_types/utils/rpc/socket.d.ts.map +1 -1
- package/_types/utils/rpc/webSocket.d.ts +1 -1
- package/_types/utils/rpc/webSocket.d.ts.map +1 -1
- package/accounts/index.ts +1 -0
- package/actions/public/getLogs.ts +2 -1
- package/chains/definitions/bobaSepolia.ts +1 -0
- package/chains/definitions/cronoszkEVMTestnet.ts +21 -0
- package/chains/index.ts +1 -0
- package/clients/transports/webSocket.ts +10 -1
- package/errors/version.ts +1 -1
- package/package.json +1 -1
- package/utils/abi/parseEventLogs.ts +103 -14
- package/utils/rpc/socket.ts +59 -11
- package/utils/rpc/webSocket.ts +25 -6
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"webSocket.d.ts","sourceRoot":"","sources":["../../../clients/transports/webSocket.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EACL,KAAK,4BAA4B,EAElC,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,SAAS,EACd,KAAK,eAAe,EAErB,MAAM,sBAAsB,CAAA;AAE7B,KAAK,qCAAqC,GAAG;IAC3C,MAAM,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAA;IACnC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;CAC7C,CAAA;AAED,KAAK,qCAAqC,GAAG;IAC3C,cAAc,EAAE,IAAI,CAAA;IACpB,WAAW,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA;CACjD,CAAA;AAED,KAAK,2BAA2B,GAAG;IACjC,SAAS,CACP,IAAI,EAAE,qCAAqC,GAAG;QAC5C;;;WAGG;QACH,MAAM,EAAE,CAAC,UAAU,CAAC,CAAA;KACrB,GACA,OAAO,CAAC,qCAAqC,CAAC,CAAA;CAClD,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,0CAA0C;IAC1C,GAAG,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,SAAS,CAAA;IACxC,2CAA2C;IAC3C,IAAI,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;IAC1C;;;OAGG;IACH,SAAS,CAAC,EAAE,4BAA4B,CAAC,WAAW,CAAC,GAAG,SAAS,CAAA;IACjE,wCAAwC;IACxC,UAAU,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,GAAG,SAAS,CAAA;IACtD,8CAA8C;IAC9C,UAAU,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,GAAG,SAAS,CAAA;IACtD,wEAAwE;IACxE,OAAO,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,GAAG,SAAS,CAAA;CACjD,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,CACxC,WAAW,EACX;IACE;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,CAAA;IAC/B,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAA;IACnD,SAAS,EAAE,2BAA2B,CAAC,WAAW,CAAC,CAAA;CACpD,CACF,CAAA;AAED,MAAM,MAAM,2BAA2B,GACnC,wBAAwB,GACxB,oBAAoB,GACpB,SAAS,CAAA;AAEb;;GAEG;AACH,wBAAgB,SAAS;AACvB,uEAAuE;AACvE,GAAG,CAAC,EAAE,MAAM,EACZ,MAAM,GAAE,wBAA6B,GACpC,kBAAkB,
|
1
|
+
{"version":3,"file":"webSocket.d.ts","sourceRoot":"","sources":["../../../clients/transports/webSocket.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EACL,KAAK,4BAA4B,EAElC,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,SAAS,EACd,KAAK,eAAe,EAErB,MAAM,sBAAsB,CAAA;AAE7B,KAAK,qCAAqC,GAAG;IAC3C,MAAM,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAA;IACnC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;CAC7C,CAAA;AAED,KAAK,qCAAqC,GAAG;IAC3C,cAAc,EAAE,IAAI,CAAA;IACpB,WAAW,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA;CACjD,CAAA;AAED,KAAK,2BAA2B,GAAG;IACjC,SAAS,CACP,IAAI,EAAE,qCAAqC,GAAG;QAC5C;;;WAGG;QACH,MAAM,EAAE,CAAC,UAAU,CAAC,CAAA;KACrB,GACA,OAAO,CAAC,qCAAqC,CAAC,CAAA;CAClD,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC;;;OAGG;IACH,SAAS,CAAC,EAAE,4BAA4B,CAAC,WAAW,CAAC,GAAG,SAAS,CAAA;IACjE,0CAA0C;IAC1C,GAAG,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,SAAS,CAAA;IACxC,2CAA2C;IAC3C,IAAI,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;IAC1C;;;OAGG;IACH,SAAS,CAAC,EAAE,4BAA4B,CAAC,WAAW,CAAC,GAAG,SAAS,CAAA;IACjE,wCAAwC;IACxC,UAAU,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,GAAG,SAAS,CAAA;IACtD,8CAA8C;IAC9C,UAAU,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,GAAG,SAAS,CAAA;IACtD,wEAAwE;IACxE,OAAO,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,GAAG,SAAS,CAAA;CACjD,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,CACxC,WAAW,EACX;IACE;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,CAAA;IAC/B,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAA;IACnD,SAAS,EAAE,2BAA2B,CAAC,WAAW,CAAC,CAAA;CACpD,CACF,CAAA;AAED,MAAM,MAAM,2BAA2B,GACnC,wBAAwB,GACxB,oBAAoB,GACpB,SAAS,CAAA;AAEb;;GAEG;AACH,wBAAgB,SAAS;AACvB,uEAAuE;AACvE,GAAG,CAAC,EAAE,MAAM,EACZ,MAAM,GAAE,wBAA6B,GACpC,kBAAkB,CA0FpB"}
|
@@ -1,2 +1,2 @@
|
|
1
|
-
export declare const version = "2.18.
|
1
|
+
export declare const version = "2.18.2";
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
@@ -1,12 +1,18 @@
|
|
1
1
|
import type { Abi } from 'abitype';
|
2
2
|
import type { ErrorType } from '../../errors/utils.js';
|
3
|
-
import type { ContractEventName } from '../../types/contract.js';
|
3
|
+
import type { ContractEventName, GetEventArgs } from '../../types/contract.js';
|
4
4
|
import type { Log } from '../../types/log.js';
|
5
5
|
import type { RpcLog } from '../../types/rpc.js';
|
6
6
|
import { type DecodeEventLogErrorType } from './decodeEventLog.js';
|
7
|
-
export type ParseEventLogsParameters<abi extends Abi | readonly unknown[] = Abi, eventName extends ContractEventName<abi> | ContractEventName<abi>[] | undefined = ContractEventName<abi>, strict extends boolean | undefined = boolean | undefined
|
7
|
+
export type ParseEventLogsParameters<abi extends Abi | readonly unknown[] = Abi, eventName extends ContractEventName<abi> | ContractEventName<abi>[] | undefined = ContractEventName<abi>, strict extends boolean | undefined = boolean | undefined, allArgs = GetEventArgs<abi, eventName extends ContractEventName<abi> ? eventName : ContractEventName<abi>, {
|
8
|
+
EnableUnion: true;
|
9
|
+
IndexedOnly: false;
|
10
|
+
Required: false;
|
11
|
+
}>> = {
|
8
12
|
/** Contract ABI. */
|
9
13
|
abi: abi;
|
14
|
+
/** Arguments for the event. */
|
15
|
+
args?: allArgs | undefined;
|
10
16
|
/** Contract event. */
|
11
17
|
eventName?: eventName | ContractEventName<abi> | ContractEventName<abi>[] | undefined;
|
12
18
|
/** List of logs. */
|
@@ -39,5 +45,5 @@ export type ParseEventLogsErrorType = DecodeEventLogErrorType | ErrorType;
|
|
39
45
|
* const logs = parseEventLogs({ logs: receipt.logs })
|
40
46
|
* // [{ args: { ... }, eventName: 'TransactionDeposited', ... }, ...]
|
41
47
|
*/
|
42
|
-
export declare function parseEventLogs<abi extends Abi | readonly unknown[], strict extends boolean | undefined = true, eventName extends ContractEventName<abi> | ContractEventName<abi>[] | undefined = undefined>(
|
48
|
+
export declare function parseEventLogs<abi extends Abi | readonly unknown[], strict extends boolean | undefined = true, eventName extends ContractEventName<abi> | ContractEventName<abi>[] | undefined = undefined>(parameters: ParseEventLogsParameters<abi, eventName, strict>): ParseEventLogsReturnType<abi, eventName, strict>;
|
43
49
|
//# sourceMappingURL=parseEventLogs.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"parseEventLogs.d.ts","sourceRoot":"","sources":["../../../utils/abi/parseEventLogs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,
|
1
|
+
{"version":3,"file":"parseEventLogs.d.ts","sourceRoot":"","sources":["../../../utils/abi/parseEventLogs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAwC,MAAM,SAAS,CAAA;AAMxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC9E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAIhD,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,qBAAqB,CAAA;AAG5B,MAAM,MAAM,wBAAwB,CAClC,GAAG,SAAS,GAAG,GAAG,SAAS,OAAO,EAAE,GAAG,GAAG,EAC1C,SAAS,SACL,iBAAiB,CAAC,GAAG,CAAC,GACtB,iBAAiB,CAAC,GAAG,CAAC,EAAE,GACxB,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,EACtC,MAAM,SAAS,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,EAExD,OAAO,GAAG,YAAY,CACpB,GAAG,EACH,SAAS,SAAS,iBAAiB,CAAC,GAAG,CAAC,GACpC,SAAS,GACT,iBAAiB,CAAC,GAAG,CAAC,EAC1B;IACE,WAAW,EAAE,IAAI,CAAA;IACjB,WAAW,EAAE,KAAK,CAAA;IAClB,QAAQ,EAAE,KAAK,CAAA;CAChB,CACF,IACC;IACF,oBAAoB;IACpB,GAAG,EAAE,GAAG,CAAA;IACR,+BAA+B;IAC/B,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC1B,sBAAsB;IACtB,SAAS,CAAC,EACN,SAAS,GACT,iBAAiB,CAAC,GAAG,CAAC,GACtB,iBAAiB,CAAC,GAAG,CAAC,EAAE,GACxB,SAAS,CAAA;IACb,oBAAoB;IACpB,IAAI,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,EAAE,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,wBAAwB,CAClC,GAAG,SAAS,GAAG,GAAG,SAAS,OAAO,EAAE,GAAG,GAAG,EAC1C,SAAS,SACL,iBAAiB,CAAC,GAAG,CAAC,GACtB,iBAAiB,CAAC,GAAG,CAAC,EAAE,GACxB,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,EACtC,MAAM,SAAS,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,EAExD,gBAAgB,SACZ,iBAAiB,CAAC,GAAG,CAAC,GACtB,SAAS,GAAG,SAAS,SAAS,iBAAiB,CAAC,GAAG,CAAC,EAAE,GACtD,SAAS,CAAC,MAAM,CAAC,GACjB,SAAS,IACX,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,CAAC,EAAE,CAAA;AAE1E,MAAM,MAAM,uBAAuB,GAAG,uBAAuB,GAAG,SAAS,CAAA;AAEzE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,cAAc,CAC5B,GAAG,SAAS,GAAG,GAAG,SAAS,OAAO,EAAE,EACpC,MAAM,SAAS,OAAO,GAAG,SAAS,GAAG,IAAI,EACzC,SAAS,SACL,iBAAiB,CAAC,GAAG,CAAC,GACtB,iBAAiB,CAAC,GAAG,CAAC,EAAE,GACxB,SAAS,GAAG,SAAS,EAEzB,UAAU,EAAE,wBAAwB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,GAC3D,wBAAwB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CA8DlD"}
|
@@ -26,6 +26,7 @@ declare function webSocketAsync(socketClient: SocketRpcClient<WebSocket>, { body
|
|
26
26
|
*/
|
27
27
|
export declare function getSocket(url: string): Promise<WebSocket & {
|
28
28
|
close(): void;
|
29
|
+
ping?: (() => void) | undefined;
|
29
30
|
request(params: {
|
30
31
|
body: import("../../types/rpc.js").RpcRequest;
|
31
32
|
}): void;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"compat.d.ts","sourceRoot":"","sources":["../../../utils/rpc/compat.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,EAAE,KAAK,qBAAqB,EAAoB,MAAM,WAAW,CAAA;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAGlD,MAAM,MAAM,gBAAgB,GAAG,UAAU,CACvC,eAAe,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CACtC,CAAC,CAAC,CAAC,CAAA;AACJ,MAAM,MAAM,mBAAmB,GAAG,eAAe,CAAC,SAAS,CAAC,CAAA;AAC5D,MAAM,MAAM,kBAAkB,GAAG,qBAAqB,GAAG,SAAS,CAAA;AAElE,iBAAS,SAAS,CAChB,YAAY,EAAE,eAAe,CAAC,SAAS,CAAC,EACxC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,gBAAgB,GAC9C,mBAAmB,CAOrB;AAED,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAC5C,eAAe,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,CAC3C,CAAC,CAAC,CAAC,CAAA;AACJ,MAAM,MAAM,wBAAwB,GAAG,WAAW,CAAA;AAClD,MAAM,MAAM,uBAAuB,GAC/B,kBAAkB,GAClB,gBAAgB,GAChB,oBAAoB,GACpB,SAAS,CAAA;AAEb,iBAAe,cAAc,CAC3B,YAAY,EAAE,eAAe,CAAC,SAAS,CAAC,EACxC,EAAE,IAAI,EAAE,OAAgB,EAAE,EAAE,qBAAqB,GAChD,OAAO,CAAC,wBAAwB,CAAC,CAKnC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM
|
1
|
+
{"version":3,"file":"compat.d.ts","sourceRoot":"","sources":["../../../utils/rpc/compat.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,EAAE,KAAK,qBAAqB,EAAoB,MAAM,WAAW,CAAA;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAGlD,MAAM,MAAM,gBAAgB,GAAG,UAAU,CACvC,eAAe,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CACtC,CAAC,CAAC,CAAC,CAAA;AACJ,MAAM,MAAM,mBAAmB,GAAG,eAAe,CAAC,SAAS,CAAC,CAAA;AAC5D,MAAM,MAAM,kBAAkB,GAAG,qBAAqB,GAAG,SAAS,CAAA;AAElE,iBAAS,SAAS,CAChB,YAAY,EAAE,eAAe,CAAC,SAAS,CAAC,EACxC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,gBAAgB,GAC9C,mBAAmB,CAOrB;AAED,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAC5C,eAAe,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,CAC3C,CAAC,CAAC,CAAC,CAAA;AACJ,MAAM,MAAM,wBAAwB,GAAG,WAAW,CAAA;AAClD,MAAM,MAAM,uBAAuB,GAC/B,kBAAkB,GAClB,gBAAgB,GAChB,oBAAoB,GACpB,SAAS,CAAA;AAEb,iBAAe,cAAc,CAC3B,YAAY,EAAE,eAAe,CAAC,SAAS,CAAC,EACxC,EAAE,IAAI,EAAE,OAAgB,EAAE,EAAE,qBAAqB,GAChD,OAAO,CAAC,wBAAwB,CAAC,CAKnC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM;;;;;;;;;yBAtDkB,CAAA;;;;yBAAA,CAAA;;GA4D5D;AAED,eAAO,MAAM,GAAG;IACd;;;;;;;;;;;OAWG;cACO,MAAM,UAAU,qBAAqB;IAG/C;;;;;;;;;;;OAWG;;IAEH;;;;;;;;;;;OAWG;;CAEJ,CAAA"}
|
@@ -8,12 +8,14 @@ type CallbackFn = {
|
|
8
8
|
};
|
9
9
|
type CallbackMap = Map<Id, CallbackFn>;
|
10
10
|
export type GetSocketParameters = {
|
11
|
+
onClose: () => void;
|
11
12
|
onError: (error?: Error | Event | undefined) => void;
|
12
13
|
onOpen: () => void;
|
13
14
|
onResponse: (data: RpcResponse) => void;
|
14
15
|
};
|
15
16
|
export type Socket<socket extends {}> = socket & {
|
16
17
|
close(): void;
|
18
|
+
ping?: (() => void) | undefined;
|
17
19
|
request(params: {
|
18
20
|
body: RpcRequest;
|
19
21
|
}): void;
|
@@ -36,9 +38,20 @@ export type SocketRpcClient<socket extends {}> = {
|
|
36
38
|
};
|
37
39
|
export type GetSocketRpcClientParameters<socket extends {} = {}> = {
|
38
40
|
getSocket(params: GetSocketParameters): Promise<Socket<socket>>;
|
41
|
+
/**
|
42
|
+
* Whether or not to send keep-alive messages.
|
43
|
+
* @default true
|
44
|
+
*/
|
45
|
+
keepAlive?: boolean | {
|
46
|
+
/**
|
47
|
+
* The interval (in ms) to send keep-alive messages.
|
48
|
+
* @default 30_000
|
49
|
+
*/
|
50
|
+
interval?: number | undefined;
|
51
|
+
} | undefined;
|
39
52
|
key?: string;
|
40
53
|
/**
|
41
|
-
* Whether or not to attempt to reconnect on socket failure.
|
54
|
+
* Whether or not to attempt to reconnect on socket failure or closure.
|
42
55
|
* @default true
|
43
56
|
*/
|
44
57
|
reconnect?: boolean | {
|
@@ -58,10 +71,11 @@ export type GetSocketRpcClientParameters<socket extends {} = {}> = {
|
|
58
71
|
export type GetSocketRpcClientErrorType = CreateBatchSchedulerErrorType | ErrorType;
|
59
72
|
export declare const socketClientCache: Map<string, SocketRpcClient<{
|
60
73
|
close(): void;
|
74
|
+
ping?: (() => void) | undefined;
|
61
75
|
request(params: {
|
62
76
|
body: RpcRequest;
|
63
77
|
}): void;
|
64
78
|
}>>;
|
65
|
-
export declare function getSocketRpcClient<socket extends {}>(
|
79
|
+
export declare function getSocketRpcClient<socket extends {}>(parameters: GetSocketRpcClientParameters<socket>): Promise<SocketRpcClient<socket>>;
|
66
80
|
export {};
|
67
81
|
//# sourceMappingURL=socket.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../../utils/rpc/socket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EACL,KAAK,6BAA6B,EAEnC,MAAM,oCAAoC,CAAA;AAI3C,KAAK,EAAE,GAAG,MAAM,GAAG,MAAM,CAAA;AACzB,KAAK,UAAU,GAAG;IAChB,UAAU,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAA;IAClC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;CACpE,CAAA;AACD,KAAK,WAAW,GAAG,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;AAEtC,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,KAAK,IAAI,CAAA;IACpD,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,UAAU,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,MAAM,SAAS,EAAE,IAAI,MAAM,GAAG;IAC/C,KAAK,IAAI,IAAI,CAAA;IACb,OAAO,CAAC,MAAM,EAAE;
|
1
|
+
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../../utils/rpc/socket.ts"],"names":[],"mappings":"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"}
|
@@ -1,4 +1,4 @@
|
|
1
1
|
import { type GetSocketRpcClientParameters, type SocketRpcClient } from './socket.js';
|
2
|
-
export type GetWebSocketRpcClientOptions = Pick<GetSocketRpcClientParameters, 'reconnect'>;
|
2
|
+
export type GetWebSocketRpcClientOptions = Pick<GetSocketRpcClientParameters, 'keepAlive' | 'reconnect'>;
|
3
3
|
export declare function getWebSocketRpcClient(url: string, options?: GetWebSocketRpcClientOptions | undefined): Promise<SocketRpcClient<WebSocket>>;
|
4
4
|
//# sourceMappingURL=webSocket.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"webSocket.d.ts","sourceRoot":"","sources":["../../../utils/rpc/webSocket.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,4BAA4B,EAEjC,KAAK,eAAe,EAErB,MAAM,aAAa,CAAA;AAEpB,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAC7C,4BAA4B,EAC5B,WAAW,
|
1
|
+
{"version":3,"file":"webSocket.d.ts","sourceRoot":"","sources":["../../../utils/rpc/webSocket.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,4BAA4B,EAEjC,KAAK,eAAe,EAErB,MAAM,aAAa,CAAA;AAEpB,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAC7C,4BAA4B,EAC5B,WAAW,GAAG,WAAW,CAC1B,CAAA;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,4BAA4B,GAAG,SAAc,GACrD,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CA6ErC"}
|
package/accounts/index.ts
CHANGED
@@ -165,7 +165,7 @@ export async function getLogs<
|
|
165
165
|
encodeEventTopics({
|
166
166
|
abi: [event],
|
167
167
|
eventName: (event as AbiEvent).name,
|
168
|
-
args,
|
168
|
+
args: events_ ? undefined : args,
|
169
169
|
} as EncodeEventTopicsParameters),
|
170
170
|
)
|
171
171
|
// TODO: Clean up type casting
|
@@ -205,6 +205,7 @@ export async function getLogs<
|
|
205
205
|
>
|
206
206
|
return parseEventLogs({
|
207
207
|
abi: events,
|
208
|
+
args: args as any,
|
208
209
|
logs: formattedLogs,
|
209
210
|
strict,
|
210
211
|
}) as unknown as GetLogsReturnType<
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import { defineChain } from '../../utils/chain/defineChain.js'
|
2
|
+
|
3
|
+
export const cronoszkEVMTestnet = /*#__PURE__*/ defineChain({
|
4
|
+
id: 282,
|
5
|
+
name: 'Cronos zkEVM Testnet',
|
6
|
+
nativeCurrency: {
|
7
|
+
decimals: 18,
|
8
|
+
name: 'Cronos zkEVM Test Coin',
|
9
|
+
symbol: 'zkTCRO',
|
10
|
+
},
|
11
|
+
rpcUrls: {
|
12
|
+
default: { http: ['https://testnet.zkevm.cronos.org'] },
|
13
|
+
},
|
14
|
+
blockExplorers: {
|
15
|
+
default: {
|
16
|
+
name: 'Cronos zkEVM Testnet Explorer',
|
17
|
+
url: 'https://explorer.zkevm.cronos.org/testnet',
|
18
|
+
},
|
19
|
+
},
|
20
|
+
testnet: true,
|
21
|
+
})
|
package/chains/index.ts
CHANGED
@@ -60,6 +60,7 @@ export { confluxESpaceTestnet } from './definitions/confluxESpaceTestnet.js'
|
|
60
60
|
export { coreDao } from './definitions/coreDao.js'
|
61
61
|
export { crab } from './definitions/crab.js'
|
62
62
|
export { cronos } from './definitions/cronos.js'
|
63
|
+
export { cronoszkEVMTestnet } from './definitions/cronoszkEVMTestnet.js'
|
63
64
|
export { cronosTestnet } from './definitions/cronosTestnet.js'
|
64
65
|
export { crossbell } from './definitions/crossbell.js'
|
65
66
|
export { cyber } from './definitions/cyber.js'
|
@@ -42,6 +42,11 @@ type WebSocketTransportSubscribe = {
|
|
42
42
|
}
|
43
43
|
|
44
44
|
export type WebSocketTransportConfig = {
|
45
|
+
/**
|
46
|
+
* Whether or not to send keep-alive ping messages.
|
47
|
+
* @default true
|
48
|
+
*/
|
49
|
+
keepAlive?: GetWebSocketRpcClientOptions['keepAlive'] | undefined
|
45
50
|
/** The key of the WebSocket transport. */
|
46
51
|
key?: TransportConfig['key'] | undefined
|
47
52
|
/** The name of the WebSocket transport. */
|
@@ -85,6 +90,7 @@ export function webSocket(
|
|
85
90
|
config: WebSocketTransportConfig = {},
|
86
91
|
): WebSocketTransport {
|
87
92
|
const {
|
93
|
+
keepAlive,
|
88
94
|
key = 'webSocket',
|
89
95
|
name = 'WebSocket JSON-RPC',
|
90
96
|
reconnect,
|
@@ -101,7 +107,10 @@ export function webSocket(
|
|
101
107
|
name,
|
102
108
|
async request({ method, params }) {
|
103
109
|
const body = { method, params }
|
104
|
-
const rpcClient = await getWebSocketRpcClient(url_, {
|
110
|
+
const rpcClient = await getWebSocketRpcClient(url_, {
|
111
|
+
keepAlive,
|
112
|
+
reconnect,
|
113
|
+
})
|
105
114
|
const { error, result } = await rpcClient.requestAsync({
|
106
115
|
body,
|
107
116
|
timeout,
|
package/errors/version.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export const version = '2.18.
|
1
|
+
export const version = '2.18.2'
|
package/package.json
CHANGED
@@ -1,19 +1,23 @@
|
|
1
1
|
// TODO(v3): checksum address.
|
2
2
|
|
3
|
-
import type { Abi } from 'abitype'
|
3
|
+
import type { Abi, AbiEvent, AbiEventParameter, Address } from 'abitype'
|
4
4
|
import {
|
5
5
|
AbiEventSignatureNotFoundError,
|
6
6
|
DecodeLogDataMismatch,
|
7
7
|
DecodeLogTopicsMismatch,
|
8
8
|
} from '../../errors/abi.js'
|
9
9
|
import type { ErrorType } from '../../errors/utils.js'
|
10
|
-
import type { ContractEventName } from '../../types/contract.js'
|
10
|
+
import type { ContractEventName, GetEventArgs } from '../../types/contract.js'
|
11
11
|
import type { Log } from '../../types/log.js'
|
12
12
|
import type { RpcLog } from '../../types/rpc.js'
|
13
|
+
import { isAddressEqual } from '../address/isAddressEqual.js'
|
14
|
+
import { toBytes } from '../encoding/toBytes.js'
|
15
|
+
import { keccak256 } from '../hash/keccak256.js'
|
13
16
|
import {
|
14
17
|
type DecodeEventLogErrorType,
|
15
18
|
decodeEventLog,
|
16
19
|
} from './decodeEventLog.js'
|
20
|
+
import { getAbiItem } from './getAbiItem.js'
|
17
21
|
|
18
22
|
export type ParseEventLogsParameters<
|
19
23
|
abi extends Abi | readonly unknown[] = Abi,
|
@@ -22,9 +26,23 @@ export type ParseEventLogsParameters<
|
|
22
26
|
| ContractEventName<abi>[]
|
23
27
|
| undefined = ContractEventName<abi>,
|
24
28
|
strict extends boolean | undefined = boolean | undefined,
|
29
|
+
///
|
30
|
+
allArgs = GetEventArgs<
|
31
|
+
abi,
|
32
|
+
eventName extends ContractEventName<abi>
|
33
|
+
? eventName
|
34
|
+
: ContractEventName<abi>,
|
35
|
+
{
|
36
|
+
EnableUnion: true
|
37
|
+
IndexedOnly: false
|
38
|
+
Required: false
|
39
|
+
}
|
40
|
+
>,
|
25
41
|
> = {
|
26
42
|
/** Contract ABI. */
|
27
43
|
abi: abi
|
44
|
+
/** Arguments for the event. */
|
45
|
+
args?: allArgs | undefined
|
28
46
|
/** Contract event. */
|
29
47
|
eventName?:
|
30
48
|
| eventName
|
@@ -84,25 +102,45 @@ export function parseEventLogs<
|
|
84
102
|
| ContractEventName<abi>
|
85
103
|
| ContractEventName<abi>[]
|
86
104
|
| undefined = undefined,
|
87
|
-
>(
|
88
|
-
abi,
|
89
|
-
|
90
|
-
logs,
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
105
|
+
>(
|
106
|
+
parameters: ParseEventLogsParameters<abi, eventName, strict>,
|
107
|
+
): ParseEventLogsReturnType<abi, eventName, strict> {
|
108
|
+
const { abi, args, logs, strict = true } = parameters
|
109
|
+
|
110
|
+
const eventName = (() => {
|
111
|
+
if (!parameters.eventName) return undefined
|
112
|
+
if (Array.isArray(parameters.eventName)) return parameters.eventName
|
113
|
+
return [parameters.eventName as string]
|
114
|
+
})()
|
115
|
+
|
97
116
|
return logs
|
98
117
|
.map((log) => {
|
99
118
|
try {
|
119
|
+
const abiItem = getAbiItem({
|
120
|
+
abi: abi as Abi,
|
121
|
+
name: log.topics[0] as string,
|
122
|
+
}) as AbiEvent
|
123
|
+
if (!abiItem) return null
|
124
|
+
|
100
125
|
const event = decodeEventLog({
|
101
126
|
...log,
|
102
|
-
abi,
|
127
|
+
abi: [abiItem],
|
103
128
|
strict,
|
104
129
|
})
|
105
|
-
|
130
|
+
|
131
|
+
// Check that the decoded event name matches the provided event name.
|
132
|
+
if (eventName && !eventName.includes(event.eventName)) return null
|
133
|
+
|
134
|
+
// Check that the decoded event args match the provided args.
|
135
|
+
if (
|
136
|
+
!includesArgs({
|
137
|
+
args: event.args,
|
138
|
+
inputs: abiItem.inputs,
|
139
|
+
matchArgs: args,
|
140
|
+
})
|
141
|
+
)
|
142
|
+
return null
|
143
|
+
|
106
144
|
return { ...event, ...log }
|
107
145
|
} catch (err) {
|
108
146
|
let eventName: string | undefined
|
@@ -129,3 +167,54 @@ export function parseEventLogs<
|
|
129
167
|
strict
|
130
168
|
>
|
131
169
|
}
|
170
|
+
|
171
|
+
function includesArgs(parameters: {
|
172
|
+
args: unknown
|
173
|
+
inputs: AbiEvent['inputs']
|
174
|
+
matchArgs: unknown
|
175
|
+
}) {
|
176
|
+
const { args, inputs, matchArgs } = parameters
|
177
|
+
|
178
|
+
if (!matchArgs) return true
|
179
|
+
if (!args) return false
|
180
|
+
|
181
|
+
function isEqual(input: AbiEventParameter, value: unknown, arg: unknown) {
|
182
|
+
try {
|
183
|
+
if (input.type === 'address')
|
184
|
+
return isAddressEqual(value as Address, arg as Address)
|
185
|
+
if (input.type === 'string' || input.type === 'bytes')
|
186
|
+
return keccak256(toBytes(value as string)) === arg
|
187
|
+
return value === arg
|
188
|
+
} catch {
|
189
|
+
return false
|
190
|
+
}
|
191
|
+
}
|
192
|
+
|
193
|
+
if (Array.isArray(args) && Array.isArray(matchArgs)) {
|
194
|
+
return matchArgs.every((value, index) => {
|
195
|
+
if (!value) return true
|
196
|
+
const input = inputs[index]
|
197
|
+
if (!input) return false
|
198
|
+
const value_ = Array.isArray(value) ? value : [value]
|
199
|
+
return value_.some((value) => isEqual(input, value, args[index]))
|
200
|
+
})
|
201
|
+
}
|
202
|
+
|
203
|
+
if (
|
204
|
+
typeof args === 'object' &&
|
205
|
+
!Array.isArray(args) &&
|
206
|
+
typeof matchArgs === 'object' &&
|
207
|
+
!Array.isArray(matchArgs)
|
208
|
+
)
|
209
|
+
return Object.entries(matchArgs).every(([key, value]) => {
|
210
|
+
if (!value) return true
|
211
|
+
const input = inputs.find((input) => input.name === key)
|
212
|
+
if (!input) return false
|
213
|
+
const value_ = Array.isArray(value) ? value : [value]
|
214
|
+
return value_.some((value) =>
|
215
|
+
isEqual(input, value, (args as Record<string, unknown>)[key]),
|
216
|
+
)
|
217
|
+
})
|
218
|
+
|
219
|
+
return false
|
220
|
+
}
|
package/utils/rpc/socket.ts
CHANGED
@@ -16,6 +16,7 @@ type CallbackFn = {
|
|
16
16
|
type CallbackMap = Map<Id, CallbackFn>
|
17
17
|
|
18
18
|
export type GetSocketParameters = {
|
19
|
+
onClose: () => void
|
19
20
|
onError: (error?: Error | Event | undefined) => void
|
20
21
|
onOpen: () => void
|
21
22
|
onResponse: (data: RpcResponse) => void
|
@@ -23,9 +24,8 @@ export type GetSocketParameters = {
|
|
23
24
|
|
24
25
|
export type Socket<socket extends {}> = socket & {
|
25
26
|
close(): void
|
26
|
-
|
27
|
-
|
28
|
-
}): void
|
27
|
+
ping?: (() => void) | undefined
|
28
|
+
request(params: { body: RpcRequest }): void
|
29
29
|
}
|
30
30
|
|
31
31
|
export type SocketRpcClient<socket extends {}> = {
|
@@ -47,9 +47,23 @@ export type SocketRpcClient<socket extends {}> = {
|
|
47
47
|
|
48
48
|
export type GetSocketRpcClientParameters<socket extends {} = {}> = {
|
49
49
|
getSocket(params: GetSocketParameters): Promise<Socket<socket>>
|
50
|
+
/**
|
51
|
+
* Whether or not to send keep-alive messages.
|
52
|
+
* @default true
|
53
|
+
*/
|
54
|
+
keepAlive?:
|
55
|
+
| boolean
|
56
|
+
| {
|
57
|
+
/**
|
58
|
+
* The interval (in ms) to send keep-alive messages.
|
59
|
+
* @default 30_000
|
60
|
+
*/
|
61
|
+
interval?: number | undefined
|
62
|
+
}
|
63
|
+
| undefined
|
50
64
|
key?: string
|
51
65
|
/**
|
52
|
-
* Whether or not to attempt to reconnect on socket failure.
|
66
|
+
* Whether or not to attempt to reconnect on socket failure or closure.
|
53
67
|
* @default true
|
54
68
|
*/
|
55
69
|
reconnect?:
|
@@ -80,9 +94,17 @@ export const socketClientCache = /*#__PURE__*/ new Map<
|
|
80
94
|
>()
|
81
95
|
|
82
96
|
export async function getSocketRpcClient<socket extends {}>(
|
83
|
-
|
97
|
+
parameters: GetSocketRpcClientParameters<socket>,
|
84
98
|
): Promise<SocketRpcClient<socket>> {
|
85
|
-
const {
|
99
|
+
const {
|
100
|
+
getSocket,
|
101
|
+
keepAlive = true,
|
102
|
+
key = 'socket',
|
103
|
+
reconnect = true,
|
104
|
+
url,
|
105
|
+
} = parameters
|
106
|
+
const { interval: keepAliveInterval = 30_000 } =
|
107
|
+
typeof keepAlive === 'object' ? keepAlive : {}
|
86
108
|
const { attempts = 5, delay = 2_000 } =
|
87
109
|
typeof reconnect === 'object' ? reconnect : {}
|
88
110
|
|
@@ -105,10 +127,24 @@ export async function getSocketRpcClient<socket extends {}>(
|
|
105
127
|
const subscriptions = new Map<Id, CallbackFn>()
|
106
128
|
|
107
129
|
let error: Error | Event | undefined
|
108
|
-
let socket: Socket<
|
130
|
+
let socket: Socket<{}>
|
131
|
+
let keepAliveTimer: Timer | undefined
|
132
|
+
|
109
133
|
// Set up socket implementation.
|
110
134
|
async function setup() {
|
111
|
-
|
135
|
+
const result = await getSocket({
|
136
|
+
onClose() {
|
137
|
+
// Clear all requests and subscriptions.
|
138
|
+
requests.clear()
|
139
|
+
subscriptions.clear()
|
140
|
+
|
141
|
+
// Attempt to reconnect.
|
142
|
+
if (reconnect && reconnectCount < attempts)
|
143
|
+
setTimeout(async () => {
|
144
|
+
reconnectCount++
|
145
|
+
await setup().catch(console.error)
|
146
|
+
}, delay)
|
147
|
+
},
|
112
148
|
onError(error_) {
|
113
149
|
error = error_
|
114
150
|
|
@@ -125,7 +161,7 @@ export async function getSocketRpcClient<socket extends {}>(
|
|
125
161
|
if (reconnect && reconnectCount < attempts)
|
126
162
|
setTimeout(async () => {
|
127
163
|
reconnectCount++
|
128
|
-
|
164
|
+
await setup().catch(console.error)
|
129
165
|
}, delay)
|
130
166
|
},
|
131
167
|
onOpen() {
|
@@ -141,17 +177,29 @@ export async function getSocketRpcClient<socket extends {}>(
|
|
141
177
|
if (!isSubscription) cache.delete(id)
|
142
178
|
},
|
143
179
|
})
|
180
|
+
|
181
|
+
socket = result
|
182
|
+
|
183
|
+
if (keepAlive) {
|
184
|
+
if (keepAliveTimer) clearInterval(keepAliveTimer)
|
185
|
+
keepAliveTimer = setInterval(() => socket.ping?.(), keepAliveInterval)
|
186
|
+
}
|
187
|
+
|
188
|
+
return result
|
144
189
|
}
|
145
|
-
|
190
|
+
await setup()
|
146
191
|
error = undefined
|
147
192
|
|
148
193
|
// Create a new socket instance.
|
149
194
|
socketClient = {
|
150
195
|
close() {
|
196
|
+
keepAliveTimer && clearInterval(keepAliveTimer)
|
151
197
|
socket.close()
|
152
198
|
socketClientCache.delete(`${key}:${url}`)
|
153
199
|
},
|
154
|
-
socket
|
200
|
+
get socket() {
|
201
|
+
return socket
|
202
|
+
},
|
155
203
|
request({ body, onError, onResponse }) {
|
156
204
|
if (error && onError) onError(error)
|
157
205
|
|
package/utils/rpc/webSocket.ts
CHANGED
@@ -10,22 +10,23 @@ import {
|
|
10
10
|
|
11
11
|
export type GetWebSocketRpcClientOptions = Pick<
|
12
12
|
GetSocketRpcClientParameters,
|
13
|
-
'reconnect'
|
13
|
+
'keepAlive' | 'reconnect'
|
14
14
|
>
|
15
15
|
|
16
16
|
export async function getWebSocketRpcClient(
|
17
17
|
url: string,
|
18
18
|
options: GetWebSocketRpcClientOptions | undefined = {},
|
19
19
|
): Promise<SocketRpcClient<WebSocket>> {
|
20
|
-
const { reconnect } = options
|
20
|
+
const { keepAlive, reconnect } = options
|
21
21
|
|
22
22
|
return getSocketRpcClient({
|
23
|
-
async getSocket({ onError, onOpen, onResponse }) {
|
23
|
+
async getSocket({ onClose, onError, onOpen, onResponse }) {
|
24
24
|
const WebSocket = await import('isows').then((module) => module.WebSocket)
|
25
25
|
const socket = new WebSocket(url)
|
26
26
|
|
27
|
-
function
|
28
|
-
|
27
|
+
function onClose_() {
|
28
|
+
onClose()
|
29
|
+
socket.removeEventListener('close', onClose_)
|
29
30
|
socket.removeEventListener('message', onMessage)
|
30
31
|
socket.removeEventListener('error', onError)
|
31
32
|
socket.removeEventListener('open', onOpen)
|
@@ -35,7 +36,7 @@ export async function getWebSocketRpcClient(
|
|
35
36
|
}
|
36
37
|
|
37
38
|
// Setup event listeners for RPC & subscription responses.
|
38
|
-
socket.addEventListener('close',
|
39
|
+
socket.addEventListener('close', onClose_)
|
39
40
|
socket.addEventListener('message', onMessage)
|
40
41
|
socket.addEventListener('error', onError)
|
41
42
|
socket.addEventListener('open', onOpen)
|
@@ -56,6 +57,23 @@ export async function getWebSocketRpcClient(
|
|
56
57
|
close_.bind(socket)()
|
57
58
|
onClose()
|
58
59
|
},
|
60
|
+
ping() {
|
61
|
+
try {
|
62
|
+
if (
|
63
|
+
socket.readyState === socket.CLOSED ||
|
64
|
+
socket.readyState === socket.CLOSING
|
65
|
+
)
|
66
|
+
throw new WebSocketRequestError({
|
67
|
+
body: {},
|
68
|
+
url: socket.url,
|
69
|
+
details: 'Socket is closed.',
|
70
|
+
})
|
71
|
+
|
72
|
+
socket.send('ping')
|
73
|
+
} catch (error) {
|
74
|
+
onError(error as Error)
|
75
|
+
}
|
76
|
+
},
|
59
77
|
request({ body }) {
|
60
78
|
if (
|
61
79
|
socket.readyState === socket.CLOSED ||
|
@@ -71,6 +89,7 @@ export async function getWebSocketRpcClient(
|
|
71
89
|
},
|
72
90
|
} as Socket<WebSocket>)
|
73
91
|
},
|
92
|
+
keepAlive,
|
74
93
|
reconnect,
|
75
94
|
url,
|
76
95
|
})
|