UNPKG

@logtail/next

Version:

Better Stack Telemetry Next.js client

138 lines 5.12 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.throttle = exports.requestToJSON = exports.EndpointType = exports.isNoPrettyPrint = void 0; exports.isNoPrettyPrint = process.env.BETTER_STACK_NO_PRETTY_PRINT == 'true' ? true : false; var EndpointType; (function (EndpointType) { EndpointType["webVitals"] = "web-vitals"; EndpointType["logs"] = "logs"; })(EndpointType || (exports.EndpointType = EndpointType = {})); /** * Transforms a NextRequest or Request object into a JSON-serializable object */ function requestToJSON(request) { var _a; return __awaiter(this, void 0, void 0, function* () { // Get all headers const headers = {}; request.headers.forEach((value, key) => { headers[key] = value; }); let cookiesData = {}; if ('cookies' in request) { request.cookies.getAll().forEach((cookie) => { cookiesData[cookie.name] = cookie.value; }); } else { const cookieHeader = headers['cookie']; if (cookieHeader) { cookiesData = Object.fromEntries(cookieHeader.split(';').map((cookie) => { const [key, value] = cookie.trim().split('='); return [key, value]; })); } } let nextUrlData; if ('nextUrl' in request) { const nextUrl = request.nextUrl; nextUrlData = { basePath: nextUrl.basePath, buildId: nextUrl.buildId, hash: nextUrl.hash, host: nextUrl.host, hostname: nextUrl.hostname, href: nextUrl.href, origin: nextUrl.origin, password: nextUrl.password, pathname: nextUrl.pathname, port: nextUrl.port, protocol: nextUrl.protocol, search: nextUrl.search, searchParams: Object.fromEntries(nextUrl.searchParams.entries()), username: nextUrl.username, }; } let body; if (request.body) { try { const clonedRequest = request.clone(); try { body = yield clonedRequest.json(); (_a = clonedRequest.body) === null || _a === void 0 ? void 0 : _a.getReader; } catch (_b) { body = yield clonedRequest.text(); } } catch (error) { console.warn('Could not parse request body:', error); } } const cache = { mode: request.cache, credentials: request.credentials, redirect: request.redirect, referrerPolicy: request.referrerPolicy, integrity: request.integrity, }; let ip; if ('ip' in request) { // @ts-ignore NextRequest.ip was removed in Next 15, works with undefined ip = request.ip; } // @ts-ignore NextRequest.ip was removed in Next 15, works with undefined let geo; if ('geo' in request) { geo = request.geo; } return { method: request.method, url: request.url, headers, cookies: cookiesData, nextUrl: nextUrlData, ip, geo, body, cache, mode: request.mode, destination: request.destination, referrer: request.referrer, keepalive: request.keepalive, signal: { aborted: request.signal.aborted, reason: request.signal.reason, }, }; }); } exports.requestToJSON = requestToJSON; const throttle = (fn, wait) => { let lastFn, lastTime; return function () { const context = this, args = arguments; // First call, set lastTime if (lastTime == null) { lastTime = Date.now(); } clearTimeout(lastFn); lastFn = setTimeout(() => { if (Date.now() - lastTime >= wait) { fn.apply(context, args); lastTime = Date.now(); } }, Math.max(wait - (Date.now() - lastTime), 0)); }; }; exports.throttle = throttle; //# sourceMappingURL=shared.js.map