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

fix: web3auth env. var. #126

Merged
merged 6 commits into from
Dec 13, 2024
Merged

fix: web3auth env. var. #126

merged 6 commits into from
Dec 13, 2024

Conversation

fmorency
Copy link
Contributor

@fmorency fmorency commented Dec 6, 2024

This PR

  • Enables the Web3Auth network to be set using an environment variable.
  • Renames the Web3Auth ClientID environment variable to better reflect its relation to Web3Auth.
  • Centralize the environment variable configuration.
  • Nuke the endpoint selector
  • Fix tests

The environment variables are now

NEXT_PUBLIC_WALLETCONNECT_KEY=
NEXT_PUBLIC_WEB3AUTH_NETWORK=
NEXT_PUBLIC_WEB3AUTH_CLIENT_ID=
NEXT_PUBLIC_CHAIN=
NEXT_PUBLIC_CHAIN_ID=
NEXT_PUBLIC_CHAIN_TIER=
NEXT_PUBLIC_RPC_URL=
NEXT_PUBLIC_API_URL=
NEXT_PUBLIC_EXPLORER_URL=
NEXT_PUBLIC_INDEXER_URL=

TODO:

  • Update the CI environments before merging this PR

Summary by CodeRabbit

Summary by CodeRabbit

  • New Features

    • Updated environment variable handling for Web3 authentication, enhancing flexibility and configuration management.
    • Introduced support for new environment variables: NEXT_PUBLIC_CHAIN_TIER, NEXT_PUBLIC_RPC_URL, NEXT_PUBLIC_API_URL, NEXT_PUBLIC_WEB3AUTH_NETWORK, NEXT_PUBLIC_WEB3AUTH_CLIENT_ID, NEXT_PUBLIC_EXPLORER_URL, and NEXT_PUBLIC_INDEXER_URL.
  • Documentation

    • Updated README.md to reflect changes in environment variable configuration for clarity and accuracy.
  • Bug Fixes

    • Removed deprecated environment variable NEXT_PUBLIC_WEB3_CLIENT_ID to prevent confusion and ensure correct functionality.

@fmorency fmorency requested a review from chalabi2 December 6, 2024 18:01
@fmorency fmorency self-assigned this Dec 6, 2024
Copy link
Contributor

coderabbitai bot commented Dec 6, 2024

Walkthrough

The pull request introduces modifications to environment variable handling within the Docker workflow, the README, and the application code. Specifically, it removes several outdated variables and introduces new ones related to Web3 authentication and network configuration. The changes ensure that the application uses updated variables while maintaining the existing workflow structure and application logic.

Changes

File Change Summary
.github/workflows/docker.yml Removed NEXT_PUBLIC_WEB3_CLIENT_ID; added NEXT_PUBLIC_CHAIN_TIER, NEXT_PUBLIC_RPC_URL, NEXT_PUBLIC_API_URL, NEXT_PUBLIC_WEB3AUTH_NETWORK, NEXT_PUBLIC_WEB3AUTH_CLIENT_ID, NEXT_PUBLIC_EXPLORER_URL, and NEXT_PUBLIC_INDEXER_URL.
README.md Removed multiple outdated variables; added NEXT_PUBLIC_WEB3AUTH_NETWORK, NEXT_PUBLIC_WEB3AUTH_CLIENT_ID, NEXT_PUBLIC_CHAIN, NEXT_PUBLIC_CHAIN_ID, NEXT_PUBLIC_CHAIN_TIER, NEXT_PUBLIC_RPC_URL, NEXT_PUBLIC_API_URL, NEXT_PUBLIC_EXPLORER_URL, and NEXT_PUBLIC_INDEXER_URL with descriptions.
pages/_app.tsx Updated clientId and web3AuthNetwork to use env configuration instead of process.env.
.env.test Introduced a new environment configuration file with test values for various public environment variables.
.gitignore Added exception for .env.test to allow it to be tracked by Git.
bunfig.toml Changed preload attribute from ./happydom.ts to ./setup.ts in the [test] section.
Various components (e.g., modals, forms) Updated to use env.chain instead of chainName for transaction handling and fee estimation.
package.json Added dotenv as a new dependency in devDependencies.
setup.ts Added import for dotenv and configured it to load from .env.test.
store/endpointStore.ts Deleted the Zustand store for managing API endpoints.
components/react/endpointSelector.tsx Deleted the component responsible for managing and validating endpoints.

Possibly related PRs

  • ci: docker testnet #58: Related to the workflow configuration for building and pushing Docker images, similar to changes in the main PR.
  • fix: block explorer link #125: Modifications to environment variable handling in the Docker workflow are relevant to this PR, which updates the block explorer link to use dynamic URLs based on the selected endpoint.
  • feat: tranfer token ownership #152: Updates to environment variables and their handling are connected to this PR, which introduces functionality for transferring token ownership and updates the manifestjs library to support querying tokens by owner.

Suggested labels

bug, enhancement

Suggested reviewers

  • chalabi2

Poem

🐰 In a world of code, we hop and play,
Changing variables in a brand new way.
From WEB3_CLIENT to WEB3AUTH we go,
With networks and clients, our knowledge will grow!
So let’s build and push, with joy in our hearts,
For every change is a new place to start! 🌟


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 generate docstrings to generate docstrings for this PR. (Experiment)
  • @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.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

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.

Copy link

codecov bot commented Dec 6, 2024

Codecov Report

Attention: Patch coverage is 84.07080% with 18 lines in your changes missing coverage. Please review.

Project coverage is 56.73%. Comparing base (97d0d27) to head (900ac91).
Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
hooks/useManifestLcdQueryClient.ts 25.00% 3 Missing ⚠️
hooks/useOsmosisRpcQueryClient.ts 25.00% 3 Missing ⚠️
hooks/usePoaLcdQueryClient.ts 25.00% 3 Missing ⚠️
components/admins/modals/cancelUpgradeModal.tsx 33.33% 2 Missing ⚠️
components/admins/modals/multiMfxBurnModal.tsx 33.33% 2 Missing ⚠️
components/admins/modals/multiMfxMintModal.tsx 33.33% 2 Missing ⚠️
components/admins/modals/upgradeModal.tsx 33.33% 2 Missing ⚠️
components/bank/forms/ibcSendForm.tsx 80.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #126      +/-   ##
==========================================
- Coverage   57.42%   56.73%   -0.69%     
==========================================
  Files         147      145       -2     
  Lines       14700    14288     -412     
==========================================
- Hits         8441     8107     -334     
+ Misses       6259     6181      -78     

☔ 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: 2

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 32d6952 and 8f937ee.

📒 Files selected for processing (3)
  • .github/workflows/docker.yml (1 hunks)
  • README.md (1 hunks)
  • pages/_app.tsx (2 hunks)
🔇 Additional comments (2)
.github/workflows/docker.yml (1)

42-43: LGTM! Appropriate security contexts used

The environment variables are correctly configured:

  • WEB3AUTH_NETWORK uses vars context as it's not sensitive
  • WEB3AUTH_CLIENT_ID uses secrets context for sensitive data
pages/_app.tsx (1)

152-154: Verify removal of old environment variable and network configurations

Let's ensure all references to the old environment variable have been updated and network configurations are consistent.

✅ Verification successful

Let me gather more information about the Web3Auth configuration to ensure completeness of the verification.


Let me try one more verification with corrected file type:


Let me try one final verification without file type restrictions:


Based on the verification results, I can now provide a final response:

