@synthetixio/synpress-phantom cannot download the Phantom extension: the URL it fetches from no longer resolves. Every Phantom fixture fails at cache-build time, which effectively means Solana support is unreachable even though the code for it is complete and merged.
The dead host
wallets/phantom/src/prepareExtensionPhantom.ts:
PHANTOM_EXTENSION_DOWNLOAD_URL = 'https://crx-backup.phantom.dev/latest.crx'
crx-backup.phantom.dev returns NXDOMAIN — DNS status 3 from both Cloudflare DoH (1.1.1.1) and Google DoH (8.8.8.8). phantom.dev itself resolves normally, so it is that subdomain specifically that is gone.
The same literal is baked into the published @synthetixio/synpress-cache@0.0.14 tarball, so a user cannot work around it by pinning an older cache package.
There is no override hook
I grepped the published dist of @synthetixio/synpress-cache@0.0.14 for process.env: the only reads are HEADLESS and two rimraf-related test variables. There is no PHANTOM_EXTENSION_DOWNLOAD_URL, no generic extension-path variable, and no documented way to point synpress-cache --phantom at a locally downloaded .crx. So the failure is unrecoverable from the user side.
Why this is worth fixing rather than deprecating
The Solana support here is real and, as far as I can tell, the most complete in any Playwright wallet driver:
Networks = 'solana' | 'ethereum' | 'base' | 'polygon' | 'bitcoin'
importWalletFromPrivateKey('solana', <base58 secret>), getAccountAddress('solana'), toggleTestnetMode()
confirmSignature, confirmSignatureWithRisk, rejectSignature, confirmTransaction, rejectTransaction — 23 methods
- Working specs:
test/playwright/e2e/confirmTransaction.spec.ts drives should Sign Transaction and should Sign All Transactions through a solanaSandboxSetup() common step
That landed in #1271, "Phantom support for Playwright", merged 2025-05-04. It would be a shame for it to be unusable over a hostname.
Suggested fix
The Chrome Web Store CRX endpoint serves authentic Phantom bytes and works today. I verified it this session:
https://clients2.google.com/service/update2/crx?response=redirect&acceptformat=crx2,crx3&prodversion=<ver>&x=id%3Dbfnaelmomeimhlpmgjnjophhpkkoljpa%26uc
→ HTTP 200, 17,597,295 bytes, application/x-chrome-extension, redirecting to …BFNAELMOMEIMHLPMGJNJOPHHPKKOLJPA_26_31_0_0.crx. bfnaelmomeimhlpmgjnjophhpkkoljpa is Phantom's real Web Store ID.
The trade-off worth naming: the Web Store serves whatever is current and refuses a version pin, so a Phantom release can change selectors under a passing suite. Another project in this space (walletwright) handles that by recording a sha256 of the bytes it actually downloaded and failing loudly when it moves, rather than silently trusting a new build — that seems like the right posture, and it is strictly better than a dead URL.
Whatever the fix, an environment-variable override for the download URL or a local .crx path would make this class of breakage recoverable without a release.
Two smaller things in the Phantom fixtures
While reading the specs:
wallets/phantom/test/playwright/basic.setup.ts uses the public test test test test test test test test test test test junk seed. Phantom is reported to block dApp connections from that well-known seed, so a fresh onboarding with it may not be usable even once the download is fixed.
solanaSandboxSetup navigates to https://r3byv.csb.app/, a CodeSandbox preview URL. That is an external dependency on somebody's sandbox staying alive — vendoring the dapp-under-test would make the suite self-contained.
Happy to send a PR for the download-URL change plus an env override if that is a direction you would take.
Context: I am a maintainer of solanabr/ai-kit, a Claude Code configuration kit for Solana development. We were evaluating wallet E2E options and this was the most capable candidate we found, which is why the dead hostname was worth reporting carefully rather than just moving on.
@synthetixio/synpress-phantomcannot download the Phantom extension: the URL it fetches from no longer resolves. Every Phantom fixture fails at cache-build time, which effectively means Solana support is unreachable even though the code for it is complete and merged.The dead host
wallets/phantom/src/prepareExtensionPhantom.ts:crx-backup.phantom.devreturns NXDOMAIN — DNS status 3 from both Cloudflare DoH (1.1.1.1) and Google DoH (8.8.8.8).phantom.devitself resolves normally, so it is that subdomain specifically that is gone.The same literal is baked into the published
@synthetixio/synpress-cache@0.0.14tarball, so a user cannot work around it by pinning an older cache package.There is no override hook
I grepped the published dist of
@synthetixio/synpress-cache@0.0.14forprocess.env: the only reads areHEADLESSand two rimraf-related test variables. There is noPHANTOM_EXTENSION_DOWNLOAD_URL, no generic extension-path variable, and no documented way to pointsynpress-cache --phantomat a locally downloaded.crx. So the failure is unrecoverable from the user side.Why this is worth fixing rather than deprecating
The Solana support here is real and, as far as I can tell, the most complete in any Playwright wallet driver:
Networks = 'solana' | 'ethereum' | 'base' | 'polygon' | 'bitcoin'importWalletFromPrivateKey('solana', <base58 secret>),getAccountAddress('solana'),toggleTestnetMode()confirmSignature,confirmSignatureWithRisk,rejectSignature,confirmTransaction,rejectTransaction— 23 methodstest/playwright/e2e/confirmTransaction.spec.tsdrivesshould Sign Transactionandshould Sign All Transactionsthrough asolanaSandboxSetup()common stepThat landed in #1271, "Phantom support for Playwright", merged 2025-05-04. It would be a shame for it to be unusable over a hostname.
Suggested fix
The Chrome Web Store CRX endpoint serves authentic Phantom bytes and works today. I verified it this session:
→ HTTP 200, 17,597,295 bytes,
application/x-chrome-extension, redirecting to…BFNAELMOMEIMHLPMGJNJOPHHPKKOLJPA_26_31_0_0.crx.bfnaelmomeimhlpmgjnjophhpkkoljpais Phantom's real Web Store ID.The trade-off worth naming: the Web Store serves whatever is current and refuses a version pin, so a Phantom release can change selectors under a passing suite. Another project in this space (
walletwright) handles that by recording a sha256 of the bytes it actually downloaded and failing loudly when it moves, rather than silently trusting a new build — that seems like the right posture, and it is strictly better than a dead URL.Whatever the fix, an environment-variable override for the download URL or a local
.crxpath would make this class of breakage recoverable without a release.Two smaller things in the Phantom fixtures
While reading the specs:
wallets/phantom/test/playwright/basic.setup.tsuses the publictest test test test test test test test test test test junkseed. Phantom is reported to block dApp connections from that well-known seed, so a fresh onboarding with it may not be usable even once the download is fixed.solanaSandboxSetupnavigates tohttps://r3byv.csb.app/, a CodeSandbox preview URL. That is an external dependency on somebody's sandbox staying alive — vendoring the dapp-under-test would make the suite self-contained.Happy to send a PR for the download-URL change plus an env override if that is a direction you would take.
Context: I am a maintainer of
solanabr/ai-kit, a Claude Code configuration kit for Solana development. We were evaluating wallet E2E options and this was the most capable candidate we found, which is why the dead hostname was worth reporting carefully rather than just moving on.