{"version":3,"sources":["../../../src/providers/growthbook.ts"],"names":["_Growthbook","clientKey","decryptionKey","growthbookOptions","debug","RudderAnalytics","createLogger","id","country","user_language","device_language","device_type","utm_source","utm_medium","utm_campaign","is_authorised","url","domain","utm_content","residence_country","loggedIn","network_type","network_downlink","user_id","anonymous_id","account_mode","newAttributes","key","defaultValue","value","state","href","result","status","isLocalhost","GrowthBook","growthbookApi","experiment","currentUrl","timeout","resolve","reject","startTime","checkInterval","Growthbook"],"mappings":"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","file":"index.mjs","sourcesContent":["import { GrowthBook, InitResponse } from '@growthbook/growthbook'\nimport { RudderAnalytics } from '@rudderstack/analytics-js'\nimport {\n    TGrowthbookAttributes,\n    TGrowthbookOptions,\n    GrowthbookConfigs,\n    TGrowthbookCoreAttributes,\n} from './growthbookTypes'\nimport { growthbookApi } from '../utils/urls'\nimport { createLogger } from '../utils/helpers'\n\nexport class Growthbook {\n    analytics = new RudderAnalytics()\n    GrowthBook: GrowthBook<GrowthbookConfigs>\n    private static _instance: Growthbook\n    isLoaded = false\n    status: void | InitResponse = undefined\n    private debug = false\n    private log = createLogger('[GrowthBook]', () => this.debug)\n\n    // we have to pass settings due the specific framework implementation\n    constructor(clientKey: string, decryptionKey: string, growthbookOptions: TGrowthbookOptions = {}, debug = false) {\n        this.debug = debug\n        const isLocalhost = typeof window !== 'undefined' ? window.location.hostname.includes('localhost') : false\n\n        this.GrowthBook = new GrowthBook<GrowthbookConfigs>({\n            apiHost: growthbookApi,\n            clientKey,\n            decryptionKey,\n            antiFlicker: false,\n            navigateDelay: 0,\n            antiFlickerTimeout: 3500,\n            subscribeToChanges: true,\n            enableDevMode: isLocalhost,\n            trackingCallback: (experiment, result) => {\n                this.log('trackingCallback | experiment viewed', {\n                    experiment_id: experiment.key,\n                    variation_id: result.variationId,\n                })\n                if (typeof window !== 'undefined' && window.dataLayer) {\n                    window.dataLayer.push({\n                        event: 'experiment_viewed',\n                        event_category: 'experiment',\n                        rudder_anonymous_id: this.analytics.getAnonymousId(),\n                        experiment_id: experiment.key,\n                        variation_id: result.variationId,\n                    })\n                }\n                this.analytics.track('experiment_viewed', {\n                    experimentId: experiment.key,\n                    variationId: result.variationId,\n                })\n            },\n            ...growthbookOptions,\n        })\n        this.init()\n    }\n\n    // for make instance by singleton\n    public static getGrowthBookInstance = (\n        clientKey: string,\n        decryptionKey?: string,\n        growthbookOptions?: TGrowthbookOptions,\n        debug = false\n    ) => {\n        if (!Growthbook._instance) {\n            Growthbook._instance = new Growthbook(clientKey, decryptionKey ?? '', growthbookOptions, debug)\n            return Growthbook._instance\n        }\n\n        // Warn if trying to reinitialize with different parameters\n        if (typeof window !== 'undefined' && console.warn) {\n            console.warn('GrowthBook instance already exists. Ignoring new initialization parameters.')\n        }\n\n        return Growthbook._instance\n    }\n\n    reapplyExperiment(url?: string) {\n        const currentUrl = url ?? (typeof window !== 'undefined' ? window.location.href : '')\n        this.GrowthBook.setURL(currentUrl)\n    }\n\n    // Utility function to wait for isLoaded to become true\n    private waitForIsLoaded(timeout = 10000): Promise<void> {\n        return new Promise((resolve, reject) => {\n            const startTime = Date.now()\n            const checkInterval = setInterval(() => {\n                if (this.isLoaded) {\n                    clearInterval(checkInterval)\n                    resolve()\n                } else if (Date.now() - startTime >= timeout) {\n                    clearInterval(checkInterval)\n                    reject(new Error('GrowthBook initialization timeout'))\n                }\n            }, 100)\n        })\n    }\n\n    setAttributes = ({\n        id,\n        country,\n        user_language,\n        device_language,\n        device_type,\n        utm_source,\n        utm_medium,\n        utm_campaign,\n        is_authorised,\n        url,\n        domain,\n        utm_content,\n        residence_country,\n        loggedIn,\n        network_type,\n        network_downlink,\n        user_id,\n        anonymous_id,\n        account_mode,\n    }: TGrowthbookAttributes) => {\n        const currentAttributes = this.GrowthBook.getAttributes()\n        const newAttributes = {\n            ...currentAttributes,\n            id,\n            ...(user_id !== undefined && { user_id }),\n            ...(anonymous_id !== undefined && { anonymous_id }),\n            ...(country !== undefined && { country }),\n            ...(residence_country !== undefined && { residence_country }),\n            ...(user_language !== undefined && { user_language }),\n            ...(device_language !== undefined && { device_language }),\n            ...(device_type !== undefined && { device_type }),\n            ...(utm_source !== undefined && { utm_source }),\n            ...(utm_medium !== undefined && { utm_medium }),\n            ...(utm_campaign !== undefined && { utm_campaign }),\n            ...(is_authorised !== undefined && { is_authorised }),\n            ...(url !== undefined && { url }),\n            ...(domain !== undefined && { domain }),\n            ...(utm_content !== undefined && { utm_content }),\n            ...(loggedIn !== undefined && { loggedIn }),\n            ...(network_type !== undefined && { network_type }),\n            ...(network_downlink !== undefined && { network_downlink }),\n            ...(account_mode !== undefined && { account_mode }),\n        }\n        this.log('setAttributes | updating GrowthBook attributes', newAttributes)\n        this.GrowthBook.setAttributes(newAttributes)\n    }\n    getFeatureValue = <K extends keyof GrowthbookConfigs, V extends GrowthbookConfigs[K]>(key: K, defaultValue: V) => {\n        const value = this.GrowthBook.getFeatureValue(key as string, defaultValue)\n        this.log('getFeatureValue', { key, value, defaultValue })\n        return value\n    }\n    getStatus = async (): Promise<{ isLoaded: boolean; status: void | InitResponse }> => {\n        await this.waitForIsLoaded()\n\n        return {\n            isLoaded: this.isLoaded,\n            status: this.status,\n        }\n    }\n    getFeatureState = (id: string) => {\n        const state = this.GrowthBook.evalFeature(id)\n        this.log('getFeatureState', { id, result: state })\n        return state\n    }\n    setUrl = (href: string) => {\n        this.log('setUrl', { href })\n        this.GrowthBook.setURL(href)\n    }\n    isOn = (key: string) => {\n        const result = this.GrowthBook.isOn(key)\n        this.log('isOn', { key, result })\n        return result\n    }\n\n    init = async () => {\n        this.log('init | initializing GrowthBook SDK')\n        const status = await this.GrowthBook.init({ timeout: 2000, streaming: true }).catch(() => {\n            // Silently handle initialization errors\n        })\n\n        this.status = status\n        this.isLoaded = true\n        this.log('init | GrowthBook SDK loaded', { status })\n    }\n\n    // Destroy the GrowthBook instance and reset singleton\n    destroy = () => {\n        this.GrowthBook.destroy()\n        this.isLoaded = false\n        this.status = undefined\n    }\n\n    // Reset the singleton instance (useful for testing)\n    public static resetInstance = () => {\n        if (Growthbook._instance) {\n            Growthbook._instance.destroy()\n            Growthbook._instance = undefined as any\n        }\n    }\n}\n\nexport type { GrowthbookConfigs, TGrowthbookAttributes, TGrowthbookOptions, TGrowthbookCoreAttributes }\n"]}