Web3Auth configuration is correctly implemented

The verification shows:

  1. No references to old environment variable NEXT_PUBLIC_WEB3_CLIENT_ID were found
  2. Web3Auth network configuration is properly set using NEXT_PUBLIC_WEB3AUTH_NETWORK and NEXT_PUBLIC_WEB3AUTH_CLIENT_ID
  3. The implementation in _app.tsx correctly uses these environment variables with appropriate fallbacks
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining references to old env var and verify network configurations

echo "Checking for old environment variable references..."
rg "NEXT_PUBLIC_WEB3_CLIENT_ID"

echo -e "\nChecking Web3Auth network configurations..."
rg "web3AuthNetwork|WEB3AUTH_NETWORK"

echo -e "\nChecking for Web3Auth imports and configurations..."
ast-grep --pattern 'import { $_ } from "@toruslabs/openlogin-utils"'

Length of output: 669


Script:

#!/bin/bash
# Check for all environment variables related to Web3Auth and their usage
echo "Checking .env files and environment variable patterns..."
fd -e env -e env.example -e env.local -X cat {}

echo -e "\nChecking for Web3Auth related imports and configurations..."
rg -A 3 "Web3Auth|web3Auth" --type typescript

Length of output: 392


Script:

#!/bin/bash
# Check for all environment variables related to Web3Auth and their usage
echo "Checking .env files and environment variable patterns..."
fd ".env" --type f -X cat {}

echo -e "\nChecking for Web3Auth related imports and configurations..."
rg -A 3 "Web3Auth|web3Auth" --type ts --type tsx

echo -e "\nChecking for any other environment variables related to Web3Auth..."
rg "NEXT_PUBLIC.*WEB3" --type ts --type tsx

Length of output: 592


Script:

#!/bin/bash
# Check for Web3Auth configurations without file type restrictions
echo "Checking for Web3Auth related imports and configurations..."
rg -A 3 "Web3Auth|web3Auth"

echo -e "\nChecking for environment variables..."
rg "NEXT_PUBLIC.*WEB3"

echo -e "\nChecking TypeScript/JavaScript files specifically..."
fd -e ts -e tsx -e js -e jsx -X echo "=== {}" && fd -e ts -e tsx -e js -e jsx -X cat {}

Length of output: 70588

README.md Outdated Show resolved Hide resolved
pages/_app.tsx Show resolved Hide resolved
fmorency and others added 2 commits December 6, 2024 13:13
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Félix C. Morency <[email protected]>
@fmorency fmorency marked this pull request as draft December 6, 2024 18:34
@fmorency fmorency marked this pull request as ready for review December 13, 2024 19:38
Copy link
Collaborator

@chalabi2 chalabi2 left a comment

Choose a reason for hiding this comment

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

lgtm!

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: 7

🧹 Outside diff range and nitpick comments (17)
components/admins/modals/validatorModal.tsx (1)

Line range hint 85-108: Add error handling to the transaction flow

The transaction handling logic lacks proper error handling. Consider adding try-catch blocks and cleanup logic.

Here's a suggested improvement:

   const handleUpdate = async (values: { power: string }) => {
     setIsSigning(true);
-    const msgSetPower = setPower({
-      sender: admin ?? '',
-      validatorAddress: validator.operator_address,
-      power: BigInt(values.power),
-      unsafe: isUnsafe,
-    });
-
-    const anyMessage = Any.fromPartial({
-      typeUrl: msgSetPower.typeUrl,
-      value: MsgSetPower.encode(msgSetPower.value).finish(),
-    });
-
-    const groupProposalMsg = submitProposal({
-      groupPolicyAddress: admin,
-      messages: [anyMessage],
-      metadata: '',
-      proposers: [userAddress ?? ''],
-      title: `Update the Voting Power of ${validator.description.moniker}`,
-      summary: `This proposal will update the voting power of ${validator.description.moniker} to ${values.power}`,
-      exec: 0,
-    });
-
-    const fee = await estimateFee(userAddress ?? '', [groupProposalMsg]);
-    await tx([groupProposalMsg], {
-      fee,
-      onSuccess: () => {
-        setIsSigning(false);
-      },
-    });
-    setIsSigning(false);
+    try {
+      const msgSetPower = setPower({
+        sender: admin ?? '',
+        validatorAddress: validator.operator_address,
+        power: BigInt(values.power),
+        unsafe: isUnsafe,
+      });
+
+      const anyMessage = Any.fromPartial({
+        typeUrl: msgSetPower.typeUrl,
+        value: MsgSetPower.encode(msgSetPower.value).finish(),
+      });
+
+      const groupProposalMsg = submitProposal({
+        groupPolicyAddress: admin,
+        messages: [anyMessage],
+        metadata: '',
+        proposers: [userAddress ?? ''],
+        title: `Update the Voting Power of ${validator.description.moniker}`,
+        summary: `This proposal will update the voting power of ${validator.description.moniker} to ${values.power}`,
+        exec: 0,
+      });
+
+      const fee = await estimateFee(userAddress ?? '', [groupProposalMsg]);
+      await tx([groupProposalMsg], {
+        fee,
+        onSuccess: () => {
+          setIsSigning(false);
+        },
+        onError: (error) => {
+          console.error('Transaction failed:', error);
+          // Optionally show error to user via toast/alert
+        },
+      });
+    } catch (error) {
+      console.error('Failed to update validator power:', error);
+      // Optionally show error to user via toast/alert
+    } finally {
+      setIsSigning(false);
+    }
   };
hooks/useRpcQueryClient.ts (1)

Line range hint 1-21: Consider adding error handling for configuration issues.

While the current implementation handles undefined URLs via the enabled property, consider adding more detailed error messages or logging when configuration is missing or invalid.

Example enhancement:

export const useRpcQueryClient = () => {
+ if (process.env.NODE_ENV === 'development' && !env.rpcUrl) {
+   console.warn('RPC URL is not configured. Please check your environment variables.');
+ }
  const rpcQueryClient = useQuery({
    queryKey: ['rpcQueryClient', env.rpcUrl],
    queryFn: () =>
      createRpcQueryClient({
        rpcEndpoint: env.rpcUrl,
      }),
    enabled: !!env.rpcUrl,
    staleTime: Infinity,
  });

  return {
    rpcQueryClient: rpcQueryClient.data,
  };
};
hooks/useManifestLcdQueryClient.ts (1)

9-14: LGTM! Consider adding URL validation.

The changes align well with the PR objectives by centralizing the configuration through environment variables. However, consider adding URL validation to ensure env.apiUrl is a valid URL when provided.

 const lcdQueryClient = useQuery({
   queryKey: ['lcdQueryClient', env.apiUrl],
   queryFn: () => {
+    if (!env.apiUrl?.match(/^https?:\/\/.+/)) {
+      throw new Error('Invalid API URL format');
+    }
     return createLcdQueryClient({
       restEndpoint: env.apiUrl,
     });
   },
   enabled: !!env.apiUrl,
   staleTime: Infinity,
 });
hooks/useOsmosisRpcQueryClient.ts (1)

9-14: LGTM! Consider consistent validation approach.

The changes appropriately use environment variables for RPC configuration. To maintain consistency across hooks, consider implementing the same URL validation pattern as suggested for the LCD client.

Consider extracting URL validation into a shared utility:

// utils/validateUrl.ts
export const validateUrl = (url: string | undefined, type: 'API' | 'RPC') => {
  if (!url?.match(/^https?:\/\/.+/)) {
    throw new Error(`Invalid ${type} URL format`);
  }
  return url;
};

