import { debug, captureException } from '@sentry/core'; import { DEBUG_BUILD } from '../debug-build.js'; import { ensureInstrumented } from '../instrument.js'; import { wrapRequestHandler } from '../request.js'; import { wrapMethodWithSentry } from '../wrapMethodWithSentry.js'; function instrumentDurableObjectHandlers(obj, options, context) { if (obj.fetch && typeof obj.fetch === "function") { setInstanceHandler( obj, "fetch", ensureInstrumented( obj.fetch.bind(obj), (original) => new Proxy(original, { apply(target, thisArg, args) { return wrapRequestHandler({ options, request: args[0], context }, () => { return Reflect.apply(target, thisArg, args); }); } }) ) ); } if (obj.alarm && typeof obj.alarm === "function") { setInstanceHandler( obj, "alarm", wrapMethodWithSentry( { options, context, spanName: "alarm", spanOp: "function", startNewTrace: true, origin: "auto.faas.cloudflare.durable_object" }, obj.alarm.bind(obj) ) ); } if (obj.webSocketMessage && typeof obj.webSocketMessage === "function") { setInstanceHandler( obj, "webSocketMessage", wrapMethodWithSentry( { options, context, spanName: "webSocketMessage", origin: "auto.faas.cloudflare.durable_object" }, obj.webSocketMessage.bind(obj) ) ); } if (obj.webSocketClose && typeof obj.webSocketClose === "function") { setInstanceHandler( obj, "webSocketClose", wrapMethodWithSentry( { options, context, spanName: "webSocketClose", origin: "auto.faas.cloudflare.durable_object" }, obj.webSocketClose.bind(obj) ) ); } if (obj.webSocketError && typeof obj.webSocketError === "function") { setInstanceHandler( obj, "webSocketError", wrapMethodWithSentry( { options, context, spanName: "webSocketError", origin: "auto.faas.cloudflare.durable_object" }, obj.webSocketError.bind(obj), (_, error) => captureException(error, { mechanism: { type: "auto.faas.cloudflare.durable_object_websocket", handled: false } }) ) ); } } function setInstanceHandler(obj, name, handler) { const descriptor = Object.getOwnPropertyDescriptor(obj, name); try { if (descriptor?.writable === false) { Object.defineProperty(obj, name, { value: handler, writable: true, enumerable: descriptor.enumerable, configurable: descriptor.configurable }); } else { obj[name] = handler; } } catch (error) { DEBUG_BUILD && debug.warn(`Failed to instrument Durable Object handler "${name}"`, error); } } export { instrumentDurableObjectHandlers }; //# sourceMappingURL=instrumentDurableObjectHandlers.js.map