Repository navigation
chore: promote staging to production - #569
Open
github-actions[bot] wants to merge 28 commits into
Open
github-actions[bot] wants to merge 28 commits into
github-actions[bot] wants to merge 28 commits into
Conversation
* fix(explorer): one console network source * refactor(explorer): read permits on dialog chain * refactor(explorer): fold appConstants into Chain * test(explorer): cover settlement chain guard * fix: getChain import * refactor(explorer): add useConsoleNetwork hook * docs(explorer): console network and chain rules * refactor(explorer): keep console network helpers with the console Move useConsoleNetwork next to the console components, make getNetworkFromChainId private to it so the AGENTS rule is enforced, and rename page.tsx's walletNetwork prop to consoleNetwork. --------- Co-authored-by: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com>
github-actions
Bot
requested review from
BravoNatalie and
silent-cipher
as code owners
October 15, 2026 13:54
* fix(explorer): open the authorize link's form prefilled A `?authorize=` link now opens the New session key form by itself, instead of a banner the owner had to click through. Every scope the link requests starts ticked; a ticked destructive scope shows a warning under it. The link stays in the URL, so a network or account switch that remounts the page reopens the form for the wallet now connected. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): keep link auto-open off manual forms and renewal scopes The link's auto-open no longer takes over a form the owner opened by hand while the listed key's status loaded; that attempt is spent instead. A renewal keeps the key's previous scopes apart from the link's: a destructive scope the key held that the link did not request is offered unticked, and the "Requested by the link" warning only marks scopes the link actually named. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): stop the authorize link replaying, and keep form edits - Drop the `?authorize=` link from the URL once its key's login confirms, so a reload no longer reopens the form for a key now authorized. - Drop an authorize link that cannot be used, like a broken revoke link, so its error does not come back on every reload. - Apply the link's prefill once per opening: a key that becomes known while the form is open no longer resets what the owner changed. - Renewal copy no longer claims every previous scope is checked; a held destructive scope the link did not request says it can be renewed. - Name the read-without-stripping hook (`useLinkSearchParams`), and move the page's URL tests to Testing Library. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): closing the link's form dismisses the link Closing a form that came from the `?authorize=` link drops the link from the URL, so a reload does not open it again. A wallet or network switch remounts the section without closing the form, so the link still survives that. The success-copy test now changes a checkbox after submitting, so it proves the copy reads what was sent, not the live form. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* fix(explorer): open the authorize link's form prefilled A `?authorize=` link now opens the New session key form by itself, instead of a banner the owner had to click through. Every scope the link requests starts ticked; a ticked destructive scope shows a warning under it. The link stays in the URL, so a network or account switch that remounts the page reopens the form for the wallet now connected. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(explorer): prefill the key name from an authorize link An `?authorize=` link may carry `name=`, as the `filecoin` CLI sends it. The New session key form prefills it in the editable Name field, cleaned like any other key name. A blank or unusable name is treated as none, never as a broken link, and a key already in the list keeps its own name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): keep link auto-open off manual forms and renewal scopes The link's auto-open no longer takes over a form the owner opened by hand while the listed key's status loaded; that attempt is spent instead. A renewal keeps the key's previous scopes apart from the link's: a destructive scope the key held that the link did not request is offered unticked, and the "Requested by the link" warning only marks scopes the link actually named. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): stop the authorize link replaying, and keep form edits - Drop the `?authorize=` link from the URL once its key's login confirms, so a reload no longer reopens the form for a key now authorized. - Drop an authorize link that cannot be used, like a broken revoke link, so its error does not come back on every reload. - Apply the link's prefill once per opening: a key that becomes known while the form is open no longer resets what the owner changed. - Renewal copy no longer claims every previous scope is checked; a held destructive scope the link did not request says it can be renewed. - Name the read-without-stripping hook (`useLinkSearchParams`), and move the page's URL tests to Testing Library. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(explorer): cover the link's name through the review fixes A broken authorize link drops its `name` with it, and a name the owner typed survives the key becoming known while the form is open. The test's Input mock hands onChange the value, like the real component. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): closing the link's form dismisses the link Closing a form that came from the `?authorize=` link drops the link from the URL, so a reload does not open it again. A wallet or network switch remounts the section without closing the form, so the link still survives that. The success-copy test now changes a checkbox after submitting, so it proves the copy reads what was sent, not the live form. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): fill in the link's name for an unnamed existing key An unnamed key has name "", which `!= null` treated as a name to keep, so re-authorizing a key the CLI created ignored the link's `name`. An empty name now counts as none and the link's suggestion fills in. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…nk (#572) * fix(explorer): open the authorize link's form prefilled A `?authorize=` link now opens the New session key form by itself, instead of a banner the owner had to click through. Every scope the link requests starts ticked; a ticked destructive scope shows a warning under it. The link stays in the URL, so a network or account switch that remounts the page reopens the form for the wallet now connected. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(explorer): prefill the key name from an authorize link An `?authorize=` link may carry `name=`, as the `filecoin` CLI sends it. The New session key form prefills it in the editable Name field, cleaned like any other key name. A blank or unusable name is treated as none, never as a broken link, and a key already in the list keeps its own name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): keep link auto-open off manual forms and renewal scopes The link's auto-open no longer takes over a form the owner opened by hand while the listed key's status loaded; that attempt is spent instead. A renewal keeps the key's previous scopes apart from the link's: a destructive scope the key held that the link did not request is offered unticked, and the "Requested by the link" warning only marks scopes the link actually named. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(explorer): set session key expiry in days, prefilled from the link The create form's expiry is one number of days (default 30, any whole number from 1 up to the last date a JS Date holds) in place of the 7/30/90 presets and the custom date picker; it shows the date the key stops working. An `?authorize=` link's `days=` prefills it, and like `name`, unusable days are ignored rather than refusing the link. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): stop the authorize link replaying, and keep form edits - Drop the `?authorize=` link from the URL once its key's login confirms, so a reload no longer reopens the form for a key now authorized. - Drop an authorize link that cannot be used, like a broken revoke link, so its error does not come back on every reload. - Apply the link's prefill once per opening: a key that becomes known while the form is open no longer resets what the owner changed. - Renewal copy no longer claims every previous scope is checked; a held destructive scope the link did not request says it can be renewed. - Name the read-without-stripping hook (`useLinkSearchParams`), and move the page's URL tests to Testing Library. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(explorer): cover the link's name through the review fixes A broken authorize link drops its `name` with it, and a name the owner typed survives the key becoming known while the form is open. The test's Input mock hands onChange the value, like the real component. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): resolve the expiry once per render, take days as text The shown date and the Authorize check now use one resolved expiry per render; submitting still reads the clock fresh. The days field is a text input with a numeric keyboard: a number input took `1e2` or `7.0` as valid while the form refused them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): closing the link's form dismisses the link Closing a form that came from the `?authorize=` link drops the link from the URL, so a reload does not open it again. A wallet or network switch remounts the section without closing the form, so the link still survives that. The success-copy test now changes a checkbox after submitting, so it proves the copy reads what was sent, not the live form. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): fill in the link's name for an unnamed existing key An unnamed key has name "", which `!= null` treated as a name to keep, so re-authorizing a key the CLI created ignored the link's `name`. An empty name now counts as none and the link's suggestion fills in. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): tie the days field to its validation message The days field sets aria-invalid when the days cannot be used and points aria-describedby at the line under it, which says the expiry date or why it is refused. It is a native input: the library Input overwrites both attributes outside a Field. The e2e spec checks them in a real browser. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): cap the days an authorize link may suggest at 365 A link's `days=` is capped at 365, matching the `filecoin` CLI's `--days`, so a link alone cannot ask for a longer expiry. A link asking for more prefills 365; the owner can still type a longer expiry in the form. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…574) * feat(explorer): open Add Service from an approval-only funding link A funding link no longer needs a deposit: `/console?operator=fwss&network=<net>` opens Add Service with Warm Storage filled in and the deposit empty, so an account that only needs the approval gets it in one step. A `deposit` the link names but that cannot be read (empty, zero, junk) still refuses the whole link. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(explorer): accept a curated Warm Storage pick in the approval-link e2e Real mode's subgraph lists Warm Storage, so the dialog selects it by name and links its contract instead of filling the custom-address field. The spec now accepts either, and still requires an empty deposit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): don't reopen an approval Warm Storage already has An approval-only funding link now reads the account's Warm Storage approval first. If it is already approved, the console says so instead of opening Add a Service, whose unlimited defaults would overwrite the owner's own limits. A failed read still opens the dialog for review. The e2e fake chain answers `operatorApprovals`, approved only for the operators a spec lists. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): settle the approval check once, without retries An approval-only link now decides from the first answer for this wallet and network and stops reading: approving through the dialog refetches the read, which used to flip the page to "already approved" right after the owner approved. A failed read no longer retries, since it opens the dialog anyway. New Testing Library cases cover reading, approved, not approved, a failed read and the refetch after approving. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* feat(explorer): one /console/setup page for CLI links CLI links for a session key, the Warm Storage approval and a deposit used to land on two pages: /console/session-keys?authorize= and /console?deposit=. They now open one consent-style page, /console/setup, that lists what the link asks for as steps with live status read from the chain: authorize the key, approve Warm Storage, fund Filecoin Pay. - The link decides what counts as done: `approval=unlimited` requires allowances without limits, `deposit` is an amount to add on top, and `balance` is the target the funds step checks. - Approving deposits in the same transaction when the wallet holds the shortfall; otherwise the funds step offers Deposit or Add funds. - The old links redirect in proxy.ts; `?revoke=` stays on Session keys. - The console shell moves to app/console/_shell, shared by both route groups; the setup group drops the sidebar. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): address setup page review feedback - Add a Service ignores a deposit amount left in a field that `withoutDeposit` hid while the form was open. - A `balance` target counts the account's debt: a deposit settles it before any of it becomes available. - A `deposit` link offers nothing until its starting balance is read, so a deposit sent before then is not asked for again. - The setup steps remount when the link changes, so one link's baseline and reached funds do not carry over to the next. The e2e specs that open deposit links now answer the subgraph as an empty account (e2e/subgraph.ts), since an unread balance no longer offers a deposit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): read setup funds from the chain, retry an unread approval The setup page decides what to offer from live chain state, but read Filecoin Pay from the subgraph. While the subgraph lagged, an approval that also deposited showed "Deposit 2 USDFC" again, and the Deposit button stayed clickable after its deposit landed. - One batched read at one block now gives the steps Filecoin Pay's `accounts(USDFC, owner)`, the wallet's USDFC and the epoch; available balance and debt are rolled forward from it (matches the contract's getAccountInfoIfSettled). A deposit counts as soon as its receipt lands. - A `deposit` link measures the account's `funds` from where they stood when the page opened. A rail settled during the visit can only make it ask for more, never count a deposit that did not happen. - The subgraph now only fills in the Deposit dialog's token picker, so the e2e empty-subgraph helper is gone. - An approval that could not be read offers Retry instead of Add a Service, and the funds step waits for it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(explorer): refresh batched contract reads after a receipt invalidateAccountQueries refreshed ["readContract"], but wagmi keys batched reads ["readContracts", …] and TanStack matches whole key elements. The setup page's Filecoin Pay and wallet USDFC read waited up to one 15s poll after a receipt, so "Approve and deposit" or "Deposit" could offer the same deposit again in the meantime. The key-grant and session-key status reads now get the receipt refresh too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* chore(explorer): drop dead console code and logs * refactor(explorer): check Privy app at build * fix(explorer): explain blocked deposit and withdraw * refactor(explorer): simplify deposit and withdraw
Treat utm_source=filecoin-cli as a product label, the same as filecoin-pin, by checking against a set of known CLI sources. Refs #576 Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* chore(subgraph): sync abis from @filoz/synapse-core * chore: address pr review comments * chore: install deps * fix: restore staging lockfile
11 tasks
* feat(explorer): console data sets table * fix: correct network and monthly spend calculation * fix(explorer): hide deleted data sets * refactor(explorer): simplify data sets table * fix(explorer): address data sets review
* fix(explorer): price FIL top-up from Sushi pool * refactor(explorer): simplify FIL top-up pricing
…565) Since dialogs moved to Headless UI (#548), real Privy marks the page behind its modal aria-hidden and inert, so role queries miss the console dialog while the wallet is open. Two cli-newcomer specs failed only in real mode for that reason; the flow itself works (the key registers and the console is usable after All Done). Query with includeHidden.
…ze (#609) A filecoin-pin login link that asks for encrypted uploads now carries `pubkey` (the session key's Keysmith key-agreement key) and `pubkeysig` (the session key's EIP-191 signature over it). Setup adds a "Give this key access to encrypted uploads" step after the session key step. - The link parser reads and validates both params. `pubkey` must be `0x04` + 128 lowercase hex and comes with `authorize`. `pubkeysig` must recover to the session key before any wallet request. - The step picks the group key using filecoin-pin's rule: group the owner's live data sets by `foc/ks`, skip inconsistent or non-canonical groups, and take the group with the lowest data set id. If there is none, it uses the default id. - The step asks the wallet to sign and returns an `fgr1_` Grant, wrapped to the session key with @filoz/keysmith. The Grant is shown read-only with a copy button. It is never stored or sent, and setup is complete only once it is made. - The data set scan reads only liveness and metadata, once per page load. - Problems with the group key show before the session key is authorized. - The wallet error helpers move from the Squid module to `src/utils/walletErrors.ts`. Adds @filoz/keysmith ^0.1.0.
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
* fix(explorer): clarify wallet setup button for new users * fix(explorer): use inclusive email and Google login copy
* feat(explorer): stale data set triage queue * fix: ask mute time + resolve client side queue pagination * feat(notification-service): keep mute data sets * refactor: extract ExpiryPicker to reuse * fix(explorer): clarify stale queue cap note * fix(explorer): hide Keep when mutes fail to load * fix(explorer): explain a rejected mute date * test(notification-service): pin 367-day mute cap * refactor(explorer): simplify stale data set queue * refactor: share the wallet query schema * fix(explorer): hide Keep off a Filecoin chain * refactor(explorer): share the notifications client * perf(notification-service): index active mutes * test(explorer): type the notifications fetch mock * fix(explorer): round stale spend with shared helper * fix(explorer): read mutes off a Filecoin chain * refactor(explorer): fold ExpiryPicker into dialog * refactor(explorer): always watch the stale epoch
* feat: inactive dataset email * refactor: simplify inactivity email * fix: match email spend and test deep link
* fix: clarify the group key step copy * style: widen setup step descriptions and recolour statuses
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes
Warning
This promotion includes a subgraph release. Merging will apply the
prodtag on Goldsky and switch pay.filecoin.cloud to the new subgraph version.Before merging, confirm:
Auto-generated — merge when staging is validated.