Then use it consistently across hooks:

 queryFn: () => {
+  validateUrl(env.rpcUrl, 'RPC');
   return createRpcQueryClient({
     rpcEndpoint: env.rpcUrl,
   });
 },
hooks/usePoaLcdQueryClient.ts (1)

10-15: LGTM! Consider extracting common configuration.

The changes appropriately use environment variables for the PoA LCD client configuration. Since all query hooks share identical configuration patterns, consider extracting common settings.

Consider creating a shared configuration:

// hooks/queryConfig.ts
export const QUERY_CONFIG = {
  staleTime: Infinity,
} as const;

export const createQueryConfig = <T>(
  key: string,
  url: string | undefined,
  createClient: (config: { endpoint: string }) => T
) => ({
  queryKey: [key, url],
  queryFn: () => {
    validateUrl(url, key);
    return createClient({ endpoint: url });
  },
  enabled: !!url,
  ...QUERY_CONFIG,
});

This would simplify all three hooks to follow the same pattern and share validation logic.

config/env.ts (2)

1-12: Consider adding TypeScript types and validation

While centralizing environment variables is good practice, consider adding type safety and validation to prevent runtime issues:

type Environment = {
  chainId: string;
  rpcUrl: string;
  // ... other fields
}

const requiredEnvVars = [
  'NEXT_PUBLIC_CHAIN_ID',
  'NEXT_PUBLIC_RPC_URL',
  // ... other required vars
] as const;

function validateEnv(env: Environment): void {
  for (const key of requiredEnvVars) {
    if (!process.env[key]) {
      throw new Error(`Missing required environment variable: ${key}`);
    }
  }
}

const env: Environment = {
  chainId: process.env.NEXT_PUBLIC_CHAIN_ID ?? '',
  // ... other fields
};

validateEnv(env);
export default env;

2-11: Consider meaningful defaults or early validation

Using empty strings as defaults could lead to silent failures. Consider either:

  1. Using meaningful defaults where appropriate
  2. Throwing errors for missing required variables
  3. Adding runtime checks when accessing these values
README.md (1)

38-47: Consider enhancing environment variable descriptions

While the descriptions are clear, they could be more helpful by including:

  • Expected/allowed values (e.g., possible values for CHAIN_TIER)
  • Examples for each variable
  • Which variables are required vs optional
components/factory/components/__tests__/MyDenoms.test.tsx (1)

30-33: Enhance mock implementation and test coverage

While the mock for useDenomAuthorityMetadata is added, consider:

  1. Adding test cases that verify the hook's integration
  2. Testing different states (loading, error, with data)

Example test cases to add:

test('displays loading state when isDenomAuthorityLoading is true', () => {
  // Update mock to return loading state
  mock.module('@/hooks/useQueries', () => ({
    useDenomAuthorityMetadata: jest.fn().mockReturnValue({
      denomAuthority: '',
      isDenomAuthorityLoading: true,
    })
  }));
  // Add test implementation
});

test('displays denom authority when available', () => {
  // Update mock to return authority data
  mock.module('@/hooks/useQueries', () => ({
    useDenomAuthorityMetadata: jest.fn().mockReturnValue({
      denomAuthority: 'test-authority',
      isDenomAuthorityLoading: false,
    })
  }));
  // Add test implementation
});
components/bank/modals/txInfo.tsx (1)

120-122: Refactor complex URL construction logic

The URL construction logic combines multiple conditions and transformations in a single line, making it harder to maintain and test.

Consider breaking down the logic for better readability:

-              href={`${env.explorerUrl}/${label === 'TRANSACTION HASH' ? 'transaction' : 'account'}/${label?.includes('TRANSACTION') ? value?.toUpperCase() : value}`}
+              href={`${env.explorerUrl}/${
+                label === 'TRANSACTION HASH' ? 'transaction' : 'account'
+              }/${
+                label?.includes('TRANSACTION') ? value?.toUpperCase() : value
+              }`}
pages/factory/create.tsx (1)

12-12: Consider adding type safety for environment variables

While the implementation correctly uses environment variables, consider adding type safety to prevent runtime errors.

Create an environment configuration type:

// config/env.types.ts
export interface EnvConfig {
  chain: string;
  // ... other env vars
}

// config/env.ts
import { EnvConfig } from './env.types';

const env: EnvConfig = {
  chain: process.env.NEXT_PUBLIC_CHAIN!,
  // ... other env vars
};

export default env;

Also applies to: 32-32

pages/groups/index.tsx (1)

8-8: Consider optimizing hooks dependencies

The hooks could be optimized to prevent unnecessary re-renders.

Consider using useMemo for derived values:

const groupPolicyAddresses = useMemo(() => 
  groupByMemberData?.groups?.map(group => group.policies[0].address) ?? [],
  [groupByMemberData]
);

// Also consider memoizing the refetch callback
const refetchCallback = useCallback(
  () => {
    refetchGroupByMember();
    refetchProposals();
  },
  [refetchGroupByMember, refetchProposals]
);

Also applies to: 9-9, 12-12

components/admins/modals/cancelUpgradeModal.tsx (1)

Line range hint 62-83: Consider removing null check for address

Based on the retrieved learning, the address prop is guaranteed to be defined because the wallet connect layer prevents the page from rendering if the wallet is not connected. Therefore, the null coalescing operator (??) in the fee estimation and transaction submission is unnecessary.

-const fee = await estimateFee(address ?? '', [groupProposalMsg]);
+const fee = await estimateFee(address, [groupProposalMsg]);

 const groupProposalMsg = submitProposal({
   groupPolicyAddress: admin,
   messages: [anyMessage],
   metadata: '',
-  proposers: [address ?? ''],
+  proposers: [address],
   title: `Cancel Upgrade`,
   summary: `This proposal will cancel the upgrade`,
   exec: 0,
 });
components/factory/modals/TransferModal.tsx (1)

Line range hint 64-93: Consider enhancing error handling

While the error handling is functional, consider extracting the error messages to a constant or utility function for better maintainability.

+const ERROR_MESSAGES = {
+  unauthorized: 'Unauthorized account. Please check your account and try again.',
+  default: 'An unknown error occurred while transferring ownership.'
+};
+
 const handleTransfer = async (values: FormikValues, resetForm: () => void) => {
   setIsSigning(true);
   try {
     // ... existing code ...
   } catch (error) {
     console.error('Error during transaction setup:', error);
-    let errorMessage = 'An unknown error occurred while transferring ownership.';
-
-    if (error instanceof Error) {
-      if (error.message.includes('unauthorized account')) {
-        errorMessage = 'Unauthorized account. Please check your account and try again.';
-      }
-    }
+    const errorMessage = error instanceof Error && error.message.includes('unauthorized account')
+      ? ERROR_MESSAGES.unauthorized
+      : ERROR_MESSAGES.default;

     setToastMessage({
       type: 'alert-error',
       title: 'Error transferring ownership',
       description: errorMessage,
       bgColor: '#e74c3c',
     });
     throw error;
   }
pages/_app.tsx (1)

171-181: Consider moving WalletConnect metadata to configuration

The WalletConnect metadata (name, description, url) is hardcoded. Consider moving these values to the environment configuration for better maintainability.

 walletConnectOptions={{
   signClient: {
     projectId: env.walletConnectKey,
     relayUrl: 'wss://relay.walletconnect.org',
     metadata: {
-      name: 'Alberto',
-      description: 'Manifest Network Web App',
-      url: 'https://alberto.com',
+      name: env.walletConnectName,
+      description: env.walletConnectDescription,
+      url: env.walletConnectUrl,
       icons: [],
     },
   },
 }}
components/admins/modals/upgradeModal.tsx (1)

85-86: Consider adding environment validation.

While the change to use env.chain is correct, consider adding environment variable validation at application startup to catch configuration issues early.

+ // Add to application startup code
+ if (!env.chain) {
+   throw new Error('Chain configuration is required but not provided');
+ }
components/groups/modals/memberManagementModal.tsx (1)

Line range hint 146-166: Consider enhancing error handling in handleConfirm

While the error is logged to console, the user isn't notified of the failure. Consider adding user feedback for better UX.

 } catch (error) {
   console.error('Error submitting proposal:', error);
+  // Notify user of the error
+  setToastMessage({
+    type: 'alert-error',
+    title: 'Error',
+    description: 'Failed to submit proposal. Please try again.',
+  });
 } finally {
   setIsSigning(false);
 }
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8f937ee and 900ac91.

