The explorer shipped three sign-in systems. Two were Blockscout's and both
spoke to its /account/* backend, which this deployment does not run — measured,
every one of those endpoints 404s on api-explore.lux.network:
/account/get_csrf 404 /account/send_otp 404 /account/siwe_message 404
/account/user/info 404 /account/confirm_otp 404 /account/authenticate_via_* 404
So none of it could ever have worked. It is deleted, not re-pointed: the email
+ one-time-code modal, the SIWE wallet login, the CSRF handshake that fired on
every page render, the Dynamic.xyz provider, and the dev page that let you
paste a session cookie by hand. Rewriting any of it against our own backend
would have been building custom auth, which we do not do.
What is left is the standard OIDC client we already had, finished:
* PKCE (S256). This client is public — it runs in a browser and can hold no
secret — so the verifier is the only thing binding a redeemed code to the
page that asked for it. IAM advertises S256 in its discovery document and
we were not sending a challenge at all.
* userinfo went to <issuer>/api/userinfo, which is a 404 and an /api/ path we
do not serve. It is /v1/iam/oauth/userinfo, per IAM's own discovery.
* logout now ends the IdP session (end_session_endpoint) instead of only
dropping our cookie and leaving the user signed in upstream.
All three live in lib/oidc.ts, which already said never to rebuild these paths
at a call site.
The header's provider switch collapses to two states — signed in with IAM, or
account disabled and this is the wallet/settings menu. `rewards` is stated off:
its gate read authProvider === 'auth0', so it was already unreachable.
The ConfigMaps carried NEXT_PUBLIC_OIDC_CLIENT_ID=lux-explore-client-id, a
client that has never existed, so authorize answered 400 unknown client_id.
IAM names clients <org>-explore; all four brands now say so, and hanzo/zoo/pars
get the OIDC keys they never had.
Typecheck: no new error classes, production errors 26 -> 22.
Co-authored-by: Hanzo Dev <[email protected]>
Typing one character into the search box blanked every explorer in the estate.
The DOM collapsed to the error boundary — "Oops! Something went wrong" — with
TypeError: e.data?.forEach is not a function
thrown from the itemsGroups useMemo in
ui/snippets/searchBar/SearchBarSuggest/SearchBarSuggest.tsx:95.
/search/quick is served in two shapes. Upstream Blockscout answers with a bare
list; eth.blockscout.com/api/v2/search/quick?q=1 returns []. Our backend
(luxfi/explorer 1.5.3) answers with the same paginated envelope as /search:
api-explore.lux.network/search/quick?q=1
HTTP 200 {"items":[{"block_number":1,"type":"block"}],"next_page_params":null}
The hanzo, zoo and pars backends return that byte-for-byte too, which is why a
single bundle offset crashes every hostname. The frontend declared the payload
as Array<SearchResultItem> and iterated it, so the envelope object met .forEach.
This is not the rate limiter. The explorer does draw 429s from api.lux.network,
but useFetch rejects on any non-ok response, so an error body never reaches
query.data — it stays undefined and `data?.forEach` short-circuits. Only a 200
carrying a non-array JSON body can produce this crash.
Proven against the live v1.1.13 bundle by rewriting that one response in flight
and changing nothing else: envelope, DOM 132 chars, crash; the same page fed a
bare list, DOM 2081 chars, no console errors, suggest panel renders "Blocks 1".
So the wire type now admits both shapes and unwrapItems is the single place that
collapses them, applied as the select of the quick_search query — the one point
where the resource enters the app. Every consumer downstream (suggest groups,
the desktop "show all results" count, mobile) is handed an array by
construction rather than each guarding for itself. A body in neither shape
yields an empty list, which the component already renders as "No results found",
so a future contract change degrades instead of blanking the page.
zetaChainCCTXQuery.data?.items.length is guarded the same way: the optional
chain stopped at data and left .items.length to throw "Cannot read properties
of undefined (reading 'length')" — the second error in the report — for any
response missing items.
Co-authored-by: Hanzo Dev <[email protected]>
- Rename all @blockscout/* npm packages to @luxfi/* aliases (150+ files)
- Override blue accent colors to gray for monochrome theme
- Fix dropdown/menu/popover fonts to use Geist Sans
- Change Latest Blocks to horizontal scrolling layout
- Show dashes instead of zeros for validator stats on error
- Fix GHA deploy step to use correct deployment name
* envs and feature setup
* home page layout
* cross-chain txs page
* cross-chain transfers page
* cross-chain transfers on tx page
* cross-chain messages on tx page
* cross-chain tx page
* cross-chain tx details token transfers
* stats and counters for lists
* migrate to new API version
* add swagger
* mobile lists
* placeholder views on address page
* tests
* fix adaptive tabs initial state when there is only one tab in the list
* tweaks
* bug fixes
* fix tests
* update screenshots
* migrate to new api version
* add chain label tooltip, copy button to txs in lists and same address highlight
* list views on address page
* fix tests
* fix links to current address in the list views
* update tooltips
* update tables layout
* review fixes
* fix spelling
* update screenshots
* update screenshot
* basic login button implementation
* refactoring and add dynamic auth button to the other pages
* connect wallet without authenticating an user
* login and logout user in blockscout account
* refactoring and RPC overrides
* authenticate user with connected wallet
* add ENS to profile button
* override evm chains and fix contract write with waas wallet
* disconnect wallet and fix docker build
* add dynamic imports to components that use web3 wallet packages
* refactor user profile directory
* clean up
* tweaks
* update pw ci script
* fix "connect wallet" button behavior
* handle linking email to profile with dynamic provider
* fix test
* async loading web3 hooks and remove dynamic loading from components that use them
* fix pw tests
* add account navigation in horizontal layout when auth provider is dynamic
* fix address verification modal
* review fixes
* spelling fixes
* page layout
* add interval filter
* fix navigation
* value formatting and test
* fix: correct empty state message from 'pools' to 'hot contracts'
* update screenshots
* add disabled state to tag select and fix some bugs
* fix screenshot
* update select texts
* refactor widgets on home page
* coming soon placeholder component
* top accounts page
* contract data
* address ERC-20 tokens list
* chain filter for address ERC-20 tokens
* token select for address detailed view
* address details fields
* tokens table
* stats widgets on home page
* chain indicators graph on the home page
* quick search
* search results all tab
* tabs and chain select on search results page
* search results mobile view
* add contract info to search and address details
* add text filter for tokens and search improvements
* load all results inside tab on search results page
* token balance info
* add support for domains in the full search
* Multichain explorer
Resolves#2989
* add envs validator for multichain
* add some tests
* fix search bar on search results page on mobile
* home stats fixes
* fix ts
* optimize amount of queries on address page
* add more contract info on address page
* add enter key hint to search input
* fix tests
* fix test
* update bg.primary css-variable on color theme change
* sitemap for multichain
* txs page: render first tab if blob tab is not available on the chain
* filter out in active chains from chain select on address page and user ops page
* add chain icon to advanced filter table
* fix tooltip on entity with shield
* fix ts
* show contract implementations
* fixes
* add chain icon to all lists
* refactor zetachain chains config type
* use chain id as primary option instead of chain slug
* refactor chain config type for multichain and essential dapps
* refactor chain icon and chain select
* rename chain-slug in chain_slug
* change default radius of chain icon and update screenshots for multichain tests
* change conditions for "isContract" and "isVerified"
* test fixes
* make shield optional for external chain entities
* add chain icon to approvals lists
* add stats page for multichain
* add chain postfix to chart .png and .csv assets name
* fix tests
* sync verified contracts language filter and fix loading state in the search results page
* fix sol2uml diagram and csv export
* regcred from helmfile for review
* link fixes
* fix state for unknown address
* fix incorrect chain in the context during spa transition to the same route on different chain
* add links to stats widgets
* add mixpanel to L2 demo values
* show message of on-demand contract verification
* fix screenshots
---------
Co-authored-by: Nick Zenchik <[email protected]>
* adds clusters api configs
* adds clusters api configs
* adds api types
* adds props routes and titles for cluster pages
* adds query param enum for clusters api
* adds clusters svg
* adds dynamic page routes
* adds clusters entity ui in ui/shared/entities
* adds functions to detect input type; will be used to check whether a user is searching for a cluster name vs a evm address
* adds stubs for loading skeleton view
* adds pagination hook
* adds query param hooks for clusters trpc endpoints
* adds query param hooks for clusters trpc endpoints
* adds components that make up the /clusters ui
* adds components for /cluster ui
* adds clusters api endpoint to query by cluster id
* implements call to cluster id endpoint to get ac
tive chain count
* adds clusters search types and in api category
* creates clusters search hook and wraps useQuickSearchQuery hook
* replaces useQuickSearchQuery for useSearchWithClusters hook for both functionality
* add search suggestion ui
* adds optional chaining to handle react re-render when search type changes
* adds cluster ui to ui/pages/address on address details
* prevents clicking on cluster suggestion if address is non EVM
* adds util functions for testability along with tests, for action bar component logic
* refactor - extract clusters display logic wit
h tests
* refactor: extract page utilities from Clusters.tsx with tests
* adds jest testing infra for react components
* adds hook testing coverage
* adds component and integration tests
* adds detectInputType util tests
* removes generic parameters from clusters pagination types
* replaces any type with proper cluster config types
* adds cluster routes to metadata and analytics mappings
* updates order and stacks action bar items vertically when mobile view
* repositions clusters logo
* refactors search logic to render community clusters in search sugge
st
* adding clusters env vars
- add NEXT_PUBLIC_CLUSTERS_API_HOST and NEXT_PUBLIC_CLUSTERS_CDN_URL env vars
- configure clusters api integration in configs/app/apis.ts and features/clusters.ts
- adds clusters env vars to test env (.env.jest and .env.localhost)
- update CI deploy configs for both review envs
- add env vars validation schema
- document new vars in ENVS.md with usage examples
* centers directory/leaderboard toggle in mobile view
* resizes and sets proper color to logo in entity component
* hides clusters nav when clusters env is missing
* removes duplicate trailing slashes in cluster community names
* Bump `react` to v19 (#2782)
Co-authored-by: tom <[email protected]>
* change links to ton explorer
* fix internal links in ENVS.md file
* tx info: tac operation stage could be an array
* fix display of ad banner
* tac ui updates
* add more "button click" events
* update clock icon
* update screenshots
* fix age filter reset
* change tac operation status once again
* fix address icon tooltip content
* [skip ci] label released issues workflow: don't override release tag if it exists
* puzzle-15 (#2471)
* puzzle-15
* puzzle-review
* puzzle game
* puzzle fixes
* separate puzzle feature in readme
* fix testnet and rollup stage badges
* New styles for pagination and "Add / Remove" buttons (#2791)
* update styles for add / remove buttons
* update pagination styles
* change border color for filled inputs
* change row gap for alerts
* update icons and screenshots
* fix tests
* update buttons for contract method form
* update screenshot
* Gas tracker: bug fixes and improvements (#2792)
* Gas tracker page: hide `Gas price history` if chart is not enabled
Fixes#2781
* change default value for NEXT_PUBLIC_GAS_TRACKER_UNITS for testnets
* fix env for pw tests
* Public tags form improvements (#2796)
* adjust validation of comment field
* add icon url to public tag form
* update screenshots
* fix ts
* NFT marketplaces: make `collection_url` and `instance_url ` optional (#2797)
Fixes#2614
* Bump brace-expansion from 1.1.11 to 1.1.12 in /deploy/tools/affected-tests (#2801)
Bump brace-expansion in /deploy/tools/affected-tests
Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 1.1.11 to 1.1.12.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/1.1.11...v1.1.12)
---
updated-dependencies:
- dependency-name: brace-expansion
dependency-version: 1.1.12
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: Hanzo Dev <[email protected]>
* allow toaster to render custom description
* Encode the address hash for links to the TON chain (#2813)
Encode the address hash for links to the TON chain.
* Support redirects for known address discrepancies (#2799)
* Support redirects for known address discrepancies
Fixes#2793
* fix redirect to internal txs in the block
* add address user ops redirect
* Celo: support L2 epochs (#2784)
* epochs page
* epoch rewards distribution
* epoch election rewards
* address epoch rewards
* block epoch tag
* add some tests
* adjust epoch details for L1 epochs
* support non-finalized epochs
* fixes after design review
* add truncation to block numbers on mobile
* update epochs table layout
* update timestamp hint
* fix bug with subheading of first epoch
* fixes of mobile view
* update screenshots
* Icons in footer links (#2809)
* Icons in footer links
Fixes#2539
* fix envs validator
* Metadata: send address to fetchers once visited (#2814)
* Metadata: send address to fetchers once visited
Fixes#2723
* fix ts
* replaces jest-dom matchers with standard matchers
* makes /clusters page default view the directory instead of leaderboard, including jest coverage
* updates columnn name from backing to total backing, in leaderboard display
* alphabetically reorders clusters export
* adds Cluster section to the Table of Cont
ents at top of page
* removes redundant Flex component wrapper around ClustersEntity
* uses standard toolkit values for border radius and color
* uses getFeaturePayload util instead of type coercion
* extends ImageProps interface to ClusterIconProps, and uses getFeaturePayload util instead of type coercion
* adds evm address regexp in regexp.ts as single source of truth
* updates imports for files that used form validator address regexp to use single source of truth
* removes unused args, unnecessary type coercions and memoizations. upper snake case constant values.
* sets correct action bar height using ACTION_BAR_HEIGHT_DESKTOP constant
* implements TimeFormatToggle to Joined column
* simplifies conditionals and removes unnecessary Box component wrapper
* displays standard 404 error screen on erroneous ClusterDetails query
* standardizes details page to display ETH value and time in line with rest of app
* removes redundant debouncing
* moves useQueryParams hook to lib/router and updates imports and test to account
* moves config.features.cluster
s.isEnabled to top of the function and utilizes select function of useQuery in useAp
iQuery
* removes unnecessary 3rd column and isContractVerified since it is always false
* checks clusters enable for placeholder
* makes isClusterClickable condition more generic for future repurpose
* splits isEvmAddress out to general purpose utility in lib/address, update imports and test
* moves all cluster hooks and tests to lib/clusters folder
* wraps action bar with standard button wrapper
* makes nextjs-routes mock condition stricter
* adds mock clusters api data
* adds pw tests for cluster detail page
* adds pw tests for clusters directory page
* adds pw tests for clustersentity ui component
* adds mock envs for pw tests
* adds clusters api host and cdn url to env.pw
* fixes resolve react-hooks/rules-of-hooks violation in cluster search while keeping search optimization
* throws error instead of using app error component
* uses semantic token to reference color as per standard method in chakra ui
* removes empty or loading state pw tests
* pw tests - uses mockAssetResponse for icons, removes redundant tests, and updates vie
wport to narrow test case
* migrates all clusters pw tests from page.route to mockApiResponse
* updates docker generated pw screenshots
* removes object cloning in useSearchWithClusters hook
* uses standardized chakra name for backgroundColor
* resolves Clusters.pw.tsx docker screen generation issues and updates screenshots
* removes unneeded screenshots for Cluster.pw.tsx
* standardizes mobile testing approach with +@mobile tag by removing explicit viewport config, updates screenshots
* reverts expanded pw test coverage for ClustersEntity
* removes all clusters pw screenshots
* removes nested describe which was resulting in a failed test
* uploads latest docker generated screenshots for pw
* force trigger for conflict check
* removes repeating var from blockchainNavItems array
* fix screenshot merge conflicts - use upstream versions
* updates yarn.lock with upstream lib
* fix jest tests by mocking useQuery directly to resolve QueryClient context issues
* creates global mock object and proper typing to reduce duplication
* updates clusters pw screenshots with docker generation. update helia to 3.2.0 and pinned esbuild to 0.21.5. update docker dep script.
* updates yarn.lock
* removes unused imports from upstream/main
* add vite aliases for @libp2p/utils and @helia/verified-fetch to resolve playwright build failures
* updates pw screenshots for hero banner, home page and desktop header
* downgrades helia to v2.6.12
* revert changes in yarn.lock file related to helia package
* updates yarn.lock with helia downgrade
* revert changes in yarn.lock
* move clusters to the tab on the name service page
* fix tests
* small tweaks
* update screenshots
---------
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: Richard Oh <[email protected]>
Co-authored-by: Max Alekseenko <[email protected]>
Co-authored-by: isstuev <[email protected]>
Co-authored-by: Igor Stuev <[email protected]>
Co-authored-by: Hanzo Dev <[email protected]>
Co-authored-by: Richard J Oh <[email protected]>
* update styles for chain widgets on home page
* update latest txs styles and slug creation algorithm
* list of local txs
* list of local blocks
* local view for address internal tx tab
* local view for address coin history
* local view for address logs
* local view for address token transfers
* address details, kind of
* [wip] local view for address contract tab
* user ops views
* chain popover
* csv-export page
* advanced filter page
* block countdown pages
* fixes for contract tab
* refactor address txs and transfers tabs
* refactor getServerSideProps
* internal txs page
* tokens and token transfers pages
* simple tag for address page and details info placeholders
* add chain icon to the local lists
* show creator in contract tab
* OP Superchain: local views for chains in the cluster
Fixes#2827
* highlight current chain in the title of local entities
* tokens nfts tab for address
* allow entity icon to be an image
* adjust cross-chain txs table and add placeholder to home page
* cross-chain txs for address
* fetch multichain config from microservice
* fix skeleton in token transfers table
* tests, pt.1
* wtf with gh
* verified contracts page
* change chain info in block and token page header
* fix some tests
* update styles for token icon with chain logo in header
* fix links and address internal txs tab
* update screenshots
* fix margins for tx info button and chain icon in tx tables
* add some tests
* fix screenshots
* add tabs to api-docs page and put swagger widgets in accordion
* move GraphQL widget into tab
* refactor API docs feature
* add swagger for user ops, bens and tac services
* update screenshots
* fix ts
* fix screenshot
* migrate to v2 API URLs for CSV exports
* don't ask user to solve recaptcha for first response; pass token in header as well
* hide "Try again" button if no bypass allowed
* fix tests
* context for storing subchain config and tx view for subchain
* address page and block page for subchain
* address aggregated page: local txs tab
* connect MultichainSelect to context
* home page placeholder
* refactor subchain select state
* envs for demo
* fix ts
* clear value for l2 review
* subchain widgets on home page
* csp policies
* sockets, duck and goose
* fix socket on subchain address page
* link builder for subchain views
* update home widget
* fix time increment
* enable tx interpretator and metadata service
* generate multichain config based on every chain app config
* Fix the multichain config to work in Docker
* multichain socket test
* rename subchain-id to subchain-slug path param
* refactoring
* update chain icons on entities
* home page: latest local txs
* latest cross-chain txs
* minor improvements
* renaming, pt. 1
* rename chain routes
* enable blockchain interaction
* add loading state to icon shield
* fix build
* fix tests
* update types package
* epochs page
* epoch rewards distribution
* epoch election rewards
* address epoch rewards
* block epoch tag
* add some tests
* adjust epoch details for L1 epochs
* support non-finalized epochs
* fixes after design review
* add truncation to block numbers on mobile
* update epochs table layout
* update timestamp hint
* fix bug with subheading of first epoch
* fixes of mobile view
* update screenshots
* operation lifecycle accordion
* operation entity
* adapt layout to mobile device
* basic operations view
* pass response data to operation details
* update types package
* tac operation status and links to tx on ton
* feature config, docs and operation badge
* add info to tx page
* add operations to search
* search input on operations page
* tests
* update tooltips and temporary fix of ts
* add InterFallback typeface with → glyph
* design and api updates
* support new API version
* add time format toggle
* add shield to entity icon
* minor fixes
* update screenshots
* clean up
* fix screenshot