{"version":3,"file":"index-node22.mjs","sources":["../src/index.ts"],"sourcesContent":["import type {\n  SeverityLevel,\n  User,\n  addBreadcrumb,\n  captureException,\n  captureMessage,\n} from \"@sentry/core\";\nimport { Level } from \"nightingale-levels\";\nimport type { Handle, Handler, LogRecord, Metadata } from \"nightingale-types\";\n\nconst mapToSentryLevel: Record<Level, SeverityLevel> = {\n  [Level.TRACE]: \"debug\",\n  [Level.DEBUG]: \"debug\",\n  [Level.INFO]: \"info\",\n  [Level.NOTICE]: \"log\",\n  [Level.WARNING]: \"warning\",\n  [Level.ERROR]: \"error\",\n  [Level.CRITICAL]: \"fatal\",\n  [Level.FATAL]: \"fatal\",\n  [Level.EMERGENCY]: \"fatal\",\n  // not a level\n  [Level.ALL]: \"error\",\n};\n\nexport interface MetadataWithError extends Metadata {\n  error?: Error;\n}\n\nexport interface Options {\n  getUser?: <T extends MetadataWithError>(\n    record: LogRecord<T>,\n  ) => User | undefined;\n  getTags?: <T extends MetadataWithError>(\n    record: LogRecord<T>,\n  ) => Record<string, string>;\n  getBreadcrumbCategory?: <T extends Metadata>(\n    record: LogRecord<T>,\n  ) => string | undefined;\n  getBreadcrumbType?: <T extends Metadata>(\n    record: LogRecord<T>,\n  ) => string | undefined;\n  shouldSendAsException?: <T extends MetadataWithError>(\n    record: LogRecord<T>,\n  ) => boolean;\n  shouldSendAsBreadcrumb?: <T extends Metadata>(\n    record: LogRecord<T>,\n  ) => boolean;\n}\n\nexport interface SentryRequiredMethods {\n  addBreadcrumb: typeof addBreadcrumb;\n  captureException: typeof captureException;\n  captureMessage: typeof captureMessage;\n}\n\nconst createHandler = <S extends SentryRequiredMethods>(\n  Sentry: S,\n  {\n    getUser = () => undefined,\n    getTags = () => ({}),\n    getBreadcrumbCategory = () => undefined,\n    getBreadcrumbType = () => undefined,\n    shouldSendAsException = <T extends Metadata>(record: LogRecord<T>) =>\n      record.metadata?.error !== undefined &&\n      record.metadata.unhandled !== true,\n    shouldSendAsBreadcrumb = <T extends Metadata>(record: LogRecord<T>) =>\n      false,\n  }: Options = {},\n): Handle => {\n  return <T extends MetadataWithError>(record: LogRecord<T>) => {\n    const { key, level, metadata, extra, message } = record;\n\n    if (shouldSendAsException(record)) {\n      const error = metadata?.error || record.message;\n\n      const extraData: Record<string, unknown> = {\n        nightingaleErrorMessage: message,\n        ...metadata,\n        ...extra,\n      };\n      delete extraData.error;\n\n      Sentry.captureException(error, {\n        level: mapToSentryLevel[level] || \"error\",\n        user: getUser(record),\n        tags: {\n          loggerKey: key,\n          ...getTags(record),\n        },\n        extra: extraData,\n      });\n    } else if (shouldSendAsBreadcrumb(record)) {\n      Sentry.addBreadcrumb({\n        level: mapToSentryLevel[level] || \"error\",\n        category: getBreadcrumbCategory(record),\n        type: getBreadcrumbType(record),\n        message: record.message,\n        data: record.metadata,\n        timestamp: record.datetime.getTime(),\n      });\n    }\n  };\n};\n\nexport class SentryHandler<S extends SentryRequiredMethods> implements Handler {\n  minLevel: Level;\n\n  handle: Handle;\n\n  constructor(Sentry: S, minLevel: Level, options?: Options) {\n    this.minLevel = minLevel;\n    this.handle = createHandler<S>(Sentry, options);\n  }\n}\n"],"names":[],"mappings":";;AAUA,MAAM,gBAAA,GAAiD;AAAA,EACrD,CAAC,KAAA,CAAM,KAAK,GAAG,OAAA;AAAA,EACf,CAAC,KAAA,CAAM,KAAK,GAAG,OAAA;AAAA,EACf,CAAC,KAAA,CAAM,IAAI,GAAG,MAAA;AAAA,EACd,CAAC,KAAA,CAAM,MAAM,GAAG,KAAA;AAAA,EAChB,CAAC,KAAA,CAAM,OAAO,GAAG,SAAA;AAAA,EACjB,CAAC,KAAA,CAAM,KAAK,GAAG,OAAA;AAAA,EACf,CAAC,KAAA,CAAM,QAAQ,GAAG,OAAA;AAAA,EAClB,CAAC,KAAA,CAAM,KAAK,GAAG,OAAA;AAAA,EACf,CAAC,KAAA,CAAM,SAAS,GAAG,OAAA;AAAA;AAAA,EAEnB,CAAC,KAAA,CAAM,GAAG,GAAG;AACf,CAAA;AAiCA,MAAM,aAAA,GAAgB,CACpB,MAAA,EACA;AAAA,EACE,UAAU,MAAM,MAAA;AAAA,EAChB,OAAA,GAAU,OAAO,EAAC,CAAA;AAAA,EAClB,wBAAwB,MAAM,MAAA;AAAA,EAC9B,oBAAoB,MAAM,MAAA;AAAA,EAC1B,qBAAA,GAAwB,CAAqB,MAAA,KAC3C,MAAA,CAAO,UAAU,KAAA,KAAU,MAAA,IAC3B,MAAA,CAAO,QAAA,CAAS,SAAA,KAAc,IAAA;AAAA,EAChC,sBAAA,GAAyB,CAAqB,MAAA,KAC5C;AACJ,CAAA,GAAa,EAAC,KACH;AACX,EAAA,OAAO,CAA8B,MAAA,KAAyB;AAC5D,IAAA,MAAM,EAAE,GAAA,EAAK,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,SAAQ,GAAI,MAAA;AAEjD,IAAA,IAAI,qBAAA,CAAsB,MAAM,CAAA,EAAG;AACjC,MAAA,MAAM,KAAA,GAAQ,QAAA,EAAU,KAAA,IAAS,MAAA,CAAO,OAAA;AAExC,MAAA,MAAM,SAAA,GAAqC;AAAA,QACzC,uBAAA,EAAyB,OAAA;AAAA,QACzB,GAAG,QAAA;AAAA,QACH,GAAG;AAAA,OACL;AACA,MAAA,OAAO,SAAA,CAAU,KAAA;AAEjB,MAAA,MAAA,CAAO,iBAAiB,KAAA,EAAO;AAAA,QAC7B,KAAA,EAAO,gBAAA,CAAiB,KAAK,CAAA,IAAK,OAAA;AAAA,QAClC,IAAA,EAAM,QAAQ,MAAM,CAAA;AAAA,QACpB,IAAA,EAAM;AAAA,UACJ,SAAA,EAAW,GAAA;AAAA,UACX,GAAG,QAAQ,MAAM;AAAA,SACnB;AAAA,QACA,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH,CAAA,MAAA,IAAW,sBAAA,CAAuB,MAAM,CAAA,EAAG;AACzC,MAAA,MAAA,CAAO,aAAA,CAAc;AAAA,QACnB,KAAA,EAAO,gBAAA,CAAiB,KAAK,CAAA,IAAK,OAAA;AAAA,QAClC,QAAA,EAAU,sBAAsB,MAAM,CAAA;AAAA,QACtC,IAAA,EAAM,kBAAkB,MAAM,CAAA;AAAA,QAC9B,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,MAAM,MAAA,CAAO,QAAA;AAAA,QACb,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,OAAA;AAAQ,OACpC,CAAA;AAAA,IACH;AAAA,EACF,CAAA;AACF,CAAA;AAEO,MAAM,aAAA,CAAkE;AAAA,EAK7E,WAAA,CAAY,MAAA,EAAW,QAAA,EAAiB,OAAA,EAAmB;AACzD,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,aAAA,CAAiB,MAAA,EAAQ,OAAO,CAAA;AAAA,EAChD;AACF;;;;"}