⛔ Files ignored due to path filters (1)
  • bun.lockb is excluded by !**/bun.lockb
📒 Files selected for processing (51)
  • .env.test (1 hunks)
  • .github/workflows/docker.yml (1 hunks)
  • .gitignore (1 hunks)
  • README.md (1 hunks)
  • bunfig.toml (1 hunks)
  • components/admins/modals/cancelUpgradeModal.tsx (2 hunks)
  • components/admins/modals/multiMfxBurnModal.tsx (2 hunks)
  • components/admins/modals/multiMfxMintModal.tsx (2 hunks)
  • components/admins/modals/upgradeModal.tsx (2 hunks)
  • components/admins/modals/validatorModal.tsx (2 hunks)
  • components/admins/modals/warningModal.tsx (2 hunks)
  • components/bank/forms/ibcSendForm.tsx (3 hunks)
  • components/bank/forms/sendForm.tsx (2 hunks)
  • components/bank/modals/txInfo.tsx (4 hunks)
  • components/factory/components/__tests__/MyDenoms.test.tsx (1 hunks)
  • components/factory/forms/BurnForm.tsx (2 hunks)
  • components/factory/forms/ConfirmationForm.tsx (2 hunks)
  • components/factory/forms/MintForm.tsx (2 hunks)
  • components/factory/modals/TransferModal.tsx (2 hunks)
  • components/factory/modals/denomInfo.tsx (3 hunks)
  • components/factory/modals/updateDenomMetadata.tsx (2 hunks)
  • components/groups/components/__tests__/myGroups.test.tsx (1 hunks)
  • components/groups/components/myGroups.tsx (2 hunks)
  • components/groups/modals/groupInfo.tsx (2 hunks)
  • components/groups/modals/memberManagementModal.tsx (2 hunks)
  • components/groups/modals/updateGroupModal.tsx (2 hunks)
  • components/groups/modals/voteDetailsModal.tsx (3 hunks)
  • components/react/endpointSelector.tsx (0 hunks)
  • components/react/mobileNav.tsx (1 hunks)
  • components/react/sideNav.tsx (0 hunks)
  • config/defaults.ts (1 hunks)
  • config/env.ts (1 hunks)
  • config/index.ts (1 hunks)
  • hooks/useLcdQueryClient.ts (1 hunks)
  • hooks/useManifestLcdQueryClient.ts (1 hunks)
  • hooks/useOsmosisRpcQueryClient.ts (1 hunks)
  • hooks/usePoaLcdQueryClient.ts (1 hunks)
  • hooks/useRpcQueryClient.ts (1 hunks)
  • hooks/useTx.tsx (2 hunks)
  • package.json (1 hunks)
  • pages/404.tsx (2 hunks)
  • pages/_app.tsx (7 hunks)
  • pages/bank.tsx (2 hunks)
  • pages/factory/create.tsx (2 hunks)
  • pages/factory/index.tsx (1 hunks)
  • pages/groups/create.tsx (2 hunks)
  • pages/groups/index.tsx (1 hunks)
  • setup.ts (1 hunks)
  • store/endpointStore.ts (0 hunks)
  • utils/logos.ts (0 hunks)
  • utils/voting.ts (1 hunks)
💤 Files with no reviewable changes (4)
  • components/react/sideNav.tsx
  • utils/logos.ts
  • store/endpointStore.ts
  • components/react/endpointSelector.tsx
✅ Files skipped from review due to trivial changes (2)
  • setup.ts
  • .env.test
🧰 Additional context used
📓 Learnings (3)
components/admins/modals/cancelUpgradeModal.tsx (1)
Learnt from: chalabi2
PR: liftedinit/manifest-app#128
File: components/admins/modals/cancelUpgradeModal.tsx:62-63
Timestamp: 2024-12-09T17:22:29.162Z
Learning: In the `CancelUpgradeModal` component (`components/admins/modals/cancelUpgradeModal.tsx`), the `address` prop is guaranteed to be defined because the wallet connect layer prevents the page from rendering if the wallet is not connected.
components/factory/forms/BurnForm.tsx (1)
Learnt from: chalabi2
PR: liftedinit/manifest-app#9
File: components/factory/forms/BurnForm.tsx:262-265
Timestamp: 2024-11-12T13:03:18.927Z
Learning: When suggesting the removal of state variables managed by Formik, ensure that any functions or components relying on those state variables outside of Formik are refactored to use Formik's values.
components/bank/forms/ibcSendForm.tsx (1)
Learnt from: chalabi2
PR: liftedinit/manifest-app#9
File: components/bank/forms/ibcSendForm.tsx:149-152
Timestamp: 2024-11-12T13:03:18.927Z
Learning: In `components/bank/forms/ibcSendForm.tsx`, the `handleSend` function relies on the `useTx` hook for error handling, so additional error handling or user notifications within `handleSend` are unnecessary.
🔇 Additional comments (46)
components/admins/modals/validatorModal.tsx (2)

3-3: LGTM: Import changes improve maintainability

The changes to import statements improve code organization by:

  • Using absolute imports for better maintainability
  • Adding necessary imports for transaction handling
  • Centralizing environment configuration

Also applies to: 8-8, 12-12, 16-16


57-59: Verify environment configuration for chain

The change to use env.chain aligns with centralizing environment variables. However, we should verify that this environment variable is properly configured.

✅ Verification successful

Environment configuration for chain is properly set up

The change to use env.chain is verified to be correct and properly configured:

  • The environment variable NEXT_PUBLIC_CHAIN is defined in the configuration files
  • The env.chain is properly exported from config/env.ts and consistently imported across the codebase
  • The usage pattern is consistent across multiple components, including the validator modal
  • No legacy chainName references were found
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify env.chain configuration

# Check if NEXT_PUBLIC_CHAIN is defined in environment files
echo "Checking for NEXT_PUBLIC_CHAIN in environment files..."
rg -l "NEXT_PUBLIC_CHAIN="

# Check for any remaining uses of the old chainName variable
echo "Checking for any remaining uses of chainName..."
rg "chainName" --type ts --type tsx

Length of output: 334


Script:

#!/bin/bash
# Let's verify the environment configuration more thoroughly

# Check env.chain usage in the codebase
echo "Checking env.chain usage..."
rg "env\.chain" -t js -t jsx -t ts

# Check environment configuration in README and .env.test
echo -e "\nChecking environment files content..."
cat README.md | grep -A 5 "NEXT_PUBLIC_CHAIN"
cat .env.test | grep "NEXT_PUBLIC_CHAIN"

