From 6b90edef649e6560a2d4a53f5da387cbdb6344ed Mon Sep 17 00:00:00 2001 From: Nicky Bondarenko Date: Tue, 10 Sep 2024 15:49:35 +0200 Subject: [PATCH] feat: add a custom baseURL for sidecar resolves --- packages/sdk/src/Confidence.ts | 5 +++++ packages/sdk/src/FlagResolverClient.ts | 13 +++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/sdk/src/Confidence.ts b/packages/sdk/src/Confidence.ts index c27fd8dd..5ddd9437 100644 --- a/packages/sdk/src/Confidence.ts +++ b/packages/sdk/src/Confidence.ts @@ -38,6 +38,8 @@ export interface ConfidenceOptions { timeout: number; /** Debug logger */ logger?: Logger; + /** Backend only option. Sets an alternative resolve url */ + APIResolveBaseUrl?: string; } /** @@ -323,6 +325,7 @@ export class Confidence implements EventSender, Trackable, FlagResolver { * @param environment - can be either "client" or "backend" * @param fetchImplementation - fetch implementation * @param logger - debug logger + * @param APIResolveBaseUrl - custom backend resolve URL * @returns */ static create({ @@ -332,6 +335,7 @@ export class Confidence implements EventSender, Trackable, FlagResolver { environment, fetchImplementation = defaultFetchImplementation(), logger = defaultLogger(), + APIResolveBaseUrl, }: ConfidenceOptions): Confidence { const sdk = { id: SdkId.SDK_ID_JS_CONFIDENCE, @@ -344,6 +348,7 @@ export class Confidence implements EventSender, Trackable, FlagResolver { environment, resolveTimeout: timeout, region, + APIResolveBaseUrl, }); if (environment === 'client') { flagResolverClient = new CachingFlagResolverClient(flagResolverClient, Number.POSITIVE_INFINITY); diff --git a/packages/sdk/src/FlagResolverClient.ts b/packages/sdk/src/FlagResolverClient.ts index 94dc8ef3..4adb35a6 100644 --- a/packages/sdk/src/FlagResolverClient.ts +++ b/packages/sdk/src/FlagResolverClient.ts @@ -16,7 +16,10 @@ import { SimpleFetch } from './types'; const FLAG_PREFIX = 'flags/'; export class ResolveError extends Error { - constructor(public readonly code: FlagEvaluation.ErrorCode, message: string) { + constructor( + public readonly code: FlagEvaluation.ErrorCode, + message: string, + ) { super(message); } } @@ -84,6 +87,7 @@ export type FlagResolverClientOptions = { resolveTimeout: number; environment: 'client' | 'backend'; region?: 'eu' | 'us'; + APIResolveBaseUrl?: string; }; export class FetchingFlagResolverClient implements FlagResolverClient { @@ -103,13 +107,18 @@ export class FetchingFlagResolverClient implements FlagResolverClient { // todo refactor to move out environment environment, region, + APIResolveBaseUrl, }: FlagResolverClientOptions) { // TODO think about both resolve and apply request logic for backends this.fetchImplementation = environment === 'backend' ? fetchImplementation : withRequestLogic(fetchImplementation); this.clientSecret = clientSecret; this.sdk = sdk; this.applyTimeout = applyTimeout; - this.baseUrl = region ? `https://resolver.${region}.confidence.dev/v1` : 'https://resolver.confidence.dev/v1'; + if (environment === 'backend' && APIResolveBaseUrl) { + this.baseUrl = APIResolveBaseUrl; + } else { + this.baseUrl = region ? `https://resolver.${region}.confidence.dev/v1` : 'https://resolver.confidence.dev/v1'; + } this.resolveTimeout = resolveTimeout; }