Rocky_Mountain_Vending/.pnpm-store/v10/files/b0/112462aa071738e9e28ceb499ea4577e224fed38bea3195858ad08491b071420a9350ecda2b2348746ea48cc73e29693998c8a6024658aed25f7ac4235ac01
DMleadgen 46d973904b
Initial commit: Rocky Mountain Vending website
Next.js website for Rocky Mountain Vending company featuring:
- Product catalog with Stripe integration
- Service areas and parts pages
- Admin dashboard with Clerk authentication
- SEO optimized pages with JSON-LD structured data

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 16:22:15 -07:00

97 lines
2.8 KiB
Text

import { defineIntegration, getClient, withActiveSpan, captureException, consoleSandbox } from '@sentry/core';
import { logAndExitProcess } from '../utils/errorhandling.js';
const INTEGRATION_NAME = 'OnUnhandledRejection';
const _onUnhandledRejectionIntegration = ((options = {}) => {
const opts = {
mode: 'warn',
...options,
} ;
return {
name: INTEGRATION_NAME,
setup(client) {
global.process.on('unhandledRejection', makeUnhandledPromiseHandler(client, opts));
},
};
}) ;
/**
* Add a global promise rejection handler.
*/
const onUnhandledRejectionIntegration = defineIntegration(_onUnhandledRejectionIntegration);
/**
* Send an exception with reason
* @param reason string
* @param promise promise
*
* Exported only for tests.
*/
function makeUnhandledPromiseHandler(
client,
options,
) {
return function sendUnhandledPromise(reason, promise) {
if (getClient() !== client) {
return;
}
const level = options.mode === 'strict' ? 'fatal' : 'error';
// this can be set in places where we cannot reliably get access to the active span/error
// when the error bubbles up to this handler, we can use this to set the active span
const activeSpanForError =
reason && typeof reason === 'object' ? (reason )._sentry_active_span : undefined;
const activeSpanWrapper = activeSpanForError
? (fn) => withActiveSpan(activeSpanForError, fn)
: (fn) => fn();
activeSpanWrapper(() => {
captureException(reason, {
originalException: promise,
captureContext: {
extra: { unhandledPromiseRejection: true },
level,
},
mechanism: {
handled: false,
type: 'onunhandledrejection',
},
});
});
handleRejection(reason, options.mode);
};
}
/**
* Handler for `mode` option
*/
function handleRejection(reason, mode) {
// https://github.com/nodejs/node/blob/7cf6f9e964aa00772965391c23acda6d71972a9a/lib/internal/process/promises.js#L234-L240
const rejectionWarning =
'This error originated either by ' +
'throwing inside of an async function without a catch block, ' +
'or by rejecting a promise which was not handled with .catch().' +
' The promise rejected with the reason:';
/* eslint-disable no-console */
if (mode === 'warn') {
consoleSandbox(() => {
console.warn(rejectionWarning);
console.error(reason && typeof reason === 'object' && 'stack' in reason ? reason.stack : reason);
});
} else if (mode === 'strict') {
consoleSandbox(() => {
console.warn(rejectionWarning);
});
logAndExitProcess(reason);
}
/* eslint-enable no-console */
}
export { makeUnhandledPromiseHandler, onUnhandledRejectionIntegration };
//# sourceMappingURL=onunhandledrejection.js.map