# Check for any environment configuration setup
echo -e "\nChecking for environment setup files..."
fd "env|environment" --type f

# Check for the env configuration import
echo -e "\nChecking how env is imported/configured..."
rg "import.*env" -t js -t jsx -t ts

Length of output: 1236


Script:

#!/bin/bash
# Let's check the env configuration file and its usage

# Check the content of the env configuration file
echo "Checking env configuration file..."
cat config/env.ts

# Let's try searching with correct file extensions
echo -e "\nChecking env.chain usage with correct extensions..."
rg "env\.chain" --type-add 'ts:*.{ts,tsx}' --type-add 'js:*.{js,jsx}' -t ts -t js

# Check imports of the env configuration
echo -e "\nChecking env configuration imports..."
rg "from.*config/env" --type-add 'ts:*.{ts,tsx}' --type-add 'js:*.{js,jsx}' -t ts -t js

Length of output: 7634

config/index.ts (1)

2-2: LGTM! Verify env module existence.

The new export statement aligns with the PR's objective to centralize environment variable configuration.

✅ Verification successful

LGTM! The env module exists and exports environment configuration correctly

The env.ts module is present in the config directory and properly exports environment variables with default fallbacks, supporting the centralization of environment configuration.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Verify that the env module exists and exports the expected environment variables
fd -e ts -e tsx "env.ts" config/

Length of output: 46


Script:

#!/bin/bash
# Check the content of env.ts to verify it exports environment variables
cat config/env.ts

Length of output: 629

bunfig.toml (1)

2-2: Verify setup.ts implementation and test environment.

The change from happydom.ts to setup.ts suggests a modification in test setup strategy. This could be related to the centralization of environment variables.

✅ Verification successful

Setup file verified and implements required test environment

The new setup.ts properly initializes the test environment by:

  • Setting up happy-dom for DOM simulation via GlobalRegistrator
  • Loading test environment variables from .env.test

This is a valid refactoring that maintains the necessary test setup functionality while using a more descriptive filename.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if setup.ts exists and contains necessary test configurations
fd -e ts "setup.ts" .
rg -A 10 "process.env" $(fd -e ts "setup.ts" .)

Length of output: 89


Script:

#!/bin/bash
# Let's check the content of setup.ts directly
cat ./setup.ts

# Also check for any references to happydom.ts for comparison
fd -e ts "happydom.ts" .

Length of output: 203

utils/voting.ts (1)

14-14: LGTM! Function simplification looks good.

The simplified return statement maintains the same functionality while reducing unnecessary type casting.

hooks/useLcdQueryClient.ts (1)

9-9: LGTM! Environment variable integration looks good.

The changes correctly implement the centralized environment configuration approach by:

  1. Using env.apiUrl consistently across the hook
  2. Properly handling undefined cases with the enabled check

Let's verify the environment variable configuration:

Also applies to: 12-12, 14-14

✅ Verification successful

Environment variable integration is properly implemented and consistent

The verification confirms that:

  1. NEXT_PUBLIC_API_URL is properly documented in README.md
  2. The environment variable is correctly defined in the configuration with a fallback
  3. env.apiUrl is used consistently across all LCD query client hooks
  4. No hardcoded API URLs were found that should be using the environment variable
  5. Proper null checks are in place with enabled: !!env.apiUrl
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if NEXT_PUBLIC_API_URL is properly documented and used consistently

# Check documentation in README
echo "Checking README for API_URL documentation..."
rg "NEXT_PUBLIC_API_URL" README.md

# Check for any hardcoded API URLs that should use the env var
echo "Checking for hardcoded API URLs..."
rg -i "api.*url.*=.*http" --type ts

Length of output: 316


Script:

#!/bin/bash
# Let's verify the environment variable usage more thoroughly

# Check all usages of env.apiUrl
echo "Checking env.apiUrl usage..."
rg "env\.apiUrl" --type ts -A 2

# Check environment configuration setup
echo "Checking environment configuration..."
fd "env" --type f --exec cat {}

# Check for any other API URL patterns
echo "Checking other API URL patterns..."
rg -i "apiUrl|api_url|apiEndpoint" --type ts

Length of output: 3643

hooks/useRpcQueryClient.ts (1)

3-3: LGTM! Consistent implementation with LCD client.

The RPC client follows the same pattern as the LCD client, maintaining consistency in:

  1. Environment variable usage
  2. Query key configuration
  3. Null checking approach

Let's verify the RPC URL configuration:

Also applies to: 9-9, 12-12, 14-14

✅ Verification successful

RPC URL configuration is properly implemented and consistent across the codebase

The verification confirms that:

  • NEXT_PUBLIC_RPC_URL is properly documented in README.md
  • The RPC URL is consistently accessed through env.rpcUrl across all files
  • No hardcoded RPC URLs were found
  • The implementation in useRpcQueryClient.ts follows the same pattern as other files using the RPC URL
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if NEXT_PUBLIC_RPC_URL is properly documented and used consistently

# Check documentation in README
echo "Checking README for RPC_URL documentation..."
rg "NEXT_PUBLIC_RPC_URL" README.md

# Check for any hardcoded RPC URLs that should use the env var
echo "Checking for hardcoded RPC URLs..."
rg -i "rpc.*url.*=.*http" --type ts

Length of output: 316


Script:

#!/bin/bash
# Let's verify the RPC URL usage more comprehensively

# Check all occurrences of RPC URL in the codebase
echo "Checking all RPC URL references..."
rg -i "rpc.*url" --type ts

# Check env variable usage
echo "Checking env variable usage..."
rg "env\.rpcUrl" --type ts

# Check for any potential inconsistencies in configuration
echo "Checking config files..."
fd -e ts -e js "env" --exec cat {}

Length of output: 1946

README.md (1)

39-40: Previous review addressed: WEB3AUTH_NETWORK is now configurable

The environment variable is now properly configurable as suggested in the previous review.

.github/workflows/docker.yml (2)

35-42: Appropriate security measures for sensitive data

Good job using GitHub secrets for sensitive values (WALLETCONNECT_KEY, WEB3AUTH_CLIENT_ID) while keeping configuration values in vars.


35-42: Verify environment variables across environments

Ensure all required variables are configured in GitHub for each environment (qa, testnet, mainnet).

package.json (1)

94-94: Review dotenv dependency configuration

Two concerns regarding the dotenv dependency:

  1. Using ^ version range could lead to unexpected updates
  2. If dotenv is used in production code, it should be in dependencies instead of devDependencies

Let's verify the dotenv usage:

✅ Verification successful

dotenv is correctly configured as a dev dependency

The evidence shows that dotenv is only used in setup.ts for loading .env.test during test setup, and is not used in production code. The presence of numerous test files and a dedicated test environment file (.env.test) confirms this is a testing-only dependency.

Regarding the version range concern (^16.4.7), this is a standard practice for development dependencies where minor version updates are generally safe and beneficial for keeping testing infrastructure up to date.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check dotenv usage in production code

# Look for dotenv imports in source files
rg "require\(['\"]dotenv['\"]|import.*from.*['\"]dotenv['\"]" --type ts --type tsx

# Check for .env file loading in production code
rg "dotenv.*config\(\)" --type ts --type tsx

Length of output: 195


Script:

#!/bin/bash
# Description: Check dotenv usage in production code with correct file types

