diff --git a/packages/network-controller/CHANGELOG.md b/packages/network-controller/CHANGELOG.md index ea3b150a899..6c22b08f2dd 100644 --- a/packages/network-controller/CHANGELOG.md +++ b/packages/network-controller/CHANGELOG.md @@ -34,6 +34,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Deprecated - `NetworkControllerGetNetworkConfigurationByNetworkClientId` type is deprecated in favor of `NetworkControllerGetNetworkConfigurationByNetworkClientIdAction` ([#8350](https://github.com/MetaMask/core/pull/8350)) +- Deprecate `AbstractRpcService` and `RpcServiceRequestable` ([#8475](https://github.com/MetaMask/core/pull/8475)) + - There are no equivalents to these interfaces. If you need to take an "RPC-service-like" argument, it's best to declare which properties you're interested in rather than accepting the entire RPC service interface. ## [30.0.1] diff --git a/packages/network-controller/src/rpc-service/abstract-rpc-service.ts b/packages/network-controller/src/rpc-service/abstract-rpc-service.ts index 81d78442918..7769f88c055 100644 --- a/packages/network-controller/src/rpc-service/abstract-rpc-service.ts +++ b/packages/network-controller/src/rpc-service/abstract-rpc-service.ts @@ -3,6 +3,11 @@ import type { RpcServiceRequestable } from './rpc-service-requestable'; /** * The interface for a service class responsible for making a request to an RPC * endpoint or a group of RPC endpoints. + * + * @deprecated Don't use this interface (it will be removed in an upcoming major + * version). If you need to take an "RPC-service-like" argument, it's best to + * declare which properties you're interested in rather than accepting the + * entire RPC service interface. */ export type AbstractRpcService = RpcServiceRequestable & { /** diff --git a/packages/network-controller/src/rpc-service/rpc-service-requestable.ts b/packages/network-controller/src/rpc-service/rpc-service-requestable.ts index 2433f60634e..6283a704736 100644 --- a/packages/network-controller/src/rpc-service/rpc-service-requestable.ts +++ b/packages/network-controller/src/rpc-service/rpc-service-requestable.ts @@ -18,6 +18,11 @@ import type { * The interface for a service class responsible for making a request to a * target, whether that is a single RPC endpoint or an RPC endpoint in an RPC * service chain. + * + * @deprecated Don't use this interface (it will be removed in an upcoming major + * version). If you need to take an "RPC-service-like" argument, it's best to + * declare which properties you're interested in rather than accepting the + * entire RPC service interface. */ export type RpcServiceRequestable = { /** diff --git a/packages/network-controller/src/rpc-service/rpc-service.ts b/packages/network-controller/src/rpc-service/rpc-service.ts index b4f2f42526e..17b6f85aa3e 100644 --- a/packages/network-controller/src/rpc-service/rpc-service.ts +++ b/packages/network-controller/src/rpc-service/rpc-service.ts @@ -16,13 +16,18 @@ import type { JsonRpcRequest, JsonRpcResponse, } from '@metamask/utils'; -import { CircuitState, IDisposable } from 'cockatiel'; +import { CircuitState } from 'cockatiel'; import deepmerge from 'deepmerge'; import type { Logger } from 'loglevel'; import { projectLogger, createModuleLogger } from '../logger'; -import type { AbstractRpcService } from './abstract-rpc-service'; -import type { FetchOptions } from './shared'; +import type { + CockatielEventToEventListenerWithData, + ExcludeCockatielEventData, + ExtendCockatielEventData, + ExtractCockatielEventData, + FetchOptions, +} from './shared'; /** * Options for the RpcService constructor. @@ -274,7 +279,7 @@ function stripCredentialsFromUrl(url: URL): URL { * failures, retrying requests using exponential backoff. It also offers a hook * which can used to respond to slow requests. */ -export class RpcService implements AbstractRpcService { +export class RpcService { /** * The URL of the RPC endpoint. */ @@ -395,7 +400,12 @@ export class RpcService implements AbstractRpcService { * @returns What {@link ServicePolicy.onRetry} returns. * @see {@link createServicePolicy} */ - onRetry(listener: Parameters[0]): IDisposable { + onRetry( + listener: CockatielEventToEventListenerWithData< + ServicePolicy['onRetry'], + { endpointUrl: string } + >, + ): ReturnType { return this.#policy.onRetry((data) => { listener({ ...data, endpointUrl: this.endpointUrl.toString() }); }); @@ -409,7 +419,17 @@ export class RpcService implements AbstractRpcService { * @returns What {@link ServicePolicy.onBreak} returns. * @see {@link createServicePolicy} */ - onBreak(listener: Parameters[0]): IDisposable { + onBreak( + listener: ( + data: ExcludeCockatielEventData< + ExtendCockatielEventData< + ExtractCockatielEventData, + { endpointUrl: string } + >, + 'isolated' + >, + ) => void, + ): ReturnType { return this.#policy.onBreak((data) => { // `{ isolated: true }` is a special object that shows up when `isolate` // is called on the circuit breaker. Usually `isolate` is used to hold the @@ -440,8 +460,11 @@ export class RpcService implements AbstractRpcService { * @see {@link createServicePolicy} */ onDegraded( - listener: Parameters[0], - ): IDisposable { + listener: CockatielEventToEventListenerWithData< + ServicePolicy['onDegraded'], + { endpointUrl: string; rpcMethodName: string } + >, + ): ReturnType { return this.#policy.onDegraded((data) => { if (data === undefined) { listener({ @@ -466,8 +489,11 @@ export class RpcService implements AbstractRpcService { * @see {@link createServicePolicy} */ onAvailable( - listener: Parameters[0], - ): IDisposable { + listener: CockatielEventToEventListenerWithData< + ServicePolicy['onAvailable'], + { endpointUrl: string } + >, + ): ReturnType { return this.#policy.onAvailable(() => { listener({ endpointUrl: this.endpointUrl.toString() }); });