@critters/next
Version:
Secure bug reporting library for Next.js applications
168 lines (167 loc) • 9.95 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
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.withAppErrorReporting = exports.withPageErrorReporting = exports.withErrorReporting = exports.useErrorReporting = exports.withErrorBoundary = exports.ErrorBoundary = exports.getBrowserData = exports.getUserInteractions = exports.getNetworkRequests = exports.getConsoleLogs = exports.clearCapturedData = exports.stopAllCollectors = exports.startAllCollectors = exports.startUserInteractionCapture = exports.stopNetworkCapture = exports.startNetworkCapture = exports.stopConsoleCapture = exports.startConsoleCapture = exports.debugLog = exports.getTimestamp = exports.getBrowserInfo = exports.isServer = exports.isBrowser = exports.sanitizeData = exports.safeStringify = exports.formatError = exports.generateSignature = exports.Critters = exports.BugTrackerConfig = void 0;
exports.startCritters = startCritters;
exports.initBugTracker = initBugTracker;
exports.reportBug = reportBug;
exports.catch_ = catch_;
exports.capture = capture;
// Export types
__exportStar(require("./types"), exports);
// Export configuration
var config_1 = require("./config");
Object.defineProperty(exports, "BugTrackerConfig", { enumerable: true, get: function () { return config_1.BugTrackerConfig; } });
// Export reporter
var reporter_1 = require("./reporter");
Object.defineProperty(exports, "Critters", { enumerable: true, get: function () { return reporter_1.Critters; } });
// Export utilities
var utils_1 = require("./utils");
Object.defineProperty(exports, "generateSignature", { enumerable: true, get: function () { return utils_1.generateSignature; } });
Object.defineProperty(exports, "formatError", { enumerable: true, get: function () { return utils_1.formatError; } });
Object.defineProperty(exports, "safeStringify", { enumerable: true, get: function () { return utils_1.safeStringify; } });
Object.defineProperty(exports, "sanitizeData", { enumerable: true, get: function () { return utils_1.sanitizeData; } });
Object.defineProperty(exports, "isBrowser", { enumerable: true, get: function () { return utils_1.isBrowser; } });
Object.defineProperty(exports, "isServer", { enumerable: true, get: function () { return utils_1.isServer; } });
Object.defineProperty(exports, "getBrowserInfo", { enumerable: true, get: function () { return utils_1.getBrowserInfo; } });
Object.defineProperty(exports, "getTimestamp", { enumerable: true, get: function () { return utils_1.getTimestamp; } });
Object.defineProperty(exports, "debugLog", { enumerable: true, get: function () { return utils_1.debugLog; } });
// Export collectors
var collectors_1 = require("./collectors");
Object.defineProperty(exports, "startConsoleCapture", { enumerable: true, get: function () { return collectors_1.startConsoleCapture; } });
Object.defineProperty(exports, "stopConsoleCapture", { enumerable: true, get: function () { return collectors_1.stopConsoleCapture; } });
Object.defineProperty(exports, "startNetworkCapture", { enumerable: true, get: function () { return collectors_1.startNetworkCapture; } });
Object.defineProperty(exports, "stopNetworkCapture", { enumerable: true, get: function () { return collectors_1.stopNetworkCapture; } });
Object.defineProperty(exports, "startUserInteractionCapture", { enumerable: true, get: function () { return collectors_1.startUserInteractionCapture; } });
Object.defineProperty(exports, "startAllCollectors", { enumerable: true, get: function () { return collectors_1.startAllCollectors; } });
Object.defineProperty(exports, "stopAllCollectors", { enumerable: true, get: function () { return collectors_1.stopAllCollectors; } });
Object.defineProperty(exports, "clearCapturedData", { enumerable: true, get: function () { return collectors_1.clearCapturedData; } });
Object.defineProperty(exports, "getConsoleLogs", { enumerable: true, get: function () { return collectors_1.getConsoleLogs; } });
Object.defineProperty(exports, "getNetworkRequests", { enumerable: true, get: function () { return collectors_1.getNetworkRequests; } });
Object.defineProperty(exports, "getUserInteractions", { enumerable: true, get: function () { return collectors_1.getUserInteractions; } });
Object.defineProperty(exports, "getBrowserData", { enumerable: true, get: function () { return collectors_1.getBrowserData; } });
// Export React components
var components_1 = require("./components");
Object.defineProperty(exports, "ErrorBoundary", { enumerable: true, get: function () { return components_1.ErrorBoundary; } });
Object.defineProperty(exports, "withErrorBoundary", { enumerable: true, get: function () { return components_1.withErrorBoundary; } });
Object.defineProperty(exports, "useErrorReporting", { enumerable: true, get: function () { return components_1.useErrorReporting; } });
// Export Next.js middleware
var middleware_1 = require("./middleware");
Object.defineProperty(exports, "withErrorReporting", { enumerable: true, get: function () { return middleware_1.withErrorReporting; } });
Object.defineProperty(exports, "withPageErrorReporting", { enumerable: true, get: function () { return middleware_1.withPageErrorReporting; } });
Object.defineProperty(exports, "withAppErrorReporting", { enumerable: true, get: function () { return middleware_1.withAppErrorReporting; } });
// Import necessary functions for initialization
const config_2 = require("./config");
const utils_2 = require("./utils");
const collectors_2 = require("./collectors");
const reporter_2 = require("./reporter");
/**
* Initialize the bug tracker with configuration
* @param config - Configuration options for the bug tracker
* @description
* This function initializes the bug tracker with the provided configuration.
* It sets up the global error handlers and starts data collectors in browser environments.
*
* @example
* ```typescript
* // Import the startCritters function
* import { startCritters } from '@critters/next';
*
* // Initialize at the entry point of your application
* startCritters({
* apiKey: process.env.NEXT_PUBLIC_BUG_TRACKER_API_KEY!,
* // Optional additional configuration
* environment: process.env.NODE_ENV,
* debug: process.env.NODE_ENV !== "production",
* });
* ```
*/
function startCritters(config) {
// Initialize the configuration
const bugTrackerConfig = config_2.BugTrackerConfig.init(config);
// Start collectors if in browser environment
if ((0, utils_2.isBrowser)() && bugTrackerConfig.isEnabled()) {
(0, collectors_2.startAllCollectors)();
// Set up global error handlers
setupGlobalErrorHandlers();
}
}
/**
* @deprecated Use startCritters() instead. This function will be removed in a future version.
*/
function initBugTracker(config) {
console.warn("initBugTracker() is deprecated and will be removed in a future version. Please use startCritters() instead.");
startCritters(config);
}
/**
* Set up global error handlers for client-side
*/
function setupGlobalErrorHandlers() {
const config = config_2.BugTrackerConfig.getInstance();
if (!config.isEnabled())
return;
// Handle unhandled promise rejections
window.addEventListener("unhandledrejection", (event) => {
const error = event.reason;
reporter_2.Critters.getInstance().catch(error, {
type: "unhandledRejection",
message: (error === null || error === void 0 ? void 0 : error.message) || "Unhandled Promise Rejection",
});
});
// Handle uncaught exceptions
window.addEventListener("error", (event) => {
const { message, filename, lineno, colno, error } = event;
reporter_2.Critters.getInstance().catch(error || new Error(message), {
type: "uncaughtException",
location: `${filename}:${lineno}:${colno}`,
});
});
}
/**
* Report a bug to the configured endpoint
* @deprecated Use catch() instead
*/
function reportBug(error, metadata) {
return __awaiter(this, void 0, void 0, function* () {
return reporter_2.Critters.getInstance().catch(error, metadata);
});
}
/**
* Catch and report an error to the configured endpoint
* @deprecated Use capture() instead
*/
function catch_(error, metadata) {
return __awaiter(this, void 0, void 0, function* () {
return reporter_2.Critters.getInstance().catch(error, metadata);
});
}
/**
* Catch and report an error to the configured endpoint
*/
function capture(error, metadata) {
return __awaiter(this, void 0, void 0, function* () {
return reporter_2.Critters.getInstance().catch(error, metadata);
});
}