# Look for dotenv imports across all files (not limiting to specific extensions)
rg "require\(['\"]dotenv['\"]|import.*from.*['\"]dotenv['\"]"

# Check for .env file loading across all files
rg "dotenv.*config\(\)"

# List all JavaScript/TypeScript files to understand the codebase structure
fd -e js -e jsx -e ts -e tsx

Length of output: 7505


Script:

#!/bin/bash
# Let's check the setup.ts file to understand how dotenv is used
cat setup.ts

# Also check if there are any .env files or examples in the repository
fd -g '.env*'

Length of output: 400


Script:

#!/bin/bash
# Check for .env files including hidden ones
fd -H -g '.env*'

# Check if this is a test setup by looking for test configuration files
fd -g '*.test.*'
fd -g 'jest*'

Length of output: 1922

hooks/useTx.tsx (1)

1-11: LGTM: Clean import updates and env configuration

The changes align with the PR objectives by removing the endpoint selector dependency and using centralized environment configuration.

components/bank/modals/txInfo.tsx (1)

Line range hint 45-91: LGTM: Consistent environment variable usage

The changes consistently use env.explorerUrl across all InfoItem components, aligning with the centralization of environment variables.

components/factory/modals/denomInfo.tsx (1)

Line range hint 55-94: LGTM: Consistent environment variable usage with proper error handling

The changes consistently use env.explorerUrl and maintain good error handling practices for BASE value decoding.

components/react/mobileNav.tsx (1)

Line range hint 90-116: LGTM: Changes align with PR objectives

The removal of the endpoint selector aligns with the PR's goal of centralizing environment variable configuration. The new Contacts button implementation looks clean and follows the existing component patterns.

components/factory/forms/ConfirmationForm.tsx (1)

1-1: Consider adding chain validation

The switch to using env.chain aligns with the centralization of environment variables. However, consider adding validation to ensure the chain value is always valid when used in transactions.

Let's verify the chain validation across the codebase:

Also applies to: 18-19

pages/factory/create.tsx (1)

7-7: LGTM! Changes align with PR objectives

The changes correctly implement the environment variable configuration:

  • Removed hardcoded chain name
  • Added environment variable import
  • Updated useChain hook usage

Also applies to: 12-12, 32-32

pages/factory/index.tsx (1)

14-14: LGTM! Changes are consistent with PR objectives

The changes correctly implement the environment variable configuration and maintain consistency with other files.

Also applies to: 17-17

pages/groups/index.tsx (1)

1-1: LGTM! Changes align with PR objectives

The changes correctly implement the environment variable configuration and maintain consistency with other files. The addition of GroupsIcon import is also appropriate.

Also applies to: 9-9, 12-12

components/admins/modals/warningModal.tsx (1)

8-8: LGTM! Environment configuration centralization

The changes align with the PR objective of centralizing environment variable configuration. The modification to use env.chain instead of direct chain name improves configuration management.

Also applies to: 41-43

components/admins/modals/cancelUpgradeModal.tsx (1)

8-8: LGTM! Environment configuration centralization

The changes align with the PR objective of centralizing environment variable configuration.

Also applies to: 40-41

pages/groups/create.tsx (2)

10-13: LGTM! Improved wallet connection handling

The changes enhance the wallet connection handling by:

  1. Centralizing environment configuration through env.chain
  2. Adding proper wallet connection state management with isWalletConnected

Also applies to: 27-27


Line range hint 93-100: LGTM! Enhanced user experience for disconnected wallet state

The implementation of the WalletNotConnected component with a custom icon and description provides clear feedback to users when their wallet is not connected.

components/groups/components/__tests__/myGroups.test.tsx (1)

32-38: LGTM: Mock implementation is well-structured

The mock for useGetFilteredTxAndSuccessfulProposals provides appropriate default values and maintains consistency with the hook's interface.

pages/bank.tsx (2)

16-16: LGTM: Consistent environment variable usage

The change to use env.chain from the centralized environment configuration aligns with the PR objectives and maintains consistency across the application.

Also applies to: 19-19


43-43: LGTM: Proper indexer URL configuration

The use of env.indexerUrl from the centralized environment configuration is appropriate for the filtered transactions query.

components/factory/modals/TransferModal.tsx (1)

10-10: LGTM: Consistent environment configuration usage

The changes to use env.chain in both useTx and useFeeEstimation hooks align with the centralized environment variable configuration approach.

Also applies to: 59-60

pages/_app.tsx (2)

157-165: LGTM! Endpoint configuration is properly centralized.

The endpoint configuration is now consistently using environment variables, making it more maintainable.


201-201: LGTM! Improved naming consistency

The rename from setDrawerVisible to setIsDrawerVisible better aligns with the state variable name.

components/factory/modals/updateDenomMetadata.tsx (1)

83-84: LGTM! Consistent use of centralized configuration

The transaction and fee estimation configuration properly uses the centralized env.chain value, with appropriate error handling in place.

components/factory/forms/MintForm.tsx (2)

5-5: LGTM! Improved type safety and import organization

The consolidation of utility imports and addition of proper type annotation for the denom prop enhances code maintainability and type safety.


35-36: LGTM! Consistent configuration approach

The transaction and fee estimation configuration properly uses the centralized env.chain value, maintaining consistency across the codebase.

components/groups/modals/groupInfo.tsx (2)

4-4: LGTM: Import changes align with centralized configuration.

The changes to import paths and the addition of the env configuration import are consistent with the PR's objective of centralizing environment variables.

Also applies to: 8-8


42-42: Verify environment variable usage in production.

The switch to using env.chain instead of chainName is correct, but we should ensure the environment variable is properly set in all deployment environments.

Also applies to: 44-44

✅ Verification successful

Let's check the content of these files to understand how the environment variable is configured.


Environment variable configuration is properly structured and documented

The NEXT_PUBLIC_CHAIN environment variable is:

  • Properly defined in the configuration file (config/env.ts) with fallback handling
  • Well documented in the README.md with clear description
  • Correctly set up in the test environment
  • Used as a Next.js public environment variable (NEXT_PUBLIC prefix) making it available at build time
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the environment variable configuration
# Check for environment variable usage in deployment files

# Look for environment variable definitions
rg -l "NEXT_PUBLIC_CHAIN" .

Length of output: 67


Script:

#!/bin/bash
# Check env.ts configuration
echo "=== Content of config/env.ts ==="
cat config/env.ts

echo -e "\n=== Environment variable in README.md ==="
rg "NEXT_PUBLIC_CHAIN" README.md -C 2

echo -e "\n=== Environment variable in .env.test ==="
cat .env.test | grep "NEXT_PUBLIC_CHAIN"

Length of output: 1657

components/admins/modals/multiMfxBurnModal.tsx (2)

17-17: LGTM: Environment configuration import added.

The addition of the env import is consistent with the centralization of environment variables.


51-52: Verify transaction handling with new configuration.

The switch to env.chain for transaction and fee estimation is correct. However, we should ensure proper error handling for cases where the environment variable might be undefined.

✅ Verification successful

Let me check the error handling around env.chain by looking at its definition and usage in the environment configuration.


Let me check how the useTx and useFeeEstimation hooks handle undefined chain parameters.


Let me check how the useChain hook handles undefined chain values since both useTx and useFeeEstimation depend on it.


Based on the analysis of the codebase, I can now generate the final response:

Chain configuration is properly handled with fallback values

