socket_provider.d.ts 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import { ConnectionEvent, EthExecutionAPI, JsonRpcId, JsonRpcResponse, JsonRpcResponseWithResult, JsonRpcResult, ProviderConnectInfo, ProviderMessage, ProviderRpcError, SocketRequestItem, Web3APIMethod, Web3APIPayload, Web3APIReturnType, Web3APISpec, Web3Eip1193ProviderEventCallback, Web3ProviderEventCallback, Web3ProviderMessageEventCallback, Web3ProviderStatus } from 'web3-types';
  2. import { Eip1193Provider } from './web3_eip1193_provider.js';
  3. import { ChunkResponseParser } from './chunk_response_parser.js';
  4. export declare type ReconnectOptions = {
  5. autoReconnect: boolean;
  6. delay: number;
  7. maxAttempts: number;
  8. };
  9. export declare abstract class SocketProvider<MessageEvent, CloseEvent, ErrorEvent, API extends Web3APISpec = EthExecutionAPI> extends Eip1193Provider<API> {
  10. protected isReconnecting: boolean;
  11. protected readonly _socketPath: string;
  12. protected readonly chunkResponseParser: ChunkResponseParser;
  13. protected readonly _pendingRequestsQueue: Map<JsonRpcId, SocketRequestItem<any, any, any>>;
  14. protected readonly _sentRequestsQueue: Map<JsonRpcId, SocketRequestItem<any, any, any>>;
  15. protected _reconnectAttempts: number;
  16. protected readonly _socketOptions?: unknown;
  17. protected readonly _reconnectOptions: ReconnectOptions;
  18. protected _socketConnection?: unknown;
  19. get SocketConnection(): unknown;
  20. protected _connectionStatus: Web3ProviderStatus;
  21. protected readonly _onMessageHandler: (event: MessageEvent) => void;
  22. protected readonly _onOpenHandler: () => void;
  23. protected readonly _onCloseHandler: (event: CloseEvent) => void;
  24. protected readonly _onErrorHandler: (event: ErrorEvent) => void;
  25. /**
  26. * This is an abstract class for implementing a socket provider (e.g. WebSocket, IPC). It extends the EIP-1193 provider {@link EIP1193Provider}.
  27. * @param socketPath - The path to the socket (e.g. /ipc/path or ws://localhost:8546)
  28. * @param socketOptions - The options for the socket connection. Its type is supposed to be specified in the inherited classes.
  29. * @param reconnectOptions - The options for the socket reconnection {@link ReconnectOptions}
  30. */
  31. constructor(socketPath: string, socketOptions?: unknown, reconnectOptions?: Partial<ReconnectOptions>);
  32. protected _init(): void;
  33. /**
  34. * Try to establish a connection to the socket
  35. */
  36. connect(): void;
  37. protected abstract _openSocketConnection(): void;
  38. protected abstract _addSocketListeners(): void;
  39. protected abstract _removeSocketListeners(): void;
  40. protected abstract _onCloseEvent(_event: unknown): void;
  41. protected abstract _sendToSocket(_payload: Web3APIPayload<API, any>): void;
  42. protected abstract _parseResponses(_event: MessageEvent): JsonRpcResponse[];
  43. protected abstract _closeSocketConnection(_code?: number, _data?: string): void;
  44. protected _validateProviderPath(path: string): boolean;
  45. /**
  46. *
  47. * @returns `true` if the socket supports subscriptions
  48. */
  49. supportsSubscriptions(): boolean;
  50. /**
  51. * Registers a listener for the specified event type.
  52. * @param type - The event type to listen for
  53. * @param listener - The callback to be invoked when the event is emitted
  54. */
  55. on(type: 'disconnect', listener: Web3Eip1193ProviderEventCallback<ProviderRpcError>): void;
  56. on(type: 'connect', listener: Web3Eip1193ProviderEventCallback<ProviderConnectInfo>): void;
  57. on(type: 'chainChanged', listener: Web3Eip1193ProviderEventCallback<string>): void;
  58. on(type: 'accountsChanged', listener: Web3Eip1193ProviderEventCallback<string[]>): void;
  59. on<T = JsonRpcResult>(type: 'message', listener: Web3Eip1193ProviderEventCallback<ProviderMessage> | Web3ProviderMessageEventCallback<T>): void;
  60. on<T = JsonRpcResult>(type: string, listener: Web3Eip1193ProviderEventCallback<unknown> | Web3ProviderEventCallback<T>): void;
  61. /**
  62. * Registers a listener for the specified event type that will be invoked at most once.
  63. * @param type - The event type to listen for
  64. * @param listener - The callback to be invoked when the event is emitted
  65. */
  66. once(type: 'disconnect', listener: Web3Eip1193ProviderEventCallback<ProviderRpcError>): void;
  67. once(type: 'connect', listener: Web3Eip1193ProviderEventCallback<ProviderConnectInfo>): void;
  68. once(type: 'chainChanged', listener: Web3Eip1193ProviderEventCallback<string>): void;
  69. once(type: 'accountsChanged', listener: Web3Eip1193ProviderEventCallback<string[]>): void;
  70. once<T = JsonRpcResult>(type: 'message', listener: Web3Eip1193ProviderEventCallback<ProviderMessage> | Web3ProviderEventCallback<T>): void;
  71. once<T = JsonRpcResult>(type: string, listener: Web3Eip1193ProviderEventCallback<unknown> | Web3ProviderEventCallback<T>): void;
  72. /**
  73. * Removes a listener for the specified event type.
  74. * @param type - The event type to remove the listener for
  75. * @param listener - The callback to be executed
  76. */
  77. removeListener(type: 'disconnect', listener: Web3Eip1193ProviderEventCallback<ProviderRpcError>): void;
  78. removeListener(type: 'connect', listener: Web3Eip1193ProviderEventCallback<ProviderConnectInfo>): void;
  79. removeListener(type: 'chainChanged', listener: Web3Eip1193ProviderEventCallback<string>): void;
  80. removeListener(type: 'accountsChanged', listener: Web3Eip1193ProviderEventCallback<string[]>): void;
  81. removeListener<T = JsonRpcResult>(type: 'message', listener: Web3Eip1193ProviderEventCallback<ProviderMessage> | Web3ProviderEventCallback<T>): void;
  82. removeListener<T = JsonRpcResult>(type: string, listener: Web3Eip1193ProviderEventCallback<unknown> | Web3ProviderEventCallback<T>): void;
  83. protected _onDisconnect(code?: number, data?: string): void;
  84. /**
  85. * Disconnects the socket
  86. * @param code - The code to be sent to the server
  87. * @param data - The data to be sent to the server
  88. */
  89. disconnect(code?: number, data?: string): void;
  90. /**
  91. * Removes all listeners for the specified event type.
  92. * @param type - The event type to remove the listeners for
  93. */
  94. removeAllListeners(type: string): void;
  95. protected _onError(event: ErrorEvent): void;
  96. /**
  97. * Resets the socket, removing all listeners and pending requests
  98. */
  99. reset(): void;
  100. protected _reconnect(): void;
  101. /**
  102. * Creates a request object to be sent to the server
  103. */
  104. request<Method extends Web3APIMethod<API>, ResultType = Web3APIReturnType<API, Method>>(request: Web3APIPayload<API, Method>): Promise<JsonRpcResponseWithResult<ResultType>>;
  105. protected _onConnect(): void;
  106. private _sendPendingRequests;
  107. protected _onMessage(event: MessageEvent): void;
  108. protected _clearQueues(event?: ConnectionEvent): void;
  109. }