Conversation
* fix: use remaining epochs threshold for usage warning * fixes
* fix: avoid false 404 redirects in deeploy flows * fixes
* feat: add tunnel setup alternatives for app params * refactor: compact tunnel selector with custom option * fix: restore missing cloudflare secrets helper text * fixes * fix: resolve tunnel dropdown select typing * style: align tunnel refresh control with selector * fix * fix
* feat: add target node info tooltip on job forms * feat: add node info tooltip to spare nodes and color status icon * refactor: dedupe node info tooltip logic * fix: show unrecognized state instead of raw node info errors * feat: prefetch node details on initial render * fixes * refactor: key node info lookup state by address * fix: address unresolved PR review feedback on node info UX * Update src/shared/jobs/target-nodes/nodeInfo.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix(auth): redirect to intended page after login * fix(auth): harden next redirect validation * fix(ci): avoid suspense bailout in auth redirects * fix
* fix: confirm before leaving dirty job forms * fix: address PR review comments for dirty form guard
There was a problem hiding this comment.
Pull request overview
This pull request implements significant feature enhancements and improvements to the Deeploy dApp, primarily focusing on node address format updates, node information lookup, tunnel management, and unsaved changes protection.
Changes:
- Updated R1 address format from
0xai${string}to0xai_${string}with corresponding regex validation - Added node information lookup and status display for target/spare nodes with real-time validation
- Implemented comprehensive tunnel selector with existing tunnel reuse capability in job deployment flows
- Added unsaved changes guard to prevent accidental navigation away from forms with unsaved data
- Enhanced job loading states with better error handling and missing job detection
- Implemented login redirect functionality to return users to their requested path after authentication
- Added OpenBao service (version 2.5.0) as a new deployable service option
- Enhanced usage warning threshold logic to differentiate between devnet (15 days) and other environments (15 epochs)
Reviewed changes
Copilot reviewed 27 out of 28 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| src/typedefs/blockchain.ts | Updated R1Address type definition to use 0xai_ prefix format |
| src/shared/projects/Usage.tsx | Updated warning threshold calculation based on environment (devnet vs others) |
| src/shared/jobs/target-nodes/nodeInfo.ts | New hook implementing node information lookup with abort controller management |
| src/shared/jobs/target-nodes/TargetNodesSection.tsx | Integrated node info lookup with status display and improved clipboard functionality |
| src/shared/jobs/target-nodes/SpareNodesSection.tsx | Added node info lookup for spare nodes with updated placeholder |
| src/shared/jobs/target-nodes/NodeInfoStatusPopover.tsx | New component displaying node status, alias, and online state in a popover |
| src/lib/hooks/useUnsavedChangesGuard.ts | New hook preventing navigation away from dirty forms |
| src/lib/hooks/useRunningJob.ts | Enhanced with detailed status tracking and error state management |
| src/lib/api/oracles.tsx | Updated to support both R1 and Ethereum addresses with proper query parameters |
| src/data/services.ts | Added OpenBao service configuration |
| src/components/job/JobBreadcrumbs.tsx | Added job ID display alongside alias |
| src/components/edit-job/JobEditFormWrapper.tsx | Integrated unsaved changes guard and exposed dirty state |
| src/components/draft/DraftOverview.tsx | Added callbacks for delete operation lifecycle management |
| src/components/create-job/steps/deployment/ServiceDeployment.tsx | Refactored tunnel generation to return result for tunnel selector |
| src/components/create-job/steps/deployment/GenericDeployment.tsx | Added tunnel generation support for generic deployments |
| src/components/create-job/sections/AppParametersSection.tsx | Implemented tunnel selector with existing tunnel fetching and selection |
| src/components/create-job/JobFormWrapper.tsx | Integrated unsaved changes guard for job creation flow |
| src/components/create-job/JobFormHeader.tsx | Added cancel callback support |
| public/services/openbao-color.svg | Added OpenBao service logo |
| app/(public)/login/page.tsx | Implemented secure redirect logic after authentication |
| app/(protected)/protected-layout.tsx | Added current path to login redirect for post-auth navigation |
| app/(protected)/deeploys/project-draft/[projectHash]/page.tsx | Added redirect suppression logic to prevent race conditions during deletion |
| app/(protected)/deeploys/job/[jobId]/page.tsx | Enhanced error handling with detailed error display |
| app/(protected)/deeploys/job/[jobId]/extend/page.tsx | Added error state handling for missing/failed job loads |
| app/(protected)/deeploys/job/[jobId]/edit/page.tsx | Integrated unsaved changes guard with proper job error handling |
| .github/workflows/pr_lint_build.yml | Added CI workflow for linting and building on pull requests |
| .codex/environments/environment.toml | Added Codex environment configuration |
| package.json | Version bump from 1.1.5 to 1.5.2 |
Comments suppressed due to low confidence (1)
src/shared/projects/Usage.tsx:2
- There are extra spaces in the import statement. The import should be
import { environment }instead ofimport { environment }.
import { environment } from '@lib/config';
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 30 out of 32 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (6)
src/components/create-job/sections/AppParametersSection.tsx:209
- When tunneling is toggled off (
value === BOOLEAN_TYPES[1]), the form clearstunnelingTokenbut does not clear the associatedtunnelURL(viaonTunnelUrlChange). This can leave a staletunnelURLin the form data, andJobFormWrapperpersistsdata.tunnelURLfor service jobs even if tunneling is later disabled. Consider callingonTunnelUrlChange?.(undefined)(and/or explicitly clearing thetunnelURLfield) in this branch so the submitted draft doesn't keep an outdated tunnel link.
if (value === BOOLEAN_TYPES[1]) {
setSelectedTunnelId(CUSTOM_TUNNEL_OPTION);
setValue(`${baseName}.tunnelingToken`, undefined);
clearErrors(`${baseName}.tunnelingToken`);
}
src/shared/projects/Usage.tsx:2
- There is an extra space in the named import (
import { environment } ...). This looks like a formatting typo and can cause lint/style violations; please format it as a normal named import.
src/data/TODO_SERVICES.md:27 - The
mispservice image is pinned to thelatesttag, which is a mutable reference and creates a supply‑chain risk: if the upstream image forlatestis compromised or changed unexpectedly, your deployment will automatically run untrusted code with access to your database and other secrets. To reduce this risk, pin the image to a specific version tag or immutable digest (e.g., a fixed release version) and update it explicitly as part of your deployment process.
image: ghcr.io/misp/misp-core:latest # Or misp/misp-web:latest
src/data/TODO_SERVICES.md:138
- The
misp-coreservice image defaults to thelatesttag viaCORE_RUNNING_TAG, which is a mutable reference and introduces a supply‑chain risk: if thelatestimage is ever compromised or replaced upstream, your deployment will silently pull and run that code with access to MISP data and credentials. Prefer pinning this to a specific, vetted version tag or immutable image digest and updating it through a controlled release process.
image: ${REGISTRY_MIRROR_URL:-}ghcr.io/misp/misp-docker/misp-core:${CORE_RUNNING_TAG:-latest}
src/data/TODO_SERVICES.md:372
- The
misp-modulesservice image is configured to use${MODULES_RUNNING_TAG:-latest}, so by default it pulls the mutablelatesttag, which creates a supply‑chain risk if that tag is compromised or changed without your control. To harden deployments, pin this image to a specific, trusted release tag or immutable digest and only update it deliberately as part of your release process.
image: ${REGISTRY_MIRROR_URL:-}ghcr.io/misp/misp-docker/misp-modules:${MODULES_RUNNING_TAG:-latest}
src/data/TODO_SERVICES.md:398
- The
misp-guardservice image also defaults to${GUARD_RUNNING_TAG:-latest}, meaning it will pull the mutablelatesttag and can silently run untrusted code if that tag is ever compromised or replaced upstream. Pin this image to a specific, vetted version tag or immutable digest to avoid unexpected image changes and reduce supply‑chain compromise risk.
image: ${REGISTRY_MIRROR_URL:-}ghcr.io/misp/misp-docker/misp-guard:${GUARD_RUNNING_TAG:-latest}
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
No description provided.