The switch to env.chain is safe. The environment configuration has proper fallback handling with empty string defaults, and the chain-related hooks (useChain, useTx, useFeeEstimation) from @cosmos-kit/react are designed to handle undefined/empty chain values gracefully. The code shows consistent patterns of null-coalescing for addresses (address ?? '') and proper error states through isWalletConnected checks.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for error handling around env.chain usage
# Look for error handling patterns around chain configuration

rg -A 3 "env\.chain" 

Length of output: 10823


Script:

#!/bin/bash
# Check environment configuration and chain setup
rg -p "env\s*=\s*{" -A 10

Length of output: 113


Script:

#!/bin/bash
# Check for any conditional checks or error handling around chain configuration
ast-grep --pattern 'if ($_ === undefined || $_ === null) { $$$ }'

Length of output: 67


Script:

#!/bin/bash
# Look for environment configuration files
fd -e ts -e js "env" --exec cat {}

Length of output: 646


Script:

#!/bin/bash
# Look for useTx and useFeeEstimation hook implementations
ast-grep --pattern 'function useTx($_) { $$$ }'

rg -p "useTx" -B 2 -A 5

ast-grep --pattern 'function useFeeEstimation($_) { $$$ }'

rg -p "useFeeEstimation" -B 2 -A 5

Length of output: 34507


Script:

#!/bin/bash
# Look for useChain hook implementation and error handling
ast-grep --pattern 'function useChain($_) { $$$ }'

rg -p "useChain" -B 2 -A 5

Length of output: 13532

components/admins/modals/upgradeModal.tsx (1)

12-12: LGTM: Consistent environment configuration import.

The addition of the env import maintains consistency with other components.

components/factory/forms/BurnForm.tsx (1)

6-6: LGTM: Environment configuration changes look good

The changes align with the PR objectives of centralizing environment variable configuration. The switch from chainName to env.chain is implemented correctly, and the necessary imports have been added.

Also applies to: 15-15, 51-52

components/admins/modals/multiMfxMintModal.tsx (1)

16-16: LGTM: Environment configuration changes are consistent

The changes follow the same pattern of centralizing environment configuration by using env.chain. The implementation is consistent with other components.

Also applies to: 51-52

components/groups/modals/memberManagementModal.tsx (1)

13-13: LGTM: Environment configuration changes are properly implemented

The changes align with the centralization of environment configuration using env.chain.

Also applies to: 53-54

components/bank/forms/sendForm.tsx (1)

14-14: LGTM! Environment configuration centralization

The changes correctly implement the centralized environment configuration by:

  1. Adding the env import
  2. Updating the hooks to use env.chain instead of hardcoded chain name

This aligns with the PR's objective of centralizing environment variables.

Also applies to: 42-43

components/bank/forms/ibcSendForm.tsx (2)

4-10: LGTM! Import organization improvement

The imports have been well organized, grouping related utility functions together.


56-57: LGTM! Consistent environment configuration

The changes correctly implement the centralized environment configuration across the IBC send functionality:

  1. Updated hooks to use env.chain
  2. Updated getIbcInfo to use env.chain

This maintains consistency with the changes in sendForm.tsx.

Also applies to: 121-121

components/groups/modals/updateGroupModal.tsx (1)

6-6: LGTM! Consistent environment configuration and import organization

The changes maintain consistency with other files:

  1. Consolidated imports from @/hooks
  2. Added env import
  3. Updated hooks to use env.chain

This completes the centralization of environment configuration across the codebase.

Also applies to: 13-13, 31-32

components/groups/components/myGroups.tsx (1)

29-29: LGTM! Environment variable integration looks good.

The changes correctly implement the centralized environment variable configuration by:

  1. Importing the env configuration
  2. Using env.indexerUrl in the useGetFilteredTxAndSuccessfulProposals hook

Let's verify the environment variable configuration:

Also applies to: 127-127

✅ Verification successful

Environment variable integration is correctly implemented

The verification confirms:

  • The indexerUrl is properly configured in config/env.ts using NEXT_PUBLIC_INDEXER_URL
  • The usage in myGroups.tsx aligns with other components (bank.tsx) and hooks (useQueries.ts)
  • The centralization effort is consistent across the codebase
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the environment variable configuration and its usage

# Check if the env configuration file exists and contains indexerUrl
rg -l "indexerUrl.*=.*process\.env" config/

# Check for other usages of indexerUrl to ensure consistency
rg "indexerUrl" --type ts --type tsx

Length of output: 110


Script:

#!/bin/bash
# Let's try a different approach to verify the environment configuration

# First, let's check for the env configuration file
fd "env" config/

# Then check its content
fd "env" config/ -x cat {}

# Check for indexerUrl usage across all files (without file type restriction)
rg "indexerUrl"

Length of output: 1114

components/groups/modals/voteDetailsModal.tsx (1)

27-27: LGTM! Environment variable integration looks good.

The changes correctly implement the centralized environment variable configuration by:

  1. Importing the env configuration
  2. Using env.chain consistently across all chain-related hooks (useChain, useTx, useFeeEstimation)

Let's verify the environment variable configuration:

Also applies to: 71-71, 198-199

✅ Verification successful

Environment variable integration is correctly implemented and consistent across the codebase

The verification confirms that:

  • The env.chain configuration is properly defined in config/env.ts using NEXT_PUBLIC_CHAIN
  • The import and usage in voteDetailsModal.tsx follows the same pattern used consistently across the entire codebase:
    • All chain-related hooks (useChain, useTx, useFeeEstimation) use env.chain
    • The import statement import env from '@/config/env' matches the pattern used in other components
  • The environment variable is documented in README.md
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the chain environment variable configuration and its usage

# Check if the env configuration file exists and contains chain configuration
rg -l "chain.*=.*process\.env" config/

# Check for other usages of chain configuration to ensure consistency
rg "env\.chain" --type ts --type tsx

Length of output: 107


Script:

#!/bin/bash
# Let's try a different approach to verify the environment configuration

# First, check for the env configuration file
fd "env\.(js|ts)" config/

# Then check its contents if found
fd "env\.(js|ts)" config/ --exec cat {}

# Check for chain-related environment usage with ripgrep
# Note: Using --type typescript for TypeScript/TSX files
rg "env\.chain" --type typescript

# Also check for direct process.env.CHAIN usage
rg "process\.env\.CHAIN" --type typescript

Length of output: 846


Script:

#!/bin/bash
# Let's verify the usage of env.chain across the codebase

# Search for env.chain usage without specifying file type
rg "env\.chain"

# Also check for any direct usage of NEXT_PUBLIC_CHAIN
rg "NEXT_PUBLIC_CHAIN[^_]"

# Look for files importing the env configuration
rg "from.*config/env"

Length of output: 6788

@@ -27,6 +27,7 @@ yarn-error.log*

# local env files
.env*
!.env.test
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

Remove or mask sensitive test configuration in .env.test

The .env.test file contains a WalletConnect key configuration. Even though it's marked as a test key, it's recommended to:

  • Use placeholder values (e.g., NEXT_PUBLIC_WALLETCONNECT_KEY=dummy_key) instead of actual test credentials
  • Document the required format in a .env.example file instead
🔗 Analysis chain

Verify .env.test contents and security implications.

While tracking .env.test in version control is a common practice, please ensure:

  1. The file contains only non-sensitive test configuration
  2. No production credentials or keys are included
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check .env.test existence and content for sensitive data
if [ -f ".env.test" ]; then
    echo "Checking .env.test for potential sensitive data..."
    rg -i "key|secret|password|token|credential" .env.test
fi

Length of output: 243


