fix: use configcat proxy (#36130)
* fix: use configcat proxy * fix: add fallback to origin * chore: fix test
This commit is contained in:
@@ -2,6 +2,10 @@ import { describe, it, expect, vi, beforeEach } from 'vitest'
|
||||
import * as configcat from 'configcat-js'
|
||||
import { getFlags } from './configcat'
|
||||
|
||||
vi.mock('data/fetchers', () => ({
|
||||
fetchHandler: vi.fn(),
|
||||
}))
|
||||
|
||||
vi.mock('configcat-js', () => ({
|
||||
getClient: vi.fn(),
|
||||
PollingMode: {
|
||||
@@ -30,6 +34,14 @@ describe('configcat', () => {
|
||||
const mockValues = { flag1: true, flag2: false }
|
||||
mockClient.getAllValuesAsync.mockResolvedValue(mockValues)
|
||||
|
||||
const { fetchHandler } = await import('data/fetchers')
|
||||
const mockFetchHandler = fetchHandler as unknown as ReturnType<typeof vi.fn>
|
||||
mockFetchHandler.mockResolvedValueOnce(
|
||||
new Response(JSON.stringify({}), {
|
||||
status: 200,
|
||||
})
|
||||
)
|
||||
|
||||
const result = await getFlags(email)
|
||||
|
||||
expect(configcat.User).toHaveBeenCalledWith(email)
|
||||
|
||||
@@ -1,24 +1,38 @@
|
||||
import * as configcat from 'configcat-js'
|
||||
import { fetchHandler } from 'data/fetchers'
|
||||
|
||||
let client: configcat.IConfigCatClient
|
||||
|
||||
function getClient() {
|
||||
const endpoint = '/configuration-files/configcat-proxy/frontend-v2/config_v6.json'
|
||||
|
||||
async function getClient() {
|
||||
if (client) {
|
||||
return client
|
||||
}
|
||||
|
||||
client = configcat.getClient(
|
||||
process.env.NEXT_PUBLIC_CONFIGCAT_SDK_KEY ?? '',
|
||||
configcat.PollingMode.AutoPoll,
|
||||
{ pollIntervalSeconds: 7 * 60 } // 7 minutes
|
||||
)
|
||||
const response = await fetchHandler(process.env.NEXT_PUBLIC_CONFIGCAT_PROXY_URL + endpoint)
|
||||
const options = { pollIntervalSeconds: 7 * 60 } // 7 minutes
|
||||
if (response.status !== 200) {
|
||||
// proxy is down, use default client
|
||||
client = configcat.getClient(
|
||||
process.env.NEXT_PUBLIC_CONFIGCAT_SDK_KEY ?? '',
|
||||
configcat.PollingMode.AutoPoll,
|
||||
options
|
||||
)
|
||||
} else {
|
||||
client = configcat.getClient('configcat-proxy/frontend-v2', configcat.PollingMode.AutoPoll, {
|
||||
...options,
|
||||
baseUrl: process.env.NEXT_PUBLIC_CONFIGCAT_PROXY_URL,
|
||||
})
|
||||
}
|
||||
|
||||
return client
|
||||
}
|
||||
|
||||
export async function getFlags(userEmail: string = '') {
|
||||
if (userEmail) {
|
||||
return getClient().getAllValuesAsync(new configcat.User(userEmail))
|
||||
const client = await getClient()
|
||||
return client.getAllValuesAsync(new configcat.User(userEmail))
|
||||
}
|
||||
|
||||
return []
|
||||
|
||||
@@ -37,6 +37,9 @@ const HCAPTCHA_SUBDOMAINS_URL = 'https://*.hcaptcha.com'
|
||||
const HCAPTCHA_ASSET_URL = 'https://newassets.hcaptcha.com'
|
||||
const HCAPTCHA_JS_URL = 'https://js.hcaptcha.com'
|
||||
const CONFIGCAT_URL = 'https://cdn-global.configcat.com'
|
||||
const CONFIGCAT_PROXY_URL = ['staging', 'local'].includes(process.env.NEXT_PUBLIC_ENVIRONMENT)
|
||||
? 'https://configcat.supabase.green'
|
||||
: 'https://configcat.supabase.com'
|
||||
const STRIPE_SUBDOMAINS_URL = 'https://*.stripe.com'
|
||||
const STRIPE_JS_URL = 'https://js.stripe.com'
|
||||
const STRIPE_NETWORK_URL = 'https://*.stripe.network'
|
||||
@@ -63,7 +66,7 @@ const USERCENTRICS_APP_URL = 'https://app.usercentrics.eu'
|
||||
const PUSHER_URL = 'https://*.pusher.com'
|
||||
const PUSHER_URL_WS = 'wss://*.pusher.com'
|
||||
|
||||
const DEFAULT_SRC_URLS = `${API_URL} ${SUPABASE_URL} ${GOTRUE_URL} ${SUPABASE_LOCAL_PROJECTS_URL_WS} ${SUPABASE_PROJECTS_URL} ${SUPABASE_PROJECTS_URL_WS} ${HCAPTCHA_SUBDOMAINS_URL} ${CONFIGCAT_URL} ${STRIPE_SUBDOMAINS_URL} ${STRIPE_NETWORK_URL} ${CLOUDFLARE_URL} ${ONE_ONE_ONE_ONE_URL} ${VERCEL_INSIGHTS_URL} ${GITHUB_API_URL} ${GITHUB_USER_CONTENT_URL} ${SUPABASE_ASSETS_URL} ${USERCENTRICS_URLS}`
|
||||
const DEFAULT_SRC_URLS = `${API_URL} ${SUPABASE_URL} ${GOTRUE_URL} ${SUPABASE_LOCAL_PROJECTS_URL_WS} ${SUPABASE_PROJECTS_URL} ${SUPABASE_PROJECTS_URL_WS} ${HCAPTCHA_SUBDOMAINS_URL} ${CONFIGCAT_URL} ${CONFIGCAT_PROXY_URL} ${STRIPE_SUBDOMAINS_URL} ${STRIPE_NETWORK_URL} ${CLOUDFLARE_URL} ${ONE_ONE_ONE_ONE_URL} ${VERCEL_INSIGHTS_URL} ${GITHUB_API_URL} ${GITHUB_USER_CONTENT_URL} ${SUPABASE_ASSETS_URL} ${USERCENTRICS_URLS}`
|
||||
const SCRIPT_SRC_URLS = `${CLOUDFLARE_CDN_URL} ${HCAPTCHA_JS_URL} ${STRIPE_JS_URL} ${SUPABASE_ASSETS_URL}`
|
||||
const FRAME_SRC_URLS = `${HCAPTCHA_ASSET_URL} ${STRIPE_JS_URL}`
|
||||
const IMG_SRC_URLS = `${SUPABASE_URL} ${SUPABASE_COM_URL} ${SUPABASE_PROJECTS_URL} ${GITHUB_USER_AVATAR_URL} ${GOOGLE_USER_AVATAR_URL} ${SUPABASE_ASSETS_URL} ${USERCENTRICS_APP_URL}`
|
||||
|
||||
@@ -53,6 +53,7 @@
|
||||
"NEXT_PUBLIC_SITE_URL",
|
||||
"NEXT_PUBLIC_API_URL",
|
||||
"NEXT_PUBLIC_CONFIGCAT_SDK_KEY",
|
||||
"NEXT_PUBLIC_CONFIGCAT_PROXY_URL",
|
||||
"NEXT_PUBLIC_HCAPTCHA_SITE_KEY",
|
||||
"NEXT_PUBLIC_SUPABASE_URL",
|
||||
"NEXT_PUBLIC_SUPABASE_ANON_KEY",
|
||||
|
||||
Reference in New Issue
Block a user