4.3 KiB
Integration and Testing
How to build, integrate, and test the MetaMask dual-chain provider, explorer config, token-aggregation API, and Chain 138 Snap. Default package manager: pnpm.
Run all (pnpm)
From the repo root or metamask-integration/:
cd metamask-integration
pnpm run run-all
Runs: (1) full integration script (provider test + config validation), (2) token-aggregation pnpm install + pnpm run build, (3) explorer frontend pnpm install + pnpm run build, (4) Chain 138 Snap install + build (Snap template uses yarn internally).
1. Provider (Node) integration test
From the repo root (or metamask-integration/):
cd metamask-integration/provider
pnpm exec node test-integration.mjs
# or: node test-integration.mjs
Tests chains, tokens, wallet exports, and oracles without window.ethereum. Expect: 4 passed, 0 failed.
2. Full integration script
Runs provider test + validates explorer config JSONs + optional Explorer API and token-aggregation API:
cd metamask-integration
pnpm run test:integration
# or: ./scripts/integration-test-all.sh
Optional env (for live API checks):
EXPLORER_API_URL– e.g.http://localhost:8080(explorer backend)TOKEN_AGGREGATION_URL– e.g.http://localhost:3000(token-aggregation service)
Config files validated from repo: docs/04-configuration/metamask/DUAL_CHAIN_NETWORKS.json, DUAL_CHAIN_TOKEN_LIST.tokenlist.json.
3. Explorer API (config endpoints)
Explorer backend serves:
GET /api/config/networks– Chain 138 + Ethereum Mainnet + ALL Mainnet paramsGET /api/config/token-list– Uniswap token list format
To test against a running explorer:
export EXPLORER_API_URL=http://localhost:8080
./scripts/integration-test-all.sh
Explorer backend requires DB; see explorer-monorepo/backend/ for build/run.
4. Token-aggregation API
Token-aggregation service (Chain 138 + ALL Mainnet) exposes:
Note: The service may have existing TypeScript build issues in canonical-tokens.ts; the REST API is documented and can be tested when the service is run (e.g. via Docker or with DB).
GET /api/v1/chains– supported chainsGET /api/v1/tokens?chainId=138– tokens and market data- See
smom-dbis-138/services/token-aggregation/docs/REST_API_REFERENCE.md
To test when the service is running (with DB):
export TOKEN_AGGREGATION_URL=http://localhost:3000
./scripts/integration-test-all.sh
5. Provider E2E (manual, browser)
Open metamask-integration/examples/provider-e2e.html via a local server (e.g. npx serve metamask-integration/examples or your app) with MetaMask installed.
- Add chains – adds Chain 138, Ethereum Mainnet, ALL Mainnet
- Switch chain – 138 / 1 / 651940
- List tokens – tokens from provider for current chain
- ETH/USD price – oracle price (requires ethers; loads from esm.sh if needed)
6. Chain 138 Snap
Snap provides:
get_chain138_config– Chain 138 params forwallet_addEthereumChainget_chain138_market_chains– fetchesGET {apiBaseUrl}/api/v1/chains(pass token-aggregation base URL)hello– demo dialog
Build and run (from repo root):
cd metamask-integration/chain138-snap
yarn install
yarn build
yarn start
Then install the Snap in MetaMask Flask using the provided site (e.g. http://localhost:8000). Invoke from a dapp:
await ethereum.request({
method: 'wallet_invokeSnap',
params: {
snapId: 'YOUR_SNAP_ID',
request: { method: 'get_chain138_config' },
},
});
Summary
| Item | Command / location (pnpm default) |
|---|---|
| Run all | cd metamask-integration && pnpm run run-all |
| Provider test | cd provider && pnpm exec node test-integration.mjs |
| Full integration | pnpm run test:integration or ./scripts/integration-test-all.sh |
| Explorer config | Validated by script; optional EXPLORER_API_URL |
| Token-aggregation | cd smom-dbis-138/services/token-aggregation && pnpm install && pnpm run build; optional TOKEN_AGGREGATION_URL in script |
| Provider E2E | Serve examples/provider-e2e.html, use MetaMask |
| Snap | chain138-snap: pnpm install, pnpm run build, pnpm run start (template uses yarn internally); install in Flask |