@ezbot-ai/javascript-sdk
Version:
The easiest way to interact with ezbot via JS (node and browser)
137 lines • 13.6 kB
JavaScript
;
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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