{"version":3,"sources":["../../src/adonisjs/provider.ts"],"sourcesContent":["import type { Router } from \"@adonisjs/core/http\";\nimport type { ApplicationService } from \"@adonisjs/core/types\";\nimport { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport { ApitallyClient } from \"../common/client.js\";\nimport { getPackageVersion } from \"../common/packageVersions.js\";\nimport type { LogRecord } from \"../common/requestLogger.js\";\nimport type { ApitallyConfig, PathInfo, StartupData } from \"../common/types.js\";\nimport { patchConsole, patchPinoLogger } from \"../loggers/index.js\";\n\ndeclare module \"@adonisjs/core/types\" {\n  interface ContainerBindings {\n    apitallyClient: ApitallyClient;\n    apitallyLogsContext: AsyncLocalStorage<LogRecord[]>;\n  }\n}\n\nexport default class ApitallyProvider {\n  constructor(protected app: ApplicationService) {}\n\n  register() {\n    this.app.container.singleton(\"apitallyClient\", () => {\n      const config: ApitallyConfig = this.app.config.get(\"apitally\");\n      return new ApitallyClient(config);\n    });\n    this.app.container.singleton(\"apitallyLogsContext\", () => {\n      return new AsyncLocalStorage<LogRecord[]>();\n    });\n  }\n\n  async start() {\n    const client = await this.app.container.make(\"apitallyClient\");\n    if (client.requestLogger.config.captureLogs) {\n      const logsContext = await this.app.container.make(\"apitallyLogsContext\");\n      const logger = await this.app.container.make(\"logger\");\n\n      patchPinoLogger(logger.pino, logsContext);\n      patchConsole(logsContext);\n    }\n  }\n\n  async ready() {\n    const client = await this.app.container.make(\"apitallyClient\");\n    const router = await this.app.container.make(\"router\");\n\n    const paths = listRoutes(router);\n    const versions = getVersions(this.app.config.get(\"apitally.appVersion\"));\n    const startupData: StartupData = {\n      paths,\n      versions,\n      client: \"js:adonisjs\",\n    };\n    client.setStartupData(startupData);\n    client.startSync();\n  }\n\n  async shutdown() {\n    const client = await this.app.container.make(\"apitallyClient\");\n    await client.handleShutdown();\n  }\n}\n\nfunction listRoutes(router: Router) {\n  const routes = router.toJSON();\n  const paths: Array<PathInfo> = [];\n  for (const domain in routes) {\n    for (const route of routes[domain]) {\n      for (const method of route.methods) {\n        if (![\"HEAD\", \"OPTIONS\"].includes(method.toUpperCase())) {\n          paths.push({\n            method: method.toUpperCase(),\n            path: route.pattern,\n          });\n        }\n      }\n    }\n  }\n  return paths;\n}\n\nfunction getVersions(appVersion?: string) {\n  const versions = [[\"nodejs\", process.version.replace(/^v/, \"\")]];\n  const adonisJsVersion = getPackageVersion(\"@adonisjs/core\");\n  const apitallyVersion = getPackageVersion(\"../..\");\n  if (adonisJsVersion) {\n    versions.push([\"adonisjs\", adonisJsVersion]);\n  }\n  if (apitallyVersion) {\n    versions.push([\"apitally\", apitallyVersion]);\n  }\n  if (appVersion) {\n    versions.push([\"app\", appVersion]);\n  }\n  return Object.fromEntries(versions);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAEA;;;;;AAAA,8BAAkC;AAElC,oBAA+B;AAC/B,6BAAkC;AAGlC,qBAA8C;AAS9C,MAAqBA,oBAArB,MAAqBA,kBAAAA;;EACnB,YAAsBC,KAAyB;SAAzBA,MAAAA;EAA0B;EAEhDC,WAAW;AACT,SAAKD,IAAIE,UAAUC,UAAU,kBAAkB,MAAA;AAC7C,YAAMC,SAAyB,KAAKJ,IAAII,OAAOC,IAAI,UAAA;AACnD,aAAO,IAAIC,6BAAeF,MAAAA;IAC5B,CAAA;AACA,SAAKJ,IAAIE,UAAUC,UAAU,uBAAuB,MAAA;AAClD,aAAO,IAAII,0CAAAA;IACb,CAAA;EACF;EAEA,MAAMC,QAAQ;AACZ,UAAMC,SAAS,MAAM,KAAKT,IAAIE,UAAUQ,KAAK,gBAAA;AAC7C,QAAID,OAAOE,cAAcP,OAAOQ,aAAa;AAC3C,YAAMC,cAAc,MAAM,KAAKb,IAAIE,UAAUQ,KAAK,qBAAA;AAClD,YAAMI,SAAS,MAAM,KAAKd,IAAIE,UAAUQ,KAAK,QAAA;AAE7CK,0CAAgBD,OAAOE,MAAMH,WAAAA;AAC7BI,uCAAaJ,WAAAA;IACf;EACF;EAEA,MAAMK,QAAQ;AACZ,UAAMT,SAAS,MAAM,KAAKT,IAAIE,UAAUQ,KAAK,gBAAA;AAC7C,UAAMS,SAAS,MAAM,KAAKnB,IAAIE,UAAUQ,KAAK,QAAA;AAE7C,UAAMU,QAAQC,WAAWF,MAAAA;AACzB,UAAMG,WAAWC,YAAY,KAAKvB,IAAII,OAAOC,IAAI,qBAAA,CAAA;AACjD,UAAMmB,cAA2B;MAC/BJ;MACAE;MACAb,QAAQ;IACV;AACAA,WAAOgB,eAAeD,WAAAA;AACtBf,WAAOiB,UAAS;EAClB;EAEA,MAAMC,WAAW;AACf,UAAMlB,SAAS,MAAM,KAAKT,IAAIE,UAAUQ,KAAK,gBAAA;AAC7C,UAAMD,OAAOmB,eAAc;EAC7B;AACF;AA3CqB7B;AAArB,IAAqBA,mBAArB;AA6CA,SAASsB,WAAWF,QAAc;AAChC,QAAMU,SAASV,OAAOW,OAAM;AAC5B,QAAMV,QAAyB,CAAA;AAC/B,aAAWW,UAAUF,QAAQ;AAC3B,eAAWG,SAASH,OAAOE,MAAAA,GAAS;AAClC,iBAAWE,UAAUD,MAAME,SAAS;AAClC,YAAI,CAAC;UAAC;UAAQ;UAAWC,SAASF,OAAOG,YAAW,CAAA,GAAK;AACvDhB,gBAAMiB,KAAK;YACTJ,QAAQA,OAAOG,YAAW;YAC1BE,MAAMN,MAAMO;UACd,CAAA;QACF;MACF;IACF;EACF;AACA,SAAOnB;AACT;AAhBSC;AAkBT,SAASE,YAAYiB,YAAmB;AACtC,QAAMlB,WAAW;IAAC;MAAC;MAAUmB,QAAQC,QAAQC,QAAQ,MAAM,EAAA;;;AAC3D,QAAMC,sBAAkBC,0CAAkB,gBAAA;AAC1C,QAAMC,sBAAkBD,0CAAkB,OAAA;AAC1C,MAAID,iBAAiB;AACnBtB,aAASe,KAAK;MAAC;MAAYO;KAAgB;EAC7C;AACA,MAAIE,iBAAiB;AACnBxB,aAASe,KAAK;MAAC;MAAYS;KAAgB;EAC7C;AACA,MAAIN,YAAY;AACdlB,aAASe,KAAK;MAAC;MAAOG;KAAW;EACnC;AACA,SAAOO,OAAOC,YAAY1B,QAAAA;AAC5B;AAdSC;","names":["ApitallyProvider","app","register","container","singleton","config","get","ApitallyClient","AsyncLocalStorage","start","client","make","requestLogger","captureLogs","logsContext","logger","patchPinoLogger","pino","patchConsole","ready","router","paths","listRoutes","versions","getVersions","startupData","setStartupData","startSync","shutdown","handleShutdown","routes","toJSON","domain","route","method","methods","includes","toUpperCase","push","path","pattern","appVersion","process","version","replace","adonisJsVersion","getPackageVersion","apitallyVersion","Object","fromEntries"]}