-
Notifications
You must be signed in to change notification settings - Fork 619
Make RPC optional in chain infrastructure checkout #7867
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Make RPC optional in chain infrastructure checkout #7867
Conversation
|
WalkthroughMakes RPC optional in the deploy flow with URL-persisted state, updates selection/pricing/checkout logic, adds a warning modal when proceeding without RPC (which logs an analytics event), adds an analytics reporter, and introduces an Changes
Sequence Diagram(s)sequenceDiagram
participant U as User
participant F as DeployInfrastructureForm
participant M as RPC Omission Modal
participant A as Analytics
participant C as Checkout/Router
U->>F: Click "Proceed to Checkout"
alt No addons selected
F-->>U: Button disabled
else Addons selected AND includeRPC true
F->>C: Redirect with SKUs (including RPC)
else Addons selected AND includeRPC false
F->>M: Open warning dialog
U->>M: Confirm proceed
M->>A: reportChainInfraRpcOmissionAgreed(props)
M->>F: Confirmed
F->>C: Redirect with SKUs (RPC omitted)
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~30 minutes Tip 🔌 Remote MCP (Model Context Protocol) integration is now available!Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats. ✨ Finishing Touches
🧪 Generate unit tests
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
How to use the Graphite Merge QueueAdd either label to this PR to merge it via the merge queue:
You must have a Graphite account in order to use the merge queue. Sign up using this link. An organization admin has required the Graphite Merge Queue in this repository. Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue. This stack of pull requests is managed by Graphite. Learn more about stacking. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #7867 +/- ##
=======================================
Coverage 56.54% 56.54%
=======================================
Files 904 904
Lines 58586 58586
Branches 4140 4140
=======================================
Hits 33126 33126
Misses 25354 25354
Partials 106 106
*This pull request uses carry forward flags. Click here to find out more. 🚀 New features to boost your workflow:
|
size-limit report 📦
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (5)
apps/dashboard/src/@/analytics/report.ts (1)
548-549: Nit: consider a clearer, more action-oriented event nameTo align with our common “ ” style (e.g., “contract deployed”, “upsell clicked”), consider “chain infra checkout proceeded without rpc” or “chain infra checkout rpc omission confirmed”. This tends to read more naturally in funnels.
Apply this minimal change if you prefer “confirmed”:
- posthog.capture("chain infra checkout rpc omission agreed", properties); + posthog.capture("chain infra checkout rpc omission confirmed", properties);apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/_components/deploy-infrastructure-form.client.tsx (4)
3-17: Use dashboard UI primitives for DialogDescription instead of Radix direct importIn dashboard apps, UI primitives should come from
@/components/ui/*. ImportingDialogDescriptiondirectly from@radix-ui/react-dialogbreaks that convention and risks styling/behavior divergence.Apply:
-import { DialogDescription } from "@radix-ui/react-dialog"; ... -import { - Dialog, - DialogContent, - DialogFooter, - DialogHeader, - DialogTitle, -} from "@/components/ui/dialog"; +import { + Dialog, + DialogContent, + DialogFooter, + DialogHeader, + DialogTitle, + DialogDescription, +} from "@/components/ui/dialog";
222-230: Gate checkout when addons selected without RPC — UX and logic make senseThis matches the new policy by warning before allowing checkout without RPC. Nice.
Consider optionally reporting a separate “rpc omission modal shown” event to measure how often users reach the warning vs. confirm it.
240-257: Minor UX suggestion: explicitly label RPC as optional in the cardThe comment mentions “RPC (now optional)”, but the visible label is still just “RPC”. If you want the UI to reinforce this change, update the label or add an “Optional” badge for clarity.
Example tweak:
- label={SERVICE_CONFIG.rpc.label} + label={`${SERVICE_CONFIG.rpc.label} (optional)`}Or render a small “Optional” badge next to the label similar to “Always Included”.
396-444: Modal copy and analytics on confirm look good; add a Cancel for clearer affordanceThe warning is clear and the confirm button correctly reports
reportChainInfraRpcOmissionAgreedbefore proceeding.Add a secondary “Cancel” button to improve the escape hatch and make the choice explicit:
<DialogFooter className="gap-2"> + <Button + variant="secondary" + onClick={() => setShowRpcWarning(false)} + > + Cancel + </Button> <Button onClick={() => { reportChainInfraRpcOmissionAgreed({ chainId, frequency: frequency === "annual" ? "annual" : "monthly", includeInsight, includeAccountAbstraction: includeAA, }); setShowRpcWarning(false); proceedToCheckout(); }} variant="destructive" > I understand — proceed without RPC </Button> </DialogFooter>
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (3)
apps/dashboard/src/@/analytics/report.ts(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/_components/deploy-infrastructure-form.client.tsx(9 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/search-params.ts(1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
**/*.{ts,tsx}
📄 CodeRabbit Inference Engine (CLAUDE.md)
**/*.{ts,tsx}: Write idiomatic TypeScript with explicit function declarations and return types
Limit each file to one stateless, single-responsibility function for clarity
Re-use shared types from@/typesor localtypes.tsbarrels
Prefer type aliases over interface except for nominal shapes
Avoidanyandunknownunless unavoidable; narrow generics when possible
Choose composition over inheritance; leverage utility types (Partial,Pick, etc.)
Comment only ambiguous logic; avoid restating TypeScript in prose
Files:
apps/dashboard/src/@/analytics/report.tsapps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/search-params.tsapps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/_components/deploy-infrastructure-form.client.tsx
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit Inference Engine (CLAUDE.md)
Load heavy dependencies inside async paths to keep initial bundle lean (lazy loading)
Files:
apps/dashboard/src/@/analytics/report.tsapps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/search-params.tsapps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/_components/deploy-infrastructure-form.client.tsx
apps/{dashboard,playground-web}/**/*.{ts,tsx}
📄 CodeRabbit Inference Engine (CLAUDE.md)
apps/{dashboard,playground-web}/**/*.{ts,tsx}: Import UI primitives from@/components/ui/*(Button, Input, Select, Tabs, Card, Sidebar, Badge, Separator) in dashboard and playground apps
UseNavLinkfor internal navigation with automatic active states in dashboard and playground apps
Use Tailwind CSS only – no inline styles or CSS modules
Usecn()from@/lib/utilsfor conditional class logic
Use design system tokens (e.g.,bg-card,border-border,text-muted-foreground)
Server Components (Node edge): Start files withimport "server-only";
Client Components (browser): Begin files with'use client';
Always callgetAuthToken()to retrieve JWT from cookies on server side
UseAuthorization: Bearerheader – never embed tokens in URLs
Return typed results (e.g.,Project[],User[]) – avoidany
Wrap client-side data fetching calls in React Query (@tanstack/react-query)
Use descriptive, stablequeryKeysfor React Query cache hits
ConfigurestaleTime/cacheTimein React Query based on freshness (default ≥ 60s)
Keep tokens secret via internal API routes or server actions
Never importposthog-jsin server components
Files:
apps/dashboard/src/@/analytics/report.tsapps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/search-params.tsapps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/_components/deploy-infrastructure-form.client.tsx
🧠 Learnings (6)
📚 Learning: 2025-07-18T19:19:55.613Z
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-18T19:19:55.613Z
Learning: Applies to src/@/analytics/report.ts : Review `src/@/analytics/report.ts` before adding analytics events to check for duplicates
Applied to files:
apps/dashboard/src/@/analytics/report.ts
📚 Learning: 2025-07-18T19:19:55.613Z
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-18T19:19:55.613Z
Learning: Applies to src/@/analytics/report.ts : Analytics event name: human-readable `<subject> <verb>` (e.g., "contract deployed"); function: `report<Subject><Verb>` (PascalCase)
Applied to files:
apps/dashboard/src/@/analytics/report.ts
📚 Learning: 2025-07-18T19:20:32.530Z
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-07-18T19:20:32.530Z
Learning: Applies to dashboard/src/@/analytics/report.ts : Typed properties: accept a single `properties` object and pass it unchanged to `posthog.capture`.
Applied to files:
apps/dashboard/src/@/analytics/report.ts
📚 Learning: 2025-07-18T19:20:32.530Z
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-07-18T19:20:32.530Z
Learning: Applies to dashboard/src/@/analytics/report.ts : Mandatory JSDoc: explain Why the event exists and Who owns it (`username`).
Applied to files:
apps/dashboard/src/@/analytics/report.ts
📚 Learning: 2025-07-18T19:20:32.530Z
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-07-18T19:20:32.530Z
Learning: Applies to dashboard/src/@/analytics/report.ts : Reporting helper: `report<Subject><Verb>` (PascalCase); all live in `src/@/analytics/report.ts`.
Applied to files:
apps/dashboard/src/@/analytics/report.ts
📚 Learning: 2025-07-18T19:20:32.530Z
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-07-18T19:20:32.530Z
Learning: Applies to dashboard/**/*client.tsx : Interactive UI that relies on hooks (`useState`, `useEffect`, React Query, wallet hooks).
Applied to files:
apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/_components/deploy-infrastructure-form.client.tsx
🧬 Code Graph Analysis (1)
apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/_components/deploy-infrastructure-form.client.tsx (3)
apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/search-params.ts (1)
searchParams(3-7)apps/dashboard/src/@/types/billing.ts (1)
ChainInfraSKU(18-21)apps/dashboard/src/@/analytics/report.ts (1)
reportChainInfraRpcOmissionAgreed(542-549)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: Size
- GitHub Check: Analyze (javascript)
🔇 Additional comments (10)
apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/search-params.ts (1)
6-7: LGTM: Added rpc query param with safe defaultAdding
rpcas a"on" | "off"enum with default"on"integrates cleanly with nuqs and keeps existing behavior by default. No further concerns here.apps/dashboard/src/@/analytics/report.ts (2)
529-550: Event helper looks consistent with our analytics conventions
- Function name follows
report<Subject><Verb>pattern.- Event name is human-readable.
- Typed single
propertiesobject is forwarded unchanged toposthog.capture.- JSDoc includes “Why” and ownership.
No functional issues spotted.
529-550: No duplicate analytics event or helper found
- Searched all
.ts/.tsxfiles underapps/forreportChainInfraRpcOmissionAgreedor"chain infra checkout rpc omission"; only occurrences are:
- Definition in
apps/dashboard/src/@/analytics/report.ts- Single import and usage in
deploy-infrastructure-form.client.tsx- No other helpers or events with the same or similar name exist.
apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/_components/deploy-infrastructure-form.client.tsx (7)
56-58: RPC now optional in config — good changeSwitching
requiredtofalsefor RPC aligns the config with the new optional flow.
92-96: URL-backed rpcParam state is correctly wiredPersisting the RPC toggle via
useQueryState("rpc")with default “on” is consistent with the newsearchParamsand keeps state shareable/bookmarkable.
103-112: Selection flow correctly respects optional RPC
includeRPCdrives both selected list and pricing viaselectedOrder. This cleanly integrates with Insight/AA flags.
127-134: Selected services map includes rpc flag — consistent with pricing/totalsGood use of a single source of truth for the totals computation.
191-191: State for RPC warning modalModal state is localized and simple — no issues here.
193-221: Checkout URL creation and SKU composition look correct
- SKUs include RPC only when selected.
- Error/success paths are handled with toast and redirect.
- Wrapped in
startTransitionto avoid blocking UI.No functional issues spotted.
378-384: Disabling checkout when nothing is selected is correctPrevents empty carts and aligns with SKU-building assumptions.
05485d3 to
cea80d6
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🔭 Outside diff range comments (1)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/alerts/components/EngineDeleteAlertModal.tsx (1)
26-29: Copy inconsistency: “Delete Alert” vs “Delete Webhook” and webhook mentionTitle says “Delete Alert” but the description references “webhook” and the button says “Delete Webhook”. This is user-facing and confusing.
Apply this diff to align terminology with “Alert”:
- <DialogDescription> - You will no longer receive notifications from this webhook. - </DialogDescription> + <DialogDescription> + You will no longer receive notifications from this alert. + </DialogDescription> @@ - <Button + <Button className="min-w-28 gap-2" onClick={props.onConfirm} variant="destructive" > {props.isPending && <Spinner className="size-4" />} - Delete Webhook + Delete Alert </Button>Also applies to: 41-47
🧹 Nitpick comments (1)
apps/dashboard/src/@/components/project/create-project-modal/index.tsx (1)
1-9: Consider adding 'use client' — this file uses React hooks and React QueryThis module uses useState, react-hook-form, React Query, and toasts, so it’s intended to run on the client. While it will work when imported by a client component, adding the directive makes intent explicit and avoids accidental server import regressions.
Apply at the top of the file:
+'use client'; + import { zodResolver } from "@hookform/resolvers/zod"; import { useMutation } from "@tanstack/react-query"; import type { ProjectService } from "@thirdweb-dev/service-utils";
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (6)
apps/dashboard/src/@/analytics/report.ts(1 hunks)apps/dashboard/src/@/components/project/create-project-modal/index.tsx(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/_components/deploy-infrastructure-form.client.tsx(9 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/search-params.ts(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/alerts/components/EngineDeleteAlertModal.tsx(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/delete-webhook-modal.tsx(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/delete-webhook-modal.tsx
🚧 Files skipped from review as they are similar to previous changes (2)
- apps/dashboard/src/@/analytics/report.ts
- apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/_components/deploy-infrastructure-form.client.tsx
🧰 Additional context used
📓 Path-based instructions (3)
**/*.{ts,tsx}
📄 CodeRabbit Inference Engine (CLAUDE.md)
**/*.{ts,tsx}: Write idiomatic TypeScript with explicit function declarations and return types
Limit each file to one stateless, single-responsibility function for clarity
Re-use shared types from@/typesor localtypes.tsbarrels
Prefer type aliases over interface except for nominal shapes
Avoidanyandunknownunless unavoidable; narrow generics when possible
Choose composition over inheritance; leverage utility types (Partial,Pick, etc.)
Comment only ambiguous logic; avoid restating TypeScript in prose
Files:
apps/dashboard/src/@/components/project/create-project-modal/index.tsxapps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/alerts/components/EngineDeleteAlertModal.tsxapps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/search-params.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit Inference Engine (CLAUDE.md)
Load heavy dependencies inside async paths to keep initial bundle lean (lazy loading)
Files:
apps/dashboard/src/@/components/project/create-project-modal/index.tsxapps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/alerts/components/EngineDeleteAlertModal.tsxapps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/search-params.ts
apps/{dashboard,playground-web}/**/*.{ts,tsx}
📄 CodeRabbit Inference Engine (CLAUDE.md)
apps/{dashboard,playground-web}/**/*.{ts,tsx}: Import UI primitives from@/components/ui/*(Button, Input, Select, Tabs, Card, Sidebar, Badge, Separator) in dashboard and playground apps
UseNavLinkfor internal navigation with automatic active states in dashboard and playground apps
Use Tailwind CSS only – no inline styles or CSS modules
Usecn()from@/lib/utilsfor conditional class logic
Use design system tokens (e.g.,bg-card,border-border,text-muted-foreground)
Server Components (Node edge): Start files withimport "server-only";
Client Components (browser): Begin files with'use client';
Always callgetAuthToken()to retrieve JWT from cookies on server side
UseAuthorization: Bearerheader – never embed tokens in URLs
Return typed results (e.g.,Project[],User[]) – avoidany
Wrap client-side data fetching calls in React Query (@tanstack/react-query)
Use descriptive, stablequeryKeysfor React Query cache hits
ConfigurestaleTime/cacheTimein React Query based on freshness (default ≥ 60s)
Keep tokens secret via internal API routes or server actions
Never importposthog-jsin server components
Files:
apps/dashboard/src/@/components/project/create-project-modal/index.tsxapps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/alerts/components/EngineDeleteAlertModal.tsxapps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/search-params.ts
🧠 Learnings (3)
📚 Learning: 2025-07-18T19:19:55.613Z
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-18T19:19:55.613Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{ts,tsx} : Import UI primitives from `@/components/ui/*` (Button, Input, Select, Tabs, Card, Sidebar, Badge, Separator) in dashboard and playground apps
Applied to files:
apps/dashboard/src/@/components/project/create-project-modal/index.tsx
📚 Learning: 2025-07-18T19:20:32.530Z
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-07-18T19:20:32.530Z
Learning: Applies to dashboard/**/*.{tsx,jsx} : Always import from the central UI library under `@/components/ui/*` – e.g. `import { Button } from "@/components/ui/button"`.
Applied to files:
apps/dashboard/src/@/components/project/create-project-modal/index.tsx
📚 Learning: 2025-07-18T19:20:32.530Z
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-07-18T19:20:32.530Z
Learning: Applies to dashboard/**/*.{tsx,jsx} : Reuse core UI primitives; avoid re-implementing buttons, cards, modals.
Applied to files:
apps/dashboard/src/@/components/project/create-project-modal/index.tsx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
- GitHub Check: E2E Tests (pnpm, esbuild)
- GitHub Check: Size
- GitHub Check: E2E Tests (pnpm, webpack)
- GitHub Check: Unit Tests
- GitHub Check: E2E Tests (pnpm, vite)
- GitHub Check: Build Packages
- GitHub Check: Lint Packages
- GitHub Check: Analyze (javascript)
🔇 Additional comments (4)
apps/dashboard/src/@/components/project/create-project-modal/index.tsx (1)
16-24: DialogDescription moved to local UI wrapper — aligned with dashboard UI guidelinesGood move importing DialogDescription from "@/components/ui/dialog" alongside the other dialog primitives. This keeps Dialog usage consistent and themeable via the shared wrapper.
apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/infrastructure/deploy/search-params.ts (2)
3-7: Add rpc search param — defaults to "on" with strict enum parsingThe on/off enum with a sensible "on" default matches the new optional-RPC UX and keeps URLs stable. Looks good.
1-7: No client-side imports detected for the new server‐only parser
- Ran a repo-wide search for imports of
apps/dashboard/src/app/.../infrastructure/deploy/search-params.tsin.ts/.tsxfiles: none found.- The only imports from
"nuqs/server"appear in App Routerpage.tsxfiles (server components by default) and useimport type(erased at runtime).- No client components pull in this module, so there’s no bundling risk.
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/alerts/components/EngineDeleteAlertModal.tsx (1)
1-9: DialogDescription import consolidated to local UI wrapperConsistent with the design system usage in dashboard — good change.

TL;DR
Made RPC optional in the Chain Infrastructure checkout flow, with a warning dialog when proceeding without it.
What changed?
rpcto track the RPC selection stateHow to test?
Why make this change?
While RPC is recommended for optimal functionality of Insight and Account Abstraction services, some users may have their own RPC solutions or specific requirements. This change gives users more flexibility in their infrastructure choices while clearly communicating the potential risks and limitations of omitting RPC from their setup.
Summary by CodeRabbit
New Features
Chores