diff --git a/packages/snap-networks-utils/package.json b/packages/snap-networks-utils/package.json index 3923e18d5..7bd4f3f1d 100644 --- a/packages/snap-networks-utils/package.json +++ b/packages/snap-networks-utils/package.json @@ -73,7 +73,6 @@ }, "devDependencies": { "@metamask/auto-changelog": "^6.2.1", - "@metamask/messenger": "^2.0.0", "@ts-bridge/cli": "^0.6.4", "@types/jest": "^30.0.0", "@types/lodash": "^4.17.15", diff --git a/packages/snap-networks-utils/src/providers/assets/AssetsProvider.ts b/packages/snap-networks-utils/src/providers/assets/AssetsProvider.ts index 4d663b100..6649d8114 100644 --- a/packages/snap-networks-utils/src/providers/assets/AssetsProvider.ts +++ b/packages/snap-networks-utils/src/providers/assets/AssetsProvider.ts @@ -8,8 +8,6 @@ import type { Caip19AssetId, } from '@metamask/assets-controller'; import type { InternalAccount } from '@metamask/keyring-internal-api'; -import type { Messenger } from '@metamask/messenger'; -import { AsyncMessenger } from '@metamask/snaps-sdk'; import type { CaipChainId } from '@metamask/utils'; /** @@ -27,12 +25,37 @@ export type AssetsProviderAllowedActions = | AssetsControllerGetAssetMetadataAction | AssetsControllerGetAssetsAction; +type ExtractActionParameters< + Action extends AssetsProviderAllowedActions, + ActionType extends Action['type'], +> = Action extends { + type: ActionType; + handler: (...args: infer HandlerArgs) => unknown; +} + ? HandlerArgs + : never; + +type ExtractActionResponse< + Action extends AssetsProviderAllowedActions, + ActionType extends Action['type'], +> = Action extends { + type: ActionType; + handler: (...args: never[]) => infer HandlerReturnValue; +} + ? HandlerReturnValue + : never; + /** * Messenger restricted to actions consumed by {@link AssetsProvider}. */ -export type AssetsProviderMessenger = AsyncMessenger< - Messenger ->; +export type AssetsProviderMessenger = { + call: ( + actionType: ActionType, + ...params: ExtractActionParameters + ) => Promise< + Awaited> + >; +}; export class AssetsProvider { readonly #messenger: AssetsProviderMessenger; diff --git a/packages/snap-networks-utils/src/providers/remote-feature-flags/RemoteFeatureFlagsProvider.ts b/packages/snap-networks-utils/src/providers/remote-feature-flags/RemoteFeatureFlagsProvider.ts index f73265f03..fc0d410ea 100644 --- a/packages/snap-networks-utils/src/providers/remote-feature-flags/RemoteFeatureFlagsProvider.ts +++ b/packages/snap-networks-utils/src/providers/remote-feature-flags/RemoteFeatureFlagsProvider.ts @@ -1,6 +1,4 @@ -import type { Messenger } from '@metamask/messenger'; import type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller'; -import { AsyncMessenger } from '@metamask/snaps-sdk'; import type { Json } from '@metamask/utils'; /** @@ -15,15 +13,45 @@ export const REMOTE_FEATURE_FLAGS_PROVIDER_NAME = export type RemoteFeatureFlagsProviderAllowedActions = RemoteFeatureFlagControllerGetStateAction; +type ExtractActionParameters< + Action extends RemoteFeatureFlagsProviderAllowedActions, + ActionType extends Action['type'], +> = Action extends { + type: ActionType; + handler: (...args: infer HandlerArgs) => unknown; +} + ? HandlerArgs + : never; + +type ExtractActionResponse< + Action extends RemoteFeatureFlagsProviderAllowedActions, + ActionType extends Action['type'], +> = Action extends { + type: ActionType; + handler: (...args: never[]) => infer HandlerReturnValue; +} + ? HandlerReturnValue + : never; + /** * Messenger restricted to actions consumed by {@link RemoteFeatureFlagsProvider}. */ -export type RemoteFeatureFlagsProviderMessenger = AsyncMessenger< - Messenger< - typeof REMOTE_FEATURE_FLAGS_PROVIDER_NAME, - RemoteFeatureFlagsProviderAllowedActions - > ->; +export type RemoteFeatureFlagsProviderMessenger = { + call: ( + actionType: ActionType, + ...params: ExtractActionParameters< + RemoteFeatureFlagsProviderAllowedActions, + ActionType + > + ) => Promise< + Awaited< + ExtractActionResponse< + RemoteFeatureFlagsProviderAllowedActions, + ActionType + > + > + >; +}; export class RemoteFeatureFlagsProvider { readonly #messenger: RemoteFeatureFlagsProviderMessenger; diff --git a/packages/tron-wallet-snap/package.json b/packages/tron-wallet-snap/package.json index 59694b177..cf801ba62 100644 --- a/packages/tron-wallet-snap/package.json +++ b/packages/tron-wallet-snap/package.json @@ -53,7 +53,6 @@ "@metamask/key-tree": "^10.1.1", "@metamask/keyring-api": "^24.1.0", "@metamask/keyring-snap-sdk": "^10.0.0", - "@metamask/messenger": "^2.0.0", "@metamask/remote-feature-flag-controller": "^5.0.0", "@metamask/snap-networks-utils": "^3.0.0", "@metamask/snaps-cli": "^8.4.1", diff --git a/packages/tron-wallet-snap/src/context.ts b/packages/tron-wallet-snap/src/context.ts index d115ec7c5..5e87510e3 100644 --- a/packages/tron-wallet-snap/src/context.ts +++ b/packages/tron-wallet-snap/src/context.ts @@ -44,10 +44,7 @@ import { TransactionScanService } from './services/transaction-scan/TransactionS import { TransactionsRepository } from './services/transactions/TransactionsRepository'; import { TransactionsService } from './services/transactions/TransactionsService'; import { WalletService } from './services/wallet/WalletService'; -import type { - CoreMessenger, - CoreMessengerClient, -} from './types/core-messenger'; +import type { CoreMessengerClient } from './types/core-messenger'; import { trackError } from './utils/errors'; import logger, { noOpLogger } from './utils/logger'; @@ -104,7 +101,7 @@ const tokenApiClient = new TokenApiClient(configProvider); /** * Core controllers plumbing */ -const coreMessenger = getMessenger(); +const coreMessenger = getMessenger() as CoreMessengerClient; const remoteFeatureFlagsProvider = new RemoteFeatureFlagsProvider({ messenger: coreMessenger as RemoteFeatureFlagsProviderMessenger, }); diff --git a/packages/tron-wallet-snap/src/types/core-messenger.ts b/packages/tron-wallet-snap/src/types/core-messenger.ts index fdb3a44c0..dc664654d 100644 --- a/packages/tron-wallet-snap/src/types/core-messenger.ts +++ b/packages/tron-wallet-snap/src/types/core-messenger.ts @@ -4,9 +4,7 @@ import type { AssetsControllerGetAccountAssetsByScopeAction, AssetsControllerGetAssetsAction, } from '@metamask/assets-controller'; -import type { Messenger } from '@metamask/messenger'; import type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller'; -import type { AsyncMessenger } from '@metamask/snaps-sdk'; /** * Namespace for this Snap's Core messenger endowment. @@ -20,19 +18,41 @@ export type CoreMessengerActions = | AssetsControllerGetAccountAssetsByScopeAction | AssetsControllerGetAssetsAction; +type ExtractActionParameters< + Action extends CoreMessengerActions, + ActionType extends Action['type'], +> = Action extends { + type: ActionType; + handler: (...args: infer HandlerArgs) => unknown; +} + ? HandlerArgs + : never; + +type ExtractActionResponse< + Action extends CoreMessengerActions, + ActionType extends Action['type'], +> = Action extends { + type: ActionType; + handler: (...args: never[]) => infer HandlerReturnValue; +} + ? HandlerReturnValue + : never; + /** * Messenger type passed to `getMessenger` for Core controller actions. */ -export type CoreMessenger = Messenger< - typeof TRON_WALLET_SNAP_MESSENGER_NAMESPACE, - CoreMessengerActions ->; - /** * Async messenger returned by `getMessenger` for Core controller actions * available to this Snap via `endowment:messenger`. */ -export type CoreMessengerClient = AsyncMessenger; +export type CoreMessengerClient = { + call: ( + actionType: ActionType, + ...params: ExtractActionParameters + ) => Promise< + Awaited> + >; +}; /** * Narrow dependency for services that only need to invoke Core actions. diff --git a/yarn.lock b/yarn.lock index e03222dee..186517994 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3447,7 +3447,6 @@ __metadata: "@metamask/base-data-service": "npm:^2.1.0" "@metamask/keyring-api": "npm:^24.1.0" "@metamask/keyring-internal-api": "npm:^12.0.0" - "@metamask/messenger": "npm:^2.0.0" "@metamask/remote-feature-flag-controller": "npm:^5.0.0" "@metamask/snaps-sdk": "npm:^12.0.1" "@metamask/superstruct": "npm:^3.4.1" @@ -3983,7 +3982,6 @@ __metadata: "@metamask/key-tree": "npm:^10.1.1" "@metamask/keyring-api": "npm:^24.1.0" "@metamask/keyring-snap-sdk": "npm:^10.0.0" - "@metamask/messenger": "npm:^2.0.0" "@metamask/remote-feature-flag-controller": "npm:^5.0.0" "@metamask/snap-networks-utils": "npm:^3.0.0" "@metamask/snaps-cli": "npm:^8.4.1"