apitally
Version:
Simple API monitoring & analytics for REST APIs built with Express, Fastify, NestJS, AdonisJS, Hono, H3, Elysia, Hapi, and Koa.
1 lines • 5.6 kB
Source Map (JSON)
{"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"]}