Files
memind/mindspace-analytics-discovery.test.mjs
T
john c122bd5664 feat(analytics): retire Rybbit and add SEO/GEO discovery tracking
Document Umami as the sole analytics platform, remove Rybbit proxy and
tracker code, and classify public page traffic with discovery_channel for
adm SEO/GEO dashboards.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-12 01:34:05 +08:00

143 lines
3.8 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import vm from 'node:vm';
import {
appendDiscoveryPropagationParams,
buildInlineDiscoveryResolverScript,
classifyDiscoveryTrafficSource,
DISCOVERY_QUERY_PARAM,
DISCOVERY_SOURCE_QUERY_PARAM,
} from './mindspace-analytics-discovery.mjs';
test('classifies common SEO referrers', () => {
assert.deepEqual(
classifyDiscoveryTrafficSource({
referrer: 'https://www.google.com/search?q=demo',
}),
{
discovery_channel: 'seo',
discovery_source: 'google',
referrer_host: 'google.com',
},
);
assert.deepEqual(
classifyDiscoveryTrafficSource({
referrer: 'https://www.baidu.com/s?wd=demo',
}),
{
discovery_channel: 'seo',
discovery_source: 'baidu',
referrer_host: 'baidu.com',
},
);
});
test('classifies common GEO referrers', () => {
assert.deepEqual(
classifyDiscoveryTrafficSource({
referrer: 'https://chatgpt.com/c/abc',
}),
{
discovery_channel: 'geo',
discovery_source: 'chatgpt',
referrer_host: 'chatgpt.com',
},
);
assert.deepEqual(
classifyDiscoveryTrafficSource({
referrer: 'https://www.perplexity.ai/search/demo',
}),
{
discovery_channel: 'geo',
discovery_source: 'perplexity',
referrer_host: 'perplexity.ai',
},
);
});
test('prefers explicit discovery query params for iframe propagation', () => {
assert.deepEqual(
classifyDiscoveryTrafficSource({
discoveryChannel: 'seo',
discoverySource: 'google',
referrer: 'https://m.tkmind.cn/u/alice/pages/demo',
pageHost: 'm.tkmind.cn',
}),
{
discovery_channel: 'seo',
discovery_source: 'google',
referrer_host: 'm.tkmind.cn',
},
);
});
test('falls back to server referrer hint when browser referrer is same-origin', () => {
assert.deepEqual(
classifyDiscoveryTrafficSource({
referrer: 'https://m.tkmind.cn/u/alice/pages/demo',
pageHost: 'm.tkmind.cn',
}),
{
discovery_channel: 'direct',
discovery_source: 'direct',
referrer_host: '',
},
);
});
test('appendDiscoveryPropagationParams only propagates seo or geo channels', () => {
const seoUrl = appendDiscoveryPropagationParams('/u/alice/pages/demo?view=raw', {
discovery_channel: 'seo',
discovery_source: 'google',
});
assert.match(seoUrl, new RegExp(`${DISCOVERY_QUERY_PARAM}=seo`));
assert.match(seoUrl, new RegExp(`${DISCOVERY_SOURCE_QUERY_PARAM}=google`));
const directUrl = appendDiscoveryPropagationParams('/u/alice/pages/demo?view=raw', {
discovery_channel: 'direct',
discovery_source: 'direct',
});
assert.equal(directUrl, '/u/alice/pages/demo?view=raw');
});
test('inline discovery resolver matches server-side classification from referrer hint', () => {
const result = vm.runInNewContext(
`(${buildInlineDiscoveryResolverScript('https://www.google.com/search?q=demo')})()`,
{
URL,
URLSearchParams,
location: {
hostname: 'm.tkmind.cn',
search: '',
},
document: { referrer: '' },
},
);
assert.deepEqual(JSON.parse(JSON.stringify(result)), {
discovery_channel: 'seo',
discovery_source: 'google',
referrer_host: 'google.com',
});
});
test('inline discovery resolver reads propagated query params inside iframe', () => {
const result = vm.runInNewContext(
`(${buildInlineDiscoveryResolverScript('')})()`,
{
URL,
URLSearchParams,
location: {
hostname: 'm.tkmind.cn',
search: '?view=raw&memind_discovery=geo&memind_discovery_source=chatgpt',
},
document: { referrer: 'https://m.tkmind.cn/u/alice/pages/demo' },
},
);
assert.deepEqual(JSON.parse(JSON.stringify(result)), {
discovery_channel: 'geo',
discovery_source: 'chatgpt',
referrer_host: '',
});
});