UNPKG

@ezbot-ai/javascript-sdk

Version:

The easiest way to interact with ezbot via JS (node and browser)

137 lines 13.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateSessionId = exports.createEzbotClient = exports.DEFAULT_API_BASE_URL = exports.buildQueryParams = exports.extractUtmFromSearchParams = void 0; const http_1 = require("http"); const https_1 = require("https"); const url_1 = require("url"); function extractUtmFromSearchParams(obj) { return { utmSource: Array.isArray(obj.utm_source) ? obj.utm_source[0] : obj.utm_source, utmMedium: Array.isArray(obj.utm_medium) ? obj.utm_medium[0] : obj.utm_medium, utmCampaign: Array.isArray(obj.utm_campaign) ? obj.utm_campaign[0] : obj.utm_campaign, utmContent: Array.isArray(obj.utm_content) ? obj.utm_content[0] : obj.utm_content, utmTerm: Array.isArray(obj.utm_term) ? obj.utm_term[0] : obj.utm_term, }; } exports.extractUtmFromSearchParams = extractUtmFromSearchParams; function buildQueryParams(params) { var _a, _b, _c, _d, _e, _f, _g, _h, _j; const processedParams = { projectId: typeof params.projectId === 'number' ? params.projectId.toString() : params.projectId, sessionId: (_a = params.sessionId) !== null && _a !== void 0 ? _a : generateSessionId(), pageUrlPath: (_b = params.pageUrlPath) !== null && _b !== void 0 ? _b : '/', domainSessionIdx: params.domainSessionIdx, utmContent: (_c = params.utmContent) !== null && _c !== void 0 ? _c : 'unknown', utmMedium: (_d = params.utmMedium) !== null && _d !== void 0 ? _d : 'unknown', utmSource: (_e = params.utmSource) !== null && _e !== void 0 ? _e : 'unknown', utmCampaign: (_f = params.utmCampaign) !== null && _f !== void 0 ? _f : 'unknown', utmTerm: (_g = params.utmTerm) !== null && _g !== void 0 ? _g : 'unknown', referrer: (_h = params.referrer) !== null && _h !== void 0 ? _h : 'unknown', tz: (_j = params.tz) !== null && _j !== void 0 ? _j : Intl.DateTimeFormat().resolvedOptions().timeZone, }; return Object.entries(processedParams) .filter(([, value]) => value !== undefined) .map(([key, value]) => `${key}=${encodeURIComponent(String(value))}`) .join('&'); } exports.buildQueryParams = buildQueryParams; exports.DEFAULT_API_BASE_URL = 'https://api.ezbot.ai'; function createEzbotClient(options) { const { baseUrl = exports.DEFAULT_API_BASE_URL, timeoutMs = 500, agentOptions, } = options; const isHttpsBase = new url_1.URL(baseUrl).protocol === 'https:'; const agent = isHttpsBase ? new https_1.Agent(Object.assign({ keepAlive: true, maxSockets: 50, maxFreeSockets: 10 }, agentOptions)) : new http_1.Agent(Object.assign({ keepAlive: true, maxSockets: 50, maxFreeSockets: 10 }, agentOptions)); async function makeRequest(url, meta) { /* eslint-disable functional/no-return-void */ return new Promise((resolve, reject) => { const parsedUrl = new url_1.URL(url); const isHttps = parsedUrl.protocol === 'https:'; const defaultOrigin = (meta === null || meta === void 0 ? void 0 : meta.referrer) ? new url_1.URL(meta.referrer).origin : undefined; const headers = Object.assign({ accept: '*/*', 'accept-language': 'en-US,en;q=0.9', origin: (meta === null || meta === void 0 ? void 0 : meta.origin) || defaultOrigin || '', referer: (meta === null || meta === void 0 ? void 0 : meta.referrer) || '', 'user-agent': (meta === null || meta === void 0 ? void 0 : meta.userAgent) || '' }, meta === null || meta === void 0 ? void 0 : meta.headers); const requestOptions = { hostname: parsedUrl.hostname, port: parsedUrl.port || (isHttps ? 443 : 80), path: parsedUrl.pathname + parsedUrl.search, method: 'GET', agent, headers, }; const req = (isHttps ? https_1.request : http_1.request)(requestOptions, (res) => { res.setEncoding('utf8'); // eslint-disable-next-line functional/no-let let data = ''; res.on('data', (chunk) => { data += chunk; }); res.on('end', () => { resolve({ status: res.statusCode || 0, statusText: res.statusMessage || '', json: async () => JSON.parse(data || '{}'), }); }); }); req.on('error', (err) => reject(err)); // Socket timeout slightly above overall timeout to let race resolve first req.setTimeout(Math.max(timeoutMs, 100), () => { req.destroy(new Error('Request socket timeout')); }); req.end(); // Overall timeout guard if (timeoutMs > 0) { setTimeout(() => { try { req.destroy(); } catch (_a) { /* noop */ } reject(new Error('Request timeout')); }, timeoutMs); } }); /* eslint-enable functional/no-return-void */ } return { async getPredictions(params, meta) { const url = new url_1.URL('/predict', baseUrl).toString(); const qp = buildQueryParams(params); const fullUrl = `${url}?${qp}`; try { const response = await makeRequest(fullUrl, meta); if (response.status !== 200) { throw new Error(`Failed to fetch predictions: ${response.status}`); } const responseJSON = await response.json(); return responseJSON.predictions; } catch (e) { // For server-side callers, degrade gracefully return []; } }, dispose() { agent.destroy(); return undefined; }, }; } exports.createEzbotClient = createEzbotClient; function generateSessionId() { return `ssr-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`; } exports.generateSessionId = generateSessionId; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyUHJlZGljdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3NlcnZlclByZWRpY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUljO0FBQ2QsaUNBQXFFO0FBQ3JFLDZCQUEwQjtBQTZDMUIsU0FBZ0IsMEJBQTBCLENBQ3hDLEdBQWtEO0lBS2xELE9BQU87UUFDTCxTQUFTLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNuQixDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVU7UUFDbEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUN0QyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVO1FBQ2xCLFdBQVcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7WUFDMUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWTtRQUNwQixVQUFVLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNwQixDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVc7UUFDbkIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUTtLQUN0RSxDQUFDO0FBQ0osQ0FBQztB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