Skip to content

chore: Upgrade libs#2847

Merged
oktapodia merged 9 commits into
developfrom
JUM-915
May 8, 2026
Merged

chore: Upgrade libs#2847
oktapodia merged 9 commits into
developfrom
JUM-915

Conversation

@oktapodia
Copy link
Copy Markdown
Member

@oktapodia oktapodia commented May 7, 2026

Which Jira task belongs to this PR?

Why did I implement it this way?

Checklist before requesting a review

  • I have performed a self-review of my code
  • This pull request is as small as possible and only tackles one problem
  • I have added tests that cover the functionality / test the bug
  • If this changed the API, I have updated the documentation
  • I have provided QA instructions for the feature / fix implemented in this PR (if applicable)
  • I have provided instructions for any environment / deployment changes that this PR needs when merged

Summary by CodeRabbit

  • Chores

    • Updated Node.js requirement and runtime from v20 → v22 across CI, Docker, Playwright workflows, and docs
    • Bumped pnpm to 10.33.4 and refreshed many dependencies and dev-tools
    • Adjusted lint ignore patterns and i18n JSON import syntax
    • Enhanced TypeScript path aliases
  • Refactor

    • Standardized rich-text/blocks type usage across the codebase and updated related public type fields
  • Style

    • Added TypeScript reference for gtag types

@vercel
Copy link
Copy Markdown

vercel Bot commented May 7, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
jumper-exchange Ready Ready Preview, Comment May 8, 2026 7:50am
jumper-exchange-storybook Ready Ready Preview, Comment May 8, 2026 7:50am

Request Review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 7, 2026

Review Change Stack
No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 94e53a0e-aa77-49b3-b85b-ce1217917ccb

📥 Commits

Reviewing files that changed from the base of the PR and between c079a2e and 48bd796.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (1)
  • package.json
🚧 Files skipped from review as they are similar to previous changes (1)
  • package.json

Walkthrough

This PR upgrades Node.js to 22 across CI and Docker, bumps PNPM and many dependencies, replaces deep type imports with package-scoped BlocksContent, updates JSON import assertions, extends ESLint ignores, tweaks TypeScript paths, and changes LiFi SDK provider wiring.

Changes

Node.js 22 Upgrade and Dependency Refresh

