Files
zeekay ec6f6b50c1 chore: kill ALL posthog — zero refs, zero filenames (1452 -> 0)
We own the ingestion server (hanzoai/insights: Django + rust/capture + nodejs
plugin) AND this SDK, so there is no external wire contract to preserve. The
server is already 100% posthog-free; this SDK was the last laggard.

- $last_posthog_reset -> $last_insights_reset. This FIXES A LIVE MISMATCH: the
  server taxonomy (insights/taxonomy/taxonomy.py, insights/insightsql/ai.py)
  already expected the insights form while the SDK emitted the posthog form.
- __PosthogExtensions__ -> __InsightsExtensions__; all PostHog/posthog/POSTHOG
  identifiers -> Insights/insights/INSIGHTS (src, tests, playground, playwright,
  scripts, rrweb subpackages, package.json keywords).
- Hosts: DEFAULT_PLUGIN_HOST + DEFAULT_NUXT_HOST + the core host default pointed
  at PostHog's cloud (us.i.posthog.com) — a real bug. All -> insights.hanzo.ai.
- Removed the us-assets/eu-assets CDN split in getRemoteConfig (PostHog-specific;
  Hanzo serves remote config from the same host) — it had degenerated to a no-op.
- Fixed generate-docs writing to a stray references/@hanzo/ subdir.
- Renamed the 3 posthog-named test files; dropped 58MB of stale reference
  snapshots named for upstream posthog versions we never shipped (they are
  generated output — references/ is now gitignored).

Verified: typecheck errors 42 (HEAD) -> 18 (all pre-existing test-mock
looseness); types package 0; every package.json valid with @hanzo/* names.
Guard: grep -rioE 'posthog' packages ... | wc -l  => 0
2026-07-16 09:09:18 -07:00

48 lines
1.8 KiB
TypeScript

import { DEFAULT_API_HOST } from '../src/shared/constants'
import { normalizeConfigValue, resolveApiKey, resolveHostOrDefault } from '../src/shared/config'
describe('shared config', () => {
const originalEnv = process.env
beforeEach(() => {
jest.clearAllMocks()
process.env = { ...originalEnv }
delete process.env.NEXT_PUBLIC_INSIGHTS_KEY
delete process.env.NEXT_PUBLIC_INSIGHTS_HOST
})
afterAll(() => {
process.env = originalEnv
})
it('normalizes strings and returns undefined for non-strings', () => {
expect(normalizeConfigValue(' phc_test123\n')).toBe('phc_test123')
expect(normalizeConfigValue(' ')).toBeUndefined()
expect(normalizeConfigValue(undefined)).toBeUndefined()
expect(normalizeConfigValue(null)).toBeUndefined()
expect(normalizeConfigValue(123)).toBeUndefined()
expect(normalizeConfigValue({ value: 'phc_test123' })).toBeUndefined()
})
it('warns and returns undefined when apiKey is not a string and no env fallback exists', () => {
const warnSpy = jest.spyOn(console, 'warn').mockImplementation()
expect(resolveApiKey({ value: 'phc_test123' })).toBeUndefined()
expect(warnSpy).toHaveBeenCalledWith('[Insights Next.js] apiKey is required — Insights will not be initialized')
warnSpy.mockRestore()
})
it('falls back to env apiKey when explicit apiKey is not a string', () => {
process.env.NEXT_PUBLIC_INSIGHTS_KEY = ' phc_from_env\n'
expect(resolveApiKey({ value: 'phc_test123' })).toBe('phc_from_env')
})
it('uses the default host when explicit and env hosts are not strings', () => {
process.env.NEXT_PUBLIC_INSIGHTS_HOST = ''
expect(resolveHostOrDefault({ value: 'https://custom.insights.hanzo.ai' })).toBe(DEFAULT_API_HOST)
})
})