Skip to content
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

proof/dispute active & other tweaks/suggs [SLT-314] #3232

Closed

Conversation

parodime
Copy link
Collaborator

@parodime parodime commented Oct 4, 2024

added concept of "active only" to qProofs and qDisputes -- so we can supply a parameter that will either include or exclude them based on what we need for each particular endpoint.

"Active" meaning whether the given Proof or Dispute has been supplanted by something more recent.
EG: if I submit a Proof and it is followed by a Dispute, then the Proof would be inactive and the Dispute would be active

If i then submit a new Proof, then that Proof becomes Active and the Dispute becomes inactive

This can repeat ad nauseum

Also lots of documentation & other tweaks

Summary by CodeRabbit

  • New Features

    • Enhanced API documentation with direct links to Swagger for all API calls.
    • Added environment variable details for development and database connections.
  • Improvements

    • Updated API queries to focus on active entries for proofs and disputes, improving data relevance.
    • Renamed fields in the GraphQL schema for better clarity and consistency.
    • Introduced a new Google Analytics component for improved tracking.
  • Bug Fixes

    • Corrected response messages to reflect active status in various API calls.
  • Documentation

    • Improved clarity and organization of the RFQ Indexer API README.
    • Updated changelog entries for version tracking.

Defi-Moses and others added 11 commits October 4, 2024 12:01
* fixing terminology

* rfq-indexer-docs

* Update RFQ Indexer API Readme (#3221)

* adding dispute events to ponder and linting

* numbering typo

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* small fixes

* sync with master

---------

Co-authored-by: parodime <[email protected]>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
 - @synapsecns/[email protected]
 - @synapsecns/[email protected]
@parodime parodime requested a review from Defi-Moses October 4, 2024 18:21
@parodime parodime requested a review from trajan0x as a code owner October 4, 2024 18:21
Copy link
Contributor

coderabbitai bot commented Oct 4, 2024

Walkthrough

The pull request introduces several modifications to the RFQ Indexer API documentation and implementation. Key changes include an updated README for improved clarity, adjustments to controller functions to filter for active entries, and modifications to SQL queries to enhance data retrieval. Additionally, the GraphQL schema has been updated to reflect new field names, and several functions now accept an activeOnly parameter to streamline data queries. Overall, these changes aim to refine the API's structure and improve the specificity of the data returned.

Changes

File Path Change Summary
packages/rfq-indexer/api/README.md Updated introduction, renumbered API calls, corrected URL examples, added "Env Vars" section.
packages/rfq-indexer/api/src/controllers/conflictingProofsController.ts Modified query to include {activeOnly: true} and updated response messages.
packages/rfq-indexer/api/src/controllers/disputesController.ts Updated query to filter disputes with {activeOnly: true} and modified response messages.
packages/rfq-indexer/api/src/controllers/pendingTransactionsController.ts Adjusted queries in two controllers to include activeOnly and removed disputes handling.
packages/rfq-indexer/api/src/controllers/transactionIdController.ts Enhanced getTransactionById to include active disputes and modified proofs retrieval logic.
packages/rfq-indexer/api/src/graphql/resolvers.ts Renamed fields in qDisputes function related to BridgeProofDisputedEvents.
packages/rfq-indexer/api/src/graphql/types/events.graphql Updated BridgeProofDisputedEvent type: removed originChainId and originChain, added chainId and chain.
packages/rfq-indexer/api/src/queries/disputesQueries.ts Modified qDisputes to accept activeOnly parameter and updated query logic for filtering.
packages/rfq-indexer/api/src/queries/proofsQueries.ts Updated qProofs to accept activeOnly parameter and adjusted query logic for filtering based on disputes.
packages/rfq-indexer/api/src/types/index.ts Updated BridgeProofDisputedEvents interface: replaced originChainId and originChain with chainId and chain.

Possibly related PRs

  • Refactoring rfq-indexer API and adding swagger docs [SLT-228] #3167: This PR involves refactoring the RFQ Indexer API and adding Swagger documentation, which aligns with the changes made in the main PR regarding the README updates for the RFQ Indexer API.
  • Fix READ.me #3168: This PR focuses on fixing the README for the RFQ Indexer API, which directly relates to the changes made in the main PR that also involve updates to the README.
  • RFQ-Indexer Adding events #3227: This PR adds the "bridgedispute" event to the RFQ Indexer, which is relevant to the overall functionality and documentation of the RFQ Indexer API discussed in the main PR.
  • feat(docs): Adds search #3229: This PR adds a search feature to the documentation, which complements the improvements made in the main PR regarding the organization and clarity of the RFQ Indexer API documentation.

Suggested labels

size/m

Suggested reviewers

  • trajan0x
  • bigboydiamonds
  • abtestingalpha
  • ChiTimesChi

🐰 In the meadow, changes bloom,
The API's clarity makes room.
Active queries now take flight,
With new names shining bright.
Documentation, clear and neat,
A hop towards progress, oh so sweet! 🌼


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@parodime parodime changed the title proof/dispute active & other tweaks/suggs proof/dispute active & other tweaks/suggs [SLT-314] Oct 4, 2024
Copy link

codecov bot commented Oct 4, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 90.43902%. Comparing base (35dfa81) to head (df0e800).
Report is 18 commits behind head on feat/rfq-indexer-updates.

Additional details and impacted files
@@                     Coverage Diff                      @@
##           feat/rfq-indexer-updates       #3232   +/-   ##
============================================================
  Coverage                  90.43902%   90.43902%           
============================================================
  Files                            54          54           
  Lines                          1025        1025           
  Branches                         82          82           
============================================================
  Hits                            927         927           
  Misses                           95          95           
  Partials                          3           3           
Flag Coverage Δ
packages 90.43902% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Copy link
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: 6

🧹 Outside diff range and nitpick comments (11)
packages/rfq-indexer/api/src/controllers/disputesController.ts (1)

Line range hint 1-27: Consider adding a query parameter for activeOnly.

While the current implementation always filters for active disputes, it might be beneficial to make this behavior configurable via a query parameter. This would allow API consumers to choose whether they want all disputes or only active ones.

Consider modifying the controller to accept an optional query parameter:

-export const disputesController = async (req: Request, res: Response) => {
+export const disputesController = async (req: Request, res: Response) => {
+  const activeOnly = req.query.activeOnly !== 'false';
   try {
     const query = db
-      .with('disputes', () => qDisputes({activeOnly: true}))
+      .with('disputes', () => qDisputes({activeOnly}))
       .selectFrom('disputes')
       .selectAll()
       .orderBy('blockTimestamp_dispute', 'desc')

     // ... rest of the function
   }
 }

This change would allow API users to request all disputes by setting ?activeOnly=false in the URL, while maintaining the default behavior of returning only active disputes.

packages/rfq-indexer/api/src/controllers/conflictingProofsController.ts (3)

16-16: Approve change with a minor suggestion for clarity.

The addition of {activeOnly: true} to the qProofs function call correctly implements the "active only" filtering for proofs, aligning with the PR objectives. This ensures that only active proofs are considered in the subsequent logic.

Consider adding a brief comment explaining the significance of the activeOnly parameter for better code readability:

-      .with('proofs', () => qProofs({activeOnly: true}))
+      // Only consider active proofs in the query
+      .with('proofs', () => qProofs({activeOnly: true}))

47-47: Approve the updated error message with a minor suggestion.

The modification of the error logging message to "Error fetching active conflicting proofs:" accurately reflects the new behavior and improves the clarity of error logs for debugging purposes.

For consistency with the response message on line 44, consider updating the error message to:

-    console.error('Error fetching active conflicting proofs:', error)
+    console.error('Error fetching active conflicting proofs:', error)
+    res.status(500).json({ message: 'Error fetching active conflicting proofs' })

This change would provide more specific information to the client about the nature of the error.


Missing "active only" Implementation in resolvers.ts

The qDisputes function in packages/rfq-indexer/api/src/graphql/resolvers.ts is called without the activeOnly: true parameter. This inconsistency may lead to unintended behavior by not filtering disputes as intended.

  • File: packages/rfq-indexer/api/src/graphql/resolvers.ts
  • Issue: Missing activeOnly: true in qDisputes call.

Please update the qDisputes invocation to include the activeOnly: true parameter to maintain consistency across the codebase.

🔗 Analysis chain

Line range hint 1-50: Verify implementation of "active only" concept in related files.

The changes in this file effectively implement the "active only" concept for proofs, aligning well with the PR objectives. The filtering of active proofs and the updated messages enhance the functionality and clarity of the conflictingProofsController.

To ensure consistency across the codebase:

  1. Verify if similar changes are needed for dispute-related functions.
  2. Check if other controllers or queries need to implement the "active only" concept.

Run the following script to identify potential areas that might need similar updates:

Review the output of this script to identify any files that might need similar updates to maintain consistency with the new "active only" concept.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Search for files that might need similar "active only" implementation

# Test 1: Search for files containing 'qDisputes' function calls
echo "Files potentially needing 'active only' implementation for disputes:"
rg --type typescript 'qDisputes\(' packages/rfq-indexer

# Test 2: Search for other controller files that might need similar updates
echo "\nOther controller files that might need 'active only' implementation:"
fd --type file --extension ts controller packages/rfq-indexer/api/src/controllers

Length of output: 904


Script:

#!/bin/bash
# Description: Search for files that might need similar "active only" implementation

# Test 1: Search for files containing 'qDisputes' function calls
echo "Files potentially needing 'active only' implementation for disputes:"
rg --type ts 'qDisputes\(' packages/rfq-indexer

# Test 2: Search for other controller files that might need similar updates
echo "\nOther controller files that might need 'active only' implementation:"
fd --type file --extension ts controller packages/rfq-indexer/api/src/controllers

Length of output: 1280

packages/rfq-indexer/api/README.md (2)

18-18: Approve URL changes and suggest code block improvements.

The updated API endpoint URLs using slashes instead of hyphens improve consistency and readability. Well done!

Consider adding language specifications to the code blocks for better syntax highlighting. For example:

-    ```
+    ```bash
     curl http://localhost:3001/api/pending-transactions/missing-relay
     ```

Apply this change to all curl example code blocks in the file.

Also applies to: 25-25, 32-32


38-42: Approve the addition of Environment Variables section.

The new Environment Variables section is a valuable addition to the README. It provides crucial information for developers setting up the project.

Consider adding a brief explanation of the accepted values for NODE_ENV and an example of the DATABASE_URL format. For instance:

- **NODE_ENV**: Set to `"development"` for localhost testing, or `"production"` for production environment.
- **DATABASE_URL**: PostgreSQL connection URL for the ponder index. Example: `postgresql://username:password@host:port/database`

This additional information can help prevent potential setup issues.

packages/rfq-indexer/api/src/controllers/pendingTransactionsController.ts (2)

24-24: LGTM! Consider enhancing error logging.

The addition of activeOnly: true to the qProofs function call aligns well with the PR objectives. This change ensures that only active proofs are considered when querying for pending transactions missing claims, which should improve the accuracy of the results.

Consider enhancing the error logging in the catch block to include more details about the error. This can help with debugging in production environments. For example:

} catch (error) {
  console.error('Error fetching pending transactions missing claim:', error.message, error.stack);
  res.status(500).json({ message: 'Internal server error' });
}

65-65: LGTM! Consider enhancing error logging.

The addition of activeOnly: true to the qProofs function call aligns well with the PR objectives. This change ensures that only active proofs are considered when querying for pending transactions missing proofs, which should improve the accuracy of the results.

Consider enhancing the error logging in the catch block to include more details about the error. This can help with debugging in production environments. For example:

} catch (error) {
  console.error('Error fetching pending transactions missing proof:', error.message, error.stack);
  res.status(500).json({ message: 'Internal server error' });
}
packages/rfq-indexer/api/src/queries/proofsQueries.ts (2)

7-11: Add indexes to improve query performance

The left join and conditions on BridgeProofDisputedEvents may impact query performance with large datasets. Consider adding indexes on transactionId and blockTimestamp in both BridgeProofProvidedEvents and BridgeProofDisputedEvents tables to optimize query execution.


4-25: Ensure unit tests cover the new activeOnly parameter

Please ensure that unit tests are added or updated to verify that qProofs behaves correctly when activeOnly is true and false. This will help confirm that the query returns expected results under different scenarios.

packages/rfq-indexer/api/src/queries/disputesQueries.ts (1)

3-25: Consider Adding Unit Tests for 'activeOnly' Functionality

To ensure the new activeOnly parameter and its associated logic work as intended, it would be beneficial to add unit tests covering scenarios where activeOnly is both true and false. This will help verify the correctness of the filtering behavior under different conditions.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 35dfa81 and dd9d3a8.

📒 Files selected for processing (10)
  • packages/rfq-indexer/api/README.md (1 hunks)
  • packages/rfq-indexer/api/src/controllers/conflictingProofsController.ts (2 hunks)
  • packages/rfq-indexer/api/src/controllers/disputesController.ts (2 hunks)
  • packages/rfq-indexer/api/src/controllers/pendingTransactionsController.ts (2 hunks)
  • packages/rfq-indexer/api/src/controllers/transactionIdController.ts (2 hunks)
  • packages/rfq-indexer/api/src/graphql/resolvers.ts (2 hunks)
  • packages/rfq-indexer/api/src/graphql/types/events.graphql (1 hunks)
  • packages/rfq-indexer/api/src/queries/disputesQueries.ts (1 hunks)
  • packages/rfq-indexer/api/src/queries/proofsQueries.ts (1 hunks)
  • packages/rfq-indexer/api/src/types/index.ts (1 hunks)
🧰 Additional context used
🪛 Markdownlint
packages/rfq-indexer/api/README.md

17-17: null
Fenced code blocks should have a language specified

(MD040, fenced-code-language)


24-24: null
Fenced code blocks should have a language specified

(MD040, fenced-code-language)


31-31: null
Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🔇 Additional comments (16)
packages/rfq-indexer/api/src/controllers/disputesController.ts (3)

21-21: LGTM: Updated message for clarity.

The change from "No disputes found" to "No active disputes found" is consistent with the new filtering behavior. This provides clearer feedback to the user about the nature of the empty result, specifically indicating that the search was limited to active disputes.


24-24: LGTM: Improved error logging.

Updating the error logging message from "Error fetching disputes" to "Error fetching active disputes" is a good change. It provides more precise information about the operation that failed, which can be helpful for debugging and maintaining the system.


10-10: Verify the qDisputes function supports the activeOnly parameter.

The addition of {activeOnly: true} to the qDisputes() function call implements the core objective of filtering for active disputes. This change aligns well with the PR's goal of introducing an "active only" concept.

To ensure the qDisputes function supports this new parameter, please run the following script:

If the script doesn't find a match for the second pattern, we may need to update the qDisputes function to support this new parameter.

✅ Verification successful

The qDisputes function correctly supports the activeOnly parameter as intended.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that the qDisputes function supports the activeOnly parameter

# Test: Search for the qDisputes function definition
echo "Searching for qDisputes function definition:"
ast-grep --lang typescript --pattern 'export const qDisputes = ($_) => $_'

# Test: Check if the function accepts an object parameter that includes activeOnly
echo "Checking if qDisputes accepts an object parameter with activeOnly:"
ast-grep --lang typescript --pattern 'export const qDisputes = ({ $_ }: { activeOnly?: boolean, $_ }) => $_'

Length of output: 2957

packages/rfq-indexer/api/src/controllers/conflictingProofsController.ts (1)

44-44: Approve the updated response message.

The modification of the response message to "No active conflicting proofs found" accurately reflects the new behavior of only considering active proofs. This change enhances the clarity of the API response for users, aligning well with the PR objectives.

packages/rfq-indexer/api/README.md (1)

Line range hint 1-42: Approve overall structure and formatting improvements.

The reformatting and renumbering of the API calls section, along with the overall structural improvements, enhance the README's readability and organization. These changes align well with the PR objectives of improving documentation clarity.

Great job on enhancing the documentation's usability!

🧰 Tools
🪛 LanguageTool

[uncategorized] ~45-~45: Loose punctuation mark.
Context: ...## Important Scripts - yarn dev:local: Runs the API in development mode using ...

(UNLIKELY_OPENING_PUNCTUATION)

🪛 Markdownlint

17-17: null
Fenced code blocks should have a language specified

(MD040, fenced-code-language)


24-24: null
Fenced code blocks should have a language specified

(MD040, fenced-code-language)


31-31: null
Fenced code blocks should have a language specified

(MD040, fenced-code-language)

packages/rfq-indexer/api/src/types/index.ts (1)

90-91: Clarification needed on "active only" concept implementation

The PR objectives mention introducing an "active only" concept for qProofs and qDisputes functionalities. However, the changes in this file do not directly implement this feature. There are no new properties or types added to represent the "active" status of proofs or disputes.

Could you please provide more information on how the "active only" concept is being implemented? Specifically:

  1. Are there changes in other files that implement this feature?
  2. Is this file change part of a larger refactoring effort to support the "active only" concept?
  3. Are there plans to add new properties or types to represent the "active" status in these interfaces?

This information will help ensure that the implementation aligns with the PR objectives and that all necessary changes are properly reviewed.

To check for any related changes in other files, you can run:

#!/bin/bash
# Search for files with changes related to "active" status
rg -i 'active.*status|status.*active' --type typescript
packages/rfq-indexer/api/src/controllers/pendingTransactionsController.ts (1)

65-65: Clarify the removal of left join with disputes.

The AI-generated summary mentions that "the previous left join with disputes has been removed, and the condition that checked if the blockTimestamp_dispute was greater than blockTimestamp_proof has been eliminated." However, these changes are not visible in the provided code snippet.

Could you please clarify if these changes were made in a different part of the file or if they were reverted? If they were made, please provide the updated code segment for review.

To verify this, you can run the following command:

packages/rfq-indexer/api/src/queries/proofsQueries.ts (1)

20-22: Logic for filtering active proofs is correct

The condition .where('BridgeProofDisputedEvents.transactionId', 'is', null); correctly filters out proofs that have been disputed, returning only active proofs when activeOnly is true.

packages/rfq-indexer/api/src/queries/disputesQueries.ts (3)

3-3: Function Signature Updated to Include 'activeOnly'

The function qDisputes now accepts an optional activeOnly parameter with a default value of false, which is correctly implemented. This change enhances the function's flexibility without affecting existing functionality.


6-11: Correct Use of Left Join to Identify Inactive Disputes

The left join on BridgeProofProvidedEvents with the specified conditions accurately identifies proofs that occurred after disputes for the same transactionId. This logic is essential for determining the active status of disputes.


21-23: Effective Filtering Based on 'activeOnly' Parameter

The conditional filtering within the if (activeOnly) block correctly filters out inactive disputes by checking for a null value in BridgeProofProvidedEvents.transactionId. This ensures that only active disputes are returned when activeOnly is true.

packages/rfq-indexer/api/src/controllers/transactionIdController.ts (5)

4-4: Correctly imported qDisputes from queries

The addition of qDisputes to the import statement allows the controller to access dispute-related queries.


17-17: Querying only active disputes

Setting activeOnly: true for the disputes query ensures that only active disputes are included, excluding those invalidated or replaced by proofs. This accurately reflects the intended behavior described in the PR objectives.


25-25: Added disputes to the combined query with a left join

Including .leftJoin('disputes', 'transactionId_deposit', 'transactionId_dispute') integrates dispute data into the combined results. This allows for comprehensive transaction details, including any active disputes associated with a deposit.


31-31: Selecting all fields from disputes

Adding .selectAll('disputes') ensures that all dispute-related fields are included in the final result set. This provides complete dispute information to the client.


16-16: Including inactive proofs in the proofs query

By setting activeOnly: false, the proofs query will return all proofs, including those that have been invalidated or replaced by disputes. Ensure this aligns with the intended functionality and that downstream consumers can handle inactive proofs appropriately.

To confirm that including inactive proofs does not introduce issues, please verify how proofs are consumed elsewhere in the codebase.

Comment on lines +10 to +13
All API calls can be viewed in Swagger:

