From 1785c6c301aa0661964da3dcc31981b27f3234fa Mon Sep 17 00:00:00 2001 From: Daniel Sinclair <4412473+DanielSinclair@users.noreply.github.com> Date: Tue, 24 Sep 2024 14:36:06 -0400 Subject: [PATCH] fix: enhanced provider api key fallback behavior (#2194) * fix: enhanced provider api key fallback behavior * fix: ci secret passthrough --- .github/workflows/ci.yml | 5 +-- packages/rainbowkit/build.js | 42 ++++++++++++------- .../src/core/network/enhancedProvider.test.ts | 26 +++++++++++- .../src/core/network/enhancedProvider.ts | 6 +++ .../rainbowkit/src/hooks/useMainnetEnsName.ts | 7 +++- 5 files changed, 64 insertions(+), 22 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f41f43aeee..c2c31fc6f6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,9 +4,8 @@ on: [pull_request, push] env: pnpm: 9.10.0 - RAINBOW_PROVIDER_API_KEY: RAINBOW_PROVIDER_API_KEY - WALLETCONNECT_PROJECT_ID: YOUR_PROJECT_ID - ALCHEMY_ID: YOUR_ALCHEMY_ID + RAINBOW_PROVIDER_API_KEY: ${{ secrets.RAINBOW_PROVIDER_API_KEY }} + WALLETCONNECT_PROJECT_ID: ${{ secrets.WALLETCONNECT_PROJECT_ID }} jobs: tests: diff --git a/packages/rainbowkit/build.js b/packages/rainbowkit/build.js index 9cf39d582b..e06581fae2 100644 --- a/packages/rainbowkit/build.js +++ b/packages/rainbowkit/build.js @@ -23,12 +23,6 @@ const getAllEntryPoints = async (rootPath) => ); const baseBuildConfig = (onEnd) => { - const rainbowProviderApiKey = process.env.RAINBOW_PROVIDER_API_KEY; - - if (!rainbowProviderApiKey) { - throw new Error('missing RAINBOW_PROVIDER_API_KEY env variable'); - } - return { banner: { js: '"use client";', // Required for Next 13 App Router @@ -42,14 +36,6 @@ const baseBuildConfig = (onEnd) => { '.json': 'text', }, plugins: [ - replace({ - include: - /src\/components\/RainbowKitProvider\/useFingerprint.ts$|src\/core\/network\/enhancedProvider.ts$/, - values: { - __buildVersion: process.env.npm_package_version, - __rainbowProviderApiKey: rainbowProviderApiKey, - }, - }), vanillaExtractPlugin({ identifiers: isCssMinified ? 'short' : 'debug', processCss: async (css) => { @@ -82,8 +68,34 @@ const baseBuildConfig = (onEnd) => { }; }; +const mainBuildConfig = (onEnd) => { + const rainbowProviderApiKey = process.env.RAINBOW_PROVIDER_API_KEY; + + if (!rainbowProviderApiKey) { + console.warn( + 'missing RAINBOW_PROVIDER_API_KEY env variable, disabling enhanced provider', + ); + } + + const buildConfig = baseBuildConfig(onEnd); + return { + ...buildConfig, + plugins: [ + replace({ + include: + /src\/components\/RainbowKitProvider\/useFingerprint.ts$|src\/core\/network\/enhancedProvider.ts$/, + values: { + __buildVersion: process.env.npm_package_version, + __rainbowProviderApiKey: rainbowProviderApiKey, + }, + }), + ...buildConfig.plugins, + ], + }; +}; + const mainBuildOptions = { - ...baseBuildConfig((result) => { + ...mainBuildConfig((result) => { if (result.errors.length) { console.error('❌ main build failed:', result.errors); } else console.log('✅ main build succeeded'); diff --git a/packages/rainbowkit/src/core/network/enhancedProvider.test.ts b/packages/rainbowkit/src/core/network/enhancedProvider.test.ts index 16ac045d43..d684c4b730 100644 --- a/packages/rainbowkit/src/core/network/enhancedProvider.test.ts +++ b/packages/rainbowkit/src/core/network/enhancedProvider.test.ts @@ -1,7 +1,20 @@ import { describe, expect, it } from 'vitest'; -import { enhancedProviderHttp } from './enhancedProvider'; +import { + ENHANCED_PROVIDER_ENABLED, + enhancedProviderHttp, +} from './enhancedProvider'; + +describe('createHttpClient', () => { + if (!process.env.RAINBOW_PROVIDER_API_KEY) { + it.skip('skips tests if RAINBOW_PROVIDER_API_KEY is missing', () => {}); + return; + } + + if (!ENHANCED_PROVIDER_ENABLED) { + it.skip('skips tests if enhanced provider is disabled', () => {}); + return; + } -describe.skip('createHttpClient', () => { it("should return 'ok' status for health check endpoint", async () => { const { data } = await enhancedProviderHttp.get('/healthcheck'); expect(data).toStrictEqual({ status: 'ok' }); @@ -16,4 +29,13 @@ describe.skip('createHttpClient', () => { 'Not Found', ); }); + + it('should resolve ENS name for a valid address', async () => { + const address = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'; + const { data } = await enhancedProviderHttp.get<{ data: string | null }>( + '/v1/resolve-ens', + { params: { address } }, + ); + expect(data.data).toBe('vitalik.eth'); + }); }); diff --git a/packages/rainbowkit/src/core/network/enhancedProvider.ts b/packages/rainbowkit/src/core/network/enhancedProvider.ts index e5a535f896..3eb1519b0f 100644 --- a/packages/rainbowkit/src/core/network/enhancedProvider.ts +++ b/packages/rainbowkit/src/core/network/enhancedProvider.ts @@ -1,5 +1,11 @@ import { createHttpClient } from './internal/createHttpClient'; +export const ENHANCED_PROVIDER_ENABLED = Boolean( + typeof process !== 'undefined' && + typeof process.env !== 'undefined' && + process.env.RAINBOW_PROVIDER_API_KEY, +); + export const enhancedProviderHttp = createHttpClient({ baseUrl: 'https://enhanced-provider.rainbow.me', headers: { diff --git a/packages/rainbowkit/src/hooks/useMainnetEnsName.ts b/packages/rainbowkit/src/hooks/useMainnetEnsName.ts index ad553ee838..1a2dd203fe 100644 --- a/packages/rainbowkit/src/hooks/useMainnetEnsName.ts +++ b/packages/rainbowkit/src/hooks/useMainnetEnsName.ts @@ -2,7 +2,10 @@ import { useQuery } from '@tanstack/react-query'; import type { Address } from 'viem'; import { useEnsName } from 'wagmi'; import { mainnet } from 'wagmi/chains'; -import { enhancedProviderHttp } from '../core/network/enhancedProvider'; +import { + ENHANCED_PROVIDER_ENABLED, + enhancedProviderHttp, +} from '../core/network/enhancedProvider'; import { createQueryKey } from '../core/react-query/createQuery'; import { addEnsName, getEnsName } from '../utils/ens'; import { useIsMainnetConfigured } from './useIsMainnetConfigured'; @@ -41,7 +44,7 @@ export function useMainnetEnsName(address?: Address) { const { data: enhancedProviderEnsName } = useQuery({ queryKey: createQueryKey('address', address), queryFn: () => getEnhancedProviderEnsName({ address: address! }), - enabled: !mainnetConfigured && !!address, + enabled: !mainnetConfigured && !!address && ENHANCED_PROVIDER_ENABLED, staleTime: 10 * (60 * 1_000), // 10 minutes retry: 1, // Retry once before returning undefined if the request fails });