Skip to content
This repository has been archived by the owner on Apr 12, 2024. It is now read-only.

fix!: casing of MetaMask #132

Merged
merged 2 commits into from
Sep 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/cron.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: "Validate compatiblity with metamask"
name: "Validate compatiblity with MetaMask"

on:
schedule:
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import puppeteer from 'puppeteer';
import dappeteer from '@chainsafe/dappeteer';

async function main() {
const [metamask, page] = await dappeteer.bootstrap(puppeteer, { metamaskVersion: 'v10.15.0' });
const [metamask, page] = await dappeteer.bootstrap(puppeteer, { metaMaskVersion: 'v10.15.0' });

// you can change the network if you want
await metamask.switchNetwork('ropsten');
Expand Down
26 changes: 13 additions & 13 deletions docs/API.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ Methods provided by dAppeteer.
For additional information read root [readme](../README.md)

- [Launch dAppeteer](#launch)
- [Setup Metamask](#setup)
- [Setup MetaMask](#setup)
- [Bootstrap dAppeteer](#bootstrap)
- [Get Metamask Window](#getMetamask)
- [Get MetaMask Window](#getMetaMask)
- [dAppeteer methods](#methods)
- [switchAccount](#switchAccount)
- [importPK](#importPK)
Expand All @@ -30,8 +30,8 @@ For additional information read root [readme](../README.md)
## `dappeteer.launch(puppeteerLib: typeof puppeteer, options: OfficialOptions | CustomOptions): Promise<Browser>`
```typescript
interface OfficialOptions {
metamaskVersion: 'latest' | string;
metamaskLocation?: Path;
metaMaskVersion: 'latest' | string;
metaMaskLocation?: Path;
};

type Path = string | { download: string; extract: string; };
Expand All @@ -46,9 +46,9 @@ interface CustomOptions {
returns an instance of `browser` same as `puppeteer.launch`, but it also installs the MetaMask extension. [It supports all the regular `puppeteer.launch` options](https://github.com/puppeteer/puppeteer/blob/v5.5.0/docs/api.md#puppeteerlaunchoptions)

<a name="setup"></a>
## `dappeteer.setupMetamask(browser: Browser, options: MetamaskOptions = {}, steps: Step[]): Promise<Dappeteer>`
## `dappeteer.setupMetaMask(browser: Browser, options: MetaMaskOptions = {}, steps: Step[]): Promise<Dappeteer>`
```typescript
interface MetamaskOptions {
interface MetaMaskOptions {
seed?: string;
password?: string;
showTestNets?: boolean;
Expand All @@ -60,21 +60,21 @@ type Step = (page: Page, options?: Options) => void;
```

<a name="bootstrap"><a/>
## `dappeteer.bootstrap(puppeteerLib: typeof puppeteer, options: OfficialOptions & MetamaskOptions): Promise<[Dappeteer, Page, Browser]>`
## `dappeteer.bootstrap(puppeteerLib: typeof puppeteer, options: OfficialOptions & MetaMaskOptions): Promise<[Dappeteer, Page, Browser]>`
```typescript
interface OfficialOptions {
metamaskVersion: 'latest' | string;
metamaskLocation?: Path;
metaMaskVersion: 'latest' | string;
metaMaskLocation?: Path;
};
```
it runs `dappeteer.launch` and `dappeteer.setup` and return array with dappetter, page and browser

<a name="getMetamask"></a>
## `dappeteer.getMetamaskWindow(browser: Browser, version?: string): Promise<Dappeteer>`
<a name="getMetaMask"></a>
## `dappeteer.getMetaMaskWindow(browser: Browser, version?: string): Promise<Dappeteer>`

<a name="methods"></a>
# dAppeteer methods
`metamask` is used as placeholder for dAppeteer returned by [`setupMetamask`](setup) or [`getMetamaskWindow`](getMetamask)
`metamask` is used as placeholder for dAppeteer returned by [`setupMetaMask`](setup) or [`getMetaMaskWindow`](getMetaMask)


<a name="switchAccount"></a>
Expand Down Expand Up @@ -156,5 +156,5 @@ deletes account containing name with specified number
deletes custom network from metamask

<a name="page"></a>
## `metamask.page` is Metamask plugin `Page`
## `metamask.page` is MetaMask plugin `Page`
**for advanced usages** in case you need custom features.
14 changes: 7 additions & 7 deletions docs/JEST.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# dAppeteer with jest

As dAppeteer is Puppeteer with Metamask. Using it with jest is pretty similar to `jest-puppeteer`.
As dAppeteer is Puppeteer with MetaMask. Using it with jest is pretty similar to `jest-puppeteer`.

## Use preset

Expand Down Expand Up @@ -58,26 +58,26 @@ module.exports = {
};
```

Then create `setup.js` wit responsibility to start Puppeteer with Metamask and `teardown.js` for clean up after test's
Then create `setup.js` with responsibility to start Puppeteer with MetaMask and `teardown.js` for clean up after test's
```js
// setup.js

const { writeFile } = require('fs').promises;
const os = require('os');
const path = require('path');

const { launch, setupMetamask } = require('@chainsafe/dappeteer');
const { launch, setupMetaMask } = require('@chainsafe/dappeteer');
const mkdirp = require('mkdirp');
const puppeteer = require('puppeteer');

const { metamaskOptions, PUPPETEER_CONFIG } = require('./jest.config');
const { metaMaskOptions, PUPPETEER_CONFIG } = require('./jest.config');

const DIR = path.join(os.tmpdir(), 'jest_dappeteer_global_setup');

module.exports = async function () {
const browser = await launch(puppeteer, PUPPETEER_CONFIG);
try {
await setupMetamask(browser, metamaskOptions);
await setupMetaMask(browser, metaMaskOptions);
global.browser = browser;
} catch (error) {
console.log(error);
Expand Down Expand Up @@ -115,7 +115,7 @@ const os = require('os');
const path = require('path');
const puppeteer = require('puppeteer');
const NodeEnvironment = require('jest-environment-node');
const { getMetamaskWindow } = require('@chainsafe/dappeteer');
const { getMetaMaskWindow } = require('@chainsafe/dappeteer');

const DIR = path.join(os.tmpdir(), 'jest_dappeteer_global_setup');

Expand All @@ -131,7 +131,7 @@ class DappeteerEnvironment extends NodeEnvironment {
browserWSEndpoint: wsEndpoint,
});
this.global.browser = browser;
this.global.metamask = await getMetamaskWindow(browser);
this.global.metamask = await getMetaMaskWindow(browser);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// re-export
export { getMetamask, getMetamaskWindow } from './metamask';
export { getMetaMask, getMetaMaskWindow } from './metamask';
export * from './types';
export * from './setup';
export { DappateerJestConfig } from './jest/global';
Expand Down
4 changes: 2 additions & 2 deletions src/jest/DappeteerEnvironment.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import NodeEnvironment from 'jest-environment-node';
import puppeteer from 'puppeteer';

import { getMetamaskWindow } from '../index';
import { getMetaMaskWindow } from '../index';

class DappeteerEnvironment extends NodeEnvironment {
constructor(config) {
Expand All @@ -22,7 +22,7 @@ class DappeteerEnvironment extends NodeEnvironment {
browserWSEndpoint: wsEndpoint,
});
this.global.browser = browser;
this.global.metamask = await getMetamaskWindow(browser);
this.global.metamask = await getMetaMaskWindow(browser);
this.global.page = await browser.newPage();
}
}
Expand Down
8 changes: 4 additions & 4 deletions src/jest/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { LaunchOptions } from '../types';

import { DappateerJestConfig } from './global';

export const DAPPETEER_DEFAULT_CONFIG: LaunchOptions = { metamaskVersion: RECOMMENDED_METAMASK_VERSION };
export const DAPPETEER_DEFAULT_CONFIG: LaunchOptions = { metaMaskVersion: RECOMMENDED_METAMASK_VERSION };

export async function getDappeteerConfig(): Promise<DappateerJestConfig> {
const configPath = 'dappeteer.config.js';
Expand All @@ -17,7 +17,7 @@ export async function getDappeteerConfig(): Promise<DappateerJestConfig> {
if (!existsSync(filePath))
return {
dappeteer: DAPPETEER_DEFAULT_CONFIG,
metamask: {},
metaMask: {},
};

// eslint-disable-next-line @typescript-eslint/no-require-imports
Expand All @@ -28,8 +28,8 @@ export async function getDappeteerConfig(): Promise<DappateerJestConfig> {
...DAPPETEER_DEFAULT_CONFIG,
...config.dappeteer,
},
metamask: {
...config.metamask,
metaMask: {
...config.metaMask,
},
};
}
6 changes: 3 additions & 3 deletions src/jest/global.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import { Browser, Page } from 'puppeteer';

import { Dappeteer, LaunchOptions, MetamaskOptions } from '..';
import { Dappeteer, LaunchOptions, MetaMaskOptions } from '..';

declare global {
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace NodeJS {
interface Global {
page: Page;
browser: Browser;
metamask: Dappeteer;
metaMask: Dappeteer;
}
}
}

export type DappateerJestConfig = Partial<{
dappeteer: LaunchOptions;
metamask: MetamaskOptions;
metaMask: MetaMaskOptions;
}>;
6 changes: 3 additions & 3 deletions src/jest/setup.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import puppeteer from 'puppeteer';

import { launch, setupMetamask } from '../index';
import { launch, setupMetaMask } from '../index';

import { getDappeteerConfig } from './config';

export default async function (): Promise<void> {
const { dappeteer, metamask } = await getDappeteerConfig();
const { dappeteer, metaMask } = await getDappeteerConfig();

const browser = await launch(puppeteer, dappeteer);
try {
await setupMetamask(browser, metamask);
await setupMetaMask(browser, metaMask);
global.browser = browser;
} catch (error) {
// eslint-disable-next-line no-console
Expand Down
8 changes: 4 additions & 4 deletions src/metamask/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import { unlock } from './unlock';
export type SetSignedIn = (state: boolean) => Promise<void>;
export type GetSingedIn = () => Promise<boolean>;

export const getMetamask = async (page: Page, version?: string): Promise<Dappeteer> => {
export const getMetaMask = async (page: Page, version?: string): Promise<Dappeteer> => {
// modified window object to kep state between tests
const setSignedIn = async (state: boolean): Promise<void> => {
await page.evaluate((s: boolean) => {
Expand Down Expand Up @@ -54,14 +54,14 @@ export const getMetamask = async (page: Page, version?: string): Promise<Dappete
/**
* Return MetaMask instance
* */
export async function getMetamaskWindow(browser: Browser, version?: string): Promise<Dappeteer> {
const metamaskPage = await new Promise<Page>((resolve) => {
export async function getMetaMaskWindow(browser: Browser, version?: string): Promise<Dappeteer> {
const metaMaskPage = await new Promise<Page>((resolve) => {
browser.pages().then((pages) => {
for (const page of pages) {
if (page.url().includes('chrome-extension')) resolve(page);
}
});
});

return getMetamask(metamaskPage, version);
return getMetaMask(metaMaskPage, version);
}
10 changes: 5 additions & 5 deletions src/setup/index.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import puppeteer, { Browser, Page } from 'puppeteer';

import { Dappeteer, MetamaskOptions, OfficialOptions } from '../types';
import { Dappeteer, MetaMaskOptions, OfficialOptions } from '../types';

import { launch } from './launch';
import { setupMetamask } from './setupMetamask';
import { setupMetaMask } from './setupMetaMask';

export * from './launch';
export * from './setupMetamask';
export * from './setupMetaMask';

export const bootstrap = async (
puppeteerLib: typeof puppeteer,
{ seed, password, showTestNets, ...launchOptions }: OfficialOptions & MetamaskOptions,
{ seed, password, showTestNets, ...launchOptions }: OfficialOptions & MetaMaskOptions,
): Promise<[Dappeteer, Page, Browser]> => {
const browser = await launch(puppeteerLib, launchOptions);
const dappeteer = await setupMetamask(browser, { seed, password, showTestNets });
const dappeteer = await setupMetaMask(browser, { seed, password, showTestNets });
const pages = await browser.pages();

return [dappeteer, pages[0], browser];
Expand Down
24 changes: 12 additions & 12 deletions src/setup/launch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,51 +4,51 @@ import { CustomOptions, OfficialOptions, RECOMMENDED_METAMASK_VERSION } from '..
import { LaunchOptions } from '../types';

import { isNewerVersion } from './isNewerVersion';
import downloader from './metamaskDownloader';
import downloader from './metaMaskDownloader';

/**
* Launch Puppeteer chromium instance with MetaMask plugin installed
* */
export async function launch(puppeteerLib: typeof puppeteer, options: LaunchOptions): Promise<puppeteer.Browser> {
if (!options || (!options.metamaskVersion && !(options as CustomOptions).metamaskPath))
if (!options || (!options.metaMaskVersion && !(options as CustomOptions).metaMaskPath))
throw new Error(
`Pleas provide "metamaskVersion" (recommended "${RECOMMENDED_METAMASK_VERSION}" or "latest" to always get latest release of MetaMask)`,
`Please provide "metaMaskVersion" (recommended "${RECOMMENDED_METAMASK_VERSION}" or "latest" to always get latest release of MetaMask)`,
);

const { args, ...rest } = options;

// eslint-disable-next-line @typescript-eslint/naming-convention
let METAMASK_PATH;
if (options.metamaskVersion) {
const { metamaskVersion, metamaskLocation } = rest as OfficialOptions;
if (options.metaMaskVersion) {
const { metaMaskVersion, metaMaskLocation } = rest as OfficialOptions;
/* eslint-disable no-console */
console.log(); // new line
if (metamaskVersion === 'latest')
if (metaMaskVersion === 'latest')
console.warn(
'\x1b[33m%s\x1b[0m',
`It is not recommended to run metamask with "latest" version. Use it at your own risk or set to the recommended version "${RECOMMENDED_METAMASK_VERSION}".`,
`It is not recommended to run MetaMask with "latest" version. Use it at your own risk or set to the recommended version "${RECOMMENDED_METAMASK_VERSION}".`,
);
else if (isNewerVersion(RECOMMENDED_METAMASK_VERSION, metamaskVersion))
else if (isNewerVersion(RECOMMENDED_METAMASK_VERSION, metaMaskVersion))
console.warn(
'\x1b[33m%s\x1b[0m',
`Seems you are running newer version of MetaMask that recommended by dappeteer team.
Use it at your own risk or set to the recommended version "${RECOMMENDED_METAMASK_VERSION}".`,
);
else if (isNewerVersion(metamaskVersion, RECOMMENDED_METAMASK_VERSION))
else if (isNewerVersion(metaMaskVersion, RECOMMENDED_METAMASK_VERSION))
console.warn(
'\x1b[33m%s\x1b[0m',
`Seems you are running older version of MetaMask that recommended by dappeteer team.
Use it at your own risk or set the recommended version "${RECOMMENDED_METAMASK_VERSION}".`,
);
else console.log(`Running tests on MetaMask version ${metamaskVersion}`);
else console.log(`Running tests on MetaMask version ${metaMaskVersion}`);

console.log(); // new line

METAMASK_PATH = await downloader(metamaskVersion, metamaskLocation);
METAMASK_PATH = await downloader(metaMaskVersion, metaMaskLocation);
} else {
console.log(`Running tests on local MetaMask build`);

METAMASK_PATH = (rest as CustomOptions).metamaskPath;
METAMASK_PATH = (rest as CustomOptions).metaMaskPath;
/* eslint-enable no-console */
}

Expand Down
Loading