{"version":3,"sources":["../../src/nestjs/index.ts"],"sourcesContent":["import {\n  CallHandler,\n  ExecutionContext,\n  INestApplication,\n  Injectable,\n  NestInterceptor,\n} from \"@nestjs/common\";\nimport { catchError, throwError } from \"rxjs\";\n\nimport type { ApitallyConfig, ApitallyConsumer } from \"../common/types.js\";\nexport type { ApitallyConfig, ApitallyConsumer } from \"../common/types.js\";\n\nlet setConsumerFn:\n  | ((\n      request: any,\n      consumer: ApitallyConsumer | string | null | undefined,\n    ) => void)\n  | null = null;\n\nexport async function useApitally(\n  app: INestApplication,\n  config: ApitallyConfig,\n) {\n  const httpAdapter = app.getHttpAdapter();\n  const instance = httpAdapter.getInstance();\n  const platform = httpAdapter.constructor.name\n    .toLowerCase()\n    .includes(\"fastify\")\n    ? \"fastify\"\n    : \"express\";\n\n  if (platform === \"express\") {\n    const { useApitally, setConsumer } = await import(\"../express/index.js\");\n    setConsumerFn = setConsumer;\n    useApitally(instance, config);\n  } else if (platform === \"fastify\") {\n    const { apitallyPlugin, setConsumer } = await import(\"../fastify/index.js\");\n    setConsumerFn = setConsumer;\n    await instance.register(apitallyPlugin, config);\n  }\n\n  app.useGlobalInterceptors(new ApitallyInterceptor(platform));\n}\n\nexport function setConsumer(\n  request: any,\n  consumer: ApitallyConsumer | string | null | undefined,\n) {\n  if (setConsumerFn) {\n    setConsumerFn(request, consumer);\n  }\n}\n\n@Injectable()\nclass ApitallyInterceptor implements NestInterceptor {\n  constructor(private readonly platform: \"express\" | \"fastify\") {}\n\n  intercept(context: ExecutionContext, next: CallHandler) {\n    return next.handle().pipe(\n      catchError((exception) => {\n        if (context.getType() === \"http\") {\n          const ctx = context.switchToHttp();\n          const res = ctx.getResponse();\n\n          if (this.platform === \"express\" && res.locals) {\n            res.locals.serverError = exception;\n          } else if (\n            this.platform === \"fastify\" &&\n            (!exception.statusCode || exception.statusCode === 500)\n          ) {\n            res.serverError = exception;\n          }\n        }\n        return throwError(() => exception);\n      }),\n    );\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oBAMO;AACP,kBAAuC;;;;;;;;;;;;;AAKvC,IAAIA,gBAKO;AAEX,eAAsBC,YACpBC,KACAC,QAAsB;AAEtB,QAAMC,cAAcF,IAAIG,eAAc;AACtC,QAAMC,WAAWF,YAAYG,YAAW;AACxC,QAAMC,WAAWJ,YAAY,YAAYK,KACtCC,YAAW,EACXC,SAAS,SAAA,IACR,YACA;AAEJ,MAAIH,aAAa,WAAW;AAC1B,UAAM,EAAEP,aAAAA,cAAaW,aAAAA,aAAW,IAAK,MAAM,OAAO,qBAAA;AAClDZ,oBAAgBY;AAChBX,IAAAA,aAAYK,UAAUH,MAAAA;EACxB,WAAWK,aAAa,WAAW;AACjC,UAAM,EAAEK,gBAAgBD,aAAAA,aAAW,IAAK,MAAM,OAAO,qBAAA;AACrDZ,oBAAgBY;AAChB,UAAMN,SAASQ,SAASD,gBAAgBV,MAAAA;EAC1C;AAEAD,MAAIa,sBAAsB,IAAIC,oBAAoBR,QAAAA,CAAAA;AACpD;AAvBsBP;AAyBf,SAASW,YACdK,SACAC,UAAsD;AAEtD,MAAIlB,eAAe;AACjBA,kBAAciB,SAASC,QAAAA;EACzB;AACF;AAPgBN;AAShB,IACMI,uBADN,WACMA;;EACJ,YAA6BR,UAAiC;SAAjCA,WAAAA;EAAkC;EAE/DW,UAAUC,SAA2BC,MAAmB;AACtD,WAAOA,KAAKC,OAAM,EAAGC,SACnBC,wBAAW,CAACC,cAAAA;AACV,UAAIL,QAAQM,QAAO,MAAO,QAAQ;AAChC,cAAMC,MAAMP,QAAQQ,aAAY;AAChC,cAAMC,MAAMF,IAAIG,YAAW;AAE3B,YAAI,KAAKtB,aAAa,aAAaqB,IAAIE,QAAQ;AAC7CF,cAAIE,OAAOC,cAAcP;QAC3B,WACE,KAAKjB,aAAa,cACjB,CAACiB,UAAUQ,cAAcR,UAAUQ,eAAe,MACnD;AACAJ,cAAIG,cAAcP;QACpB;MACF;AACA,iBAAOS,wBAAW,MAAMT,SAAAA;IAC1B,CAAA,CAAA;EAEJ;AACF,GAvBMT,mCADN;;;;;;;;","names":["setConsumerFn","useApitally","app","config","httpAdapter","getHttpAdapter","instance","getInstance","platform","name","toLowerCase","includes","setConsumer","apitallyPlugin","register","useGlobalInterceptors","ApitallyInterceptor","request","consumer","intercept","context","next","handle","pipe","catchError","exception","getType","ctx","switchToHttp","res","getResponse","locals","serverError","statusCode","throwError"]}