Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
3b0997d
refactor: migrate REACT_APP_ env vars to OPENSCAN_ prefix
AugustoL Apr 1, 2026
b902999
feat(worker): add Deno Deploy entry point and config
AugustoL Apr 1, 2026
b1da1b1
feat(worker): add Vercel Edge Functions entry point and config
AugustoL Apr 1, 2026
9a6b380
feat: add worker proxy failover across Cloudflare, Deno, and Vercel
AugustoL Apr 1, 2026
1241d2f
fix(worker): add process.env type declaration for Vercel entry point
AugustoL Apr 1, 2026
57b8f91
docs(worker): add README with deployment guide for all platforms
AugustoL Apr 1, 2026
7664a0c
fix(worker): remove Deno Deploy from active failover, update docs
AugustoL Apr 1, 2026
30cecbc
chore(worker): add .gitignore for Vercel project config
AugustoL Apr 1, 2026
2087334
feat(solana): add Solana network support (Mainnet, Devnet, Testnet)
AugustoL Apr 6, 2026
89f2721
chore(solana): wire real SolanaClient from network-connectors 1.7
AugustoL Apr 6, 2026
87f5fbe
fix(solana): add default public RPCs and handle Solana in NetworkBloc…
AugustoL Apr 6, 2026
98f9b88
chore: remove accidentally committed worker/.vercel files
AugustoL Apr 6, 2026
4a69e4d
feat(solana): add more public RPC endpoints for fallback
AugustoL Apr 6, 2026
8e41499
style(solana): rewrite page components to match BTC/EVM design system
AugustoL Apr 6, 2026
716bab6
fix(solana): use rounded badge classes for transaction status
AugustoL Apr 6, 2026
5677826
style(solana): use two-column layout for account details and token ho…
AugustoL Apr 6, 2026
2ecd248
style(solana): fix account layout - address full width, token holding…
AugustoL Apr 6, 2026
5c51c91
fix(solana): use link-accent class for in-app links on detail views
AugustoL Apr 6, 2026
89dd23c
style(solana): remove transaction count from dashboard stats
AugustoL Apr 6, 2026
039b999
style(solana): show only 3 dashboard stats (price, slot, epoch)
AugustoL Apr 6, 2026
98af388
style(solana): show block transactions list using shared tx-list pattern
AugustoL Apr 6, 2026
3317d86
Merge pull request #353 from AugustoL/refactor/migrate-env-vars-to-vi…
AugustoL Apr 11, 2026
fd7656c
fix(solana): restyle program logs section on transaction view
AugustoL Apr 11, 2026
cfa5c3a
fix: resolve merge conflict with dev, use import.meta.env for worker URL
AugustoL Apr 11, 2026
9104be5
fix: add per-request timeout and 429 retry to worker failover
AugustoL Apr 11, 2026
a0dee33
fix: update lockfile and override axios to fix CI failures
AugustoL Apr 14, 2026
a27eced
Merge pull request #358 from AugustoL/feat/solana-network-support
AugustoL Apr 14, 2026
3ef724a
Merge remote-tracking branch 'openscan-explorer/dev' into feat/worker…
AugustoL Apr 14, 2026
17bf044
Merge pull request #354 from AugustoL/feat/worker-multi-platform-deploy
AugustoL Apr 14, 2026
22f5845
feat(networks): add 5 EVM testnets from metadata v1.2.1-alpha.0
AugustoL Apr 21, 2026
23816b4
refactor(adapters): tighten testnet client typing at factory boundary
AugustoL Apr 21, 2026
f1bbb5d
feat(tokenDetails): add previous/next token navigation to ERC721 disp…
AugustoL Apr 21, 2026
81f2046
feat(tokenDetails): add recent-tokens table to ERC721 collection page…
AugustoL Apr 21, 2026
246cb85
fix(tokenDetails): improve link colors on ERC721 token page in dark mode
AugustoL Apr 21, 2026
c43c279
Merge pull request #361 from AugustoL/feat/add-testnet-networks
AugustoL Apr 22, 2026
17fe5ea
fix(tx): add tooltips to raw-trace table headers (#350)
AugustoL Apr 21, 2026
4c05faf
Merge pull request #363 from AugustoL/fix/raw-trace-tooltips
AugustoL Apr 22, 2026
c8606f5
fix(worker): anchor CORS origin allowlist to prevent Netlify-tenant a…
AugustoL Apr 22, 2026
fdbfa93
fix(security): harden PR-preview CI and gate NFT external hrefs
AugustoL Apr 23, 2026
bb10509
fix(security): pin third-party GitHub Actions and scrub API keys from…
AugustoL Apr 23, 2026
6294053
refactor(e2e): phase 0 scaffolding for cross-network specs
AugustoL Apr 23, 2026
962a266
review(e2e): correct phase 0 slugs, localStorage keys, and CI retries
AugustoL Apr 23, 2026
c9873cc
test(e2e): phase 1 cross-network shared specs
AugustoL Apr 23, 2026
d6d3c23
review(e2e): phase 1 fixes — settings persistence + skip stub cleanup
AugustoL Apr 23, 2026
8176aea
test(e2e): phase 2 L2 adapter field assertions
AugustoL Apr 23, 2026
2908954
review(e2e): phase 2 fixes — drop redundant domcontentloaded waits
AugustoL Apr 23, 2026
51c59a9
test(e2e): phase 3 smoke coverage for orphaned networks
AugustoL Apr 23, 2026
d87ea40
review(e2e): phase 3 fixes — extract shared expectStillMounted helper
AugustoL Apr 23, 2026
8dd0d9a
test(e2e): phase 4 feature-depth specs — contract, AI, event logs
AugustoL Apr 23, 2026
ebfa9ab
review(e2e): phase 4 fix — drop misleading unverified-contract test
AugustoL Apr 23, 2026
f0e5a8e
ci(e2e): phase 5 wire new spec groups into CI
AugustoL Apr 23, 2026
5a1bd3b
review(e2e): phase 5 fix — rename large-tx.spec.ts to event-logs.spec.ts
AugustoL Apr 23, 2026
f4516fe
docs(e2e): phase 6 cleanup — document directory layout and CI triggers
AugustoL Apr 23, 2026
25efaca
review(e2e): phase 6 fix — add "Adding a new spec" contributor guide
AugustoL Apr 23, 2026
e5127ee
test(e2e): fix spec bugs surfaced by the first actual run
AugustoL Apr 23, 2026
5512207
fix(e2e): stability tuning for 5 pre-existing flaky mainnet specs
AugustoL Apr 23, 2026
0ad83f3
fix(e2e): two test-data bugs, not app bugs — USDC_APPROVAL hash + Gas…
AugustoL Apr 23, 2026
311e0c4
Merge pull request #362 from AugustoL/feat/erc721-token-navigation
AugustoL Apr 28, 2026
34893a1
Merge pull request #364 from AugustoL/fix/cors-origin-allowlist
AugustoL Apr 28, 2026
a324be0
Merge pull request #366 from AugustoL/refactor/e2e-tests
AugustoL Apr 28, 2026
24a72c3
Merge pull request #365 from AugustoL/fix/preview-workflow-and-nft-xss
AugustoL Apr 29, 2026
f8e8f82
fix(ci): replace Storacha with Kubo for consistent IPFS hash generation
AugustoL Mar 17, 2026
11d2b77
CI: Update actions/checkout and actions/setup-node to @v5
MatiasOS Mar 26, 2026
3fdf63c
Merge pull request #368 from AugustoL/chore/merge-main-into-dev
AugustoL Apr 29, 2026
8a903a9
chore(deps): patch direct + transitive deps to clear npm audit
AugustoL May 6, 2026
9369141
Merge pull request #370 from AugustoL/chore/audit-fix
AugustoL May 6, 2026
74279ec
chore: bump version to 1.2.6-alpha
AugustoL May 6, 2026
c918ae1
Merge pull request #371 from AugustoL/chore/bump-v1.2.6-a
AugustoL May 6, 2026
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
6 changes: 3 additions & 3 deletions .claude/rules/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,6 @@ Located in `src/types/index.ts`:
- **Vite** (`vite.config.ts`) - Fast bundler with TypeScript, CSS, and asset loading
- **GitHub Pages**: Set `GITHUB_PAGES=true` for `/explorer/` base path
- **Environment Variables**: Injected via Vite's `define` option:
- `REACT_APP_COMMIT_HASH` - Git commit hash
- `REACT_APP_OPENSCAN_NETWORKS` - Comma-separated chain IDs to display
- `REACT_APP_ENVIRONMENT` - production/development
- `OPENSCAN_COMMIT_HASH` - Git commit hash
- `OPENSCAN_NETWORKS` - Comma-separated chain IDs to display
- `OPENSCAN_ENVIRONMENT` - production/development
10 changes: 8 additions & 2 deletions .claude/rules/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,15 @@ npm run test:run
# Run unit tests in watch mode
npm run test

# Run e2e tests (Playwright)
# Run e2e tests (Playwright) — both `chromium` (live) and `mocked` projects
npm run test:e2e

# Run a single spec file
npx playwright test e2e/tests/shared/errors.spec.ts

# Run only the chromium project (skips hermetic `shared/mocked/` specs)
npx playwright test --project=chromium

# Run e2e tests with UI
npm run test:e2e:ui

Expand Down Expand Up @@ -87,7 +93,7 @@ Networks are defined in `src/config/networks.ts`. To control which networks are

```bash
# Show only specific networks (comma-separated chain IDs)
REACT_APP_OPENSCAN_NETWORKS="1,31337" npm start
OPENSCAN_NETWORKS="1,31337" npm start

# Show all networks (default)
npm start
Expand Down
12 changes: 12 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
version: 2
updates:
# Keep third-party GitHub Actions pinned to SHAs up to date. Dependabot
# updates the pinned SHA and the trailing `# vX` tag comment together.
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
labels:
- "dependencies"
- "github-actions"
2 changes: 1 addition & 1 deletion .github/workflows/deploy-gh-pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
uses: actions/checkout@v4

- name: Setup Bun
uses: oven-sh/setup-bun@v2
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: latest

Expand Down
80 changes: 0 additions & 80 deletions .github/workflows/deploy-pr-preview.yml

This file was deleted.

14 changes: 14 additions & 0 deletions .github/workflows/e2e-all.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ name: E2E Tests - All

on:
workflow_dispatch:
# Called by `e2e-nightly.yml`.
workflow_call:

jobs:
e2e-eth-mainnet:
Expand All @@ -15,3 +17,15 @@ jobs:
e2e-bitcoin:
uses: ./.github/workflows/e2e-bitcoin.yml
secrets: inherit

e2e-shared:
uses: ./.github/workflows/e2e-shared.yml
secrets: inherit

e2e-solana:
uses: ./.github/workflows/e2e-solana.yml
secrets: inherit

e2e-testnets:
uses: ./.github/workflows/e2e-testnets.yml
secrets: inherit
2 changes: 1 addition & 1 deletion .github/workflows/e2e-bitcoin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
- uses: actions/checkout@v4

- name: Setup Bun
uses: oven-sh/setup-bun@v2
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: latest

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/e2e-eth-mainnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
- uses: actions/checkout@v4

- name: Setup Bun
uses: oven-sh/setup-bun@v2
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: latest

Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/e2e-evm-networks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,16 @@ jobs:
tests: "e2e/tests/evm-networks/bsc.spec.ts"
- name: polygon
tests: "e2e/tests/evm-networks/polygon.spec.ts"
- name: avalanche
tests: "e2e/tests/evm-networks/avalanche.spec.ts"
- name: l2-fields
tests: "e2e/tests/evm-networks/l2-fields.spec.ts"

steps:
- uses: actions/checkout@v4

- name: Setup Bun
uses: oven-sh/setup-bun@v2
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: latest

Expand Down
22 changes: 22 additions & 0 deletions .github/workflows/e2e-nightly.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: E2E Tests - Nightly

# Run the full e2e matrix once a day against live RPCs. Catches
# provider-side drift (method deprecations, response schema changes,
# stale data) between PR cycles without gating merges on cron-scheduled
# flakes.
#
# Failures here do not block merges — they're a signal to investigate.
# If a test starts failing consistently in nightly but passes on PR, the
# root cause is almost always upstream (provider change, chain upgrade),
# not the PR.

on:
schedule:
# 06:00 UTC — after US-west engineers are offline, before EU starts.
- cron: "0 6 * * *"
workflow_dispatch:

jobs:
e2e-all:
uses: ./.github/workflows/e2e-all.yml
secrets: inherit
62 changes: 62 additions & 0 deletions .github/workflows/e2e-shared.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: E2E Tests - Shared (cross-network)

on:
pull_request:
branches: [main]
workflow_call:
workflow_dispatch:

jobs:
e2e-shared:
runs-on: ubuntu-latest
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
shard:
# Live (chromium project): cross-network specs that don't need
# hermetic RPC control.
- name: errors
tests: "e2e/tests/shared/errors.spec.ts"
- name: search
tests: "e2e/tests/shared/search.spec.ts"
- name: settings
tests: "e2e/tests/shared/settings.spec.ts"
- name: contract-interaction
tests: "e2e/tests/shared/contract-interaction.spec.ts"
- name: ai-and-worker
tests: "e2e/tests/shared/ai-and-worker.spec.ts"
- name: event-logs
tests: "e2e/tests/shared/event-logs.spec.ts"

steps:
- uses: actions/checkout@v4

- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Install Playwright browsers
run: bunx playwright install --with-deps chromium

- name: Build application
run: ./scripts/build-production.sh

- name: Run Shared E2E tests (${{ matrix.shard.name }})
run: bunx playwright test ${{ matrix.shard.tests }} --project=chromium
env:
CI: true
INFURA_API_KEY: ${{ secrets.INFURA_API_KEY }}
ALCHEMY_API_KEY: ${{ secrets.ALCHEMY_API_KEY }}

- name: Upload test results
uses: actions/upload-artifact@v4
if: failure()
with:
name: playwright-report-shared-${{ matrix.shard.name }}
path: playwright-report/
retention-days: 7
49 changes: 49 additions & 0 deletions .github/workflows/e2e-solana.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: E2E Tests - Solana

on:
pull_request:
branches: [main]
workflow_call:
workflow_dispatch:

# Solana smoke specs discover their RPC endpoints through the
# `@openscan/metadata` CDN (same path the app uses), so no dedicated
# Solana RPC secret is required. If the metadata fetch is slow in CI the
# `buildRpcUrls` helper also seeds no-op from env vars; the default
# fallback is public RPC, which is rate-limited and may cause occasional
# retries — the test-level retry budget in `playwright.config.ts`
# absorbs this.

jobs:
e2e-solana:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4

- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Install Playwright browsers
run: bunx playwright install --with-deps chromium

- name: Build application
run: ./scripts/build-production.sh

- name: Run Solana E2E smoke
run: bunx playwright test e2e/tests/solana/ --project=chromium
env:
CI: true

- name: Upload test results
uses: actions/upload-artifact@v4
if: failure()
with:
name: playwright-report-solana
path: playwright-report/
retention-days: 7
50 changes: 50 additions & 0 deletions .github/workflows/e2e-testnets.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: E2E Tests - Testnets

on:
pull_request:
branches: [main]
workflow_call:
workflow_dispatch:

# Testnet smoke. RPCs are discovered via `@openscan/metadata` (same path
# the app uses) so no per-testnet secret is required. Public testnet
# endpoints can be rate-limited and intermittently slow — Playwright's
# per-test retry budget absorbs most of that. If a specific testnet
# starts systematically flaking, open a dedicated follow-up rather than
# hiding the signal by relaxing timeouts here.

jobs:
e2e-testnets:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v4

- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Install Playwright browsers
run: bunx playwright install --with-deps chromium

- name: Build application
run: ./scripts/build-production.sh

- name: Run Testnet E2E smoke
run: bunx playwright test e2e/tests/testnets/ --project=chromium
env:
CI: true
INFURA_API_KEY: ${{ secrets.INFURA_API_KEY }}
ALCHEMY_API_KEY: ${{ secrets.ALCHEMY_API_KEY }}

- name: Upload test results
uses: actions/upload-artifact@v4
if: failure()
with:
name: playwright-report-testnets
path: playwright-report/
retention-days: 7
Loading
Loading