@askdoppler/core
Version:
Doppler Core: AI SEO / AEO traffic monitoring & intent detection, logging, and reporting for framework connectors.
86 lines (85 loc) • 3.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSource = getSource;
const utils_js_1 = require("./utils.js");
const index_js_1 = require("./filters/index.js");
const filters = [new index_js_1.OpenAI(), new index_js_1.Perplexity(), new index_js_1.Google(), new index_js_1.Bing()];
filters.forEach(async (filter) => {
await filter.init();
});
function getSource(req) {
const headers = (0, utils_js_1.normalizeHeaders)(req.headers);
const userAgent = headers['user-agent'] || '';
const url = req.url || '';
// Check for click detection first (utm_source)
let utmSource = null;
let highlightedText = null;
// Extract highlighted text from URL fragment
const textFragmentMatch = url.match(/#:~:text=([^&]+)/);
if (textFragmentMatch) {
try {
highlightedText = decodeURIComponent(textFragmentMatch[1]);
}
catch (error) {
if (process.env?.DOPPLER_DEBUG) {
console.warn('[@askdoppler/core:filter] - Failed to decode highlighted text:', error);
}
}
}
if (url.includes('?') || url.includes('&')) {
try {
const urlParams = new URLSearchParams(url.split('?')[1] || '');
utmSource = urlParams.get('utm_source');
}
catch (error) {
// If URL parsing fails, continue with other detection methods
if (process.env?.DOPPLER_DEBUG) {
console.warn('[@askdoppler/core:filter] - Failed to parse URL parameters:', error);
}
}
}
if (utmSource) {
if (process.env?.DOPPLER_DEBUG) {
console.log(`[@askdoppler/core:filter] - UTM source detected: ${utmSource}`);
}
for (const filter of filters) {
for (const utm of filter.utm) {
if (utmSource.includes(utm)) {
if (process.env?.DOPPLER_DEBUG) {
console.log(`[@askdoppler/core:filter] - UTM source ${utm} found for ${filter.name}`);
}
return {
source: filter.name,
intent: 'browse',
type: 'click',
highlightedText,
detected: true,
};
}
}
}
}
for (const filter of filters) {
const detected = filter.check(headers, url);
if (process.env?.DOPPLER_DEBUG) {
console.log(`[@askdoppler/core:filter] - ${filter.name} detected: ${detected}`);
}
if (detected) {
if (process.env?.DOPPLER_DEBUG) {
console.log(`[@askdoppler/core:filter] - ${filter.name} detected: ${detected}`);
}
return {
source: filter.name,
intent: filter.getIntent(userAgent),
type: 'crawl',
highlightedText: null,
detected: true,
};
}
}
// Not detected
if (process.env?.DOPPLER_DEBUG) {
console.log(`[@askdoppler/core:filter] - No filter detected`);
}
return { source: null, intent: null, type: null, highlightedText: null, detected: false };
}