export const manifestChain: Chain = {
chain_name: 'manifest',
status: 'live',
network_type: 'testnet',
network_type: env.chainTier,
website: '',
pretty_name: 'Manifest Testnet',
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

Update pretty_name to be environment-aware

The pretty_name is hardcoded as 'Manifest Testnet' while other chain configurations are environment-based. This could be misleading when using different chain tiers.

Consider using the chain tier from the environment:

-  pretty_name: 'Manifest Testnet',
+  pretty_name: `Manifest ${env.chainTier}`,
📝 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
pretty_name: 'Manifest Testnet',
pretty_name: `Manifest ${env.chainTier}`,


export const manifestChain: Chain = {
chain_name: 'manifest',
status: 'live',
network_type: 'testnet',
network_type: env.chainTier,
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

Environment variables need stronger validation

The codebase currently uses nullish coalescing (??) to provide empty string fallbacks for environment variables, but lacks proper validation for required values and their formats. This could lead to runtime issues if critical chain configuration variables are missing or malformed.

  • config/env.ts: Add validation to ensure required environment variables are present and correctly formatted
  • config/defaults.ts: Verify chainTier value is one of the expected values ('testnet', 'mainnet') before using it
🔗 Analysis chain

Verify environment variable validation

The code uses environment variables for critical chain configuration. Ensure these variables are properly validated to prevent runtime issues.

Let's check if the env configuration has proper validation:

Also applies to: 10-10, 18-18, 23-23


Let me check for any additional validation or type checking that might be in place.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for environment variable validation in the codebase

# Look for validation patterns in env.ts
rg -A 5 "chainTier|chainId|rpcUrl|apiUrl" ./config/env.ts

# Check for potential undefined checks
rg "process\.env\." ./config/env.ts

Length of output: 1265


Script:

#!/bin/bash
# Check for type definitions and validation
fd env.d.ts --exec cat {}

# Check for any validation utilities or schema definitions
rg -g '!node_modules' -A 5 "chainTier|NEXT_PUBLIC_CHAIN_TIER" 

# Look for environment setup or validation in configuration files
fd -e ts -e js -g '!node_modules' --exec rg -l "validateEnv|validate.*env|env.*validate"

Length of output: 1517

@@ -33,8 +37,7 @@ export const useTx = (chainName: string) => {
const { address, getSigningStargateClient, estimateFee } = useChain(chainName);
const { setToastMessage } = useToast();
const [isSigning, setIsSigning] = useState(false);
const { selectedEndpoint } = useEndpointStore();
const explorerUrl = selectedEndpoint?.explorer || '';
const explorerUrl = env.explorerUrl;
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

Environment variable configuration needs attention

The explorer URL environment variable (NEXT_PUBLIC_EXPLORER_URL) is only configured in .env.test but is actively used across multiple components. This could lead to undefined behavior in other environments.

  • .env.test is the only environment file containing the configuration
  • The variable is used in:
    • hooks/useTx.tsx for transaction links
    • pages/404.tsx for block explorer link
    • components/factory/modals/denomInfo.tsx for address links
    • components/bank/modals/txInfo.tsx for transaction and account links
🔗 Analysis chain

Verify environment variable configuration

The explorer URL is now sourced from environment variables, which aligns with the PR objectives.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Verify the environment variable is properly configured in relevant files
rg -l "NEXT_PUBLIC_EXPLORER_URL" .env* package.json

Length of output: 65


Script:

#!/bin/bash
# Check for environment variable configuration in other env files and configuration files
fd -e env -e env.example -e env.local -e env.development -e env.production -e env.staging --exec rg -l "NEXT_PUBLIC_EXPLORER_URL" {}

# Check the actual usage of explorerUrl in the codebase
rg "explorerUrl" -A 2 -B 2

Length of output: 7225

@@ -22,7 +19,7 @@ export default function FourOhFour() {
},
{
name: 'Block Explorer',
href: explorerUrl,
href: env.explorerUrl,
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

Environment variable type safety needs improvement

The explorerUrl in config/env.ts lacks explicit type definitions and relies on string type inference. While functional, it could benefit from:

  • Explicit type definitions for the env object
  • Type validation for URL format
  • Documentation of expected format
🔗 Analysis chain

Verify environment variable type safety

The change to use env.explorerUrl aligns with the PR's goal of centralizing environment variables.

Let's verify the type definition for explorerUrl:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if explorerUrl is properly typed in the env configuration
ast-grep --pattern 'export const env = {
  $$$
  explorerUrl: $_,
  $$$
}'

Length of output: 76


Script:

#!/bin/bash
# Let's try a broader search for env configuration files and explorerUrl
fd -e ts -e js env
rg -l "explorerUrl"

# Then check the content of any relevant files
rg "explorerUrl" -A 2 -B 2

Length of output: 7263


Script:

#!/bin/bash
# Let's check the type definition of env.explorerUrl
cat config/env.ts

Length of output: 629

import { ExtendedMetadataSDKType } from '@/utils';
import env from '@/config/env';
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

Add error handling for missing environment variables

The current implementation assumes environment variables are always present. Consider adding validation to handle missing configurations gracefully.

Add environment variable validation:

// utils/validateEnv.ts
export function validateEnv() {
  const requiredEnvVars = [
    'NEXT_PUBLIC_CHAIN',
    'NEXT_PUBLIC_CHAIN_ID',
    // ... other required vars
  ];

  const missingEnvVars = requiredEnvVars.filter(
    varName => !process.env[varName]
  );

  if (missingEnvVars.length > 0) {
    throw new Error(
      `Missing required environment variables: ${missingEnvVars.join(', ')}`
    );
  }
}

// pages/_app.tsx
validateEnv();

Also applies to: 17-17

Comment on lines +129 to +130
clientId: env.web3AuthClientId,
web3AuthNetwork: env.web3AuthNetwork as OPENLOGIN_NETWORK_TYPE, // Safe to cast since we validate the env vars in config/env.ts
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

Type casting is performed without proper validation

The code comment stating "Safe to cast since we validate the env vars in config/env.ts" is incorrect. The env.ts file only provides default empty string values using the nullish coalescing operator (??) but does not perform any type validation for web3AuthNetwork. This means the type assertion to OPENLOGIN_NETWORK_TYPE is unsafe and could lead to runtime errors.

Suggested fixes:

  • Add proper validation in config/env.ts to ensure web3AuthNetwork matches the expected OPENLOGIN_NETWORK_TYPE values
  • Consider using a type guard or enum validation before the type assertion
🔗 Analysis chain

Verify type validation in config/env.ts

The code assumes type safety with the comment "Safe to cast since we validate the env vars in config/env.ts". Let's verify this assumption.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check if env.ts contains proper validation for web3AuthNetwork
rg -A 5 "web3AuthNetwork.*=" config/env.ts

Length of output: 44


Script:

#!/bin/bash
# Let's first check if the file exists and its location
fd -t f "env.ts"

# Then let's look for any validation related to web3AuthNetwork
rg -i "web3authnetwork" -A 5

Length of output: 771


Script:

#!/bin/bash
# Let's check the entire env.ts file to see if there's any validation logic
cat config/env.ts

# Also check for any type imports related to OPENLOGIN_NETWORK_TYPE
rg "OPENLOGIN_NETWORK_TYPE"

Length of output: 894

@fmorency fmorency merged commit 5293618 into liftedinit:main Dec 13, 2024
4 checks passed
@fmorency fmorency deleted the fix-web3auth branch December 13, 2024 20:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants