143 lines
4.3 KiB
Markdown
143 lines
4.3 KiB
Markdown
# 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/`:
|
||
|
||
```bash
|
||
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/`):
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
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 params
|
||
- `GET /api/config/token-list` – Uniswap token list format
|
||
|
||
To test against a running explorer:
|
||
|
||
```bash
|
||
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 chains
|
||
- `GET /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):
|
||
|
||
```bash
|
||
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 for `wallet_addEthereumChain`
|
||
- `get_chain138_market_chains` – fetches `GET {apiBaseUrl}/api/v1/chains` (pass token-aggregation base URL)
|
||
- `hello` – demo dialog
|
||
|
||
**Build and run (from repo root):**
|
||
|
||
```bash
|
||
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:
|
||
|
||
```js
|
||
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 |
|