Skip to content

Commit

Permalink
Use new APIs in examples
Browse files Browse the repository at this point in the history
  • Loading branch information
FrederikBolding committed Nov 11, 2022
1 parent b2d7970 commit 18c8a47
Show file tree
Hide file tree
Showing 19 changed files with 58 additions and 39 deletions.
3 changes: 2 additions & 1 deletion packages/examples/.eslintrc.js
Expand Up @@ -9,7 +9,8 @@ module.exports = {
browser: true,
},
globals: {
wallet: true,
ethereum: true,
snap: true,
},
rules: {
'no-alert': 'off',
Expand Down
2 changes: 1 addition & 1 deletion packages/examples/examples/bls-signer/snap.manifest.json
Expand Up @@ -7,7 +7,7 @@
"url": "https://github.com/MetaMask/snaps-monorepo.git"
},
"source": {
"shasum": "qNYd+o17O8kEwz40rxgBftRiyss2sYS7ir++rlLBQXo=",
"shasum": "1fzkG9r7VgCFvFzKqrhap9Q8KAhk0+HOiZFaLeS8tz8=",
"location": {
"npm": {
"filePath": "dist/bundle.js",
Expand Down
6 changes: 3 additions & 3 deletions packages/examples/examples/bls-signer/src/index.js
Expand Up @@ -30,7 +30,7 @@ module.exports.onRpcRequest = async ({ request }) => {
if (!approved) {
throw rpcErrors.eth.unauthorized();
}
const PRIVATE_KEY = await wallet.request({
const PRIVATE_KEY = await snap.request({
method: 'snap_getAppKey',
});
const signature = await bls.sign(request.params[0], PRIVATE_KEY, DOMAIN);
Expand All @@ -48,7 +48,7 @@ module.exports.onRpcRequest = async ({ request }) => {
* @returns {Promise<Uint8Array>} The BLS12-381 public key.
*/
async function getPubKey() {
const PRIV_KEY = await wallet.request({
const PRIV_KEY = await snap.request({
method: 'snap_getAppKey',
});
return bls.getPublicKey(PRIV_KEY);
Expand All @@ -65,7 +65,7 @@ async function getPubKey() {
* and `false` otherwise.
*/
async function promptUser(header, message) {
const response = await wallet.request({
const response = await snap.request({
method: 'snap_confirm',
params: [{ prompt: header, textAreaContent: message }],
});
Expand Down
2 changes: 1 addition & 1 deletion packages/examples/examples/browserify/snap.manifest.json
Expand Up @@ -7,7 +7,7 @@
"url": "https://github.com/MetaMask/snaps-monorepo.git"
},
"source": {
"shasum": "C25lIsH+SbFGCJM9i1lGLdPYq7YsUX0UHr/tZFMfsHI=",
"shasum": "NOiOxPyR8Iu9y+I/6ziTImUC223pg/bLd6z9hRVrPtc=",
"location": {
"npm": {
"filePath": "dist/snap.js",
Expand Down
4 changes: 2 additions & 2 deletions packages/examples/examples/browserify/src/snap.ts
Expand Up @@ -14,7 +14,7 @@ import { OnRpcRequestHandler } from '@metamask/snaps-types';
export const onRpcRequest: OnRpcRequestHandler = ({ origin, request }) => {
switch (request.method) {
case 'inApp':
return wallet.request({
return snap.request({
method: 'snap_notify',
params: [
{
Expand All @@ -24,7 +24,7 @@ export const onRpcRequest: OnRpcRequestHandler = ({ origin, request }) => {
],
});
case 'native':
return wallet.request({
return snap.request({
method: 'snap_notify',
params: [
{
Expand Down
6 changes: 4 additions & 2 deletions packages/examples/examples/ethers-js/snap.manifest.json
Expand Up @@ -7,7 +7,7 @@
"url": "https://github.com/MetaMask/snaps-monorepo.git"
},
"source": {
"shasum": "zLzPFhtq7ZvlAkDtR+hmKm0fS/qh51QTE1eyAqpsuYQ=",
"shasum": "ZKh05KNz06P5GlNCYOuSUe3QQX6OuhSbMjH7RyCQmHo=",
"location": {
"npm": {
"filePath": "dist/bundle.js",
Expand All @@ -16,6 +16,8 @@
}
}
},
"initialPermissions": {},
"initialPermissions": {
"endowment:eip1193": {}
},
"manifestVersion": "0.1"
}
8 changes: 2 additions & 6 deletions packages/examples/examples/ethers-js/src/index.js
Expand Up @@ -5,11 +5,7 @@

const ethers = require('ethers');

/*
* The `wallet` API is a superset of the standard provider,
* and can be used to initialize an ethers.js provider like this:
*/
const provider = new ethers.providers.Web3Provider(wallet);
const provider = new ethers.providers.Web3Provider(ethereum);

/**
* Handle incoming JSON-RPC requests, sent through `wallet_invokeSnap`.
Expand All @@ -22,7 +18,7 @@ const provider = new ethers.providers.Web3Provider(wallet);
*/
module.exports.onRpcRequest = async ({ request }) => {
console.log('received request', request);
const privKey = await wallet.request({
const privKey = await snap.request({
method: 'snap_getAppKey',
});
console.log(`privKey is ${privKey}`);
Expand Down
Expand Up @@ -7,7 +7,7 @@
"url": "https://github.com/MetaMask/snap-template.git"
},
"source": {
"shasum": "7FEkvygLr4v+1VdoUCTGPLz4BNWRZe5q4F46tHbEWMA=",
"shasum": "4aAg0VXdfByp6BWb6DuQo5Ui8rq+dx03/zuVgxp+KG4=",
"location": {
"npm": {
"filePath": "dist/bundle.js",
Expand Down
4 changes: 2 additions & 2 deletions packages/examples/examples/notifications/src/index.js
Expand Up @@ -13,7 +13,7 @@
module.exports.onRpcRequest = async ({ origin, request }) => {
switch (request.method) {
case 'inApp':
return wallet.request({
return snap.request({
method: 'snap_notify',
params: [
{
Expand All @@ -23,7 +23,7 @@ module.exports.onRpcRequest = async ({ origin, request }) => {
],
});
case 'native':
return wallet.request({
return snap.request({
method: 'snap_notify',
params: [
{
Expand Down
2 changes: 1 addition & 1 deletion packages/examples/examples/rollup/snap.manifest.json
Expand Up @@ -7,7 +7,7 @@
"url": "https://github.com/MetaMask/snaps-monorepo.git"
},
"source": {
"shasum": "KBCbe8PgRkiublGQuK8NPeUex737E8Px3fSrSdnYuIg=",
"shasum": "LLph+wooA1BT1BgEem4w2xzfocSKhSOcuQOyHnSNM/4=",
"location": {
"npm": {
"filePath": "dist/snap.js",
Expand Down
4 changes: 2 additions & 2 deletions packages/examples/examples/rollup/src/snap.ts
Expand Up @@ -14,7 +14,7 @@ import { OnRpcRequestHandler } from '@metamask/snaps-types';
export const onRpcRequest: OnRpcRequestHandler = ({ origin, request }) => {
switch (request.method) {
case 'inApp':
return wallet.request({
return snap.request({
method: 'snap_notify',
params: [
{
Expand All @@ -24,7 +24,7 @@ export const onRpcRequest: OnRpcRequestHandler = ({ origin, request }) => {
],
});
case 'native':
return wallet.request({
return snap.request({
method: 'snap_notify',
params: [
{
Expand Down
2 changes: 1 addition & 1 deletion packages/examples/examples/typescript/snap.manifest.json
Expand Up @@ -7,7 +7,7 @@
"url": "https://github.com/MetaMask/snap-template.git"
},
"source": {
"shasum": "yUHyjRd6jE4MaIr2yc9eqRV2ndwBQAiYHlOpPQITY4c=",
"shasum": "PFi6gpY6a3nVdQwkAvujHDe0hnFmdUKjS8bKMlM/qKs=",
"location": {
"npm": {
"filePath": "dist/bundle.js",
Expand Down
2 changes: 1 addition & 1 deletion packages/examples/examples/typescript/src/index.ts
Expand Up @@ -15,7 +15,7 @@ import { getMessage } from './message';
export const onRpcRequest: OnRpcRequestHandler = ({ origin, request }) => {
switch (request.method) {
case 'hello':
return wallet.request({
return snap.request({
method: 'snap_notify',
params: [
{
Expand Down
2 changes: 1 addition & 1 deletion packages/examples/examples/webpack/snap.manifest.json
Expand Up @@ -7,7 +7,7 @@
"url": "https://github.com/MetaMask/snaps-monorepo.git"
},
"source": {
"shasum": "ZWFcrhWfJfQko9o1PLh+IdOh+GbmDVpA5Ndhq8rhLJM=",
"shasum": "LMGtgd574bqP5aJQSJXJwgeOzB0sBaeJ6c8t9fkIdqM=",
"location": {
"npm": {
"filePath": "dist/snap.js",
Expand Down
4 changes: 2 additions & 2 deletions packages/examples/examples/webpack/src/snap.ts
Expand Up @@ -14,7 +14,7 @@ import { OnRpcRequestHandler } from '@metamask/snaps-types';
export const onRpcRequest: OnRpcRequestHandler = ({ origin, request }) => {
switch (request.method) {
case 'inApp':
return wallet.request({
return snap.request({
method: 'snap_notify',
params: [
{
Expand All @@ -24,7 +24,7 @@ export const onRpcRequest: OnRpcRequestHandler = ({ origin, request }) => {
],
});
case 'native':
return wallet.request({
return snap.request({
method: 'snap_notify',
params: [
{
Expand Down
Expand Up @@ -372,7 +372,7 @@ export class BaseSnapExecutor {
}

/**
* Instantiates a snap provider object (i.e. `globalThis.wallet`).
* Instantiates a snap API object (i.e. `globalThis.snap`).
*
* @param provider - A StreamProvider connected to MetaMask.
* @returns The snap provider object.
Expand Down
6 changes: 4 additions & 2 deletions packages/snaps-types/global.d.ts
@@ -1,6 +1,8 @@
import { SnapProvider } from './src';
import { MetaMaskInpageProvider } from '@metamask/providers';
import { SnapAPI } from './src';

// Types that should be available globally within a Snap
declare global {
const wallet: SnapProvider;
const ethereum: MetaMaskInpageProvider;
const snap: SnapAPI;
}
11 changes: 8 additions & 3 deletions packages/snaps-utils/src/mock.test.ts
Expand Up @@ -3,10 +3,15 @@ import crypto from 'crypto';
import { generateMockEndowments, isConstructor } from './mock';

describe('generateMockEndowments', () => {
it('includes mock snap provider', async () => {
it('includes mock snap API', async () => {
const endowments = generateMockEndowments();
expect(endowments.wallet).toBeInstanceOf(EventEmitter);
expect(await endowments.wallet.request()).toBe(true);
expect(await endowments.snap.request()).toBe(true);
});

it('includes mock ethereum provider', async () => {
const endowments = generateMockEndowments();
expect(endowments.ethereum).toBeInstanceOf(EventEmitter);
expect(await endowments.ethereum.request()).toBe(true);
});

it('returns mock class WebSocket', () => {
Expand Down
25 changes: 19 additions & 6 deletions packages/snaps-utils/src/mock.ts
Expand Up @@ -6,19 +6,32 @@ const NETWORK_APIS = ['fetch', 'WebSocket'];

export const ALL_APIS: string[] = [...DEFAULT_ENDOWMENTS, ...NETWORK_APIS];

type MockSnapProvider = EventEmitter & {
type MockSnapProvider = {
request: () => Promise<any>;
};

type MockEthereumProvider = EventEmitter & {
request: () => Promise<any>;
};

/**
* Get a mock snap provider, that always returns `true` for requests.
* Get a mock snap API, that always returns `true` for requests.
*
* @returns A mocked snap provider.
*/
function getMockSnapProvider(): MockSnapProvider {
const mockProvider = new EventEmitter() as Partial<MockSnapProvider>;
function getMockSnapAPI(): MockSnapProvider {
return { request: async () => true };
}

/**
* Get a mock Ethereum provider, that always returns `true` for requests.
*
* @returns A mocked ethereum provider.
*/
function getMockEthereumProvider(): MockEthereumProvider {
const mockProvider = new EventEmitter() as Partial<MockEthereumProvider>;
mockProvider.request = async () => true;
return mockProvider as MockSnapProvider;
return mockProvider as MockEthereumProvider;
}

/**
Expand Down Expand Up @@ -104,6 +117,6 @@ const generateMockEndowment = (key: string) => {
export const generateMockEndowments = () => {
return ALL_APIS.reduce<Record<string, any>>(
(acc, cur) => ({ ...acc, [cur]: generateMockEndowment(cur) }),
{ wallet: getMockSnapProvider() },
{ snap: getMockSnapAPI(), ethereum: getMockEthereumProvider() },
);
};

0 comments on commit 18c8a47

Please sign in to comment.