Layer / File(s) Summary
Runtime & Build Environment
.github/workflows/checks.yml, .github/workflows/playwright.yml, Dockerfile, README.md, package.json
Node.js bumped from 20→22 in CI workflows and Docker; engines.node raised to >=22.0.0; packageManager/PNPM pin updated; README updated to Node 22+.
Dependency Updates
package.json
Bulk bump of runtime and dev dependencies; added pnpm.peerDependencyRules.allowedVersions.eslint = "10".
Type Import Normalization & Signatures
tsconfig.json, src/components/..., src/hooks/..., src/types/..., src/components/ImageGeneration/imageResponseOptions.ts
Replaced deep node_modules type imports with BlocksContent and adjusted Font import path; updated props/fields/hooks/types to use BlocksContent.
LiFi SDK Provider Configuration
src/utils/instrumentation/lifiSdkConfig.ts
Moved provider setup out of createClient() options and set providers post-creation via _client.setProviders(...) with SDKProvider typing; lazy initialization preserved.
JSON Import Assertions, ESLint & TS refs
src/i18n/translations/index.ts, eslint.config.mjs, src/types/internal.ts
Import assertions changed from assert { type: 'json' } to with { type: 'json' }; ESLint global ignores extended; /// <reference types="gtag.js" /> added.
RichBlocks TOC utility
src/utils/richBlocks/getTableOfContentsFromContent.ts
Function signature and type guard updated to accept BlocksContent and narrow via BlocksContent[number].
TypeScript Path Aliases
tsconfig.json
Added src/* and i18n-config path aliases alongside @/*.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • chybisov
  • mmioana

Poem

🐰 A hop to twenty-two with paws so spry,
Types straightened, imports cleaned, dependencies fly.
JSON whispers "with" where assert used to be,
CI and Docker hum in harmony.
Hooray — the rabbit bops and says, "Ship free!"

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title 'chore: Upgrade libs' is vague and overly generic, failing to convey specific information about the changeset which includes Node.js upgrade, package updates, type refactoring, and configuration changes. Provide a more specific title that reflects the primary change, such as 'chore: Upgrade to Node.js 22 and update dependencies' or 'chore: Migrate to BlocksContent type from @strapi/blocks-react-renderer'.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch JUM-915

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 7, 2026

✅ All snapshot tests passed

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (3)
Dockerfile (1)

1-1: ⚡ Quick win

Pin base images by digest for reproducibility and supply-chain security.

Tags like node:22-bookworm are mutable and can change silently over time. Docker recommends pinning by digest (node:22-bookworm@sha256:...) to ensure build consistency and prevent unexpected runtime behavior.

Suggested Dockerfile pattern
-FROM node:22-bookworm AS builder
+FROM node:22-bookworm@sha256:<builder_digest> AS builder
...
-FROM node:22-alpine AS runner
+FROM node:22-alpine@sha256:<runner_digest> AS runner

Also applies to: 30-30

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Dockerfile` at line 1, Replace the mutable base image tag used in the
Dockerfile by pinning it to a specific digest: update the FROM statement that
currently reads "FROM node:22-bookworm" to use the corresponding SHA256 digest
for the exact image you want (i.e., "FROM node:22-bookworm@sha256:...") so
builds are reproducible and supply-chain safe; ensure you fetch the correct
digest from the official Node image registry and apply the same digest-pinning
approach to any other similar FROM lines (e.g., the one referenced as 30-30).
src/hooks/quests/useFormatDisplayQuestData.ts (1)

9-9: ⚡ Quick win

Use a type-only import here.

Line 9 imports RootNode as a value import, but it is only used in type positions (line 16 in the interface). Switching to import type improves code clarity and enables better tree-shaking.

Proposed fix
-import { RootNode } from '@strapi/blocks-react-renderer/dist/BlocksRenderer';
+import type { RootNode } from '@strapi/blocks-react-renderer/dist/BlocksRenderer';
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/hooks/quests/useFormatDisplayQuestData.ts` at line 9, The import for
RootNode is currently a value import but only used as a type in the
useFormatDisplayQuestData code; change the statement to a type-only import
(import type { RootNode } from '...') so the compiler/tree-shaker knows it's
purely a type and not a runtime dependency, updating the import that provides
RootNode to use the "import type" form; verify references to RootNode in the
interface (used in useFormatDisplayQuestData) remain unchanged.
src/types/announcement.ts (1)

1-1: ⚡ Quick win

Use import type for RootNode since it's only used in type positions.

Line 1 should use import type { RootNode } from '@strapi/blocks-react-renderer/dist/BlocksRenderer'; (currently used at lines 9 and 24 as interface property types only).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/types/announcement.ts` at line 1, The import of RootNode is only used in
type positions; change the statement to a type-only import by replacing the
current import with "import type { RootNode } from
'@strapi/blocks-react-renderer/dist/BlocksRenderer';" so TypeScript and bundlers
can erase it at runtime—update the existing import declaration that brings in
RootNode (used in the interfaces at lines where properties reference RootNode)
to an "import type" form.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@package.json`:
- Around line 8-9: The package.json runtime field declares "node": ">=22.0.0"
but the dev dependency "@types/node" is set to major 25; change the
"@types/node" version to a 22.x major (or a range compatible with Node 22) so
TypeScript types match the runtime; locate the "@types/node" entry in
package.json and update its version string (e.g., 22.x) and run a
reinstall/typecheck to confirm no type regressions in code paths using Node
APIs.

In `@src/components/ImageGeneration/imageResponseOptions.ts`:
- Line 1: The file imports the internal Next.js Satori Font type; replace that
fragile import by declaring a local Font structural type matching the documented
shape ({ name: string; data: ArrayBuffer; weight?: number; style?: 'normal' |
'italic' }) and use that local type wherever the imported Font was referenced
(e.g., type annotations in imageResponseOptions.ts and
getImageResponseOptions.ts and any functions like getImageResponseOptions or
exported image response option objects); remove the import line for
"next/dist/compiled/@vercel/og/satori" and update all references to use the
local Font type to avoid depending on the internal Next bundle.

In `@tsconfig.json`:
- Around line 27-29: The tsconfig path mapping currently hardcodes the internal
module "@strapi/blocks-react-renderer/dist/BlocksRenderer" which ties the build
to the package's internal layout; replace that mapping so consumers import the
public types from the package root (e.g. use the exported BlocksContent type
which represents RootNode[]) instead of pointing to
"./node_modules/@strapi/blocks-react-renderer/dist/BlocksRenderer.d.ts"; update
the tsconfig paths to remove the hardcoded dist alias and, where necessary,
change imports to reference "@strapi/blocks-react-renderer" (or explicitly
BlocksContent) so you rely on the package's public API rather than internal
files.

---

Nitpick comments:
In `@Dockerfile`:
- Line 1: Replace the mutable base image tag used in the Dockerfile by pinning
it to a specific digest: update the FROM statement that currently reads "FROM
node:22-bookworm" to use the corresponding SHA256 digest for the exact image you
want (i.e., "FROM node:22-bookworm@sha256:...") so builds are reproducible and
supply-chain safe; ensure you fetch the correct digest from the official Node
image registry and apply the same digest-pinning approach to any other similar
FROM lines (e.g., the one referenced as 30-30).

In `@src/hooks/quests/useFormatDisplayQuestData.ts`:
- Line 9: The import for RootNode is currently a value import but only used as a
type in the useFormatDisplayQuestData code; change the statement to a type-only
import (import type { RootNode } from '...') so the compiler/tree-shaker knows
it's purely a type and not a runtime dependency, updating the import that
provides RootNode to use the "import type" form; verify references to RootNode
in the interface (used in useFormatDisplayQuestData) remain unchanged.

In `@src/types/announcement.ts`:
- Line 1: The import of RootNode is only used in type positions; change the
statement to a type-only import by replacing the current import with "import
type { RootNode } from '@strapi/blocks-react-renderer/dist/BlocksRenderer';" so
TypeScript and bundlers can erase it at runtime—update the existing import
declaration that brings in RootNode (used in the interfaces at lines where
properties reference RootNode) to an "import type" form.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 1e847063-e2cf-4786-b700-a587f563ab0a

📥 Commits

Reviewing files that changed from the base of the PR and between e173ebb and 29d7e2d.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (19)
  • .github/workflows/checks.yml
  • .github/workflows/playwright.yml
  • Dockerfile
  • README.md
  • eslint.config.mjs
  • package.json
  • src/components/AccordionFAQ/AccordionFAQ.tsx
  • src/components/AccordionFAQ/AccordionFAQItem.tsx
  • src/components/ImageGeneration/imageResponseOptions.ts
  • src/components/RichBlocks/RichBlocks.tsx
  • src/hooks/quests/useFormatDisplayQuestData.ts
  • src/i18n/translations/index.ts
  • src/types/announcement.ts
  • src/types/internal.ts
  • src/types/loyaltyPass.ts
  • src/types/strapi.ts
  • src/utils/instrumentation/lifiSdkConfig.ts
  • src/utils/richBlocks/getTableOfContentsFromContent.ts
  • tsconfig.json

Comment thread package.json
@@ -1,4 +1,4 @@
import type { Font } from 'node_modules/next/dist/compiled/@vercel/og/satori';
import type { Font } from 'next/dist/compiled/@vercel/og/satori';
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

In Next.js 15/16, is importing from next/dist/compiled/@vercel/og/satorisupported public API, or should OG font types come from publicnext/og usage patterns (or local structural typing)?

💡 Result:

Importing directly from next/dist/compiled/@vercel/og/satori is not a supported public API in Next.js 15/16. Official documentation consistently directs users to import ImageResponse from the public next/og module for OG image generation, including custom fonts [1][2][3][4][5]. The ImageResponse constructor accepts a fonts option with type { name: string, data: ArrayBuffer, weight?: number, style?: 'normal' | 'italic' }[], allowing OG font types to be passed directly without needing Satori types explicitly [4][5]. next/dist/compiled/@vercel/og/satori is an internal bundled dependency (vendored Satori library used by @vercel/og and next/og) [6][7][8][9]. Direct imports from dist/compiled paths are discouraged as they are not public APIs, can break across versions (e.g., type deletions noted in PRs [6]), and violate Next.js bundling assumptions. Instead, use next/og public patterns or define local structural types matching the documented fonts shape for type safety—no Satori import required [4]. Next.js 16 docs/blog confirm continuity of this API from 15 [10]. No official sources endorse or document direct Satori imports for user code.

Citations:


🏁 Script executed:

# First, let's verify the exact content of the file mentioned
cat -n src/components/ImageGeneration/imageResponseOptions.ts | head -20

Repository: jumperexchange/jumper-exchange

Length of output: 700


🏁 Script executed:

# Search for all imports from next/dist/compiled/@vercel/og/satori in the codebase
rg "next/dist/compiled/@vercel/og/satori" --type ts --type tsx

Repository: jumperexchange/jumper-exchange

Length of output: 102


🏁 Script executed:

# Also check if there are any imports from the public next/og module
rg "from ['\"]next/og['\"]" --type ts --type tsx

Repository: jumperexchange/jumper-exchange

Length of output: 102


🏁 Script executed:

# Search for internal satori imports with correct syntax
rg 'next/dist/compiled/@vercel/og/satori' --type ts

Repository: jumperexchange/jumper-exchange

Length of output: 314


🏁 Script executed:

# Also search without type flag to catch all files
rg 'next/dist/compiled/@vercel/og/satori'

Repository: jumperexchange/jumper-exchange

Length of output: 314


🏁 Script executed:

# Check for next/og imports
rg "from ['\"]next/og['\"]"

Repository: jumperexchange/jumper-exchange

Length of output: 631


🏁 Script executed:

# Check if Font type is actually used in the file
cat -n src/components/ImageGeneration/imageResponseOptions.ts

Repository: jumperexchange/jumper-exchange

Length of output: 1855


Replace internal Satori import with local structural typing.

next/dist/compiled/@vercel/og/satori is an internal Next.js bundled dependency that is not part of the public API and can break on framework upgrades. Use the documented font type shape instead: { name: string, data: ArrayBuffer, weight?: number, style?: 'normal' | 'italic' }.

This issue exists in two files:

  • src/components/ImageGeneration/imageResponseOptions.ts
  • src/utils/ImageGeneration/getImageResponseOptions.ts
Local type definition
-import type { Font } from 'next/dist/compiled/@vercel/og/satori';
+type Font = {
+  name: string;
+  data: ArrayBuffer;
+  weight?: number;
+  style?: 'normal' | 'italic';
+};
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
import type { Font } from 'next/dist/compiled/@vercel/og/satori';
type Font = {
name: string;
data: ArrayBuffer;
weight?: number;
style?: 'normal' | 'italic';
};
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/ImageGeneration/imageResponseOptions.ts` at line 1, The file
imports the internal Next.js Satori Font type; replace that fragile import by
declaring a local Font structural type matching the documented shape ({ name:
string; data: ArrayBuffer; weight?: number; style?: 'normal' | 'italic' }) and
use that local type wherever the imported Font was referenced (e.g., type
annotations in imageResponseOptions.ts and getImageResponseOptions.ts and any
functions like getImageResponseOptions or exported image response option
objects); remove the import line for "next/dist/compiled/@vercel/og/satori" and
update all references to use the local Font type to avoid depending on the
internal Next bundle.

Comment thread tsconfig.json Outdated
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 7, 2026

Playwright test results

failed  2 failed
passed  52 passed
flaky  2 flaky
skipped  1 skipped

Details

stats  57 tests across 11 suites
duration  13 minutes, 22 seconds
commit  48bd796

Failed tests

chromium › earnPage.spec.ts › Analytics filters on Earn page › Should be able to verify analytics buttons are visible (Qase ID: 47)
chromium › landingPage.spec.ts › Landing page and navigation › Should navigate to the homepage and change tabs (Qase ID: 2)

Flaky tests

chromium › mainMenu.spec.ts › Main Menu flows › Should be able to navigate to the Jumper Learn (Qase ID: 22)
chromium › mainMenu.spec.ts › Main Menu flows › Should be able to click on the Support button (Qase ID: 20)

Skipped tests

chromium › themeManipulation.spec.ts › Switch between dark and light theme and check the background color › Partner theme should appear in theme menu and apply background color (Qase ID: 49)

📋 View Detailed Qase Report

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
src/hooks/quests/useFormatDisplayQuestData.ts (1)

3-13: ⚡ Quick win

Use @/ path aliases instead of src/ for the changed imports.

Lines 3–7, 11, and 12 were modified in this PR and now use src/ prefixes, which violates the project guideline. Since both aliases resolve to the same ./src/, this is a trivial one-pass fix.

♻️ Proposed fix
 import type {
   ParticipantChain,
   Quest,
   RewardGroup,
-} from 'src/types/loyaltyPass';
+} from '@/types/loyaltyPass';
 import { capitalizeString } from 'src/utils/capitalizeString';
 import { getStrapiBaseUrl } from 'src/utils/strapi/strapiHelper';
 import { useFormatDisplayRewardsData } from './useFormatDisplayRewardsData';
-import type { QuestData } from 'src/types/strapi';
-import type { Chain } from 'src/types/questDetails';
+import type { QuestData } from '@/types/strapi';
+import type { Chain } from '@/types/questDetails';
 import type { BlocksContent } from '@strapi/blocks-react-renderer';

As per coding guidelines: "Prefer @/ over src/ path aliases in new code (both resolve to ./src/)".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/hooks/quests/useFormatDisplayQuestData.ts` around lines 3 - 13, Update
the changed import paths in useFormatDisplayQuestData.ts to use the project
alias '@/...' instead of 'src/...': replace imports for ParticipantChain, Quest,
RewardGroup, capitalizeString, getStrapiBaseUrl, useFormatDisplayRewardsData,
QuestData, Chain, and BlocksContent so their module specifiers start with '@/'.
Ensure only the import paths change (not the imported symbol names) so all
references like ParticipantChain, Quest, RewardGroup, capitalizeString,
getStrapiBaseUrl, useFormatDisplayRewardsData, QuestData, Chain, and
BlocksContent continue to resolve.
package.json (1)

27-40: ⚡ Quick win

Standardize to exact versions for pre-release LiFi packages.

Lines 27-40 mix caret (^) and exact version specifiers for alpha/beta packages. For consistency and clarity across this tightly-coupled SDK/provider family, use exact versions for all pre-release packages.

Proposed change
-    "@lifi/sdk": "^4.0.1-alpha.0",
+    "@lifi/sdk": "4.0.1-alpha.0",
-    "@lifi/sdk-provider-bitcoin": "^4.0.1-alpha.0",
+    "@lifi/sdk-provider-bitcoin": "4.0.1-alpha.0",
-    "@lifi/sdk-provider-ethereum": "^4.0.1-alpha.0",
+    "@lifi/sdk-provider-ethereum": "4.0.1-alpha.0",
-    "@lifi/sdk-provider-solana": "^4.0.1-alpha.0",
+    "@lifi/sdk-provider-solana": "4.0.1-alpha.0",
-    "@lifi/sdk-provider-sui": "^4.0.1-alpha.0",
+    "@lifi/sdk-provider-sui": "4.0.1-alpha.0",
-    "@lifi/sdk-provider-tron": "^4.0.0-beta.8",
+    "@lifi/sdk-provider-tron": "4.0.0-beta.8",
-    "@lifi/widget-provider-bitcoin": "^4.0.0-beta.18",
+    "@lifi/widget-provider-bitcoin": "4.0.0-beta.18",
-    "@lifi/widget-provider-ethereum": "^4.0.0-beta.18",
+    "@lifi/widget-provider-ethereum": "4.0.0-beta.18",
-    "@lifi/widget-provider-solana": "^4.0.0-beta.18",
+    "@lifi/widget-provider-solana": "4.0.0-beta.18",
-    "@lifi/widget-provider-sui": "^4.0.0-beta.18",
+    "@lifi/widget-provider-sui": "4.0.0-beta.18",
-    "@lifi/widget-provider-tron": "^4.0.0-beta.18",
+    "@lifi/widget-provider-tron": "4.0.0-beta.18",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@package.json` around lines 27 - 40, Change the pre-release LiFi dependencies
from range specs to exact versions: replace caret-prefixed versions for the
listed packages (e.g., "@lifi/sdk", "@lifi/sdk-provider-bitcoin",
"@lifi/sdk-provider-ethereum", "@lifi/sdk-provider-solana",
"@lifi/sdk-provider-sui", "@lifi/widget-provider-bitcoin",
"@lifi/widget-provider-ethereum", "@lifi/widget-provider-solana",
"@lifi/widget-provider-sui", and any other alpha/beta "@lifi/..." entries) with
the exact version strings (remove the leading "^") so all alpha/beta packages
use exact versions to ensure consistency across the SDK/provider family.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@package.json`:
- Line 103: The package.json forces ESLint 10 via allowedVersions.eslint which
conflicts with eslint-plugin-jsx-a11y (peer range excludes ESLint 10); update
package.json to either (A) bump eslint-plugin-jsx-a11y in
dependencies/devDependencies to a release that lists ESLint 10 in its
peerDependencies (locate the eslint-plugin-jsx-a11y entry and increase its
version), or (B) remove/adjust the allowedVersions.eslint: "10" rule in the pnpm
config (the allowedVersions block) so the package manager surfaces the
peer-dependency conflict; ensure you do one of these and run install to verify
no peer warnings remain.

---

Nitpick comments:
In `@package.json`:
- Around line 27-40: Change the pre-release LiFi dependencies from range specs
to exact versions: replace caret-prefixed versions for the listed packages
(e.g., "@lifi/sdk", "@lifi/sdk-provider-bitcoin", "@lifi/sdk-provider-ethereum",
"@lifi/sdk-provider-solana", "@lifi/sdk-provider-sui",
"@lifi/widget-provider-bitcoin", "@lifi/widget-provider-ethereum",
"@lifi/widget-provider-solana", "@lifi/widget-provider-sui", and any other
alpha/beta "@lifi/..." entries) with the exact version strings (remove the
leading "^") so all alpha/beta packages use exact versions to ensure consistency
across the SDK/provider family.

In `@src/hooks/quests/useFormatDisplayQuestData.ts`:
- Around line 3-13: Update the changed import paths in
useFormatDisplayQuestData.ts to use the project alias '@/...' instead of
'src/...': replace imports for ParticipantChain, Quest, RewardGroup,
capitalizeString, getStrapiBaseUrl, useFormatDisplayRewardsData, QuestData,
Chain, and BlocksContent so their module specifiers start with '@/'. Ensure only
the import paths change (not the imported symbol names) so all references like
ParticipantChain, Quest, RewardGroup, capitalizeString, getStrapiBaseUrl,
useFormatDisplayRewardsData, QuestData, Chain, and BlocksContent continue to
resolve.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 0f56707c-c424-41fc-b445-d92489ae8ec9

📥 Commits

Reviewing files that changed from the base of the PR and between 29d7e2d and c079a2e.

⛔ Files ignored due to path filters (9)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • src/components/Cards/EarnCard/__snapshots__/EarnCard.snapshot.spec.tsx.snap is excluded by !**/*.snap
  • src/components/Cards/HeroEarnCard/__snapshots__/HeroEarnCard.snapshot.spec.tsx.snap is excluded by !**/*.snap
  • src/components/Cards/ProtocolCard/__snapshots__/ProtocolCard.snapshot.spec.tsx.snap is excluded by !**/*.snap
  • src/components/composite/DepositButton/__snapshots__/DepositButton.snapshot.spec.tsx.snap is excluded by !**/*.snap
  • src/components/composite/WalletBalanceCard/__snapshots__/WalletBalanceCard.snapshot.spec.tsx.snap is excluded by !**/*.snap
  • src/components/composite/cards/ProcessingTransactionCard/__snapshots__/ProcessingTransactionCard.snapshot.spec.tsx.snap is excluded by !**/*.snap
  • src/components/core/Percent/__snapshots__/Percent.snapshot.spec.tsx.snap is excluded by !**/*.snap
  • src/components/core/buttons/Button/__snapshots__/Button.snapshot.spec.tsx.snap is excluded by !**/*.snap
📒 Files selected for processing (10)
  • package.json
  • src/components/AccordionFAQ/AccordionFAQ.tsx
  • src/components/AccordionFAQ/AccordionFAQItem.tsx
  • src/components/RichBlocks/RichBlocks.tsx
  • src/hooks/quests/useFormatDisplayQuestData.ts
  • src/types/announcement.ts
  • src/types/loyaltyPass.ts
  • src/types/strapi.ts
  • src/utils/richBlocks/getTableOfContentsFromContent.ts
  • tsconfig.json
✅ Files skipped from review due to trivial changes (1)
  • src/components/AccordionFAQ/AccordionFAQItem.tsx
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/components/AccordionFAQ/AccordionFAQ.tsx
  • src/types/strapi.ts

Comment thread package.json
"@next/eslint-plugin-next": "16.2.3",
"@playwright/test": "1.58.2",
"@rainbow-me/rainbowkit": "^2.2.10",
"@eslint/js": "^10.0.1",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Check peer dependency ranges of lint stack against eslint@10.
packages=(
  "@eslint/js@10.0.1"
  "@next/eslint-plugin-next@16.2.5"
  "eslint-plugin-jsx-a11y@6.10.2"
  "eslint-plugin-react-hooks@7.1.1"
  "eslint-config-prettier@10.1.8"
  "typescript-eslint@8.59.2"
)

for pkg in "${packages[@]}"; do
  echo "=== $pkg ==="
  npm view "$pkg" peerDependencies --json || true
  echo
done

Repository: jumperexchange/jumper-exchange

Length of output: 1585


🏁 Script executed:

cat -n package.json | head -220 | tail -40

Repository: jumperexchange/jumper-exchange

Length of output: 1320


🏁 Script executed:

rg "allowedVersions|eslint-plugin-jsx-a11y" package.json -A 2 -B 2

Repository: jumperexchange/jumper-exchange

Length of output: 348


allowedVersions.eslint: "10" hides incompatibility with eslint-plugin-jsx-a11y@6.10.2.

This package does not support ESLint 10 (peer range excludes it: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9). The pnpm configuration at lines 198–201 suppresses peer-dependency warnings during installation, deferring the incompatibility to runtime when ESLint executes, potentially causing linting failures.

Upgrade eslint-plugin-jsx-a11y to a version that supports ESLint 10, or remove the allowedVersions.eslint: "10" rule if this incompatibility cannot be resolved.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@package.json` at line 103, The package.json forces ESLint 10 via
allowedVersions.eslint which conflicts with eslint-plugin-jsx-a11y (peer range
excludes ESLint 10); update package.json to either (A) bump
eslint-plugin-jsx-a11y in dependencies/devDependencies to a release that lists
ESLint 10 in its peerDependencies (locate the eslint-plugin-jsx-a11y entry and
increase its version), or (B) remove/adjust the allowedVersions.eslint: "10"
rule in the pnpm config (the allowedVersions block) so the package manager
surfaces the peer-dependency conflict; ensure you do one of these and run
install to verify no peer warnings remain.

@oktapodia oktapodia merged commit 7695d70 into develop May 8, 2026
14 of 15 checks passed
@oktapodia oktapodia deleted the JUM-915 branch May 8, 2026 07:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants