dapplayright
v1.0.0
Published
Playwright automation helpers for DApps including MetaMask wallet management and social media token injection
Maintainers
Readme
dapplayright
Playwright automation helpers for DApps including MetaMask wallet management and social media token injection.
Features
- 🔐 MetaMask Wallet Automation: Automatically import wallets, handle connection and signing popups
- 🐦 X (Twitter) Token Injection: Automatically login to X.com using auth tokens
- 💬 Discord Token Injection: Automatically login to Discord using auth tokens
- 🎭 Playwright Integration: Built on top of Playwright for reliable browser automation
Installation
npm install dapplayright
# or
yarn add dapplayright
# or
pnpm add dapplayrightRequirements
- Node.js 18+
- Playwright browsers installed (
npx playwright install)
Usage
MetaMask Wallet Management
Import MetaMask Wallet
import { chromium } from '@playwright/test';
import { MetaMaskHelper } from 'dapplayright';
const browser = await chromium.launch({
headless: false,
args: [
`--disable-extensions-except=/path/to/metamask-extension`,
`--load-extension=/path/to/metamask-extension`
]
});
const context = await browser.newContext();
const seedPhrase = 'word1 word2 ... word12';
const password = 'your-password';
// Import wallet
const metamaskPage = await MetaMaskHelper.importWallet(
context,
seedPhrase,
password
);Handle MetaMask Connection Popup
// After triggering a connection request on your DApp
const connected = await MetaMaskHelper.approveConnect(context);Handle MetaMask Signing Popup
// After triggering a signing request on your DApp
const signed = await MetaMaskHelper.approveSign(context);Handle Both Connection and Signing
// Automatically handle both connection and signing popups
const { connected, signed } = await MetaMaskHelper.approveConnectAndSign(context);X (Twitter) Token Injection
import { chromium } from '@playwright/test';
import { injectXToken } from 'dapplayright';
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext();
const page = await context.newPage();
// Inject X token and auto-login
await injectXToken(page, 'your-x-auth-token');Discord Token Injection
import { chromium } from '@playwright/test';
import { injectDiscordToken } from 'dapplayright';
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext();
const page = await context.newPage();
// Inject Discord token and auto-login
await injectDiscordToken(page, 'your-discord-token');API Reference
MetaMaskHelper
MetaMaskHelper.importWallet(context, seedPhrase, password)
Imports a MetaMask wallet using a seed phrase.
Parameters:
context: BrowserContext- Playwright browser contextseedPhrase: string- 12-word seed phrasepassword: string- Wallet password
Returns: Promise<Page> - MetaMask extension page
MetaMaskHelper.approveConnect(context, timeout?)
Automatically approves a MetaMask connection popup.
Parameters:
context: BrowserContext- Playwright browser contexttimeout?: number- Timeout in milliseconds (default: 15000)
Returns: Promise<boolean> - Whether connection was approved
MetaMaskHelper.approveSign(context, timeout?)
Automatically approves a MetaMask signing popup.
Parameters:
context: BrowserContext- Playwright browser contexttimeout?: number- Timeout in milliseconds (default: 15000)
Returns: Promise<boolean> - Whether signing was approved
MetaMaskHelper.approveConnectAndSign(context, connectTimeout?, signTimeout?)
Automatically handles both connection and signing popups.
Parameters:
context: BrowserContext- Playwright browser contextconnectTimeout?: number- Connection timeout in milliseconds (default: 15000)signTimeout?: number- Signing timeout in milliseconds (default: 15000)
Returns: Promise<{ connected: boolean; signed: boolean }>
MetaMaskHelper.waitForExtension(context, timeout?)
Waits for MetaMask extension to load.
Parameters:
context: BrowserContext- Playwright browser contexttimeout?: number- Timeout in milliseconds (default: 10000)
Returns: Promise<boolean> - Whether extension was detected
MetaMaskHelper.getMetaMaskPage(context, targetUrl?)
Gets or creates a MetaMask extension page.
Parameters:
context: BrowserContext- Playwright browser contexttargetUrl?: string- Optional target URL within the extension
Returns: Promise<Page> - MetaMask extension page
MetaMaskConfig
Configuration constants for MetaMask:
EXTENSION_ID: string- MetaMask Chrome extension IDDEFAULT_TIMEOUT: number- Default timeout in millisecondsSEED_PHRASE_WORDS: number- Expected number of words in seed phrase (12)
Token Injection Functions
injectXToken(page, token)
Injects X (Twitter) auth token and automatically logs in.
Parameters:
page: Page- Playwright page objecttoken: string- X authentication token
Returns: Promise<void>
injectDiscordToken(page, token)
Injects Discord auth token and automatically logs in.
Parameters:
page: Page- Playwright page objecttoken: string- Discord authentication token
Returns: Promise<void>
Development
# Install dependencies
npm install
# Build
npm run build
# Watch mode
npm run devLicense
ISC
Disclaimer
This package is for automation and testing purposes. Use responsibly and in accordance with the terms of service of the platforms you're automating.
