import * as v from 'valibot' import { versionedConfigSchema, VersionedWebchatConfig, LatestVersionedWebchatConfig, initialConfig, LATEST_WEBCHAT_CONFIG_VERSION, } from '../schemas' type V0Config = Extract type V1Config = Extract export const migrateConfig = (config: Partial): LatestVersionedWebchatConfig => { const parsedConfig = parseConfig(config) if (parsedConfig.version === LATEST_WEBCHAT_CONFIG_VERSION) { return parsedConfig } if (parsedConfig.version === 'v0') { return migrateConfig(migrateV0ToV1(parsedConfig)) } if (parsedConfig.version === 'v1') { return migrateConfig(migrateV1ToV2(parsedConfig)) } const _exhaustiveCheck: never = parsedConfig throw new Error(`Unknown webchat config version: ${parsedConfig}`) } const migrateV0ToV1 = (config: Partial): Partial => { const headerVariant = config.variant === 'solid' ? 'solid' : 'glass' const footer = config.showPoweredBy === false ? '' : initialConfig.footer || '' return { ...config, footer, headerVariant, feedbackEnabled: false, version: 'v1', } } const migrateV1ToV2 = (config: Partial): LatestVersionedWebchatConfig => { return { ...config, proactiveMessageEnabled: false, proactiveBubbleMessage: 'Hi! 👋 Need help?', proactiveBubbleTriggerType: 'afterDelay', proactiveBubbleDelayTime: 10, soundEnabled: false, version: 'v2', } } const parseConfig = (config: Partial) => { const baseConfig = { ...initialConfig, ...config, } return v.parse(versionedConfigSchema, baseConfig) }