[Swagger Documentation](http://localhost:3001/api-docs)

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Consider updating the Swagger documentation URL.

The addition of a link to Swagger documentation is helpful. However, the current URL (http://localhost:3001/api-docs) is set to localhost, which may not work for all users.

Consider updating the URL to a more generic or production-ready link. For example:

-[Swagger Documentation](http://localhost:3001/api-docs)
+[Swagger Documentation](https://triumphant-magic-production.up.railway.app/api-docs)

This change aligns with the production URL mentioned earlier in the README.

📝 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
All API calls can be viewed in Swagger:
[Swagger Documentation](http://localhost:3001/api-docs)
All API calls can be viewed in Swagger:
[Swagger Documentation](https://triumphant-magic-production.up.railway.app/api-docs)

Comment on lines 89 to 90
chainId: Int!
chain: String!
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

⚠️ Potential issue

Inconsistency Detected in Field Naming Across Multiple GraphQL Files

The fields originChainId and originChain are still present in several GraphQL files, including:

  • packages/rfq-indexer/api/src/graphql/queries/queries.graphql
  • packages/rfq-indexer/api/src/graphql/types/events.graphql

This inconsistency can lead to confusion and potential breaking changes in queries and mutations.

🔗 Analysis chain

Consider maintaining consistency across event types and clarify the rationale for changes.

The addition of chainId and chain fields to replace originChainId and originChain introduces inconsistency with other event types in this file. This change may lead to:

  1. Confusion for developers working with multiple event types.
  2. Breaking changes for existing queries using originChainId or originChain for BridgeProofDisputedEvent.

To address these concerns:

  1. Consider updating all event types to use the new chainId and chain fields for consistency, or provide a clear rationale for why this specific event type differs.
  2. Update the documentation to reflect these changes and guide users on migrating their queries.
  3. If this change is intentional, please clarify the rationale behind renaming these fields specifically for BridgeProofDisputedEvent.

To assess the impact of these changes, let's check for usage of the old field names across the codebase:

This will help identify any queries that may need to be updated due to these changes.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for usage of originChainId and originChain in GraphQL queries or mutations
rg --type graphql 'originChainId|originChain'

Length of output: 79


Script:

#!/bin/bash
# Search for usage of originChainId and originChain in GraphQL queries or mutations by targeting .graphql files
rg -g "*.graphql" 'originChainId|originChain'

Length of output: 1206

Comment on lines +90 to +91
chainId: ColumnType<number>
chain: ColumnType<string>
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

⚠️ Potential issue

Inconsistency Confirmed in Chain-Related Property Names

The search results indicate that originChainId and originChain are still present in multiple files across the codebase. This confirms the inconsistency highlighted in the review comment.

Affected Files and Locations:

  • packages/rfq-indexer/api/src/types/index.ts
  • packages/rfq-indexer/indexer/ponder.schema.ts
  • packages/rfq-indexer/api/src/graphql/resolvers.ts
  • packages/sdk-router/src/*
  • packages/widget/src/*
  • packages/rest-api/src/*
  • packages/synapse-interface/*
  • docs/bridge/src/components/*

Recommended Actions:

  1. Standardize Property Names: Update all interfaces and related code to consistently use either chainId and chain or revert to originChainId and originChain.
  2. Refactor Codebase: Ensure that the renaming aligns with the overall project objectives and does not introduce new issues.
  3. Add Documentation: If different naming conventions are necessary in specific contexts, provide clear explanations within the codebase.
🔗 Analysis chain

Inconsistency in chain-related property names

The properties originChainId and originChain have been renamed to chainId and chain respectively in the BridgeProofDisputedEvents interface. However, other interfaces in this file (e.g., BridgeRequestEvents, BridgeRelayedEvents) still use the origin prefix for these properties.

This inconsistency might lead to confusion or errors when working with different event types. Consider one of the following actions:

  1. Update all interfaces to use the new naming convention (chainId and chain).
  2. Keep the original naming (originChainId and originChain) for consistency with other interfaces.
  3. If there's a specific reason for this change in BridgeProofDisputedEvents, please add a comment explaining the rationale.

To check for any remaining occurrences of the old property names, you can run:

Additionally, could you please clarify how this change relates to the "active only" concept mentioned in the PR objectives? The connection is not immediately apparent from these modifications.


[/run_scripts]

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for remaining occurrences of originChainId and originChain
rg 'originChainId|originChain' --type typescript

Length of output: 165


Script:

#!/bin/bash
# Search for remaining occurrences of originChainId and originChain in TypeScript files
rg 'originChainId|originChain' -g '*.ts' -g '*.tsx'

Length of output: 36784

Comment on lines 100 to 101
'BridgeProofDisputedEvents.chainId as originChainId_dispute',
'BridgeProofDisputedEvents.chain as originChain_dispute',
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Inconsistent field naming between qDisputes function and BridgeProofDisputedEvents table

The field names in the qDisputes function have been updated, but they now differ from the corresponding fields in the BridgeProofDisputedEvents table (see lines 246-247). This inconsistency could lead to errors or confusion when querying the database.

To resolve this, consider one of the following options:

  1. Update the field names in the BridgeProofDisputedEvents table to match these new names.
  2. Revert these changes to maintain consistency with the table structure.

If option 1 is chosen, ensure that all related queries and resolvers are updated accordingly.

Comment on lines 246 to 247
'BridgeProofDisputedEvents.chainId',
'BridgeProofDisputedEvents.chain',
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

⚠️ Potential issue

Field renaming in BridgeProofDisputedEvents may introduce ambiguity and inconsistency

The extensive usage of originChainId and originChain across the codebase indicates that renaming these fields to chainId and chain could lead to significant inconsistencies and potential bugs.

Concerns:

  1. Widespread Inconsistency: The old field names are used extensively in various components, controllers, utilities, and tests.
  2. Potential Ambiguity: Removing the "origin" prefix may cause confusion, especially if there are similar fields for destination chains.
  3. Risk of Breaking Functionality: Renaming without comprehensive refactoring can break existing features and introduce bugs.

Recommendations:

  1. Maintain Consistency: Keep the "origin" prefix to clearly distinguish between origin and destination chain fields.
  2. Comprehensive Refactoring: If renaming is necessary, ensure all references are updated consistently across the entire codebase.
  3. Additional Verification: Conduct a thorough review to identify and address any destination chain fields or other dependencies affected by this change.
🔗 Analysis chain

Field renaming in BridgeProofDisputedEvents may introduce ambiguity and inconsistency

The changes to the field names in the BridgeProofDisputedEvents union query raise several concerns:

  1. Inconsistency with qDisputes function: These changes are not aligned with the field names used in the qDisputes function (lines 100-101).
  2. Potential ambiguity: Removing the "origin" prefix might lead to confusion, especially if there are destination chain fields elsewhere in the codebase.
  3. Possible wider impact: This change might affect other parts of the codebase that rely on these field names.

To address these concerns, consider the following recommendations:

  1. Maintain consistency across the codebase by using the same field naming convention in both the qDisputes function and the BridgeProofDisputedEvents union query.
  2. If the intention is to remove the "origin" prefix, ensure this change is applied consistently throughout the entire codebase and update all related queries and resolvers.
  3. Verify that this change doesn't introduce ambiguity with any destination chain fields that might exist.

To assess the impact of these changes, run the following script to search for usages of the old and new field names:

Review the results to ensure all occurrences are updated consistently and to identify any potential conflicts or ambiguities.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
echo "Searching for usages of old field names (originChainId and originChain):"
rg --type typescript 'originChainId|originChain'

echo "\nSearching for usages of new field names (chainId and chain):"
rg --type typescript '\bchainId\b|\bchain\b'

Length of output: 457


Script:

#!/bin/bash
echo "Searching for usages of old field names (originChainId and originChain) in TypeScript files:"
rg 'originChainId|originChain' --glob '*.ts' --glob '*.tsx'

echo "\nSearching for usages of new field names (chainId and chain) in TypeScript files:"
rg '\bchainId\b|\bchain\b' --glob '*.ts' --glob '*.tsx'

Length of output: 229125

@@ -1,15 +1,25 @@
import { db } from '../db'

// typical fields to return for a BridgeProofProvided event when it is joined to a BridgeRequest
export const qProofs = () => {
return db
export const qProofs = ({ activeOnly}: { activeOnly: boolean} = { activeOnly: false}) => {
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Simplify the function signature by adjusting default parameters and types

You can simplify the function signature by moving the default value into the parameter destructuring and making the type optional.

Apply this diff to simplify the function signature:

-export const qProofs = ({ activeOnly}: { activeOnly: boolean} = { activeOnly: false}) => {
+export const qProofs = ({ activeOnly = false }: { activeOnly?: boolean }) => {
📝 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
export const qProofs = ({ activeOnly}: { activeOnly: boolean} = { activeOnly: false}) => {
export const qProofs = ({ activeOnly = false }: { activeOnly?: boolean }) => {

Copy link
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

🧹 Outside diff range and nitpick comments (6)
packages/rfq-indexer/api/src/controllers/conflictingProofsController.ts (2)

16-16: Approve the implementation of "active only" filtering for proofs.

The addition of {activeOnly: true} to the qProofs() function call correctly implements the "active only" concept as described in the PR objectives. This change ensures that only active proofs are considered in the query, which aligns with the intended functionality.

Consider extracting the activeOnly flag to a constant at the top of the function for improved readability and easier modification:

const ACTIVE_ONLY = true;
// ... later in the code ...
.with('proofs', () => qProofs({activeOnly: ACTIVE_ONLY}))

This change would make the intent clearer and allow for easy toggling of the flag if needed in the future.


47-49: Approve the updated error logging message and suggest improved error handling.

The modification of the error logging message to "Error fetching active conflicting proofs" is appropriate and consistent with the new focus on active proofs. This change provides more context about the specific operation that failed, which can be helpful for debugging.

Consider enhancing the error handling to provide more detailed information to the client in case of an error. Here's a suggested improvement:

} catch (error) {
  console.error('Error fetching active conflicting proofs:', error);
  res.status(500).json({ 
    message: 'Error fetching active conflicting proofs',
    details: error instanceof Error ? error.message : 'Unknown error'
  });
}

This change would provide more informative error responses to the client while maintaining the security of not exposing internal error details directly.

packages/rfq-indexer/api/README.md (2)

14-32: Approve API calls list updates and suggest code block improvements

The renumbering and reorganization of the API calls list improve clarity and consistency. The URL updates in the examples (changing underscores to hyphens) are also beneficial.

To further enhance the README, consider adding language specifiers to the code blocks. For example:

-```
+```bash
 curl http://localhost:3001/api/pending-transactions/missing-relay

Apply this change to all code blocks in the API calls list. This will enable syntax highlighting, making the examples more readable.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 Markdownlint</summary><blockquote>

17-17: null
Fenced code blocks should have a language specified

(MD040, fenced-code-language)

---

24-24: null
Fenced code blocks should have a language specified

(MD040, fenced-code-language)

---

31-31: null
Fenced code blocks should have a language specified

(MD040, fenced-code-language)

</blockquote></details>

</details>

---

`38-41`: **Approve new environment variables section**

The addition of the "Env Vars" section is valuable for developers setting up the project. It provides clear information about the required environment variables.


To make the information even more helpful, consider adding example values for each environment variable. For instance:

```diff
 - **NODE_ENV**: Set to `"development"` for localhost testing.
-  - **DATABASE_URL**: PostgreSQL connection URL for the ponder index.
+  - **DATABASE_URL**: PostgreSQL connection URL for the ponder index. Example: `postgresql://username:password@localhost:5432/database_name`

This addition would provide developers with a clearer understanding of the expected format for the DATABASE_URL.

packages/rfq-indexer/api/src/types/index.ts (1)

90-91: Review implications of chain property changes

The changes to chainId and chain in the BridgeProofDisputedEvents interface appear to be isolated. It's crucial to ensure that this change is intentional and that its implications are fully understood across the entire system.

Consider the following:

  1. Review if this change should be applied to other interfaces for consistency.
  2. Update the EventFilter interface if it needs to accommodate this change.
  3. Check if any functions or methods using BridgeProofDisputedEvents need to be updated.
  4. Update any documentation that references the old property names.

Would you like assistance in identifying other areas of the codebase that might need updates based on this change? I can help create a plan to ensure consistency across the system.

packages/rfq-indexer/api/src/controllers/pendingTransactionsController.ts (1)

24-24: Approved: Active-only proofs filter added.

The change to include only active proofs aligns well with the PR objectives. This will ensure that only the most recent and relevant proofs are considered in the query.

Consider adding a brief comment explaining the activeOnly parameter for improved code readability:

.with('proofs', () => qProofs({activeOnly: true})) // Only include active (most recent) proofs
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 35dfa81 and dd9d3a8.

📒 Files selected for processing (10)
  • packages/rfq-indexer/api/README.md (1 hunks)
  • packages/rfq-indexer/api/src/controllers/conflictingProofsController.ts (2 hunks)
  • packages/rfq-indexer/api/src/controllers/disputesController.ts (2 hunks)
  • packages/rfq-indexer/api/src/controllers/pendingTransactionsController.ts (2 hunks)
  • packages/rfq-indexer/api/src/controllers/transactionIdController.ts (2 hunks)
  • packages/rfq-indexer/api/src/graphql/resolvers.ts (2 hunks)
  • packages/rfq-indexer/api/src/graphql/types/events.graphql (1 hunks)
  • packages/rfq-indexer/api/src/queries/disputesQueries.ts (1 hunks)
  • packages/rfq-indexer/api/src/queries/proofsQueries.ts (1 hunks)
  • packages/rfq-indexer/api/src/types/index.ts (1 hunks)
🧰 Additional context used
🪛 Markdownlint
packages/rfq-indexer/api/README.md

17-17: null
Fenced code blocks should have a language specified

(MD040, fenced-code-language)


24-24: null
Fenced code blocks should have a language specified

(MD040, fenced-code-language)


31-31: null
Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🔇 Additional comments (19)
packages/rfq-indexer/api/src/controllers/disputesController.ts (4)

10-10: LGTM: Implemented "active only" filtering for disputes

The addition of {activeOnly: true} to the qDisputes() function call correctly implements the "active only" concept for disputes as described in the PR objectives. This change ensures that only active disputes are retrieved from the database.


21-21: LGTM: Updated response message for clarity

The message update from "No disputes found" to "No active disputes found" accurately reflects the new "active only" filtering behavior. This change provides clearer feedback to API consumers about the nature of the empty result set.


24-24: LGTM: Improved error logging specificity

The error logging message has been updated to "Error fetching active disputes", which accurately reflects the new "active only" filtering behavior. This change enhances the specificity of error logs, making it easier to identify and troubleshoot issues related to fetching active disputes.


Line range hint 1-27: Overall implementation looks good, consider updating documentation

The changes successfully implement the "active only" concept for disputes as outlined in the PR objectives. The implementation is straightforward and consistent throughout the disputesController function.

To ensure completeness:

  1. Please update the API documentation to reflect the new "active only" behavior and the changed response message for no active disputes.
  2. Verify that the qDisputes function in the queries module supports the new activeOnly parameter.

To verify the qDisputes function implementation, please run the following script:

✅ Verification successful

Verification Successful: qDisputes supports activeOnly parameter

The qDisputes function in the queries module correctly implements the activeOnly parameter as intended.

To ensure completeness:

  • Update the API documentation to reflect the new "active only" behavior and the changed response message for no active disputes.
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the qDisputes function supports the activeOnly parameter

# Test: Search for the qDisputes function definition
rg --type typescript -A 10 'export const qDisputes'

Length of output: 88


Script:

#!/bin/bash
# Description: Verify the qDisputes function supports the activeOnly parameter

# Test: Search for the qDisputes function definition in TypeScript files
rg --type ts -A 10 'export const qDisputes'

Length of output: 1292

packages/rfq-indexer/api/src/queries/disputesQueries.ts (4)

3-3: LGTM: Function signature updated to support 'active only' filtering

The addition of the activeOnly parameter with a default value of false is a good approach. It allows for optional filtering of active disputes while maintaining backward compatibility with existing code that doesn't use this parameter.


6-11: LGTM: Left join added to identify active disputes

The left join with BridgeProofProvidedEvents is well-implemented. It correctly identifies disputes that have been superseded by newer proofs, which is essential for determining the active status of a dispute.

The join condition BridgeProofProvidedEvents.blockTimestamp > BridgeProofDisputedEvents.blockTimestamp ensures that only newer proofs are considered, which aligns with the PR objectives.


17-18: Verify the change in field sources

The originChainId and originChain fields are now sourced from BridgeProofDisputedEvents instead of the base table. While this change seems intentional, it's important to verify that this is the correct source for these fields.

Could you please confirm that BridgeProofDisputedEvents.chainId and BridgeProofDisputedEvents.chain are indeed the correct sources for originChainId and originChain respectively? If so, consider updating the field aliases to reflect this change (e.g., chainId_dispute instead of originChainId_dispute).


21-23: LGTM: Conditional query refinement for active disputes

The added condition BridgeProofProvidedEvents.transactionId is null when activeOnly is true correctly filters out disputes that have corresponding proofs. This implementation aligns with the PR objectives of introducing an "active only" concept.

packages/rfq-indexer/api/src/controllers/conflictingProofsController.ts (2)

44-44: Approve the updated response message for clarity.

The modification of the response message to "No active conflicting proofs found" is appropriate and consistent with the new "active only" filtering implemented in the query. This change provides more precise information to the client about the nature of the empty result set, improving the API's clarity and usability.


Line range hint 1-50: Summary: Successful implementation of "active only" concept for conflicting proofs.

The changes in this file consistently implement the "active only" concept for proofs as described in the PR objectives. The modifications include:

  1. Updating the query to filter for active proofs only.
  2. Adjusting the response message for cases with no conflicting proofs.
  3. Updating the error logging message to reflect the focus on active proofs.

These changes enhance the specificity of the data being queried and improve the clarity of the API responses. The core logic of the controller remains intact, ensuring that existing functionality is preserved while adding the new "active only" feature.

To ensure that these changes don't unintentionally affect other parts of the system, it would be beneficial to verify the usage of this controller. Run the following script to check for any direct usage of conflictingProofsController:

This will help identify any areas that might need adjustment due to the changes in this controller.

✅ Verification successful

Verification Successful: conflictingProofsController usage confirmed in conflictingProofsRoute.ts.

The conflictingProofsController is only utilized within packages/rfq-indexer/api/src/routes/conflictingProofsRoute.ts. No other usages found in the codebase, ensuring that changes to this controller do not impact other parts of the system.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for usage of conflictingProofsController in the codebase

# Test: Search for direct usage of conflictingProofsController
rg --type typescript -A 5 'conflictingProofsController'

# Test: Search for API routes that might use this controller
rg --type typescript -A 5 'app\.get\(.*/conflicting-proofs'

Length of output: 187


Script:

#!/bin/bash
# Description: Check for usage of conflictingProofsController in the codebase without specifying file type

# Test: Search for direct usage of conflictingProofsController across all files
rg -A 5 'conflictingProofsController'

# Test: Search for API routes that might use this controller across all files
rg -A 5 'app\.get\(.*/conflicting-proofs'

# Alternatively, specify TypeScript file extensions explicitly
rg -A 5 'conflictingProofsController' --glob '*.ts' --glob '*.tsx'
rg -A 5 'app\.get\(.*/conflicting-proofs' --glob '*.ts' --glob '*.tsx'

Length of output: 2865

packages/rfq-indexer/api/src/graphql/types/events.graphql (1)

89-90: Overall consistency and "active only" feature implementation

While the changes to BridgeProofDisputedEvent are clear, there are a couple of points that need clarification:

  1. The PR objectives mention an "active only" concept, but this file doesn't show any changes related to that feature. Could you provide more information on where and how this feature is implemented?

  2. Given that this change is localized to BridgeProofDisputedEvent, how does it impact the overall API consistency? Are there any plans to update other event types similarly, or is this intentionally different?

  3. Have you considered the potential impact on existing queries that might be using the old field names (originChainId and originChain) for BridgeProofDisputedEvent?

To check for any related changes in other files, you can run:

#!/bin/bash
# Search for files with changes related to "active only" concept
echo "Files with changes related to 'active only' concept:"
rg --type graphql 'active.*only' -g '!events.graphql'

echo "\nFiles with changes to BridgeProofDisputedEvent:"
rg --type graphql 'BridgeProofDisputedEvent' -g '!events.graphql'

This will help us understand the broader context of these changes and ensure that all related modifications are properly reviewed.

packages/rfq-indexer/api/src/types/index.ts (1)

90-91: ⚠️ Potential issue

Inconsistent naming convention for chain-related properties

The changes in the BridgeProofDisputedEvents interface create an inconsistency with other interfaces in the file. While this interface now uses chainId and chain, other interfaces still use originChainId and originChain. This inconsistency could lead to confusion and potential bugs in the system.

Consider the following points:

  1. If this change is intentional, it might be necessary to update other interfaces for consistency.
  2. The EventFilter interface at the end of the file still uses originChainId, which could cause issues if used with the updated BridgeProofDisputedEvents.
  3. If the removal of the "origin" prefix indicates a conceptual change, this should be reflected consistently across all relevant interfaces and documented.

To verify the usage and impact of these changes, please run the following script:

This will help identify potential inconsistencies or areas that might need updating based on the changes made to the BridgeProofDisputedEvents interface.

packages/rfq-indexer/api/src/controllers/pendingTransactionsController.ts (1)

65-76: Approved with concerns: Active-only proofs filter added, but disputes logic removed.

The addition of the activeOnly parameter for proofs is consistent with the PR objectives and the previous function's changes. However, the removal of the disputes table and associated join conditions requires further clarification.

Please clarify the rationale behind removing the disputes logic from this query. This change might have implications on the business logic of pending transactions missing proof. Can you confirm if this simplification is intentional and doesn't negatively impact the expected behavior?

To verify the impact of this change, please run the following script:

This will help us understand if there are any other parts of the codebase that expect disputes to be considered in this context.

packages/rfq-indexer/api/src/graphql/resolvers.ts (3)

100-101: LGTM! Verify usage of renamed fields.

The renaming of originChainId to chainId and originChain to chain in the qDisputes function looks good. This simplification aligns with the changes mentioned in the summary.

To ensure this change doesn't break any existing code, please run the following script to check for any remaining usage of the old field names:


Line range hint 1-624: Overall LGTM! Ensure comprehensive testing.

The changes in this file consistently rename originChainId to chainId and originChain to chain in both the qDisputes function and the SQL query within the events resolver. These changes align with the PR objectives and improve naming consistency.

To ensure the changes don't introduce any regressions:

  1. Update and run all relevant unit and integration tests.
  2. Manually test the affected GraphQL queries, particularly those involving disputes and events.
  3. Verify that the data returned by these queries is correctly structured and contains the expected information.

Run the following script to identify test files that might need updating:

Update the identified test files and GraphQL queries as necessary.


246-247: LGTM! Update result processing code if necessary.

The renaming of originChainId to chainId and originChain to chain in the SQL query is consistent with the changes made in the qDisputes function. This ensures that the field names in the query match the new naming convention.

To ensure that the code processing these query results is updated accordingly, please run the following script:

Make sure to update any code that processes these fields to use the new names chainId and chain.

packages/rfq-indexer/api/src/controllers/transactionIdController.ts (3)

31-31: Including 'disputes' in the result selection

Adding .selectAll('disputes') ensures that dispute data is included in the final output, aligning with the enhanced functionality to display active disputes.


25-25: Ensure correct join conditions for 'proofs' and 'disputes'

Please verify that the leftJoin statements correctly match the appropriate transaction IDs:

  • 'transactionId_deposit' should correspond with 'transactionId_proof' in the 'proofs' table.
  • 'transactionId_deposit' should correspond with 'transactionId_dispute' in the 'disputes' table.

To check the correctness of the join conditions, you can inspect the schema definitions of the involved tables.

#!/bin/bash
# Description: Verify the existence and correctness of transaction ID fields in 'proofs' and 'disputes'

# Test: Search for 'transactionId_proof' in 'proofs' schema definitions.
# Expect: The field exists and is intended for joining with 'deposits'.
rg --type typescript 'transactionId_proof'

# Test: Search for 'transactionId_dispute' in 'disputes' schema definitions.
# Expect: The field exists and is intended for joining with 'deposits'.
rg --type typescript 'transactionId_dispute'

16-17: Verify the correct handling of the activeOnly parameter in qProofs and qDisputes

Please ensure that the activeOnly parameter in the qProofs and qDisputes functions correctly filters proofs and disputes based on their active status:

  • qProofs({ activeOnly: false }) should retrieve all proofs, including those invalidated or replaced by disputes.
  • qDisputes({ activeOnly: true }) should retrieve only active disputes that have not been invalidated or replaced.

To confirm the implementation, you can check how the activeOnly parameter is utilized within these functions.

✅ Verification successful

The activeOnly parameter is correctly handled in both qProofs and qDisputes functions.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the usage of 'activeOnly' in 'qProofs' and 'qDisputes'

# Test: Search for the 'activeOnly' parameter handling in 'qProofs' function.
# Expect: The function applies the 'activeOnly' filter appropriately.
rg --type typescript 'function qProofs' -A 15 | rg 'activeOnly'

# Test: Search for the 'activeOnly' parameter handling in 'qDisputes' function.
# Expect: The function applies the 'activeOnly' filter appropriately.
rg --type typescript 'function qDisputes' -A 15 | rg 'activeOnly'

Length of output: 315


Script:

#!/bin/bash
# Description: Verify the usage of 'activeOnly' in 'qProofs' and 'qDisputes'

# Test: Search for the 'activeOnly' parameter handling in 'qProofs' function.
# Expect: The function applies the 'activeOnly' filter appropriately.
rg --type ts 'function\s+qProofs' -A 15 | rg 'activeOnly'

# Test: Search for the 'activeOnly' parameter handling in 'qDisputes' function.
# Expect: The function applies the 'activeOnly' filter appropriately.
rg --type ts 'function\s+qDisputes' -A 15 | rg 'activeOnly'

Length of output: 117


Script:

#!/bin/bash
# Description: Further verify the usage of 'activeOnly' in 'qProofs' and 'qDisputes'

# Test: Search for 'activeOnly' usage within 'transactionIdController.ts'
rg 'activeOnly' packages/rfq-indexer/api/src/controllers/transactionIdController.ts

# Test: Search for 'activeOnly' usage across the codebase
rg 'activeOnly' --type ts

Length of output: 1736

Comment on lines +10 to +12
All API calls can be viewed in Swagger:

[Swagger Documentation](http://localhost:3001/api-docs)
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Update Swagger documentation link

The addition of the Swagger documentation link is helpful. However, the current URL (http://localhost:3001/api-docs) points to a localhost address, which won't be accessible to users viewing the README on GitHub or other remote locations.

Consider updating the URL to point to the production Swagger documentation. For example:

-[Swagger Documentation](http://localhost:3001/api-docs)
+[Swagger Documentation](https://triumphant-magic-production.up.railway.app/api-docs)

This change ensures that users can access the Swagger documentation regardless of where they're viewing the README.

Committable suggestion was skipped due to low confidence.

Comment on lines 89 to 90
chainId: Int!
chain: String!
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Inconsistent Field Naming in BridgeProofDisputedEvent

The BridgeProofDisputedEvent type has been updated to use chainId and chain instead of originChainId and originChain. However, other GraphQL files in the codebase still utilize originChainId and originChain. This inconsistency can lead to confusion and potential errors when interacting with different event types.

Affected Areas:

  • packages/rfq-indexer/api/src/graphql/queries/queries.graphql still uses originChainId and originChain.

Please ensure that the naming convention is consistent across all event types to maintain clarity and prevent potential issues.

🔗 Analysis chain

Clarify the change from originChainId/originChain to chainId/chain

The BridgeProofDisputedEvent type now uses chainId and chain instead of originChainId and originChain. This change creates an inconsistency with other event types in the file, which still use the origin prefix.

Could you please clarify:

  1. The reason for this change in naming convention?
  2. Whether this change is intentional and specific to BridgeProofDisputedEvent?
  3. If it's intentional, how does it relate to the "active only" concept mentioned in the PR objectives?
  4. If it's not intentional, should we maintain consistency by using originChainId and originChain?

To check the usage of these fields across the codebase, you can run:

This will help us understand if this change affects other parts of the system and if it's consistent with the overall design.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for usage of chainId/chain and originChainId/originChain in GraphQL files
echo "Usage of chainId and chain:"
rg --type graphql 'chainId|chain' -g '!events.graphql'

echo "\nUsage of originChainId and originChain:"
rg --type graphql 'originChainId|originChain' -g '!events.graphql'

Length of output: 415


Script:

#!/bin/bash
# Define a custom type for GraphQL files
rg --type-add 'graphql:*.graphql'

# Search for usage of chainId and chain in GraphQL files excluding events.graphql
echo "Usage of chainId and chain:"
rg 'chainId|chain' --type graphql -g '!events.graphql'

# Search for usage of originChainId and originChain in GraphQL files excluding events.graphql
echo "\nUsage of originChainId and originChain:"
rg 'originChainId|originChain' --type graphql -g '!events.graphql'

Length of output: 780


Script:

#!/bin/bash
# Search for usage of chainId and chain in .graphql files excluding events.graphql
echo "Usage of chainId and chain:"
rg 'chainId|chain' -g '*.graphql' -g '!events.graphql'

# Search for usage of originChainId and originChain in .graphql files excluding events.graphql
echo "\nUsage of originChainId and originChain:"
rg 'originChainId|originChain' -g '*.graphql' -g '!events.graphql'

Length of output: 19800

Comment on lines +20 to +22
if (activeOnly) {
query = query.where('BridgeProofDisputedEvents.transactionId', 'is', null);
}
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Ensure activeOnly logic accounts for the latest proofs and disputes

Currently, the query filters proofs where there is no corresponding dispute event with a later timestamp. However, according to the PR objectives, an event (proof or dispute) is active if it is the latest event for a given transactionId. This means that if a newer proof is submitted after a dispute, the latest proof should be considered active. The current logic does not handle cases where a new proof follows a dispute.

Consider modifying the query to select the latest event (proof or dispute) per transactionId and determine its active status based on which event has the most recent blockTimestamp.

Would you like assistance in updating the query to correctly handle this scenario?

Copy link
Collaborator

@Defi-Moses Defi-Moses left a comment

Choose a reason for hiding this comment

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

Left a few thoughts but looks good to me. Feel free to merge whenever

}
]);

if (activeOnly) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

If there is a proof, and ensuing dispute, and then a new proof, woudl the new proof appear here? given that we are filtering for transactionId of the relayed transaction, wouldnt the new (valid) proof not appear?

Could be wrong here

Copy link
Collaborator

Choose a reason for hiding this comment

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

Nevermind, the leftjoin solves for this

@@ -86,6 +86,6 @@ scalar BigInt
blockNumber: BigInt!
blockTimestamp: Int!
transactionHash: String!
originChainId: Int!
originChain: String!
chainId: Int!
Copy link
Collaborator

Choose a reason for hiding this comment

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

Any reasoning behind this change? The only reason I did this was for standardization with all of our other queries (makes it neater to map fields).

Not a big deal

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

the chain fields on the actual ponder table are not prefixed with origin, but all the other ones are (i should have caught this on the ponder pr but missed it) -- so I think we'd either have to fix it on ponder, use the non-prefixed version here, or try to normalize it here.

On this PR i just switched to non-prefixed but I do agree w/ you its kinda lame. I can instead try to normalize it here -- or do you think it would be worth the extra fuss to try to fix Ponder at this point? It would probably have to rebuild that Disputes table

Copy link
Collaborator

Choose a reason for hiding this comment

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

Lets prefix it and also update ponder. Ill push a quick fix right now to my existing branch (feat/rfq-indexer-updates).

Would rather things be neat and aligned now to avoid further confusion in the future.

trajan0x and others added 2 commits October 5, 2024 16:50
* add fe-release label

* fix label

---------

Co-authored-by: Trajan0x <[email protected]>
Copy link

cloudflare-workers-and-pages bot commented Oct 7, 2024

Deploying sanguine-fe with  Cloudflare Pages  Cloudflare Pages

Latest commit: df0e800
Status: ✅  Deploy successful!
Preview URL: https://50c38d8f.sanguine-fe.pages.dev
Branch Preview URL: https://paro-rfq-indexer-updates-sug.sanguine-fe.pages.dev

View logs

@parodime parodime requested a review from aureliusbtc as a code owner October 7, 2024 13:14
@github-actions github-actions bot added M-ci Module: CI javascript Pull requests that update Javascript code M-explorer-ui M-synapse-interface size/l and removed size/m labels Oct 7, 2024
Copy link
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: 8

🧹 Outside diff range and nitpick comments (17)
packages/explorer-ui/components/misc/ChainImage.tsx (1)

Line range hint 7-30: Consider these improvements for enhanced robustness and flexibility.

While the component logic is sound, consider the following suggestions to further improve the code:

  1. Add TypeScript type annotations for props and the CHAINS_BY_ID object.
  2. Use optional chaining when accessing chain.chainImg and chain.name to prevent potential runtime errors.
  3. Make the fallback icon's color customizable through props.

Here's an example of how you could implement these improvements:

import Image from 'next/image'
import { QuestionMarkCircleIcon } from '@heroicons/react/outline'
import { CHAINS } from '@synapsecns/synapse-constants'

const CHAINS_BY_ID = CHAINS.CHAINS_BY_ID

interface ChainImageProps {
  chainId?: number;
  imgSize?: string;
  className?: string;
  fallbackIconColor?: string;
}

export const ChainImage: React.FC<ChainImageProps> = ({ 
  chainId, 
  imgSize = 'w-4 h-4', 
  className,
  fallbackIconColor = 'currentColor'
}) => {
  if (chainId) {
    const chain = CHAINS_BY_ID[chainId]
    return (
      <Image
        src={chain?.chainImg ?? ''}
        className={`${imgSize} rounded-full mr-2 inline ${className ?? ''}`}
        alt={chain?.name ?? `Chain ${chainId}`}
        height={16}
        width={16}
      />
    )
  } else {
    return (
      <QuestionMarkCircleIcon
        className={`${imgSize} rounded-full mr-2 inline ${className ?? ''}`}
        strokeWidth={1}
        color={fallbackIconColor}
      />
    )
  }
}

These changes will make the component more robust and flexible while maintaining its current functionality.

packages/explorer-ui/pages/_app.tsx (1)

16-16: Approved: Updated GoogleAnalytics component. Consider using an environment variable.

The explicit setting of the Google Analytics ID is good practice. However, consider using an environment variable for the ID to make it easier to manage across different environments.

Consider refactoring the GoogleAnalytics component usage as follows:

-<GoogleAnalytics gaId={'G-BBC13LQXBD'} />
+<GoogleAnalytics gaId={process.env.NEXT_PUBLIC_GA_ID} />

Then, set the NEXT_PUBLIC_GA_ID environment variable in your deployment configurations.

packages/rest-api/src/middleware/logger.ts (1)

23-30: Approve changes with minor suggestions for optimization and clarity.

The new format function enhances the logger's flexibility by handling object messages and ensuring consistency in the message field. However, there are a couple of minor improvements we can make:

  1. To address the performance concern raised by the static analysis tool, we can avoid using the delete operator.
  2. Adding a comment to explain the purpose of this format function would improve code clarity.

Consider applying the following changes:

 export const logger = winston.createLogger({
   level: 'info',
   format: winston.format.combine(
     winston.format.timestamp(),
+    // Process log messages to handle object messages and ensure consistent message field
     winston.format((info) => {
       if (typeof info.message === 'object') {
         Object.assign(info, info.message)
       }
       info.msg = info.msg || info.message
-      delete info.message
+      info.message = undefined  // Use undefined assignment instead of delete
       return info
     })(),
     winston.format.json()
   ),
   transports,
 })

These changes maintain the original functionality while addressing the performance concern and improving code clarity.

🧰 Tools
🪛 Biome

[error] 28-28: Avoid the delete operator which can impact performance.

Unsafe fix: Use an undefined assignment instead.

(lint/performance/noDelete)

.github/workflows/labeler.yml (1)

35-40: LGTM! Consider a minor improvement for consistency.

The new step to add the 'fe-release' label is well-implemented and aligns with the PR objectives. It correctly uses conditional execution and the appropriate action for adding labels.

For consistency with other steps in this workflow, consider adding a comment explaining the purpose of this label, similar to the comments in the 'pr-size-labeler' step. For example:

      - name: Add 'fe-release' label
        if: github.event.pull_request.base.ref == 'fe-release'
        uses: actions-ecosystem/action-add-labels@v1
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          labels: 'fe-release'
        # Adds 'fe-release' label to PRs targeting the fe-release branch
packages/synapse-constants/package.json (1)

3-3: Approve version update and suggest changelog update

The version bump from 1.5.6 to 1.6.0 is appropriate for the changes made. It follows semantic versioning principles.

Don't forget to update the CHANGELOG.md file (if it exists) to reflect the changes in this new version.

packages/rest-api/src/app.ts (2)

Line range hint 14-20: Improved logging for incoming requests.

The addition of the msg property with the request path enhances log readability and provides immediate context. This change is beneficial for quick log scanning and debugging.

Consider using template literals for better readability:

- msg: `Incoming request ${req.path}`,
+ msg: `Incoming request: ${req.path}`,

This small change adds a colon for better visual separation between the message type and the path.


Line range hint 26-34: Enhanced logging for outgoing responses with body truncation.

The changes improve log readability and context by adding a msg property with the original request path. The conditional truncation of the response body for specific paths is a good practice to prevent oversized logs.

For consistency with the incoming request logging, consider using template literals and adding a colon:

- msg: `Outgoing response ${originalPath}`,
+ msg: `Outgoing response: ${originalPath}`,

This change aligns the format with the incoming request logs and improves readability.

packages/synapse-constants/CHANGELOG.md (1)

6-12: LGTM! Consider updating the release date.

The new version entry (1.6.0) and its features are well-documented and follow the correct format. However, the release date (October 5, 2024) is in the future. Consider updating it to the current date or the actual release date if it's different.

🧰 Tools
🪛 Markdownlint

9-9: Expected: h2; Actual: h3
Heading levels should only increment by one level at a time

(MD001, heading-increment)

packages/explorer-ui/utils/classes/Token.ts (1)

158-158: LGTM! Consider using a type guard for additional safety.

The addition of the as number type assertion improves type safety. However, for even better type checking, consider using a type guard:

if (typeof chainId === 'number') {
  obj[chainId] = valOrObj;
} else {
  console.warn(`Unexpected chainId type: ${typeof chainId}`);
}

This approach provides runtime type checking and can help catch potential issues earlier in the development process.

.github/workflows/ui-preview.yaml (1)

66-71: LGTM with suggestion: Build step for synapse-constants package.

The addition of the build step for the synapse-constants package is necessary and well-implemented. It ensures that the package is properly built before deployment.

However, for consistency with the rest of the workflow, consider using the WORKING_DIRECTORY environment variable instead of hardcoding the path. This would make the step more aligned with the existing pattern in the file.

Consider modifying the step as follows:

- name: Build synapse-constants
  run: |
    yarn install
    yarn build
  working-directory: ${{ env.WORKING_DIRECTORY }}

This assumes that the WORKING_DIRECTORY environment variable is correctly set for the synapse-constants package earlier in the workflow.

docs/bridge/docusaurus.config.ts (2)

8-8: LGTM! Consider grouping imports.

The import statement for the search plugin is correct and necessary for the new search functionality.

Consider grouping this import with other third-party imports for better code organization. For example:

import { themes as prismThemes } from 'prism-react-renderer'
import type { Config } from '@docusaurus/types'
import type * as Preset from '@docusaurus/preset-classic'
import { codecovWebpackPlugin } from '@codecov/webpack-plugin'
import searchPlugin from '@easyops-cn/docusaurus-search-local'

150-156: Excellent addition of search functionality!

The integration of the @easyops-cn/docusaurus-search-local plugin is a great improvement for the documentation site. The configuration looks good, with hashed URLs for better sharing and English language support.

Consider exploring additional configuration options to further enhance the search functionality:

  1. Specify the indexing scope if you want to limit search to specific sections:

    docsRouteBasePath: ['docs'],
  2. Adjust the number of search results displayed:

    searchResultLimits: 8,
  3. Enable highlighting of search terms in results:

    highlightSearchTermsOnTargetPage: true,

These options can help fine-tune the search experience for your users. Refer to the plugin's documentation for more advanced configurations.

packages/explorer-ui/pages/token/[tokenAddress].tsx (1)

Line range hint 23-232: Consider enhancing error handling and accessibility

The component implementation looks good overall, but there are a few areas where it could be improved:

  1. Error Handling: The current implementation doesn't seem to handle potential errors from the GraphQL query. Consider adding error handling to provide a better user experience when data fetching fails.

  2. Accessibility: The buttons for filtering transactions (Outgoing and Incoming) could benefit from additional ARIA attributes to improve accessibility.

  3. Loading State: While there's a loading spinner, consider adding aria-busy and aria-live attributes to improve the experience for screen reader users.

Here's a suggestion for improving the accessibility of the filter buttons:

 <button
   onClick={() =>
     setVariables({
       page: 1,
       tokenAddressFrom: [address],
       chainIDFrom: tokenChainID,
       useMv: true,
     })
   }
   className={
     'font-medium rounded-l-md px-4 py-2 border  h-fit  ' +
     (variables?.tokenAddressFrom ? selectStyle : unSelectStyle) +
     (loading ? ' pointer-events-none' : '')
   }
+  aria-pressed={!!variables?.tokenAddressFrom}
+  aria-disabled={loading}
 >
   Outgoing
 </button>

Apply similar changes to the "Incoming" button as well.

For the loading state, consider wrapping the content in a div with aria attributes:

+ <div aria-busy={loading} aria-live="polite">
   {loading ? (
     <div className="flex justify-center align-center w-full my-[100px]">
       <div className="w-[39px] animate-spin">
         <SynapseLogoSvg />
       </div>
     </div>
   ) : (
     <BridgeTransactionTable queryResult={transactionsArr} />
   )}
+ </div>

Would you like me to provide a more comprehensive refactor suggestion for error handling?

packages/explorer-ui/pages/tx/[kappa].tsx (1)

Line range hint 1-329: Consider refactoring for improved maintainability

While the changes in this PR are minimal and don't alter the functionality, I noticed that the BridgeTransaction component is quite large. Consider refactoring this component for improved maintainability:

  1. Extract smaller, reusable components (e.g., for transaction details, address display, etc.).
  2. Use custom hooks to separate logic from presentation.
  3. Consider using a state management solution if the component's state becomes complex.

Here's a basic example of how you might start refactoring:

// TransactionHeader.tsx
const TransactionHeader = ({ kappa }) => (
  <div className="flex flex-row pb-12 mt-5 mb-1 text-white">
    {/* ... */}
  </div>
);

// TransactionDetails.tsx
const TransactionDetails = ({ transaction }) => (
  <div className="py-4 border border-[#252537] rounded-xl w-4/5 mx-auto">
    {/* ... */}
  </div>
);

// useBridgeTransaction.ts
const useBridgeTransaction = (kappa) => {
  // Hook logic here
  return { transaction, loading, error };
};

// BridgeTransaction.tsx
export const BridgeTransaction = ({ queryResult }) => {
  const { kappa } = useRouter().query;
  const { transaction, loading, error } = useBridgeTransaction(kappa);

  if (loading) return <Loading />;
  if (error) return <Error {...error} />;

  return (
    <>
      <TransactionHeader kappa={kappa} />
      <TransactionDetails transaction={transaction} />
    </>
  );
};

This refactoring would make the code more modular, easier to test, and simpler to maintain. Consider implementing similar refactoring throughout the component.

packages/explorer-ui/components/pages/Home/index.tsx (1)

Line range hint 1-380: Consider refactoring for improved maintainability

While not directly related to the current changes, the component could benefit from some structural improvements:

  1. The component is quite large. Consider breaking it down into smaller, more focused components for better maintainability.
  2. There are hardcoded strings (e.g., button labels, CSS classes) that could be extracted into constants or a configuration object.
  3. The use of inline styles could be replaced with a more maintainable CSS solution, such as CSS modules or styled-components.

These suggestions could improve the overall code quality and maintainability of the component. Would you like assistance in implementing any of these refactoring suggestions?

packages/explorer-ui/utils/styles/networks.ts (1)

Line range hint 1-458: Consider refactoring repetitive utility functions

While not directly related to the current changes, I noticed that this file contains multiple utility functions with very similar structures. Consider refactoring these functions to reduce code duplication and improve maintainability. For example, you could create a higher-order function that generates these utility functions based on a configuration object.

Here's a basic example of how you might start this refactoring:

const NETWORK_STYLES = {
  yellow: {
    bg: 'bg-stone-800',
    text: 'text-[#ecae0b]',
    // ... other properties
  },
  eth: {
    bg: 'bg-[#5170ad]',
    text: 'text-[#5170ad] dark:text-[#78a5ff]',
    // ... other properties
  },
  // ... other network styles
}

const createNetworkStyleFunction = (styleProperty) => (chainId) => {
  const networkColor = NETWORK_COLORS[chainId]
  return NETWORK_STYLES[networkColor]?.[styleProperty] || ''
}

export const getNetworkButtonBgClassName = createNetworkStyleFunction('bg')
export const getNetworkTextColor = createNetworkStyleFunction('text')
// ... other utility functions

This approach would centralize the style definitions and make it easier to maintain and update styles in the future.

packages/explorer-ui/components/pages/Home/UniversalSearch/index.tsx (1)

Line range hint 306-310: Approve type annotation addition with a suggestion for improvement.

The addition of the type annotation : string to the chain parameter improves type safety. This is a good practice in TypeScript projects.

Consider using a more specific type instead of string if possible. For example, if there's an enum or union type that represents the possible chain values, it would provide even better type safety. Here's an example of how it could look:

type ChainType = keyof typeof CHAIN_ENUM_BY_ID;

{Object.values(CHAIN_ENUM_BY_ID).map((chain: ChainType) => (
  <MenuItem key={chain} value={chain}>
    {chain.charAt(0).toUpperCase() + chain.slice(1)}
  </MenuItem>
))}

This assumes that CHAIN_ENUM_BY_ID is an object with chain names as keys. Adjust the type according to your actual data structure.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 9fe08f8 and df0e800.

⛔ Files ignored due to path filters (2)
  • packages/explorer-ui/yarn.lock is excluded by !**/yarn.lock, !**/*.lock
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (44)
  • .github/workflows/labeler.yml (1 hunks)
  • .github/workflows/ui-preview.yaml (2 hunks)
  • docs/bridge/CHANGELOG.md (1 hunks)
  • docs/bridge/docusaurus.config.ts (3 hunks)
  • docs/bridge/package.json (2 hunks)
  • docs/bridge/src/components/Routes.tsx (1 hunks)
  • docs/bridge/src/components/USDC.tsx (1 hunks)
  • lerna.json (1 hunks)
  • packages/explorer-ui/CHANGELOG.md (1 hunks)
  • packages/explorer-ui/components/misc/AssetImage.tsx (1 hunks)
  • packages/explorer-ui/components/misc/ChainImage.tsx (1 hunks)
  • packages/explorer-ui/components/misc/ChainInfo.tsx (1 hunks)
  • packages/explorer-ui/components/misc/MostActive.tsx (1 hunks)
  • packages/explorer-ui/components/misc/TokenOnChain.tsx (1 hunks)
  • packages/explorer-ui/components/misc/ToolTip.tsx (1 hunks)
  • packages/explorer-ui/components/pages/Home/UniversalSearch/index.tsx (2 hunks)
  • packages/explorer-ui/components/pages/Home/index.tsx (1 hunks)
  • packages/explorer-ui/package.json (2 hunks)
  • packages/explorer-ui/pages/_app.tsx (2 hunks)
  • packages/explorer-ui/pages/chain/[chainId].tsx (1 hunks)
  • packages/explorer-ui/pages/token/[tokenAddress].tsx (1 hunks)
  • packages/explorer-ui/pages/tx/[kappa].tsx (2 hunks)
  • packages/explorer-ui/pages/txs/index.tsx (1 hunks)
  • packages/explorer-ui/utils/addressToDecimals.ts (1 hunks)
  • packages/explorer-ui/utils/addressToSymbol.ts (1 hunks)
  • packages/explorer-ui/utils/classes/Token.ts (2 hunks)
  • packages/explorer-ui/utils/styles/coins.ts (1 hunks)
  • packages/explorer-ui/utils/styles/networks.ts (1 hunks)
  • packages/explorer-ui/utils/urls/index.ts (1 hunks)
  • packages/rest-api/CHANGELOG.md (1 hunks)
  • packages/rest-api/package.json (1 hunks)
  • packages/rest-api/src/app.ts (2 hunks)
  • packages/rest-api/src/constants/bridgeable.ts (2 hunks)
  • packages/rest-api/src/middleware/logger.ts (1 hunks)
  • packages/rfq-indexer/indexer/CHANGELOG.md (1 hunks)
  • packages/rfq-indexer/indexer/package.json (1 hunks)
  • packages/rfq-indexer/indexer/ponder.schema.ts (1 hunks)
  • packages/rfq-indexer/indexer/src/index.ts (1 hunks)
  • packages/synapse-constants/CHANGELOG.md (1 hunks)
  • packages/synapse-constants/package.json (3 hunks)
  • packages/synapse-constants/rollup.config.js (1 hunks)
  • packages/synapse-interface/CHANGELOG.md (1 hunks)
  • packages/synapse-interface/package.json (2 hunks)
  • packages/synapse-interface/pages/_app.tsx (2 hunks)
✅ Files skipped from review due to trivial changes (14)
  • docs/bridge/CHANGELOG.md
  • docs/bridge/src/components/Routes.tsx
  • lerna.json
  • packages/explorer-ui/CHANGELOG.md
  • packages/explorer-ui/components/misc/TokenOnChain.tsx
  • packages/explorer-ui/pages/txs/index.tsx
  • packages/explorer-ui/utils/addressToDecimals.ts
  • packages/explorer-ui/utils/styles/coins.ts
  • packages/explorer-ui/utils/urls/index.ts
  • packages/rest-api/CHANGELOG.md
  • packages/rest-api/package.json
  • packages/rfq-indexer/indexer/CHANGELOG.md
  • packages/rfq-indexer/indexer/package.json
  • packages/synapse-interface/CHANGELOG.md
🧰 Additional context used
🪛 Biome
packages/rest-api/src/middleware/logger.ts

[error] 28-28: Avoid the delete operator which can impact performance.

Unsafe fix: Use an undefined assignment instead.

(lint/performance/noDelete)

🪛 Markdownlint
packages/synapse-constants/CHANGELOG.md

9-9: Expected: h2; Actual: h3
Heading levels should only increment by one level at a time

(MD001, heading-increment)

🔇 Additional comments (41)
docs/bridge/src/components/USDC.tsx (2)

Line range hint 2-7: Consider removing console.log statements and verify USDC.icon usage.

While the usage of USDC.icon remains consistent after the package change, there are a couple of points to consider:

  1. The console.log statements are likely for debugging purposes. Consider removing them before merging to production, or use a proper logging system if the information is necessary.

  2. It's important to verify that USDC.icon is still available and functions correctly with the new package.

To ensure the USDC.icon is still available and functions correctly, please run the following verification script:

#!/bin/bash
# Description: Verify the availability and usage of USDC.icon in the new package

# Test: Check if USDC.icon is available in the new package
node -e "const { USDC } = require('@synapsecns/synapse-constants'); console.log(typeof USDC.icon);"

# Test: Search for any other usages of USDC.icon in the codebase
rg --type typescript --type javascript "USDC\.icon"

1-1: Approved: Good move to a scoped package name.

The change from 'synapse-constants' to '@synapsecns/synapse-constants' is a positive step. Using scoped package names is a best practice for organization-specific packages, as it helps prevent naming conflicts and improves security.

To ensure the new package is correctly set up and available, please run the following verification script:

packages/explorer-ui/utils/addressToSymbol.ts (1)

Line range hint 3-19: Function logic remains correct and unchanged.

The addressToSymbol function's implementation is consistent with the import change. It correctly uses the TOKEN_HASH_MAP from the updated import source.

packages/explorer-ui/components/misc/ChainImage.tsx (1)

4-5: LGTM: Import path updated correctly.

The import path for the CHAINS constant has been updated to use the scoped package @synapsecns/synapse-constants. This change is likely part of a larger refactoring effort to use scoped packages.

To ensure consistency across the codebase, please run the following script:

packages/explorer-ui/pages/_app.tsx (1)

4-4: Approved: Updated Google Analytics import. Verify new library usage.

The change to import GoogleAnalytics from '@next/third-parties/google' is a good move towards using official Next.js integrations. This should provide better compatibility and support.

Please ensure that the new library is used correctly throughout the application by checking its documentation. Run the following command to find any other uses of the old library:

✅ Verification successful

Let's correct the shell script to use the appropriate file types and rerun the search.


Verified: No remaining uses of 'nextjs-google-analytics' found.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for any remaining uses of the old 'nextjs-google-analytics' library
rg --type typescript --type javascript 'nextjs-google-analytics'

Length of output: 99


Script:

#!/bin/bash
# Search for any remaining uses of the old 'nextjs-google-analytics' library
rg --type ts --type js 'nextjs-google-analytics'

Length of output: 48

packages/synapse-constants/rollup.config.js (1)

44-44: LGTM! Verify package references.

The change to use a scoped package name (@synapsecns/synapse-constants) for the bundleName is appropriate and aligns with npm naming conventions. This update improves consistency and clarity in package identification.

To ensure this change is reflected throughout the project, please run the following script to check for any references to the old package name:

If any unexpected references to 'synapse-constants' are found, they should be updated to use the new scoped package name.

✅ Verification successful

Action Required: Re-run Verification Scripts with Corrected Syntax

The previous shell scripts encountered errors due to the unrecognized file type binary. Please use the following corrected scripts to verify references to the old and new package names:


Verified package references.

All code references have been successfully updated to use the new scoped package name (@synapsecns/synapse-constants). References to the old package name are only present in documentation and changelog files, which is expected.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Search for references to the old package name 'synapse-constants'

# Test: Search for 'synapse-constants' in all files. Expect: No results or only in changelog/migration files.
rg --type-not binary --type-not svg --type-not lock "synapse-constants"

# Test: Search for the new package name. Expect: Results in package.json and import statements.
rg --type-not binary --type-not svg --type-not lock "@synapsecns/synapse-constants"

Length of output: 217


Script:

#!/bin/bash
# Description: Search for references to the old package name 'synapse-constants'

# Test: Search for 'synapse-constants' in all files. Expect: No results or only in changelog/migration files.
rg --type-not svg --type-not lock "synapse-constants"

# Test: Search for the new package name. Expect: Results in package.json and import statements.
rg --type-not svg --type-not lock "@synapsecns/synapse-constants"

Length of output: 9986

packages/synapse-constants/package.json (3)

2-2: Approve package name change to scoped package

The change to a scoped package name (@synapsecns/synapse-constants) is a good practice. It improves organization and reduces potential naming conflicts in the npm registry.


17-19: Approve addition of publishConfig

The addition of the publishConfig field with "access": "public" is a good practice. It explicitly defines the package as publicly accessible when published to npm, which is especially important for scoped packages.


49-51: Request clarification on devDependencies removal

The devDependencies section has been significantly reduced. While this could potentially simplify the package, it might also impact development and build processes.

Could you please clarify the reasoning behind removing most of the devDependencies? Specifically:

  1. Are these dependencies no longer needed for development or building?
  2. Have the build scripts been updated to accommodate these changes?

To verify if any of the removed devDependencies are still referenced in the package scripts, run:

#!/bin/bash
# Description: Check for references to removed devDependencies in package scripts
jq -r '.scripts | to_entries[] | .value' package.json | grep -E "rollup|eslint|babel"

If this command returns any results, it might indicate that some removed devDependencies are still being used in scripts.

docs/bridge/package.json (4)

3-3: Version update looks good.

The version bump from 0.3.2 to 0.3.7 indicates new features or improvements without breaking changes, which aligns with semantic versioning principles.


37-37: Synapse constants package updated successfully.

The migration from "synapse-constants" to "@synapsecns/synapse-constants" and the version update from 1.3.22 to 1.6.0 is noted.

Please ensure that your code is compatible with the new version of the constants package. There might be breaking changes or new features that need to be addressed.

To verify the usage of the new package, please run the following script:

#!/bin/bash
# Check for usage of the new @synapsecns/synapse-constants package

# Look for imports of the new package
rg --type js "from ['\"']@synapsecns/synapse-constants" ./src

# Look for any remaining usage of the old package
rg --type js "from ['\"']synapse-constants" ./src

If the second command returns any results, those imports need to be updated to use the new package.


43-43: Verify React compatibility with updated Docusaurus.

The react-dom dependency remains at "^18.2.0", which is fine if there are no compatibility issues.

Please verify that React 18.2.0 is fully compatible with the updated Docusaurus 3.5.2. You may want to check the Docusaurus documentation for any specific React version requirements.

To verify the React and Docusaurus versions in use, please run the following script:

#!/bin/bash
# Check React and Docusaurus versions

# Display installed versions
echo "Installed versions:"
npm list react react-dom @docusaurus/core | grep -E 'react@|react-dom@|@docusaurus/core@'

# Check Docusaurus documentation for React compatibility
echo "Checking Docusaurus documentation for React compatibility..."
curl -s https://docusaurus.io/docs | grep -i "react.*version"

Compare the output with the Docusaurus documentation to ensure compatibility.


35-35: Local search plugin added successfully.

The addition of @easyops-cn/docusaurus-search-local for offline search capabilities is a good improvement for user experience.

Please verify that version 0.44.5 of the search plugin is compatible with Docusaurus 3.5.2. You may want to check if there's a more recent version of the plugin that aligns better with your Docusaurus version.

To verify the integration, please run the following script:

#!/bin/bash
# Check if the local search plugin is properly configured in the Docusaurus configuration

# Look for local search configuration in docusaurus.config.js
rg --type js 'themes:.*\[@easyops-cn/docusaurus-search-local' ./docusaurus.config.js
packages/explorer-ui/components/misc/ChainInfo.tsx (1)

5-5: Approve the import change with verification suggestions.

The update to the import statement for CHAINS from 'synapse-constants' to '@synapsecns/synapse-constants' looks good. This change likely reflects a move to a scoped package or a package rename.

To ensure this change doesn't introduce any issues:

  1. Verify that the @synapsecns/synapse-constants package is compatible with the current codebase and that there are no breaking changes in the CHAINS object structure.
  2. Check if other files in the project need similar updates to maintain consistency.

You can use the following script to find other occurrences of the old import:

If you find other files using the old import, consider updating them as well for consistency across the project.

packages/rest-api/src/app.ts (1)

Line range hint 1-80: Overall assessment: Logging improvements enhance system observability.

The changes to this file focus on improving the logging system by adding more context to log messages and implementing smart truncation for potentially large response bodies. These modifications enhance the system's observability without altering the core functionality of the application.

The improvements align well with the PR objectives of enhancing overall usability and providing clearer information for debugging and monitoring purposes.

packages/explorer-ui/components/misc/AssetImage.tsx (1)

Line range hint 6-70: No further changes required in the file.

The usage of the imported constants (TOKEN_HASH_MAP, AVWETH, USDC) remains consistent throughout the AssetImage component and hasRequiredData function. No additional modifications are needed as a result of the import change.

packages/rfq-indexer/indexer/ponder.schema.ts (1)

88-89: Approve changes and verify impact

The renaming of chainId to originChainId and chain to originChain in the BridgeProofDisputedEvents table improves consistency with other tables in the schema and clarifies that these fields refer to the origin chain. This change aligns well with the PR objectives.

To ensure this change doesn't break existing functionality, please run the following script to check for any references to the old field names:

✅ Verification successful

Change verified and approved

The renaming of chainId to originChainId and chain to originChain in the BridgeProofDisputedEvents table was verified. No references to the old field names were found in the codebase, ensuring that existing functionality remains unaffected.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for references to old field names in the codebase

# Search for 'chainId' and 'chain' in the context of BridgeProofDisputedEvents
rg --type typescript --type javascript "BridgeProofDisputedEvents.*chainId" ./packages
rg --type typescript --type javascript "BridgeProofDisputedEvents.*chain[^I]" ./packages

echo "If any results are shown above, those files may need to be updated to use the new field names (originChainId and originChain)."

Length of output: 512


Script:

#!/bin/bash
# Description: Check for references to old field names in the codebase

# Search for 'chainId' and 'chain' in the context of BridgeProofDisputedEvents within .ts and .js files
rg -g "*.ts" -g "*.js" "BridgeProofDisputedEvents.*chainId" ./packages
rg -g "*.ts" -g "*.js" "BridgeProofDisputedEvents.*chain[^I]" ./packages

echo "If any results are shown above, those files may need to be updated to use the new field names (originChainId and originChain)."

Length of output: 410

packages/explorer-ui/package.json (3)

3-3: Verify the version update from 0.3.8 to 0.3.10.

The package version has been updated from 0.3.8 to 0.3.10. Please ensure this version bump accurately reflects the changes made in this PR and follows your versioning strategy.

Could you confirm if skipping version 0.3.9 was intentional?


18-18: New dependencies added: Verify necessity and impact.

Two new dependencies have been added:

  1. @next/third-parties: "^14.2.14"
  2. @synapsecns/synapse-constants: "^1.6.0"

These additions look good and seem to align with the project's needs. However, please ensure:

  1. The @next/third-parties package is necessary and its features are being utilized in the project.
  2. The upgrade from synapse-constants to @synapsecns/synapse-constants is intentional and doesn't introduce breaking changes.

Could you provide more context on how these new dependencies will be used in the project?

Also applies to: 20-20


20-20: Verify removal of 'synapse-constants' dependency.

The synapse-constants dependency (version ^1.5.6) has been removed and replaced with @synapsecns/synapse-constants (version ^1.6.0). This change looks good as it appears to be an upgrade to a newer, possibly organization-specific package.

Please confirm that all usages of the old synapse-constants package have been updated to use @synapsecns/synapse-constants. You can use the following script to check for any remaining imports of the old package:

packages/synapse-interface/pages/_app.tsx (1)

16-16: LGTM: Google Analytics import added correctly.

The import statement for GoogleAnalytics from @next/third-parties/google is correctly added and follows best practices.

packages/explorer-ui/components/misc/ToolTip.tsx (3)

Line range hint 8-8: Usage of imported CHAINS constant is consistent.

The usage of the CHAINS constant to access CHAIN_ID_NAMES_REVERSE remains unchanged and consistent with the updated import. This indicates that the new package still provides the same structure and functionality as before.


Line range hint 1-110: Summary: Minor import change with no functional impact.

The only modification in this file is the update to the import statement for the CHAINS constant. The rest of the CurrencyTooltip component remains unchanged, maintaining its existing functionality. This change appears to be part of a larger refactoring effort to use scoped packages or update package names.

Ensure that this change is consistent across the project and that any necessary documentation updates have been made to reflect the new import pattern.


3-3: Approve import change and suggest follow-up actions.

The update to the import statement for CHAINS looks good. This change likely reflects a move to a scoped package or a package rename.

To ensure consistency across the project:

  1. Verify that this change has been applied uniformly across all files using the CHAINS import.
  2. Update the project's documentation to reflect this new import pattern if it's a global change.

Run the following script to check for any remaining old imports:

If the script returns results, those files may need to be updated as well.

packages/synapse-interface/package.json (1)

35-35: New dependency @next/third-parties looks appropriate.

The addition of @next/third-parties is consistent with the project's use of Next.js and can be beneficial for managing third-party scripts more efficiently.

To ensure this new dependency is being utilized in the project, please run the following command to search for its usage:

If no results are found, consider adding a TODO comment in the relevant file(s) where you plan to use this package.

✅ Verification successful

Usage of @next/third-parties confirmed.

The @next/third-parties dependency is actively used in the project in the following files:

  • packages/synapse-interface/pages/_app.tsx
  • packages/explorer-ui/pages/_app.tsx
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for usage of @next/third-parties in the project files
rg --type-add 'nextjs:*.{js,jsx,ts,tsx}' -t nextjs '@next/third-parties'

Length of output: 272

packages/synapse-constants/CHANGELOG.md (2)

Line range hint 1-17: LGTM! Changelog structure and formatting are consistent.

The changelog follows the Conventional Commits format consistently. The use of "Version bump only" notes for some entries is appropriate in a monorepo setup. The overall structure and formatting of the changelog are well-maintained.

🧰 Tools
🪛 Markdownlint

9-9: Expected: h2; Actual: h3
Heading levels should only increment by one level at a time

(MD001, heading-increment)


9-9: Static analysis hint can be safely ignored.

The static analysis tool flagged this line for using an h3 heading (###) instead of an h2 heading (##). However, in the context of a changelog, using h3 for "Features" is common and appropriate. This appears to be a false positive from the static analysis tool and can be safely ignored.

🧰 Tools
🪛 Markdownlint

9-9: Expected: h2; Actual: h3
Heading levels should only increment by one level at a time

(MD001, heading-increment)

packages/explorer-ui/utils/classes/Token.ts (1)

2-2: LGTM! Verify package consistency across the project.

The update to use the scoped package @synapsecns/synapse-constants is a good practice. It helps with better organization and avoids potential naming conflicts.

To ensure consistency, please run the following script to check for any remaining usages of the old import:

.github/workflows/ui-preview.yaml (1)

11-11: LGTM: New path filter for synapse-constants package.

The addition of the 'packages/synapse-constants/**' path filter to the pull_request trigger is appropriate. This ensures that the workflow runs when changes are made to the synapse-constants package, which is consistent with the existing structure and aligns with the PR objectives.

packages/rfq-indexer/indexer/src/index.ts (1)

168-169: Improved naming consistency for chain-related properties.

The renaming of chainId to originChainId and chain to originChain in the FastBridgeV2:BridgeProofDisputed event handler improves consistency with other event handlers in the file. This change aligns with the naming convention used in other functions like BridgeRequested, BridgeDepositRefunded, and BridgeRelayed.

docs/bridge/docusaurus.config.ts (1)

77-79: Great addition for user experience!

The colorMode configuration with respectPrefersColorScheme: true is an excellent addition. This will allow the documentation site to automatically adjust its color scheme based on the user's system preferences, enhancing accessibility and user experience.

packages/explorer-ui/pages/tx/[kappa].tsx (2)

42-46: Verify consistency with project's coding standards

The semicolons have been removed from the end of statements in the getTimeElapsedStr function. While this doesn't affect the functionality, it represents a shift in coding style.

Please ensure that this style change (omitting semicolons) is consistent with the project's coding standards. If this is an intentional change in the project's style guide, consider using a linter or formatter to apply this change consistently across all files in the project.

To check the consistency of semicolon usage in the project, you can run the following script:

#!/bin/bash
# Description: Check for inconsistent semicolon usage in TypeScript/JavaScript files

# Count files with semicolons at the end of lines
with_semicolons=$(rg --type typescript --type javascript '[^;]{1};$' -c | wc -l)

# Count files without semicolons at the end of lines
without_semicolons=$(rg --type typescript --type javascript '[^;]{1}$' -c | wc -l)

echo "Files with semicolons: $with_semicolons"
echo "Files without semicolons: $without_semicolons"

if [ $with_semicolons -gt 0 ] && [ $without_semicolons -gt 0 ]; then
    echo "Warning: Mixed semicolon usage detected in the project."
    echo "Consider using a linter or formatter to ensure consistency."
fi

This script will help identify if there's a mix of semicolon usage in the project, which could indicate inconsistent coding styles.


7-7: Verify consistency of import change across the project

The import statement for CHAINS has been updated from 'synapse-constants' to '@synapsecns/synapse-constants'. This change likely reflects an update in the package structure or naming convention.

To ensure this change is consistent across the entire project and to avoid potential import errors, please run the following script:

This script will help identify any files that might still be using the old import style or have mixed usage, ensuring consistency across the project.

✅ Verification successful

Consistent import style confirmed across the project

All files are now using the updated import statement from '@synapsecns/synapse-constants'. No instances of the old import style or mixed usage were found.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for inconsistent imports of synapse-constants

# Search for old import style
echo "Files still using old import style:"
rg --type typescript --type javascript "from 'synapse-constants'" -l

# Search for new import style
echo "Files using new import style:"
rg --type typescript --type javascript "from '@synapsecns/synapse-constants'" -l

# Check for mixed usage
echo "Files with mixed usage:"
rg --type typescript --type javascript "from '(@synapsecns/)?synapse-constants'" -l | sort | uniq -d

Length of output: 385


Script:

#!/bin/bash
# Description: Check for inconsistent imports of synapse-constants

# Search for old import style
echo "Files still using old import style:"
rg "from 'synapse-constants'" --files-with-matches --glob '*.ts' --glob '*.tsx' --glob '*.js' --glob '*.jsx'

# Search for new import style
echo "Files using new import style:"
rg "from '@synapsecns/synapse-constants'" --files-with-matches --glob '*.ts' --glob '*.tsx' --glob '*.js' --glob '*.jsx'

# Check for mixed usage
echo "Files with mixed usage:"
rg "from '(@synapsecns/)?synapse-constants'" --files-with-matches --glob '*.ts' --glob '*.tsx' --glob '*.js' --glob '*.jsx' | sort | uniq -d

Length of output: 1557

packages/explorer-ui/pages/chain/[chainId].tsx (2)

Line range hint 1-385: Confirm no impact on existing functionality.

The change in the import statement for CHAINS doesn't affect the rest of the file. The usage of CHAIN_ID_NAMES_REVERSE and other functionalities remain intact. This suggests that the change is purely organizational and doesn't introduce any breaking changes to the existing code.


4-4: LGTM. Verify import consistency across the project.

The import statement for CHAINS has been updated correctly. This change likely reflects a modification in the package structure or naming convention.

To ensure consistency across the project, run the following script to check for any remaining instances of the old import:

✅ Verification successful

Please run the following script to verify import consistency across .ts and .tsx files:


Import consistency verified successfully.

All instances of the old import statement have been updated to @synapsecns/synapse-constants across the project.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining instances of the old import statement

# Test: Search for the old import statement
rg --type typescript --type javascript "import.*from 'synapse-constants'"

# Test: Search for the new import statement to confirm its usage
rg --type typescript --type javascript "import.*from '@synapsecns/synapse-constants'"

Length of output: 245


Script:

#!/bin/bash
# Description: Check for any remaining instances of the old import statement in TypeScript files

# Test: Search for the old import statement in .ts and .tsx files
rg "import\s+\{?\s*CHAINS\s*\}?\s+from\s+'synapse-constants'" --glob '*.ts' --glob '*.tsx'

# Test: Search for the new import statement to confirm its usage in .ts and .tsx files
rg "import\s+\{?\s*CHAINS\s*\}?\s+from\s+'@synapsecns/synapse-constants'" --glob '*.ts' --glob '*.tsx'

Length of output: 1349

packages/explorer-ui/components/pages/Home/index.tsx (2)

Line range hint 32-35: Approve camelCase naming convention for state setters

The renaming of SetDailyStatisticDuration to setDailyStatisticDuration and SetDailyStatisticCumulative to setDailyStatisticCumulative improves consistency with React naming conventions. This change enhances code readability.

To ensure all occurrences have been updated, please run the following script:

#!/bin/bash
# Description: Check for any remaining instances of the old setter names

# Test: Search for the old setter names
rg --type typescript --type javascript "SetDailyStatistic(Duration|Cumulative)"

If the script returns any results, those occurrences may need to be updated as well.


11-11: Verify consistency of the updated import across the project

The import for CHAINS has been updated to use a scoped package @synapsecns/synapse-constants. This change is likely part of a larger refactoring effort.

To ensure consistency, please run the following script to check for any remaining instances of the old import:

If the script returns any results, those files may need to be updated as well.

packages/explorer-ui/utils/styles/networks.ts (1)

1-1: Update import statement for CHAINS

The import statement for CHAINS has been updated from 'synapse-constants' to '@synapsecns/synapse-constants'. This change suggests a shift in the package structure or naming convention.

To ensure this change doesn't introduce any issues, please run the following script to check for any other occurrences of the old import statement:

✅ Verification successful

Action Required: Update Shell Script to Correctly Search TypeScript Files

The previous script failed because rg does not recognize the typescript file type. Please use the following updated script to search within .ts and .tsx files:


Import Statement Update Verified

All occurrences of the old import statement 'synapse-constants' have been successfully replaced with '@synapsecns/synapse-constants'. The update is consistent across the codebase with no remaining references to the old import.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining occurrences of the old import statement

# Test: Search for the old import statement
rg --type typescript "import.*from 'synapse-constants'"

# Test: Verify that the new import statement is used consistently
rg --type typescript "import.*from '@synapsecns/synapse-constants'"

Length of output: 209


Script:

# 
#!/bin/bash
# Description: Check for any remaining occurrences of the old import statement

# Test: Search for the old import statement in TypeScript files
rg "import.*from 'synapse-constants'" --glob '*.ts' --glob '*.tsx'

# Test: Verify that the new import statement is used consistently in TypeScript files
rg "import.*from '@synapsecns/synapse-constants'" --glob '*.ts' --glob '*.tsx'

Length of output: 2213

packages/explorer-ui/components/pages/Home/UniversalSearch/index.tsx (1)

2-2: Verify the consistency of the updated import path across the project.

The import statement for CHAINS has been updated to use '@synapsecns/synapse-constants'. Please ensure that this change is consistent across the entire project and that the new import path is correct.

Run the following script to check for any remaining occurrences of the old import path:

✅ Verification successful

Import path updated consistently across the project.

All occurrences of the old import path 'synapse-constants' have been removed, and the new import path '@synapsecns/synapse-constants' is used consistently throughout the project.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining occurrences of the old import path

# Test: Search for the old import path. Expect: No results.
rg --type typescript "import.*from 'synapse-constants'"

# Test: Verify the new import path is used consistently. Expect: Consistent usage across files.
rg --type typescript "import.*from '@synapsecns/synapse-constants'"

Length of output: 209


Script:

#!/bin/bash
# Description: Check for any remaining occurrences of the old import path and verify the new import path is used consistently in TypeScript files.

# Test: Search for the old import path. Expect: No results.
rg --glob '*.ts' --glob '*.tsx' "import.*from 'synapse-constants'"

# Test: Verify the new import path is used consistently. Expect: Consistent usage across TypeScript files.
rg --glob '*.ts' --glob '*.tsx' "import.*from '@synapsecns/synapse-constants'"

Length of output: 2213

packages/rest-api/src/constants/bridgeable.ts (2)

997-997: LGTM. Please clarify the addition of USDCe for POLYGON.

The addition of USDCe for the POLYGON chain using the previous USDC address looks correct. However, it would be beneficial to add a comment explaining the reason for this change and the relationship between USDC and USDCe on the POLYGON chain.

Consider adding a comment above this line to explain the transition or coexistence of USDC and USDCe on the POLYGON chain. For example:

+  // The previous USDC address on Polygon is now used for USDC.e after the USDC upgrade
   [CHAINS.POLYGON.id]: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174',

Please run the following script to check for any other occurrences of USDC or USDCe on POLYGON that might need updating:

#!/bin/bash
# Check for other occurrences of USDC or USDCe on POLYGON

echo "Searching for other occurrences of USDC on POLYGON..."
rg -i "usdc.*polygon" --type ts

echo "Searching for other occurrences of USDCe on POLYGON..."
rg -i "usdce.*polygon" --type ts

echo "Checking for any config files or deployment scripts that might need updating..."
rg -i "0x2791bca1f2de4661ed88a30c99a7a9449aa84174"

437-437: LGTM. Verify the new USDC address for POLYGON chain.

The USDC token address for the POLYGON chain has been updated. This change looks good, but it's crucial to ensure the new address is correct and officially recognized.

Please run the following script to verify the new USDC address on the POLYGON chain:

@@ -1,4 +1,4 @@
import { TOKEN_HASH_MAP } from 'synapse-constants'
import { TOKEN_HASH_MAP } from '@synapsecns/synapse-constants'
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

@synapsecns/synapse-constants is not listed in package.json dependencies.

Please add @synapsecns/synapse-constants to the dependencies or devDependencies in package.json to ensure the import statement resolves correctly.

🔗 Analysis chain

Approve import statement update and verify project-wide consistency.

The import statement has been updated to use a scoped package name @synapsecns/synapse-constants. This change is likely part of a larger effort to organize and potentially publish npm packages.

To ensure consistency across the project, please run the following script:

This script will help identify any inconsistencies in import statements and verify the package.json entry.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the usage of @synapsecns/synapse-constants across the project

# Search for any remaining non-scoped 'synapse-constants' imports
echo "Checking for non-scoped 'synapse-constants' imports:"
rg --type typescript --type javascript "from\s+'synapse-constants'" -g '!node_modules'

# Search for the new scoped package imports
echo "Checking for new scoped '@synapsecns/synapse-constants' imports:"
rg --type typescript --type javascript "from\s+'@synapsecns/synapse-constants'" -g '!node_modules'

# Check package.json for the dependency
echo "Checking package.json for @synapsecns/synapse-constants:"
jq '.dependencies["@synapsecns/synapse-constants"] // .devDependencies["@synapsecns/synapse-constants"] // "Not found"' package.json

Length of output: 807

Comment on lines +42 to +43
"ethers": "5.7.2",
"lodash": "^4.17.21",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

TypeScript version mismatch detected

The package.json specifies TypeScript version ^5.0.4, which does not match the expected ^5.3.3. Please verify that the TypeScript update has been applied correctly to ensure compatibility and access to the latest features.

🔗 Analysis chain

Approve dependency changes and suggest typescript update verification

The movement of "ethers", "lodash", and "viem" from devDependencies to dependencies is appropriate if these packages are now required for the main functionality of synapse-constants.

The update of typescript to version 5.3.3 is a significant change.

Please verify that this major version update of typescript doesn't introduce any breaking changes in the project. Run the following command to check for any type-related issues:

Also applies to: 46-47


Please run the following script to capture and review any TypeScript compilation errors:


Please run the following scripts to verify the TypeScript setup:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify typescript compatibility
npx tsc --noEmit

Length of output: 87


Script:

#!/bin/bash
# Description: Verify TypeScript compatibility and capture errors
npx tsc --noEmit 2> tsc_errors.log
cat tsc_errors.log

Length of output: 110


Script:

#!/bin/bash
# Description: Check if tsc is available and get TypeScript version

# Check if tsc is installed globally
if command -v tsc >/dev/null 2>&1; then
    echo "Global TypeScript version:"
    tsc --version
else
    echo "TypeScript compiler (tsc) is not installed globally."
fi

# Check TypeScript version in package.json
echo "TypeScript version in package.json:"
jq -r '.devDependencies.typescript // .dependencies.typescript // "TypeScript not found in dependencies."' package.json

Length of output: 341

@@ -1,4 +1,4 @@
import { TOKEN_HASH_MAP, CHAINS } from 'synapse-constants'
import { TOKEN_HASH_MAP, CHAINS } from '@synapsecns/synapse-constants'
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Issue Detected: Missing Dependency for @synapsecns/synapse-constants

The package @synapsecns/synapse-constants is being imported in multiple files but is not listed in your project's dependencies or devDependencies. Additionally, it is not installed in node_modules. This will lead to runtime errors due to unresolved modules.

Recommended Actions:

  • Add the Missing Dependency: Ensure that @synapsecns/synapse-constants is added to your package.json under dependencies and install it using your package manager.
    npm install @synapsecns/synapse-constants
    # or
    yarn add @synapsecns/synapse-constants
  • Verify Import Paths: Double-check the import statements to confirm that the package name is correct and consistent across all files.
🔗 Analysis chain

LGTM! Verify consistency across the project.

The import path change from 'synapse-constants' to '@synapsecns/synapse-constants' looks correct. This change likely reflects a move to a scoped package, which is a good practice for better organization and avoiding naming conflicts.

To ensure consistency across the project, please run the following script:

Also, please verify that the '@synapsecns/synapse-constants' package is properly installed in your project's dependencies. You can check this by running:

If you need any assistance with updating other files or installing the package, please let me know.


Issues Detected: Import Path Change May Be Incomplete or Incorrect

The package @synapsecns/synapse-constants is not listed in your project's dependencies and is not installed in node_modules. Additionally, the previous script to verify import statements failed due to unsupported file types.

Please execute the above scripts and provide the outputs to further assess the situation.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining imports from 'synapse-constants'

# Test: Search for imports from 'synapse-constants'. Expect: No results.
rg --type typescript --type javascript "from 'synapse-constants'" -g '!node_modules'

# Test: Search for imports from '@synapsecns/synapse-constants'. Expect: Multiple results.
rg --type typescript --type javascript "from '@synapsecns/synapse-constants'" -g '!node_modules'

Length of output: 267


Script:

#!/bin/bash
# Description: Check if @synapsecns/synapse-constants is installed

# Test: Look for @synapsecns/synapse-constants in package.json. Expect: The package to be listed.
jq '.dependencies["@synapsecns/synapse-constants"]' package.json

# Test: Check if the package is installed in node_modules. Expect: Directory to exist.
if [ -d "node_modules/@synapsecns/synapse-constants" ]; then
    echo "Package is installed in node_modules"
else
    echo "Package is not installed in node_modules"
fi

Length of output: 218


Script:

#!/bin/bash
# Description: Check for any remaining imports from 'synapse-constants' and '@synapsecns/synapse-constants' without specifying file types.

# Test: Search for imports from 'synapse-constants'. Expect: No results.
rg "from ['\"]synapse-constants['\"]" -g '!node_modules'

# Test: Search for imports from '@synapsecns/synapse-constants'. Expect: Multiple results.
rg "from ['\"]@synapsecns/synapse-constants['\"]" -g '!node_modules'

Length of output: 2271


Script:

#!/bin/bash
# Description: Check if @synapsecns/synapse-constants is listed in dependencies or devDependencies.

# Test: Look for @synapsecns/synapse-constants in dependencies and devDependencies.
jq '.dependencies["@synapsecns/synapse-constants"] // .devDependencies["@synapsecns/synapse-constants"]' package.json

Length of output: 124

@@ -24,21 +24,23 @@
"@docusaurus/logger": "3.5.2",
"@docusaurus/module-type-aliases": "3.5.2",
"@docusaurus/plugin-content-docs": "3.5.2",
"@docusaurus/plugin-google-gtag": "^3.5.2",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Google Analytics trackingID Not Found

The trackingID for Google Analytics is not configured in docs/bridge/docusaurus.config.ts. Please ensure that the trackingID is properly set up to enable analytics functionality.

🔗 Analysis chain

Google Analytics plugin added successfully.

The addition of @docusaurus/plugin-google-gtag for Google Analytics integration is appropriate. The version "^3.5.2" aligns with other Docusaurus packages.

Please ensure that necessary privacy measures (such as user consent mechanisms) are in place before enabling Google Analytics. You may want to update your privacy policy accordingly.

To verify the integration, please run the following script:


It seems the previous verification script encountered errors. Please run the following corrected script to verify the Google Analytics configuration:


It appears that docusaurus.config.js does not exist. Please run the following script to locate the Docusaurus configuration file:


Please run the following script to verify that the Google Analytics trackingID is properly configured in docs/bridge/docusaurus.config.ts:


It appears there was a syntax error in the previous script. Please run the following corrected script to verify that the Google Analytics trackingID is properly configured in docs/bridge/docusaurus.config.ts:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if Google Analytics is properly configured in the Docusaurus configuration

# Look for Google Analytics configuration in docusaurus.config.js
rg --type js 'gtag:.*trackingID' ./docusaurus.config.js

Length of output: 312


Script:

#!/bin/bash
# Check if Google Analytics tracking ID is properly configured in docusaurus.config.js

rg --type js 'trackingID\s*:\s*".+"' ./docusaurus.config.js

Length of output: 124


Script:

#!/bin/bash
# Search for Docusaurus configuration files with .js or .ts extensions

fd 'docusaurus\.config\.(js|ts)$' . --type f

Length of output: 81


Script:

#!/bin/bash
# Check if Google Analytics tracking ID is properly configured in docs/bridge/docusaurus.config.ts

rg --type ts 'trackingID\s*[:=]\s*["\']\w+["\']' ./docs/bridge/docusaurus.config.ts

Length of output: 93


Script:

#!/bin/bash
# Check if Google Analytics tracking ID is properly configured in docs/bridge/docusaurus.config.ts

rg --type ts 'trackingID\s*[:=]\s*["'\'']\w+["'\'']' ./docs/bridge/docusaurus.config.ts

Length of output: 89

@@ -1,5 +1,6 @@
import Image from 'next/image'
import { TOKEN_HASH_MAP, AVWETH, USDC } from 'synapse-constants'

import { TOKEN_HASH_MAP, AVWETH, USDC } from '@synapsecns/synapse-constants'
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Missing Dependency: @synapsecns/synapse-constants

The dependency @synapsecns/synapse-constants is not listed in package.json. Please add it to ensure the scoped package is available.

🔗 Analysis chain

LGTM! Verify project dependencies.

The update to use the scoped package @synapsecns/synapse-constants is a good practice for better organization. This change doesn't affect the usage of the imported constants within the file.

Please ensure that the project's package.json has been updated to include this new scoped package. Run the following script to verify:

If the output is null, update the package.json to include this dependency.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the presence of @synapsecns/synapse-constants in package.json

# Test: Search for @synapsecns/synapse-constants in package.json
jq '.dependencies["@synapsecns/synapse-constants"]' package.json

Length of output: 71

@@ -60,6 +61,7 @@ function App({ Component, pageProps }: AppProps) {
<SynapseProvider chains={supportedChains}>
<Provider store={store}>
<PersistGate loading={null} persistor={persistor}>
<GoogleAnalytics gaId={'G-BBC13LQXBD'} />
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

🛠️ Refactor suggestion

Hardcoded Google Analytics IDs Found Across Multiple Files

Several instances of hardcoded Google Analytics IDs were detected:

  • packages/synapse-interface/pages/index.tsx: const TRACKING_ID = 'G-BBC13LQXBD'
  • packages/synapse-interface/pages/_app.tsx: <GoogleAnalytics gaId={'G-BBC13LQXBD'} />
  • packages/explorer-ui/pages/index.tsx: const TRACKING_ID = 'G-BBC13LQXBD'
  • packages/explorer-ui/pages/_app.tsx: <GoogleAnalytics gaId={'G-BBC13LQXBD'} />

Recommendations:

  1. Environment-Based Configuration: Move the GA ID to an environment variable (e.g., NEXT_PUBLIC_GA_ID) to enhance security and facilitate easier management across different environments (development, staging, production).
  2. User Consent Mechanisms: Implement proper user consent mechanisms to ensure compliance with privacy regulations like GDPR before initializing Google Analytics.
🔗 Analysis chain

Consider environment-based configuration for Google Analytics ID.

While the GoogleAnalytics component is correctly placed within the component tree, hardcoding the Google Analytics ID ('G-BBC13LQXBD') directly in the component might not be the best practice for maintainability and security.

Consider the following suggestions:

  1. Move the GA ID to an environment variable for better security and easier management across different environments (development, staging, production).
  2. Ensure that you have proper user consent mechanisms in place before initializing Google Analytics, to comply with privacy regulations like GDPR.

Here's a suggested refactor:

- <GoogleAnalytics gaId={'G-BBC13LQXBD'} />
+ <GoogleAnalytics gaId={process.env.NEXT_PUBLIC_GA_ID} />

Then, set the NEXT_PUBLIC_GA_ID in your environment configuration.

To ensure no other hardcoded GA IDs exist, run:

Consider implementing a consent management system if not already in place. This would allow users to opt-in or opt-out of analytics tracking, which is crucial for compliance with privacy regulations.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for hardcoded Google Analytics IDs
rg --type tsx --type ts --type js 'G-[A-Z0-9]{10}'

Length of output: 80


Script:

#!/bin/bash
# Search for hardcoded Google Analytics IDs in .ts, .tsx, and .js files
rg 'G-[A-Z0-9]{10}' --glob '*.ts' --glob '*.tsx' --glob '*.js'

Length of output: 402

@@ -1,6 +1,6 @@
{
"name": "@synapsecns/synapse-interface",
"version": "0.40.5",
"version": "0.40.6",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

CHANGELOG.md file is missing.

Please add a CHANGELOG.md to document the changes introduced in version 0.40.6.

🔗 Analysis chain

Version update looks good.

The package version has been incremented from 0.40.5 to 0.40.6, which is appropriate for adding new features or making non-breaking changes.

Please ensure that the CHANGELOG.md file has been updated to reflect the changes in this new version. You can verify this by running the following command:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if CHANGELOG.md exists and if it contains an entry for version 0.40.6
if [ -f CHANGELOG.md ]; then
  if grep -q "## \[0.40.6\]" CHANGELOG.md; then
    echo "CHANGELOG.md has been updated with version 0.40.6"
  else
    echo "CHANGELOG.md exists but doesn't contain an entry for version 0.40.6"
  fi
else
  echo "CHANGELOG.md file not found"
fi

Length of output: 90

@@ -2,7 +2,7 @@ import _ from 'lodash'
import { useRouter } from 'next/router'
import { useState, useEffect } from 'react'
import { useSearchParams } from 'next/navigation'
import { TOKEN_HASH_MAP } from 'synapse-constants'
import { TOKEN_HASH_MAP } from '@synapsecns/synapse-constants'
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

@synapsecns/synapse-constants is missing from package.json

The import statement for TOKEN_HASH_MAP uses '@synapsecns/synapse-constants', but this package is not listed in package.json. Please add '@synapsecns/synapse-constants' to your dependencies to ensure the module is available and avoid potential import errors.

🔗 Analysis chain

Verify the updated import path for TOKEN_HASH_MAP

The import path for TOKEN_HASH_MAP has been changed from a relative path to an absolute path. While this change can improve code maintainability, please ensure that:

  1. The new import path '@synapsecns/synapse-constants' is correct and the package is properly installed.
  2. This change is consistent with the project's import style guidelines.
  3. Similar imports across the project are updated accordingly to maintain consistency.

To verify the import, run the following script:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Verify the import statement and its usage

# Check if the package is installed
if ! grep -q "@synapsecns/synapse-constants" package.json; then
  echo "Warning: @synapsecns/synapse-constants is not listed in package.json"
fi

# Check for other occurrences of the old import
rg "from 'synapse-constants'" --type tsx --type ts

# Check for other occurrences of the new import
rg "from '@synapsecns/synapse-constants'" --type tsx --type ts

# Check the usage of TOKEN_HASH_MAP in this file
rg "TOKEN_HASH_MAP" packages/explorer-ui/pages/token/[tokenAddress].tsx

Length of output: 587

Copy link
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: 8

🧹 Outside diff range and nitpick comments (19)
packages/explorer-ui/pages/_app.tsx (1)

16-16: Approve the updated GoogleAnalytics component usage, but consider environment variable for GA ID.

The change from trackPageViews to gaId prop is correct and aligns with the new Google Analytics integration. However, hardcoding the Google Analytics ID directly in the component might not be the best practice.

Consider using an environment variable for the Google Analytics ID. This approach improves security and makes it easier to manage different IDs for various environments (development, staging, production). Here's a suggested implementation:

  1. Add the GA ID to your environment variables (e.g., in .env.local file):

    NEXT_PUBLIC_GA_ID=G-BBC13LQXBD
    
  2. Update the component usage:

    <GoogleAnalytics gaId={process.env.NEXT_PUBLIC_GA_ID} />

This change will make your code more flexible and secure.

packages/rest-api/src/middleware/logger.ts (1)

23-30: Approve with suggestions: Custom format function enhances logging flexibility

The custom format function is a good addition that allows for more flexible logging of object types while maintaining backward compatibility. However, there are a few points to consider:

  1. To avoid potential overwrites of existing properties in the info object, consider using a more cautious approach:
if (typeof info.message === 'object') {
  info = { ...info, ...info.message };
}
  1. Deleting info.message might cause issues if other parts of the system expect it to exist. Instead of deleting it, consider keeping it and renaming it:
info.originalMessage = info.message;
info.message = info.msg || info.message;
  1. The static analysis tool flagged the use of the delete operator as a potential performance issue. To address this, you can set the property to undefined instead:
info.message = undefined;

Would you like me to provide a full refactored version of this custom format function incorporating these suggestions?

🧰 Tools
🪛 Biome

[error] 28-28: Avoid the delete operator which can impact performance.

Unsafe fix: Use an undefined assignment instead.

(lint/performance/noDelete)

.github/workflows/labeler.yml (1)

35-40: Approve new step with minor suggestions.

The new step to add the 'fe-release' label is well-implemented and aligns with the PR objectives. It correctly uses conditional execution and proper authentication.

However, there are two minor suggestions for improvement:

  1. The indentation of this new step is inconsistent with the rest of the file. Consider adjusting it to match the indentation of other steps.

  2. It would be beneficial to add a comment explaining the purpose of this label for future maintainers.

Here's a suggested implementation with these improvements:

      # Add 'fe-release' label to PRs targeting the fe-release branch
      - name: Add 'fe-release' label
        if: github.event.pull_request.base.ref == 'fe-release'
        uses: actions-ecosystem/action-add-labels@v1
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          labels: 'fe-release'
packages/synapse-constants/package.json (1)

3-3: Approved: Version bump to 1.6.0

The version update from 1.5.6 to 1.6.0 is appropriate for introducing new features in a backwards-compatible manner. This aligns with semantic versioning principles.

Don't forget to update the CHANGELOG.md file (if it exists) to document the changes introduced in this new version.

packages/rest-api/src/app.ts (1)

Line range hint 26-33: Improved logging for outgoing responses with security consideration

The changes enhance log readability and security:

  1. Adding the msg field with a descriptive message improves log clarity.
  2. Truncating the response body for specific paths prevents logging large payloads, which is a good security practice.

These modifications align well with structured logging best practices and security considerations.

However, there's a minor suggestion for improvement:

Consider using case-insensitive comparison for both paths to ensure consistent behavior:

-        originalPath === '/' || originalPath.toLowerCase() === '/tokenlist'
+        originalPath.toLowerCase() === '/' || originalPath.toLowerCase() === '/tokenlist'

This change will ensure that '/TokenList' or any other case variation is also caught by the condition.

packages/synapse-constants/CHANGELOG.md (1)

9-9: Adjust heading level for consistency.

The "Features" heading should be an h2 (##) instead of an h3 (###) to maintain proper document hierarchy and consistency with other sections in the changelog.

Apply this change to fix the heading level:

-### Features
+## Features
🧰 Tools
🪛 Markdownlint

9-9: Expected: h2; Actual: h3
Heading levels should only increment by one level at a time

(MD001, heading-increment)

.github/workflows/ui-preview.yaml (2)

66-71: LGTM: New build step for synapse-constants added

The addition of the build step for the synapse-constants package is appropriate and aligns with the PR objectives. This ensures that the package is properly built before deployment.

However, there's a minor optimization opportunity:

Consider removing the working-directory parameter as it's redundant with the cd command. You can simplify the step as follows:

- name: Build synapse-constants
  run: |
    cd packages/synapse-constants
    yarn install
    yarn build

This change would make the step more concise without affecting its functionality.


Line range hint 1-132: Summary: Workflow updates for synapse-constants integration

The changes to this workflow file successfully integrate the synapse-constants package into the UI deployment process. The additions include:

  1. A new path filter to trigger the workflow on changes to the synapse-constants package.
  2. A build step for the synapse-constants package in the deployment job.

These changes align well with the PR objectives and ensure that the synapse-constants package is properly included in the deployment process. The implementation is correct and maintains the overall structure of the workflow.

For future improvements, consider:

  1. Evaluating if other packages in the repository might benefit from similar integration.
  2. Exploring options to make the workflow more modular, allowing easier addition of new packages without modifying the main workflow file.
docs/bridge/docusaurus.config.ts (3)

77-79: LGTM: Color mode respects user preferences.

The colorMode configuration is correctly added and will improve user experience by respecting the system's color scheme preferences.

Consider adding a defaultMode option to set a fallback mode when user preferences are not available:

colorMode: {
  respectPrefersColorScheme: true,
  defaultMode: 'light', // or 'dark'
},

150-156: LGTM: Search plugin configured correctly.

The search plugin is properly configured with hashed URLs and English language support. This will enhance the site's searchability and user experience.

Consider adding more options to fine-tune the search functionality:

[
  searchPlugin,
  {
    hashed: true,
    language: ['en'],
    docsRouteBasePath: '/docs',
    indexBlog: false,
    indexPages: true,
    highlightSearchTermsOnTargetPage: true,
  },
],

These additional options can help customize the search behavior and improve search result relevance.


Line range hint 1-193: Overall: Excellent improvements to Docusaurus configuration.

The changes made to this file enhance the documentation site in several ways:

  1. Addition of a local search functionality
  2. Improved color scheme handling
  3. Better user experience with respect to system preferences

These modifications align well with the PR objectives of improving documentation and usability. The implementation is clean and follows Docusaurus best practices.

As the project grows, consider splitting the Docusaurus configuration into smaller, more manageable files. For example, you could extract the plugin configurations into a separate file for easier maintenance.

packages/explorer-ui/pages/tx/[kappa].tsx (2)

44-44: LGTM: Semicolon removed for consistency.

The semicolon at the end of the return statement has been removed. This change doesn't affect the functionality and is likely for maintaining a consistent coding style.

To ensure consistency, consider running a linter (e.g., ESLint) across the entire project to standardize the use or omission of semicolons.


46-46: LGTM: Semicolon removed for consistency.

The semicolon at the end of the return statement has been removed, consistent with the previous change. This modification maintains the functionality while adhering to a consistent coding style.

As mentioned earlier, to ensure project-wide consistency, consider running a linter (e.g., ESLint) across the entire codebase to standardize the use or omission of semicolons.

packages/explorer-ui/components/pages/Home/UniversalSearch/index.tsx (1)

306-309: Approve type annotation addition and suggest consistency

The addition of the : string type annotation to the chain parameter in the map function enhances type safety. This is a good practice in TypeScript projects.

Consider adding similar type annotations to other parameters and variables throughout the component for consistency. This will further improve the overall type safety of the code.

packages/explorer-ui/components/pages/Home/index.tsx (5)

Line range hint 26-27: Inconsistent naming of setter functions in useState hooks

The setter functions SetDailyStatisticDuration and SetDailyStatisticCumulative should follow the camelCase naming convention, starting with a lowercase letter. This aligns with standard JavaScript practices and maintains consistency with other setters like setDailyStatisticType.

Apply this diff to correct the naming:

-const [dailyStatisticDuration, SetDailyStatisticDuration] = useState('PAST_6_MONTHS')
+const [dailyStatisticDuration, setDailyStatisticDuration] = useState('PAST_6_MONTHS')
-const [dailyStatisticCumulative, SetDailyStatisticCumulative] = useState(true)
+const [dailyStatisticCumulative, setDailyStatisticCumulative] = useState(true)

Line range hint 77-77: Update onClick handlers to use the renamed setter functions

After renaming the setter functions, ensure that all references, including in onClick handlers, are updated to use the new names.

Apply this diff to update the handlers:

- onClick={() => SetDailyStatisticCumulative(false)}
+ onClick={() => setDailyStatisticCumulative(false)}
- onClick={() => SetDailyStatisticCumulative(true)}
+ onClick={() => setDailyStatisticCumulative(true)}

Line range hint 60-68: Optimize cumulative data computation in the onCompleted callback

The current implementation creates a deep copy of data.dailyStatisticsByChain and manually accumulates values. This can be optimized for better performance and readability by using array methods.

Consider refactoring the code as follows:

if (dailyStatisticCumulative) {
-  chartData = JSON.parse(JSON.stringify(data.dailyStatisticsByChain))
-  for (let i = 1; i < chartData.length; i++) {
-    for (const key in data.dailyStatisticsByChain[i]) {
-      if (key !== 'date' && key !== '__typename') {
-        chartData[i][key] += chartData[i - 1]?.[key]
-          ? chartData[i - 1][key]
-          : 0
-      }
-    }
-  }
+  chartData = data.dailyStatisticsByChain.reduce((acc, curr, index) => {
+    if (index === 0) {
+      acc.push(curr);
+    } else {
+      const prev = acc[index - 1];
+      const cumulative = { ...curr };
+      for (const key in curr) {
+        if (key !== 'date' && key !== '__typename') {
+          cumulative[key] += prev[key] || 0;
+        }
+      }
+      acc.push(cumulative);
+    }
+    return acc;
+  }, []);
}

Line range hint 25-29: Consider extracting style classes into a separate module

The style strings unSelectStyle and selectStyle are lengthy and used in multiple places. Extracting them into a separate CSS module or styling solution can improve readability and maintainability.

Example:

/* In a CSS or module file */
.unSelectStyle {
  transition: ease-out;
  border-left: 0;
  border-color: rgba(107, 114, 128, 0.3);
  color: rgba(107, 114, 128, 1);
  background-color: rgba(55, 65, 81, 0.3);
}

.selectStyle {
  color: white;
  border-color: #BE78FF;
  background: var(--synapse-radial);
}

Then update your JSX to use these classes.


Line range hint 115-157: Duplicate button rendering logic

There is repeated code for rendering buttons with similar styling and behavior. Refactoring this into a reusable button component can reduce code duplication and improve maintainability.

Consider creating a ToggleButton component.

// ToggleButton.jsx
const ToggleButton = ({ options, selectedOption, onSelect, disabled }) => (
  <div className="flex items-center h-full">
    {options.map((option, index) => (
      <button
        key={option.value}
        onClick={() => onSelect(option.value)}
        disabled={disabled}
        className={
          'font-medium px-4 py-2 border h-fit ' +
          (selectedOption === option.value ? selectStyle : unSelectStyle) +
          (disabled ? ' pointer-events-none' : '') +
          (index === 0 ? ' rounded-l-md' : '') +
          (index === options.length - 1 ? ' rounded-r-md' : '')
        }
      >
        {option.label}
      </button>
    ))}
  </div>
);

// Usage in Home component
<ToggleButton
  options={[
    { value: 'PAST_MONTH', label: '1mo' },
    { value: 'PAST_3_MONTHS', label: '3mo' },
    { value: 'PAST_6_MONTHS', label: '6mo' },
  ]}
  selectedOption={dailyStatisticDuration}
  onSelect={setDailyStatisticDuration}
  disabled={loadingDailyData}
/>
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 9fe08f8 and df0e800.

⛔ Files ignored due to path filters (2)
  • packages/explorer-ui/yarn.lock is excluded by !**/yarn.lock, !**/*.lock
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (44)
  • .github/workflows/labeler.yml (1 hunks)
  • .github/workflows/ui-preview.yaml (2 hunks)
  • docs/bridge/CHANGELOG.md (1 hunks)
  • docs/bridge/docusaurus.config.ts (3 hunks)
  • docs/bridge/package.json (2 hunks)
  • docs/bridge/src/components/Routes.tsx (1 hunks)
  • docs/bridge/src/components/USDC.tsx (1 hunks)
  • lerna.json (1 hunks)
  • packages/explorer-ui/CHANGELOG.md (1 hunks)
  • packages/explorer-ui/components/misc/AssetImage.tsx (1 hunks)
  • packages/explorer-ui/components/misc/ChainImage.tsx (1 hunks)
  • packages/explorer-ui/components/misc/ChainInfo.tsx (1 hunks)
  • packages/explorer-ui/components/misc/MostActive.tsx (1 hunks)
  • packages/explorer-ui/components/misc/TokenOnChain.tsx (1 hunks)
  • packages/explorer-ui/components/misc/ToolTip.tsx (1 hunks)
  • packages/explorer-ui/components/pages/Home/UniversalSearch/index.tsx (2 hunks)
  • packages/explorer-ui/components/pages/Home/index.tsx (1 hunks)
  • packages/explorer-ui/package.json (2 hunks)
  • packages/explorer-ui/pages/_app.tsx (2 hunks)
  • packages/explorer-ui/pages/chain/[chainId].tsx (1 hunks)
  • packages/explorer-ui/pages/token/[tokenAddress].tsx (1 hunks)
  • packages/explorer-ui/pages/tx/[kappa].tsx (2 hunks)
  • packages/explorer-ui/pages/txs/index.tsx (1 hunks)
  • packages/explorer-ui/utils/addressToDecimals.ts (1 hunks)
  • packages/explorer-ui/utils/addressToSymbol.ts (1 hunks)
  • packages/explorer-ui/utils/classes/Token.ts (2 hunks)
  • packages/explorer-ui/utils/styles/coins.ts (1 hunks)
  • packages/explorer-ui/utils/styles/networks.ts (1 hunks)
  • packages/explorer-ui/utils/urls/index.ts (1 hunks)
  • packages/rest-api/CHANGELOG.md (1 hunks)
  • packages/rest-api/package.json (1 hunks)
  • packages/rest-api/src/app.ts (2 hunks)
  • packages/rest-api/src/constants/bridgeable.ts (2 hunks)
  • packages/rest-api/src/middleware/logger.ts (1 hunks)
  • packages/rfq-indexer/indexer/CHANGELOG.md (1 hunks)
  • packages/rfq-indexer/indexer/package.json (1 hunks)
  • packages/rfq-indexer/indexer/ponder.schema.ts (1 hunks)
  • packages/rfq-indexer/indexer/src/index.ts (1 hunks)
  • packages/synapse-constants/CHANGELOG.md (1 hunks)
  • packages/synapse-constants/package.json (3 hunks)
  • packages/synapse-constants/rollup.config.js (1 hunks)
  • packages/synapse-interface/CHANGELOG.md (1 hunks)
  • packages/synapse-interface/package.json (2 hunks)
  • packages/synapse-interface/pages/_app.tsx (2 hunks)
✅ Files skipped from review due to trivial changes (17)
  • docs/bridge/CHANGELOG.md
  • docs/bridge/src/components/Routes.tsx
  • docs/bridge/src/components/USDC.tsx
  • lerna.json
  • packages/explorer-ui/CHANGELOG.md
  • packages/explorer-ui/components/misc/MostActive.tsx
  • packages/explorer-ui/components/misc/TokenOnChain.tsx
  • packages/explorer-ui/pages/chain/[chainId].tsx
  • packages/explorer-ui/utils/addressToDecimals.ts
  • packages/explorer-ui/utils/addressToSymbol.ts
  • packages/explorer-ui/utils/styles/coins.ts
  • packages/explorer-ui/utils/styles/networks.ts
  • packages/rest-api/CHANGELOG.md
  • packages/rest-api/package.json
  • packages/rfq-indexer/indexer/CHANGELOG.md
  • packages/rfq-indexer/indexer/package.json
  • packages/synapse-interface/CHANGELOG.md
🧰 Additional context used
🪛 Biome
packages/rest-api/src/middleware/logger.ts

[error] 28-28: Avoid the delete operator which can impact performance.

Unsafe fix: Use an undefined assignment instead.

(lint/performance/noDelete)

🪛 Markdownlint
packages/synapse-constants/CHANGELOG.md

9-9: Expected: h2; Actual: h3
Heading levels should only increment by one level at a time

(MD001, heading-increment)

🔇 Additional comments (39)
packages/explorer-ui/components/misc/ChainImage.tsx (1)

4-5: Update to import path looks good, but let's verify consistency.

The change from 'synapse-constants' to '@synapsecns/synapse-constants' appears to be a move towards using a scoped package. This is generally a good practice for better organization and avoiding naming conflicts.

Let's verify if this change is consistent across the codebase:

This will help us ensure that the change has been applied consistently and identify any files that might need updating.

✅ Verification successful

Import path updated consistently across the codebase.

All instances of 'synapse-constants' have been successfully updated to '@synapsecns/synapse-constants' with no residual imports from the old path found.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining imports from 'synapse-constants'
# and new imports from '@synapsecns/synapse-constants'

echo "Checking for remaining imports from 'synapse-constants':"
rg "from 'synapse-constants'" --type typescript

echo "\nChecking for new imports from '@synapsecns/synapse-constants':"
rg "from '@synapsecns/synapse-constants'" --type typescript

Length of output: 467


Script:

#!/bin/bash
# Description: Check for any remaining imports from 'synapse-constants'
# and new imports from '@synapsecns/synapse-constants' in TypeScript files

echo "Checking for remaining imports from 'synapse-constants':"
rg "from 'synapse-constants'" --glob '*.ts' --glob '*.tsx'

echo "\nChecking for new imports from '@synapsecns/synapse-constants':"
rg "from '@synapsecns/synapse-constants'" --glob '*.ts' --glob '*.tsx'

Length of output: 2553

packages/explorer-ui/pages/_app.tsx (1)

4-4: Approve the updated Google Analytics import.

The change from nextjs-google-analytics to @next/third-parties/google is a good move towards using official Next.js integrations. This can potentially improve performance and maintainability.

To ensure this change is part of a broader migration, please run the following script:

If the script returns any results, consider updating those instances as well for consistency.

packages/synapse-constants/package.json (4)

2-2: Approved: Package name updated to use organization scope

The change from "synapse-constants" to "@synapsecns/synapse-constants" is a good practice. It clearly identifies the package as belonging to the Synapse organization and helps prevent naming conflicts in the npm registry.


17-19: Approved: Added publishConfig for public access

The addition of the "publishConfig" field with "access" set to "public" is a good practice. It explicitly defines the package as publicly accessible when published to npm, which is especially important for scoped packages.


49-50: Please explain the removal of most devDependencies

The devDependencies section has been significantly reduced, with only "@codecov/rollup-plugin" remaining. This change raises several concerns:

  1. How will this affect the development and build process?
  2. Are the removed devDependencies (e.g., rollup plugins) no longer necessary?
  3. If they are still needed, why were they moved to the dependencies section?

Please provide rationale for these changes and confirm that the package can still be built and developed as intended.

#!/bin/bash
# Check if removed devDependencies are still used in build scripts
echo "Checking usage of removed devDependencies in build scripts:"
rg --type javascript '@rollup/plugin-commonjs' .
rg --type javascript '@rollup/plugin-json' .
rg --type javascript '@rollup/plugin-node-resolve' .
rg --type javascript '@rollup/plugin-terser' .
rg --type javascript '@rollup/plugin-url' .
rg --type javascript 'rollup-plugin-typescript2' .

Line range hint 20-33: Verify that all scripts still function correctly

While the scripts section remains unchanged, the significant modifications to the dependencies and devDependencies might affect the functionality of these scripts. Please ensure that all scripts, especially the build and test scripts, still work as expected with the new package configuration.

#!/bin/bash
# List all available scripts
echo "Available scripts:"
jq -r '.scripts | keys[]' package.json

# Check if build-related packages are still present
echo "Checking for presence of build-related packages:"
jq -r '.dependencies | keys[]' package.json | grep rollup
jq -r '.devDependencies | keys[]' package.json | grep rollup

# Verify if typescript is correctly configured
echo "Checking for presence of tsconfig.json:"
ls tsconfig.json
docs/bridge/package.json (5)

3-3: Version update looks good.

The version bump from 0.3.2 to 0.3.7 is appropriate for the changes made in this PR. It follows semantic versioning principles for minor updates.


43-43: Updated react-dom versioning style.

The addition of the caret (^) to the react-dom version allows for compatible updates. This change aligns with best practices and the versioning style of other dependencies in the file.


35-35: Local search plugin added.

The addition of @easyops-cn/docusaurus-search-local is a good improvement for offline search functionality. This can enhance user experience, especially for users with slow internet connections.

Ensure that the search functionality is properly configured and working as expected. Run the following script to check for the search configuration:

#!/bin/bash
# Check for search configuration in docusaurus.config.js
grep -n "docusaurus-search-local" docusaurus.config.js

37-37: Updated synapse-constants package.

The change from synapse-constants to @synapsecns/synapse-constants and the version update to ^1.6.0 is appropriate. This move to an organization-scoped package can improve package management.

Ensure that all import statements for synapse-constants have been updated throughout the project. Run the following script to check for any remaining old imports:


27-27: Google Analytics plugin added.

The addition of @docusaurus/plugin-google-gtag is appropriate for tracking site usage. The version ^3.5.2 aligns with other Docusaurus packages.

Ensure that the necessary Google Analytics configuration is added to the Docusaurus configuration file. Also, consider adding a privacy policy page if not already present.

packages/explorer-ui/components/misc/ChainInfo.tsx (1)

8-8: Verify the structure of the CHAINS object from the new package.

The usage of CHAINS to derive CHAINS_BY_ID remains unchanged. However, it's important to ensure that the CHAINS object from the new '@synapsecns/synapse-constants' package has the same structure as the previous one.

Please run the following script to verify the structure of the CHAINS object:

#!/bin/bash
# Description: Verify the structure of the CHAINS object

# Create a temporary file to store the TypeScript code
cat << EOF > temp_verify_chains.ts
import { CHAINS } from '@synapsecns/synapse-constants';

console.log(JSON.stringify(CHAINS, null, 2));
EOF

# Run the TypeScript file and output the result
echo "CHAINS object structure:"
npx ts-node temp_verify_chains.ts

# Clean up the temporary file
rm temp_verify_chains.ts

Compare the output with the expected structure to ensure compatibility.

packages/rest-api/src/app.ts (2)

14-15: Improved logging for incoming requests

The addition of the msg field with a descriptive message enhances log readability. This change follows best practices for structured logging by providing a clear, human-readable message alongside the structured data.


Line range hint 14-33: Overall improvement in logging practices

The changes in this file focus on enhancing the logging mechanism for both incoming requests and outgoing responses. These modifications provide several benefits:

  1. Improved readability: The addition of descriptive messages makes the logs more human-friendly and easier to parse quickly.
  2. Consistent structure: The use of structured logging with specific fields maintains a uniform format, facilitating log analysis.
  3. Security consideration: Truncating large payloads for specific endpoints helps prevent sensitive data exposure in logs.

These changes align well with the PR objectives of making minor tweaks and improvements. They enhance the application's observability without altering its core functionality, which is a valuable addition for debugging and monitoring purposes.

packages/explorer-ui/components/misc/AssetImage.tsx (2)

Line range hint 1-67: No further changes required in this file.

I've reviewed the entire file, and the usage of the imported constants (TOKEN_HASH_MAP, AVWETH, USDC) remains consistent with the updated import. No additional changes are needed in this file as a result of the import update.


3-3: LGTM! Verify package installation and import consistency.

The import statement has been updated to use a scoped package @synapsecns/synapse-constants. This change looks good and aligns with modern JavaScript/TypeScript practices.

To ensure this change is consistent across the project and the package is properly installed, please run the following script:

packages/rfq-indexer/indexer/ponder.schema.ts (1)

88-89: Field renaming in BridgeProofDisputedEvents aligns with schema consistency

The changes to rename chainId to originChainId and chain to originChain in the BridgeProofDisputedEvents table improve consistency across the schema. This aligns with the naming convention used in other event tables like BridgeRequestEvents and BridgeRelayedEvents.

To ensure this change doesn't break any existing queries or code that relies on these field names, please run the following script:

✅ Verification successful

Field renaming in BridgeProofDisputedEvents has been successfully verified

The renaming of chainId to originChainId and chain to originChain in the BridgeProofDisputedEvents table has been thoroughly checked. No remaining references to the old field names were found in the codebase, ensuring consistency and preventing potential issues.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining usage of old field names in the codebase

# Test 1: Search for 'chainId' usage in BridgeProofDisputedEvents context
echo "Searching for 'chainId' usage in BridgeProofDisputedEvents context:"
rg --type typescript --type javascript 'BridgeProofDisputedEvents.*chainId'

# Test 2: Search for 'chain' usage in BridgeProofDisputedEvents context
echo "Searching for 'chain' usage in BridgeProofDisputedEvents context:"
rg --type typescript --type javascript 'BridgeProofDisputedEvents.*chain'

# Note: If these searches return results, they may indicate places where the code needs to be updated to use the new field names.

Length of output: 521


Script:

#!/bin/bash
# Description: Check for any remaining usage of old field names in the codebase

# Test 1: Search for 'chainId' usage in BridgeProofDisputedEvents context
echo "Searching for 'chainId' usage in BridgeProofDisputedEvents context:"
rg 'BridgeProofDisputedEvents.*chainId' --glob '*.ts' --glob '*.js'

# Test 2: Search for 'chain' usage in BridgeProofDisputedEvents context
echo "Searching for 'chain' usage in BridgeProofDisputedEvents context:"
rg 'BridgeProofDisputedEvents.*chain' --glob '*.ts' --glob '*.js'

# Note: If these searches return results, they may indicate places where the code needs to be updated to use the new field names.

Length of output: 435


Script:

#!/bin/bash
# Description: Ensure no remaining usage of old field names in BridgeProofDisputedEvents

# Test 1: Search for 'chainId' usage in BridgeProofDisputedEvents context
echo "Searching for 'chainId' usage in BridgeProofDisputedEvents context:"
fd -e ts -e js -x grep -H 'BridgeProofDisputedEvents.*chainId' {}

# Test 2: Search for 'chain' usage in BridgeProofDisputedEvents context
echo "Searching for 'chain' usage in BridgeProofDisputedEvents context:"
fd -e ts -e js -x grep -H 'BridgeProofDisputedEvents.*chain' {}

Length of output: 435

packages/explorer-ui/package.json (3)

3-3: Version update looks good.

The minor version bump from 0.3.8 to 0.3.10 is appropriate, considering the addition of new dependencies and potential new functionality. This change adheres to semantic versioning principles.


20-20: Dependency upgrade looks good, but verify for breaking changes.

The removal of "synapse-constants": "^1.5.6" and addition of "@synapsecns/synapse-constants": "^1.6.0" appears to be an upgrade and renaming of the same package. This change is appropriate.

To ensure there are no breaking changes, please run the following script:

#!/bin/bash
# Description: Check for potential breaking changes in synapse-constants usage

# Test: Search for usage of synapse-constants that might need updates
echo "Searching for potential breaking changes in synapse-constants usage:"
rg --type js --type ts --type jsx --type tsx 'from [\'"]synapse-constants[\'"]'

If the script returns any results, please review those occurrences to ensure they are updated to use the new package name @synapsecns/synapse-constants.


18-18: New dependencies added correctly.

The addition of @next/third-parties and @synapsecns/synapse-constants looks good. These new dependencies likely introduce new features or improvements to the project.

To ensure these new dependencies are being utilized effectively, please run the following script:

Also applies to: 20-20

✅ Verification successful

Verification Script Correction Needed

The previous script encountered a syntax error and did not execute successfully. Please run the corrected script below to verify the usage of the new dependencies:


Action Required: Update Verification Script to Handle File Extensions

The previous script encountered issues recognizing jsx and tsx file types. Please run the updated script below to verify the usage of the new dependencies:


Import update verified: No remaining imports from 'synapse-constants'.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining imports from 'synapse-constants'

# Test: Search for imports from 'synapse-constants'. Expect: No results.
rg --type typescript --type javascript "from 'synapse-constants'"

Length of output: 108


Script:

#!/bin/bash
# Description: Check for any remaining imports from 'synapse-constants'

# Search for imports from 'synapse-constants' in TypeScript and JavaScript files
rg --glob '*.ts' --glob '*.tsx' "from 'synapse-constants'"

Length of output: 66

packages/synapse-interface/package.json (2)

3-3: LGTM: Version bump looks good.

The version update from 0.40.5 to 0.40.6 follows semantic versioning principles, indicating a minor update with new features or non-breaking changes.


35-35: Verify the usage and compatibility of the new dependency.

The addition of @next/third-parties (version ^14.2.14) is approved. This package is used for efficient loading of third-party scripts in Next.js applications.

Please ensure that:

  1. This dependency is actually used in the codebase.
  2. Its version is compatible with the current Next.js version (^14.1.3) used in the project.

You can run the following script to check for its usage:

packages/synapse-constants/CHANGELOG.md (2)

6-12: LGTM: New version entry and features are well-documented.

The new version 1.6.0 is correctly added with the release date. The two new features are properly documented with links to the related issues and commit hashes. This follows the Conventional Commits guidelines and provides clear information about the changes in this version.

🧰 Tools
🪛 Markdownlint

9-9: Expected: h2; Actual: h3
Heading levels should only increment by one level at a time

(MD001, heading-increment)


Line range hint 1-5: LGTM: Changelog format is consistent and well-structured.

The changelog maintains a consistent format throughout, with proper separation between version entries and clear links to compare versions. This structure adheres to best practices for changelogs and makes it easy for users to track changes across versions.

Also applies to: 13-17

🧰 Tools
🪛 Markdownlint

9-9: Expected: h2; Actual: h3
Heading levels should only increment by one level at a time

(MD001, heading-increment)

packages/explorer-ui/utils/classes/Token.ts (2)

158-158: Improved type safety with explicit casting

The change from obj[chainId] = valOrObj to obj[chainId as number] = valOrObj enhances type safety by explicitly casting chainId to a number when used as an object key. This modification aligns with TypeScript best practices and helps prevent potential type-related issues.


2-2: Verify consistency of import change across the project

The import statement for CHAINS has been updated to use '@synapsecns/synapse-constants'. This change likely reflects a package rename or restructuring.

Please run the following script to ensure this change is consistent across the entire project:

If the first command returns any results, those files may need to be updated as well.

✅ Verification successful

Import statement change confirmed across the project

The search for old import statements returned no results, and the new import statements are present in multiple files. This change is consistent across the project.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining imports from 'synapse-constants'

# Test: Search for old import statements. Expect: No results.
rg --type typescript "from 'synapse-constants'" -g '!node_modules'

# Test: Search for new import statements. Expect: Multiple results.
rg --type typescript "from '@synapsecns/synapse-constants'" -g '!node_modules'

Length of output: 231


Script:

#!/bin/bash
# Description: Check for any remaining imports from 'synapse-constants' and validate new imports.

# Test: Search for old import statements. Expect: No results.
rg "from 'synapse-constants'" --glob '*.ts' --glob '*.tsx' -g '!node_modules'

# Test: Search for new import statements. Expect: Multiple results.
rg "from '@synapsecns/synapse-constants'" --glob '*.ts' --glob '*.tsx' -g '!node_modules'

Length of output: 2317

.github/workflows/ui-preview.yaml (1)

11-11: LGTM: New path filter added correctly

The addition of the 'packages/synapse-constants/**' path filter is appropriate and aligns with the PR objectives. This ensures that changes to the synapse-constants package will trigger the workflow.

packages/rfq-indexer/indexer/src/index.ts (1)

168-169: Improved clarity with originChainId and originChain

The renaming of chainId to originChainId and chain to originChain enhances clarity by explicitly indicating that these fields refer to the origin chain. This change aligns well with the PR objectives and is consistent with naming conventions used in other event handlers.

Consider updating the update object as well for consistency:

    update: {
      relayer: trim(relayer),
+     originChainId: Number(chainId),
+     originChain: getChainName(Number(chainId)),
      blockNumber: BigInt(blockNumber),
      blockTimestamp: Number(timestamp),
      transactionHash: hash,
    },

To ensure consistency across the codebase, please run the following script to check if similar changes are needed in other event handlers:

If the script returns results, consider updating those instances for consistency.

docs/bridge/docusaurus.config.ts (1)

8-8: LGTM: Search plugin import added correctly.

The import statement for the search plugin is correctly placed and will enable the configuration of local search functionality for the Docusaurus site.

packages/explorer-ui/pages/token/[tokenAddress].tsx (2)

Line range hint 134-134: Confirmed: No further changes needed in this file.

The usage of TOKEN_HASH_MAP on this line remains correct after the import path update. No additional modifications are required in this file.


5-5: LGTM: Import path updated correctly.

The import path for TOKEN_HASH_MAP has been updated from 'synapse-constants' to '@synapsecns/synapse-constants'. This change appears to be part of a package restructuring or naming convention update.

To ensure consistency across the project, please run the following script to check if there are any remaining imports from 'synapse-constants' that need to be updated:

If the script returns any results, consider updating those imports as well.

✅ Verification successful

Action Required: Update the rg command with correct file type identifiers.

The previous script used an unrecognized file type typescript. Please use ts for TypeScript and js for JavaScript files. Run the following script to check for any remaining imports from 'synapse-constants':


Verification Successful: No remaining imports from 'synapse-constants'.

All imports from 'synapse-constants' have been updated to '@synapsecns/synapse-constants'. No remaining instances found in the codebase.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Find any remaining imports from 'synapse-constants'

# Search for imports from 'synapse-constants'
rg --type typescript --type javascript "from 'synapse-constants'" -g '!node_modules'

Length of output: 127


Script:

#!/bin/bash
# Description: Find any remaining imports from 'synapse-constants'

# Search for imports from 'synapse-constants' in TypeScript and JavaScript files
rg --type ts --type js "from 'synapse-constants'" -g '!node_modules'

Length of output: 76

packages/explorer-ui/pages/tx/[kappa].tsx (2)

Line range hint 1-359: Overall feedback: Minor changes with no functional impact.

The changes in this file are minimal and don't affect the functionality of the code. The main points to consider are:

  1. The import statement for CHAINS has been updated to use a scoped package name. Ensure this change is applied consistently across the project.
  2. Semicolons have been removed from some return statements. Consider running a linter to maintain consistent style throughout the codebase.

These changes improve code organization and maintain a consistent coding style. However, it's important to verify that these modifications are applied uniformly across the entire project to prevent inconsistencies.


7-7: Verify consistency of the updated import statement across the project.

The import statement for CHAINS has been updated to use a scoped package name @synapsecns/synapse-constants. This change improves the organization of dependencies and follows best practices for package naming.

To ensure this change has been applied consistently across the project, please run the following script:

Ensure that all relevant files have been updated to use the new import statement.

✅ Verification successful

[/run_scripts]


Import statement consistently updated across the project.

All instances of the old import from 'synapse-constants' have been removed and replaced with from '@synapsecns/synapse-constants' in the relevant files.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for any remaining instances of the old import statement
rg --type typescript --type javascript "from 'synapse-constants'" -g '!node_modules'

# Search for the new import statement to confirm its usage
rg --type typescript --type javascript "from '@synapsecns/synapse-constants'" -g '!node_modules'

Length of output: 267


Script:

#!/bin/bash
# Search for any remaining instances of the old import statement
rg --type ts --type js "from 'synapse-constants'" -g '!node_modules'

# Search for the new import statement to confirm its usage
rg --type ts --type js "from '@synapsecns/synapse-constants'" -g '!node_modules'

Length of output: 2299

packages/explorer-ui/components/pages/Home/UniversalSearch/index.tsx (1)

2-2: Approve import statement update and verify consistency

The import statement for CHAINS has been updated to use a namespaced import from @synapsecns/synapse-constants. This change is likely part of a package restructure or renaming.

Please ensure that this import change is consistent across the entire project. Run the following script to check for any remaining imports from the old package:

packages/rest-api/src/constants/bridgeable.ts (1)

Line range hint 1037-1057: LGTM! SPECTRAL token added successfully.

The SPECTRAL token has been added with all necessary information, including addresses for ETHEREUM and BASE chains, decimals, and other required properties. The structure is consistent with other token definitions.

packages/explorer-ui/components/pages/Home/index.tsx (2)

Line range hint 77-81: Potential performance issues with frequent re-fetching of data

Including dailyStatisticCumulative in the dependency array of the useEffect hook may cause frequent data fetching when this state changes. Ensure that this is necessary and consider debouncing or optimizing the re-fetch logic to prevent unnecessary network requests.


11-11: Verify the correctness of the import path for 'CHAINS'

Ensure that the import statement for CHAINS from '@synapsecns/synapse-constants' is correct and that the package is properly installed and accessible. This change may affect module resolution.

Run the following script to check if the module exists:

@@ -41,7 +41,7 @@ export default [
}),
codecovRollupPlugin({
enableBundleAnalysis: process.env.CODECOV_TOKEN !== undefined,
bundleName: 'synapse-constants',
bundleName: '@synapsecns/synapse-constants',
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Package name consistency issues detected.

Please update the following files to replace 'synapse-constants' with '@synapsecns/synapse-constants':

  • packages/synapse-constants/README.md
  • packages/synapse-constants/CHANGELOG.md
🔗 Analysis chain

LGTM! Verify package name consistency.

The update to the bundleName property in the codecovRollupPlugin configuration is correct. It now uses the scoped package name '@synapsecns/synapse-constants', which aligns with npm's naming conventions for scoped packages.

To ensure consistency across the project, please run the following script to check if the package name is updated everywhere:

Please review the output to ensure the package name is consistently updated where necessary.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for consistency of the package name across the project

# Search for both old and new package names
echo "Occurrences of 'synapse-constants':"
rg --type-not js "synapse-constants" -g '!package-lock.json'

echo "\nOccurrences of '@synapsecns/synapse-constants':"
rg --type-not js "@synapsecns/synapse-constants" -g '!package-lock.json'

# Check package.json
echo "\nPackage name in package.json:"
jq .name packages/synapse-constants/package.json

Length of output: 10164

Comment on lines +42 to +43
"ethers": "5.7.2",
"lodash": "^4.17.21",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Unused Dependencies Detected

The following dependencies are not imported or required in the source code:

  • "ethers"
  • "lodash"
  • "viem"
  • "typescript"

Consider reverting these changes unless they are necessary for runtime functionality.

🔗 Analysis chain

Please clarify the changes in dependencies

The following changes in dependencies require explanation:

  1. "ethers", "lodash", and "viem" have been moved from devDependencies to dependencies. Are these now required for the package to function at runtime?
  2. "typescript" has been added as a dependency. Typically, TypeScript is a devDependency. Is there a specific reason for including it as a runtime dependency?

These changes might increase the package size and affect its consumers. Please provide rationale for these modifications.

Also applies to: 46-47

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if these dependencies are used in the source code
echo "Checking usage of newly added dependencies:"
rg --type typescript 'import.*from.*ethers' ./src
rg --type typescript 'import.*from.*lodash' ./src
rg --type typescript 'import.*from.*viem' ./src
rg --type typescript 'import.*from.*typescript' ./src

Length of output: 498

import { QuestionMarkCircleIcon } from '@heroicons/react/outline'

import { CHAINS } from '@synapsecns/synapse-constants'
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

The new package @synapsecns/synapse-constants is not found in package.json or yarn.lock.

This import change will fail because the package is not installed. Please add @synapsecns/synapse-constants to your project's dependencies and run the package manager to install it.

  • Add @synapsecns/synapse-constants to package.json.
  • Run yarn install or the equivalent command to update yarn.lock.
  • Verify that the CHAINS object has the expected structure after installation.
🔗 Analysis chain

Approve the import change and verify package installation.

The update to the import statement from 'synapse-constants' to '@synapsecns/synapse-constants' looks good. This change likely reflects a move to a scoped package or a package name update.

To ensure the change is correctly implemented:

  1. Verify that the '@synapsecns/synapse-constants' package is correctly installed in the project.
  2. Check that the CHAINS object from the new package has the same structure as before.
  3. Update any other files in the project that might still be using the old import statement.

Run the following script to find other files that might need updating:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Find other files still using the old import statement

# Search for files still using the old import
echo "Files still using the old import:"
rg --type typescript "from 'synapse-constants'" -l

# Check if the new package is in package.json
echo "Checking package.json for @synapsecns/synapse-constants:"
jq '.dependencies["@synapsecns/synapse-constants"] // .devDependencies["@synapsecns/synapse-constants"] // "Not found"' package.json

Length of output: 294


Script:

#!/bin/bash
# Description: Find other files still using the old import statement and verify the new package installation

# Search for files still using the old import
echo "Files still using the old import:"
rg --type typescript "from 'synapse-constants'" -l

# Check if the new package is in package.json
echo "Checking package.json for @synapsecns/synapse-constants:"
jq '.dependencies["@synapsecns/synapse-constants"] // .devDependencies["@synapsecns/synapse-constants"] // "Not found"' package.json

Length of output: 440


Script:

#!/bin/bash
# Description: Find other files still using the old import statement and verify the new package installation

# Search for files still using the old import
echo "Files still using the old import:"
rg "from 'synapse-constants'" --glob '*.ts' --glob '*.tsx' -l

# Check if the new package is in package.json
echo "Checking package.json for @synapsecns/synapse-constants:"
jq '.dependencies["@synapsecns/synapse-constants"] // .devDependencies["@synapsecns/synapse-constants"] // "Not found"' package.json

# Additionally, check package-lock.json or yarn.lock for the package
if [ -f package-lock.json ]; then
  echo "Checking package-lock.json for @synapsecns/synapse-constants:"
  grep '"@synapsecns/synapse-constants":' package-lock.json || echo "Not found in package-lock.json"
elif [ -f yarn.lock ]; then
  echo "Checking yarn.lock for @synapsecns/synapse-constants:"
  grep '"@synapsecns/synapse-constants":' yarn.lock || echo "Not found in yarn.lock"
else
  echo "No lock file found to check for @synapsecns/synapse-constants."
fi

Length of output: 694

@@ -60,6 +61,7 @@ function App({ Component, pageProps }: AppProps) {
<SynapseProvider chains={supportedChains}>
<Provider store={store}>
<PersistGate loading={null} persistor={persistor}>
<GoogleAnalytics gaId={'G-BBC13LQXBD'} />
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

⚠️ Potential issue

Implement a user consent mechanism for Google Analytics.

The GoogleAnalytics component is added in packages/synapse-interface/pages/_app.tsx without a user consent mechanism. Please consider the following:

  1. Use an environment variable for the Google Analytics ID to allow flexibility across different environments.
  2. Implement a user consent mechanism before loading Google Analytics to comply with GDPR and other privacy regulations.
  3. Conditionally load analytics based on the environment (e.g., only in production).
import { GoogleAnalytics } from '@next/third-parties/google'

function App({ Component, pageProps }: AppProps) {
  const [consentGiven, setConsentGiven] = useState(false)
  const gaId = process.env.NEXT_PUBLIC_GA_ID

  return (
    <>
      {/* Other components */}
      {consentGiven && process.env.NODE_ENV === 'production' && gaId && (
        <GoogleAnalytics gaId={gaId} />
      )}
      {/* Other components */}
    </>
  )
}
🔗 Analysis chain

Verify Google Analytics implementation and address potential privacy concerns.

The GoogleAnalytics component is correctly placed within the component tree. However, there are some important considerations:

  1. The Google Analytics ID is hardcoded. Consider using an environment variable for flexibility across different environments.
  2. There's no visible mechanism for user consent before loading Google Analytics. This might be required for GDPR compliance.
  3. Analytics are loaded for all users, which might not be necessary in all environments (e.g., development).

To check for any existing consent mechanism, run:

Consider implementing the following:

  1. Use an environment variable for the Google Analytics ID.
  2. Implement a user consent mechanism before loading Google Analytics.
  3. Conditionally load analytics based on the environment.

Example implementation:

import { GoogleAnalytics } from '@next/third-parties/google'

// ... other imports and code

function App({ Component, pageProps }: AppProps) {
  const [consentGiven, setConsentGiven] = useState(false)
  const gaId = process.env.NEXT_PUBLIC_GA_ID

  // ... other code

  return (
    <>
      {/* ... other components */}
      {consentGiven && process.env.NODE_ENV === 'production' && gaId && (
        <GoogleAnalytics gaId={gaId} />
      )}
      {/* ... other components */}
    </>
  )
}

Would you like assistance in implementing these changes or creating a GitHub issue to track this task?

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for consent-related code
rg -i "consent|gdpr|privacy" --type tsx --type ts

Length of output: 79


Script:

#!/bin/bash
# Search for consent-related code in .ts and .tsx files
rg -i "consent|gdpr|privacy" --glob '*.ts' --glob '*.tsx'

Length of output: 3629


Script:

#!/bin/bash
# Extract consent-related code in _app.tsx
rg -i "consent|gdpr|privacy" packages/synapse-interface/pages/_app.tsx

Length of output: 72

@@ -1,4 +1,4 @@
import { CHAINS } from 'synapse-constants'
import { CHAINS } from '@synapsecns/synapse-constants'
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

⚠️ '@synapsecns/synapse-constants' is NOT present in package.json.

Please add '@synapsecns/synapse-constants' to the dependencies or devDependencies in your package.json to ensure the project functions correctly after this import change.

🔗 Analysis chain

LGTM! Verify consistency across the codebase.

The change to import CHAINS from '@synapsecns/synapse-constants' looks good. This move to a scoped package is likely part of a larger refactoring effort.

To ensure consistency, please run the following script to check for any remaining imports from 'synapse-constants':

Also, please verify that the package.json file has been updated to include '@synapsecns/synapse-constants' as a dependency.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining imports from 'synapse-constants'

# Test: Search for imports from 'synapse-constants'. Expect: No results.
rg --type typescript "from 'synapse-constants'" -g '!**/node_modules/**'

# Test: Search for imports from '@synapsecns/synapse-constants'. Expect: Multiple results.
rg --type typescript "from '@synapsecns/synapse-constants'" -g '!**/node_modules/**'

Length of output: 243


Script:

#!/bin/bash
# Description: Check for any remaining imports from 'synapse-constants'

# Test: Search for imports from 'synapse-constants'. Expect: No results.
rg --type ts "from 'synapse-constants'" -g '!**/node_modules/**'

rg --type tsx "from 'synapse-constants'" -g '!**/node_modules/**'

# Test: Search for imports from '@synapsecns/synapse-constants'. Expect: Multiple results.
rg --type ts "from '@synapsecns/synapse-constants'" -g '!**/node_modules/**'

rg --type tsx "from '@synapsecns/synapse-constants'" -g '!**/node_modules/**'

Length of output: 2507


Script:

#!/bin/bash
# Description: Check for any remaining imports from 'synapse-constants' and verify imports from '@synapsecns/synapse-constants'

# Test: Search for imports from 'synapse-constants'. Expect: No results.
rg "from 'synapse-constants'" -g '*.ts' -g '*.tsx' -g '!**/node_modules/**'

# Test: Search for imports from '@synapsecns/synapse-constants'. Expect: Multiple results.
rg "from '@synapsecns/synapse-constants'" -g '*.ts' -g '*.tsx' -g '!**/node_modules/**'

Length of output: 2313


Script:

#!/bin/bash
# Description: Verify that '@synapsecns/synapse-constants' is listed as a dependency in package.json

# Check if jq is installed
if ! command -v jq &> /dev/null; then
    echo "jq is not installed. Please install jq to run this script."
    exit 1
fi

# Path to package.json
PACKAGE_JSON="package.json"

# Verify package.json exists
if [ ! -f "$PACKAGE_JSON" ]; then
    echo "package.json not found in the repository root."
    exit 1
fi

# Check dependencies
dep_exists=$(jq '.dependencies["@synapsecns/synapse-constants"] // empty' "$PACKAGE_JSON")
dev_dep_exists=$(jq '.devDependencies["@synapsecns/synapse-constants"] // empty' "$PACKAGE_JSON")

if [ -n "$dep_exists" ] || [ -n "$dev_dep_exists" ]; then
    echo "'@synapsecns/synapse-constants' is present in package.json."
else
    echo "'@synapsecns/synapse-constants' is NOT present in package.json."
fi

Length of output: 437

@@ -1,4 +1,4 @@
import { CHAINS } from 'synapse-constants'
import { CHAINS } from '@synapsecns/synapse-constants'
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

@synapsecns/synapse-constants package is not listed in package.json

The import statement references @synapsecns/synapse-constants, but it's not listed in the project's dependencies. Please add @synapsecns/synapse-constants to package.json to ensure it's installed and available.

🔗 Analysis chain

Verify the new package import and its contents.

The import statement has been updated to use a scoped package @synapsecns/synapse-constants. This change looks good, but please ensure that:

  1. The new package is correctly installed and available in the project.
  2. The CHAINS object in the new package contains all the necessary properties, especially CHAIN_ID_NAMES_REVERSE which is used in this file.

Run the following script to verify the package and its contents:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the existence and contents of the @synapsecns/synapse-constants package

# Test 1: Check if the package is installed
if npm list @synapsecns/synapse-constants | grep -q "@synapsecns/synapse-constants"; then
    echo "Package @synapsecns/synapse-constants is installed."
else
    echo "Package @synapsecns/synapse-constants is not installed."
fi

# Test 2: Check if CHAINS and CHAIN_ID_NAMES_REVERSE are exported
cat << EOF > temp_test.js
const { CHAINS } = require('@synapsecns/synapse-constants');
console.log(CHAINS && CHAINS.CHAIN_ID_NAMES_REVERSE ? 'CHAINS.CHAIN_ID_NAMES_REVERSE exists' : 'CHAINS.CHAIN_ID_NAMES_REVERSE does not exist');
EOF

node temp_test.js
rm temp_test.js

Length of output: 389


Script:

#!/bin/bash
# Description: Verify if @synapsecns/synapse-constants is listed in package.json

# Check if jq is available
if command -v jq > /dev/null 2>&1; then
    PACKAGE_EXISTS=$(jq '.dependencies["@synapsecns/synapse-constants"] // .devDependencies["@synapsecns/synapse-constants"]' package.json)
    if [ "$PACKAGE_EXISTS" != "null" ]; then
        echo "@synapsecns/synapse-constants is listed in package.json."
    else
        echo "@synapsecns/synapse-constants is not listed in package.json."
    fi
else
    # Fallback to grep if jq is not available
    if grep -q '"@synapsecns/synapse-constants"' package.json; then
        echo "@synapsecns/synapse-constants is listed in package.json."
    else
        echo "@synapsecns/synapse-constants is not listed in package.json."
    fi
fi

Length of output: 314

@@ -994,6 +994,7 @@ export const USDCe: BridgeableToken = {
[CHAINS.AVALANCHE.id]: '0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664',
[CHAINS.ARBITRUM.id]: '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8',
[CHAINS.AURORA.id]: '0xB12BFcA5A55806AaF64E99521918A4bf0fC40802',
[CHAINS.POLYGON.id]: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174',
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Add missing decimal value for USDCe on POLYGON chain

The USDCe token has been added for the POLYGON chain, but the corresponding decimal value is missing. This could lead to incorrect token amount calculations.

Please add the decimal value for the POLYGON chain. Typically, USDC has 6 decimals. Apply this change:

export const USDCe: BridgeableToken = {
  addresses: {
    // ... other chains
    [CHAINS.POLYGON.id]: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174',
  },
  decimals: {
    // ... other chains
+   [CHAINS.POLYGON.id]: 6,
  },
  // ... rest of the token definition
}

Committable suggestion was skipped due to low confidence.

Comment on lines +437 to 438
[CHAINS.POLYGON.id]: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',
[CHAINS.SCROLL.id]: '0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4',
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Old USDC address still present in multiple files. Please update all instances to ensure consistency.
The new POLYGON USDC address '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359' has been added, but the old address '0x2791bca1f2de4661ed88a30c99a7a9449aa84174' is still found in several files. Ensure all references are updated to prevent inconsistencies.

🔗 Analysis chain

LGTM! Verify USDC address changes across systems.

The USDC token updates look good. The POLYGON chain address has been updated, and new chain support for SCROLL and LINEA has been added.

Please run the following script to ensure the USDC address changes are consistent across the codebase:

Also applies to: 439-440

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Verify USDC address usage
echo "Checking USDC address usage:"
rg --type typescript --type javascript "0x2791bca1f2de4661ed88a30c99a7a9449aa84174" -C 3
echo "Checking new POLYGON USDC address usage:"
rg --type typescript --type javascript "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359" -C 3

Length of output: 405


Script:

#!/bin/bash
# Verify USDC address usage
echo "Checking USDC address usage:"
rg --glob '*.ts' --glob '*.tsx' --glob '*.js' "0x2791bca1f2de4661ed88a30c99a7a9449aa84174" -C 3

echo "Checking new POLYGON USDC address usage:"
rg --glob '*.ts' --glob '*.tsx' --glob '*.js' "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359" -C 3

Length of output: 20373

@parodime parodime closed this Oct 7, 2024
@parodime parodime deleted the paro/rfq-indexer-updates-suggs branch October 7, 2024 13:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants