diff --git a/packages/examples/examples/ethers-js/snap.manifest.json b/packages/examples/examples/ethers-js/snap.manifest.json index 0e4162901b..4f9be53889 100644 --- a/packages/examples/examples/ethers-js/snap.manifest.json +++ b/packages/examples/examples/ethers-js/snap.manifest.json @@ -17,7 +17,7 @@ } }, "initialPermissions": { - "endowment:eip1193": {} + "endowment:ethereum-provider": {} }, "manifestVersion": "0.1" } diff --git a/packages/snaps-controllers/src/snaps/SnapController.test.ts b/packages/snaps-controllers/src/snaps/SnapController.test.ts index af9ff619c5..c1f44862fd 100644 --- a/packages/snaps-controllers/src/snaps/SnapController.test.ts +++ b/packages/snaps-controllers/src/snaps/SnapController.test.ts @@ -929,7 +929,7 @@ describe('SnapController', () => { `; const options = getSnapControllerWithEESOptions({ - environmentEndowmentPermissions: [SnapEndowments.EIP1193], + environmentEndowmentPermissions: [SnapEndowments.EthereumProvider], idleTimeCheckInterval: 30000, maxIdleTime: 160000, state: { @@ -954,7 +954,7 @@ describe('SnapController', () => { return true; } else if ( method === 'PermissionController:getEndowments' && - args[1] === SnapEndowments.EIP1193 + args[1] === SnapEndowments.EthereumProvider ) { return ['ethereum']; } @@ -1023,7 +1023,7 @@ describe('SnapController', () => { `; const options = getSnapControllerWithEESOptions({ - environmentEndowmentPermissions: [SnapEndowments.EIP1193], + environmentEndowmentPermissions: [SnapEndowments.EthereumProvider], idleTimeCheckInterval: 30000, maxIdleTime: 160000, state: { @@ -1048,7 +1048,7 @@ describe('SnapController', () => { return true; } else if ( method === 'PermissionController:getEndowments' && - args[1] === SnapEndowments.EIP1193 + args[1] === SnapEndowments.EthereumProvider ) { return ['ethereum']; } diff --git a/packages/snaps-controllers/src/snaps/endowments/enum.ts b/packages/snaps-controllers/src/snaps/endowments/enum.ts index 4186f2d102..33438f8f0e 100644 --- a/packages/snaps-controllers/src/snaps/endowments/enum.ts +++ b/packages/snaps-controllers/src/snaps/endowments/enum.ts @@ -4,5 +4,5 @@ export enum SnapEndowments { TransactionInsight = 'endowment:transaction-insight', Keyring = 'endowment:keyring', Cronjob = 'endowment:cronjob', - EIP1193 = 'endowment:eip1193', + EthereumProvider = 'endowment:ethereum-provider', } diff --git a/packages/snaps-controllers/src/snaps/endowments/eip1193.test.ts b/packages/snaps-controllers/src/snaps/endowments/ethereum-provider.test.ts similarity index 67% rename from packages/snaps-controllers/src/snaps/endowments/eip1193.test.ts rename to packages/snaps-controllers/src/snaps/endowments/ethereum-provider.test.ts index 117908a054..eab7be3929 100644 --- a/packages/snaps-controllers/src/snaps/endowments/eip1193.test.ts +++ b/packages/snaps-controllers/src/snaps/endowments/ethereum-provider.test.ts @@ -1,13 +1,15 @@ import { PermissionType } from '@metamask/controllers'; import { SnapEndowments } from './enum'; -import { eip1193EndowmentBuilder } from './eip1193'; +import { ethereumProviderEndowmentBuilder } from './ethereum-provider'; describe('endowment:eip1193', () => { it('builds the expected permission specification', () => { - const specification = eip1193EndowmentBuilder.specificationBuilder({}); + const specification = ethereumProviderEndowmentBuilder.specificationBuilder( + {}, + ); expect(specification).toStrictEqual({ permissionType: PermissionType.Endowment, - targetKey: SnapEndowments.EIP1193, + targetKey: SnapEndowments.EthereumProvider, endowmentGetter: expect.any(Function), allowedCaveats: null, }); diff --git a/packages/snaps-controllers/src/snaps/endowments/eip1193.ts b/packages/snaps-controllers/src/snaps/endowments/ethereum-provider.ts similarity index 68% rename from packages/snaps-controllers/src/snaps/endowments/eip1193.ts rename to packages/snaps-controllers/src/snaps/endowments/ethereum-provider.ts index eb6eec3c83..fa1540b3d8 100644 --- a/packages/snaps-controllers/src/snaps/endowments/eip1193.ts +++ b/packages/snaps-controllers/src/snaps/endowments/ethereum-provider.ts @@ -6,9 +6,9 @@ import { } from '@metamask/controllers'; import { SnapEndowments } from './enum'; -const permissionName = SnapEndowments.EIP1193; +const permissionName = SnapEndowments.EthereumProvider; -type EIP1193EndowmentSpecification = ValidPermissionSpecification<{ +type EthereumProviderEndowmentSpecification = ValidPermissionSpecification<{ permissionType: PermissionType.Endowment; targetKey: typeof permissionName; endowmentGetter: (_options?: any) => ['ethereum']; @@ -16,17 +16,19 @@ type EIP1193EndowmentSpecification = ValidPermissionSpecification<{ }>; /** - * `endowment:eip1193` returns the name of the ethereum global browser API. + * `endowment:ethereum-provider` returns the name of the ethereum global browser API. * This is intended to populate the endowments of the * SES Compartment in which a Snap executes. * + * This populates the global scope with an EIP-1193 provider, which DOES NOT implement all legacy functionality exposed to dapps. + * * @param _builderOptions - Optional specification builder options. * @returns The specification for the network endowment. */ const specificationBuilder: PermissionSpecificationBuilder< PermissionType.Endowment, any, - EIP1193EndowmentSpecification + EthereumProviderEndowmentSpecification > = (_builderOptions?: any) => { return { permissionType: PermissionType.Endowment, @@ -38,7 +40,7 @@ const specificationBuilder: PermissionSpecificationBuilder< }; }; -export const eip1193EndowmentBuilder = Object.freeze({ +export const ethereumProviderEndowmentBuilder = Object.freeze({ targetKey: permissionName, specificationBuilder, } as const); diff --git a/packages/snaps-controllers/src/snaps/endowments/index.ts b/packages/snaps-controllers/src/snaps/endowments/index.ts index abf13dfeae..4b991fa04d 100644 --- a/packages/snaps-controllers/src/snaps/endowments/index.ts +++ b/packages/snaps-controllers/src/snaps/endowments/index.ts @@ -13,7 +13,7 @@ import { keyringCaveatSpecifications, getKeyringCaveatMapper, } from './keyring'; -import { eip1193EndowmentBuilder } from './eip1193'; +import { ethereumProviderEndowmentBuilder } from './ethereum-provider'; export const endowmentPermissionBuilders = { [networkAccessEndowmentBuilder.targetKey]: networkAccessEndowmentBuilder, @@ -22,7 +22,8 @@ export const endowmentPermissionBuilders = { transactionInsightEndowmentBuilder, [keyringEndowmentBuilder.targetKey]: keyringEndowmentBuilder, [cronjobEndowmentBuilder.targetKey]: cronjobEndowmentBuilder, - [eip1193EndowmentBuilder.targetKey]: eip1193EndowmentBuilder, + [ethereumProviderEndowmentBuilder.targetKey]: + ethereumProviderEndowmentBuilder, } as const; export const endowmentCaveatSpecifications = { diff --git a/packages/snaps-execution-environments/src/common/BaseSnapExecutor.ts b/packages/snaps-execution-environments/src/common/BaseSnapExecutor.ts index fcab6b80e7..ba1c404954 100644 --- a/packages/snaps-execution-environments/src/common/BaseSnapExecutor.ts +++ b/packages/snaps-execution-environments/src/common/BaseSnapExecutor.ts @@ -3,7 +3,7 @@ import { Duplex } from 'stream'; import { StreamProvider } from '@metamask/providers'; import { createIdRemapMiddleware } from 'json-rpc-engine'; -import { SnapExports, SnapAPI } from '@metamask/snaps-types'; +import { SnapExports, SnapsGlobalObject } from '@metamask/snaps-types'; import { errorCodes, ethErrors, serializeError } from 'eth-rpc-errors'; import { isObject, @@ -298,7 +298,7 @@ export class BaseSnapExecutor { await provider.initialize(); - const snap = this.createSnapAPI(provider); + const snap = this.createSnapGlobal(provider); const ethereum = this.createEIP1193Provider(provider); // We specifically use any type because the Snap can modify the object any way they want const snapModule: any = { exports: {} }; @@ -377,7 +377,7 @@ export class BaseSnapExecutor { * @param provider - A StreamProvider connected to MetaMask. * @returns The snap provider object. */ - private createSnapAPI(provider: StreamProvider): SnapAPI { + private createSnapGlobal(provider: StreamProvider): SnapsGlobalObject { const originalRequest = provider.request; const request = async (args: RequestArguments) => { @@ -397,10 +397,10 @@ export class BaseSnapExecutor { } /** - * Instantiates an eip1193 provider object (i.e. `globalThis.ethereum`). + * Instantiates an EIP-1193 Ethereum provider object (i.e. `globalThis.ethereum`). * * @param provider - A StreamProvider connected to MetaMask. - * @returns The eip1193 provider object. + * @returns The EIP-1193 Ethereum provider object. */ private createEIP1193Provider(provider: StreamProvider): StreamProvider { const originalRequest = provider.request; diff --git a/packages/snaps-execution-environments/src/common/endowments/index.ts b/packages/snaps-execution-environments/src/common/endowments/index.ts index 829cf8fc9a..c81ce0bc16 100644 --- a/packages/snaps-execution-environments/src/common/endowments/index.ts +++ b/packages/snaps-execution-environments/src/common/endowments/index.ts @@ -1,4 +1,4 @@ -import { SnapAPI } from '@metamask/snaps-types'; +import { SnapsGlobalObject } from '@metamask/snaps-types'; import { hasProperty } from '@metamask/utils'; import { StreamProvider } from '@metamask/providers'; import { rootRealmGlobal } from '../globalObject'; @@ -49,7 +49,7 @@ const endowmentFactories = [timeout, interval, network, crypto, math].reduce( * @returns An object containing the Snap's endowments. */ export function createEndowments( - snap: SnapAPI, + snap: SnapsGlobalObject, ethereum: StreamProvider, endowments: string[] = [], ): { endowments: Record; teardown: () => Promise } { diff --git a/packages/snaps-types/global.d.ts b/packages/snaps-types/global.d.ts index 34ad4a500d..4ab5ab0dcd 100644 --- a/packages/snaps-types/global.d.ts +++ b/packages/snaps-types/global.d.ts @@ -1,8 +1,8 @@ import { MetaMaskInpageProvider } from '@metamask/providers'; -import { SnapAPI } from './src'; +import { SnapsGlobalObject } from './src'; // Types that should be available globally within a Snap declare global { const ethereum: MetaMaskInpageProvider; - const snap: SnapAPI; + const snap: SnapsGlobalObject; } diff --git a/packages/snaps-types/src/types.d.ts b/packages/snaps-types/src/types.d.ts index a789305ed5..587d953c6f 100644 --- a/packages/snaps-types/src/types.d.ts +++ b/packages/snaps-types/src/types.d.ts @@ -22,7 +22,7 @@ export type OnCronjobHandler = (args: { request: JsonRpcRequest; }) => Promise; -export type SnapAPI = { request: StreamProvider['request'] }; +export type SnapsGlobalObject = { request: StreamProvider['request'] }; export type Ethereum = StreamProvider; diff --git a/packages/snaps-utils/src/mock.ts b/packages/snaps-utils/src/mock.ts index f0ed2240ae..726c3877a2 100644 --- a/packages/snaps-utils/src/mock.ts +++ b/packages/snaps-utils/src/mock.ts @@ -6,7 +6,7 @@ const NETWORK_APIS = ['fetch', 'WebSocket']; export const ALL_APIS: string[] = [...DEFAULT_ENDOWMENTS, ...NETWORK_APIS]; -type MockSnapProvider = { +type MockSnapGlobal = { request: () => Promise; }; @@ -19,7 +19,7 @@ type MockEthereumProvider = EventEmitter & { * * @returns A mocked snap provider. */ -function getMockSnapAPI(): MockSnapProvider { +function getMockSnapGlobal(): MockSnapGlobal { return { request: async () => true }; } @@ -117,6 +117,6 @@ const generateMockEndowment = (key: string) => { export const generateMockEndowments = () => { return ALL_APIS.reduce>( (acc, cur) => ({ ...acc, [cur]: generateMockEndowment(cur) }), - { snap: getMockSnapAPI(), ethereum: getMockEthereumProvider() }, + { snap: getMockSnapGlobal(), ethereum: getMockEthereumProvider() }, ); };