@c15t/backend 2.0.0-rc.0 → 2.0.0-rc.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. package/README.md +3 -3
  2. package/dist/302.js +473 -0
  3. package/dist/583.js +540 -0
  4. package/dist/915.js +1771 -0
  5. package/dist/cache.cjs +5 -5
  6. package/dist/cache.js +4 -415
  7. package/dist/core.cjs +1356 -120
  8. package/dist/core.js +163 -1981
  9. package/dist/db/adapters/drizzle.cjs +1 -1
  10. package/dist/db/adapters/drizzle.js +1 -2
  11. package/dist/db/adapters/kysely.cjs +1 -1
  12. package/dist/db/adapters/kysely.js +1 -2
  13. package/dist/db/adapters/mongo.cjs +1 -1
  14. package/dist/db/adapters/mongo.js +1 -2
  15. package/dist/db/adapters/prisma.cjs +1 -1
  16. package/dist/db/adapters/prisma.js +1 -2
  17. package/dist/db/adapters/typeorm.cjs +1 -1
  18. package/dist/db/adapters/typeorm.js +1 -2
  19. package/dist/db/adapters.cjs +1 -1
  20. package/dist/db/migrator.cjs +1 -1
  21. package/dist/db/schema.cjs +43 -3
  22. package/dist/db/schema.js +35 -4
  23. package/dist/define-config.cjs +1 -1
  24. package/dist/edge.cjs +1106 -0
  25. package/dist/edge.js +190 -0
  26. package/dist/router.cjs +885 -123
  27. package/dist/router.js +1 -1507
  28. package/dist/{types.cjs → types/index.cjs} +1 -1
  29. package/{dist → dist-types}/cache/adapters/cloudflare-kv.d.ts +0 -1
  30. package/{dist → dist-types}/cache/adapters/index.d.ts +0 -1
  31. package/{dist → dist-types}/cache/adapters/memory.d.ts +0 -1
  32. package/{dist → dist-types}/cache/adapters/upstash-redis.d.ts +0 -1
  33. package/{dist → dist-types}/cache/gvl-resolver.d.ts +0 -1
  34. package/{dist → dist-types}/cache/index.d.ts +0 -1
  35. package/{dist → dist-types}/cache/keys.d.ts +0 -1
  36. package/{dist → dist-types}/cache/types.d.ts +0 -1
  37. package/{dist → dist-types}/core.d.ts +8 -1
  38. package/{dist → dist-types}/db/migrator/index.d.ts +0 -1
  39. package/dist-types/db/registry/consent-policy.d.ts +78 -0
  40. package/{dist → dist-types}/db/registry/consent-purpose.d.ts +0 -1
  41. package/{dist → dist-types}/db/registry/domain.d.ts +0 -1
  42. package/dist-types/db/registry/index.d.ts +118 -0
  43. package/dist-types/db/registry/runtime-policy-decision.d.ts +60 -0
  44. package/{dist → dist-types}/db/registry/subject.d.ts +0 -2
  45. package/{dist → dist-types}/db/registry/types.d.ts +1 -1
  46. package/{dist → dist-types}/db/registry/utils/generate-id.d.ts +0 -1
  47. package/{dist → dist-types}/db/registry/utils.d.ts +0 -1
  48. package/{dist → dist-types}/db/schema/1.0.0/audit-log.d.ts +0 -1
  49. package/{dist → dist-types}/db/schema/1.0.0/consent-policy.d.ts +0 -1
  50. package/{dist → dist-types}/db/schema/1.0.0/consent-purpose.d.ts +0 -1
  51. package/{dist → dist-types}/db/schema/1.0.0/consent-record.d.ts +0 -1
  52. package/{dist → dist-types}/db/schema/1.0.0/consent.d.ts +1 -2
  53. package/{dist → dist-types}/db/schema/1.0.0/domain.d.ts +0 -1
  54. package/{dist → dist-types}/db/schema/1.0.0/index.d.ts +0 -32
  55. package/{dist → dist-types}/db/schema/1.0.0/subject.d.ts +0 -2
  56. package/{dist → dist-types}/db/schema/2.0.0/audit-log.d.ts +1 -2
  57. package/{dist → dist-types}/db/schema/2.0.0/consent-policy.d.ts +3 -3
  58. package/{dist → dist-types}/db/schema/2.0.0/consent-purpose.d.ts +1 -2
  59. package/{dist → dist-types}/db/schema/2.0.0/consent.d.ts +7 -2
  60. package/{dist → dist-types}/db/schema/2.0.0/domain.d.ts +1 -2
  61. package/{dist → dist-types}/db/schema/2.0.0/index.d.ts +455 -28
  62. package/dist-types/db/schema/2.0.0/runtime-policy-decision.d.ts +23 -0
  63. package/{dist → dist-types}/db/schema/2.0.0/subject.d.ts +1 -3
  64. package/{dist → dist-types}/db/schema/index.d.ts +908 -86
  65. package/{dist → dist-types}/db/tenant-scope.d.ts +0 -1
  66. package/dist-types/define-config.d.ts +17 -0
  67. package/dist-types/edge/index.d.ts +5 -0
  68. package/dist-types/edge/init-handler.d.ts +40 -0
  69. package/dist-types/edge/resolve-consent.d.ts +80 -0
  70. package/dist-types/edge/types.d.ts +13 -0
  71. package/{dist → dist-types}/handlers/consent/check.handler.d.ts +0 -1
  72. package/{src/handlers/consent/index.ts → dist-types/handlers/consent/index.d.ts} +0 -1
  73. package/{dist → dist-types}/handlers/init/geo.d.ts +2 -3
  74. package/{dist → dist-types}/handlers/init/index.d.ts +2 -3
  75. package/dist-types/handlers/init/policy.d.ts +26 -0
  76. package/dist-types/handlers/init/resolve-init.d.ts +44 -0
  77. package/dist-types/handlers/init/translations.d.ts +48 -0
  78. package/dist-types/handlers/legal-document/current.handler.d.ts +11 -0
  79. package/dist-types/handlers/legal-document/snapshot.d.ts +39 -0
  80. package/dist-types/handlers/policy/snapshot.d.ts +99 -0
  81. package/{src/handlers/status/index.ts → dist-types/handlers/status/index.d.ts} +0 -1
  82. package/{dist → dist-types}/handlers/status/status.handler.d.ts +0 -1
  83. package/{dist → dist-types}/handlers/subject/get.handler.d.ts +3 -2
  84. package/{src/handlers/subject/index.ts → dist-types/handlers/subject/index.d.ts} +0 -1
  85. package/{dist → dist-types}/handlers/subject/list.handler.d.ts +3 -2
  86. package/{dist → dist-types}/handlers/subject/patch.handler.d.ts +0 -2
  87. package/{dist → dist-types}/handlers/subject/post.handler.d.ts +12 -1
  88. package/{dist → dist-types}/handlers/utils/consent-enrichment.d.ts +3 -1
  89. package/{dist → dist-types}/init.d.ts +4 -7
  90. package/{dist → dist-types}/middleware/auth/index.d.ts +0 -1
  91. package/{dist → dist-types}/middleware/auth/validate-api-key.d.ts +0 -1
  92. package/{dist → dist-types}/middleware/cors/cors.d.ts +0 -1
  93. package/{src/middleware/cors/index.ts → dist-types/middleware/cors/index.d.ts} +0 -1
  94. package/{dist → dist-types}/middleware/cors/is-origin-trusted.d.ts +0 -1
  95. package/{dist → dist-types}/middleware/cors/process-cors.d.ts +0 -1
  96. package/{dist → dist-types}/middleware/openapi/config.d.ts +0 -1
  97. package/{dist → dist-types}/middleware/openapi/handlers.d.ts +0 -1
  98. package/{src/middleware/openapi/index.ts → dist-types/middleware/openapi/index.d.ts} +0 -1
  99. package/{dist → dist-types}/middleware/process-ip/index.d.ts +0 -1
  100. package/dist-types/policies/builder.d.ts +127 -0
  101. package/dist-types/policies/defaults.d.ts +2 -0
  102. package/dist-types/policies/matchers.d.ts +3 -0
  103. package/{dist → dist-types}/router.d.ts +0 -1
  104. package/{dist → dist-types}/routes/consent.d.ts +0 -1
  105. package/{dist → dist-types}/routes/index.d.ts +1 -1
  106. package/{dist → dist-types}/routes/init.d.ts +0 -1
  107. package/dist-types/routes/legal-document.d.ts +7 -0
  108. package/{dist → dist-types}/routes/status.d.ts +0 -1
  109. package/{dist → dist-types}/routes/subject.d.ts +0 -1
  110. package/{dist → dist-types}/types/api.d.ts +0 -1
  111. package/dist-types/types/index.d.ts +464 -0
  112. package/dist-types/utils/background.d.ts +6 -0
  113. package/{dist → dist-types}/utils/create-telemetry-options.d.ts +1 -2
  114. package/{dist → dist-types}/utils/env.d.ts +0 -1
  115. package/{dist → dist-types}/utils/extract-error-message.d.ts +0 -1
  116. package/{dist → dist-types}/utils/instrumentation.d.ts +2 -3
  117. package/{dist → dist-types}/utils/logger.d.ts +0 -1
  118. package/{dist → dist-types}/utils/metrics.d.ts +0 -1
  119. package/dist-types/version.d.ts +1 -0
  120. package/docs/README.md +49 -0
  121. package/docs/api/configuration.md +208 -0
  122. package/docs/api/endpoints.md +211 -0
  123. package/docs/guides/caching.md +85 -0
  124. package/docs/guides/database-setup.md +128 -0
  125. package/docs/guides/edge-deployment.md +251 -0
  126. package/docs/guides/framework-integration.md +142 -0
  127. package/docs/guides/iab-tcf.md +89 -0
  128. package/docs/guides/observability.md +96 -0
  129. package/docs/guides/policy-packs.md +396 -0
  130. package/docs/quickstart.md +129 -0
  131. package/package.json +53 -39
  132. package/.turbo/turbo-build.log +0 -49
  133. package/CHANGELOG.md +0 -89
  134. package/dist/cache/adapters/cloudflare-kv.d.ts.map +0 -1
  135. package/dist/cache/adapters/index.d.ts.map +0 -1
  136. package/dist/cache/adapters/memory.d.ts.map +0 -1
  137. package/dist/cache/adapters/upstash-redis.d.ts.map +0 -1
  138. package/dist/cache/gvl-resolver.d.ts.map +0 -1
  139. package/dist/cache/index.d.ts.map +0 -1
  140. package/dist/cache/keys.d.ts.map +0 -1
  141. package/dist/cache/types.d.ts.map +0 -1
  142. package/dist/core.d.ts.map +0 -1
  143. package/dist/db/adapters/drizzle.d.ts +0 -2
  144. package/dist/db/adapters/drizzle.d.ts.map +0 -1
  145. package/dist/db/adapters/index.d.ts +0 -2
  146. package/dist/db/adapters/index.d.ts.map +0 -1
  147. package/dist/db/adapters/kysely.d.ts +0 -2
  148. package/dist/db/adapters/kysely.d.ts.map +0 -1
  149. package/dist/db/adapters/mongo.d.ts +0 -2
  150. package/dist/db/adapters/mongo.d.ts.map +0 -1
  151. package/dist/db/adapters/prisma.d.ts +0 -2
  152. package/dist/db/adapters/prisma.d.ts.map +0 -1
  153. package/dist/db/adapters/typeorm.d.ts +0 -2
  154. package/dist/db/adapters/typeorm.d.ts.map +0 -1
  155. package/dist/db/migrator/index.d.ts.map +0 -1
  156. package/dist/db/registry/consent-policy.d.ts +0 -23
  157. package/dist/db/registry/consent-policy.d.ts.map +0 -1
  158. package/dist/db/registry/consent-purpose.d.ts.map +0 -1
  159. package/dist/db/registry/domain.d.ts.map +0 -1
  160. package/dist/db/registry/index.d.ts +0 -57
  161. package/dist/db/registry/index.d.ts.map +0 -1
  162. package/dist/db/registry/subject.d.ts.map +0 -1
  163. package/dist/db/registry/types.d.ts.map +0 -1
  164. package/dist/db/registry/utils/generate-id.d.ts.map +0 -1
  165. package/dist/db/registry/utils.d.ts.map +0 -1
  166. package/dist/db/schema/1.0.0/audit-log.d.ts.map +0 -1
  167. package/dist/db/schema/1.0.0/consent-policy.d.ts.map +0 -1
  168. package/dist/db/schema/1.0.0/consent-purpose.d.ts.map +0 -1
  169. package/dist/db/schema/1.0.0/consent-record.d.ts.map +0 -1
  170. package/dist/db/schema/1.0.0/consent.d.ts.map +0 -1
  171. package/dist/db/schema/1.0.0/domain.d.ts.map +0 -1
  172. package/dist/db/schema/1.0.0/index.d.ts.map +0 -1
  173. package/dist/db/schema/1.0.0/subject.d.ts.map +0 -1
  174. package/dist/db/schema/2.0.0/audit-log.d.ts.map +0 -1
  175. package/dist/db/schema/2.0.0/consent-policy.d.ts.map +0 -1
  176. package/dist/db/schema/2.0.0/consent-purpose.d.ts.map +0 -1
  177. package/dist/db/schema/2.0.0/consent.d.ts.map +0 -1
  178. package/dist/db/schema/2.0.0/domain.d.ts.map +0 -1
  179. package/dist/db/schema/2.0.0/index.d.ts.map +0 -1
  180. package/dist/db/schema/2.0.0/subject.d.ts.map +0 -1
  181. package/dist/db/schema/index.d.ts.map +0 -1
  182. package/dist/db/tenant-scope.d.ts.map +0 -1
  183. package/dist/define-config.d.ts +0 -5
  184. package/dist/define-config.d.ts.map +0 -1
  185. package/dist/handlers/consent/check.handler.d.ts.map +0 -1
  186. package/dist/handlers/consent/index.d.ts +0 -12
  187. package/dist/handlers/consent/index.d.ts.map +0 -1
  188. package/dist/handlers/init/geo.d.ts.map +0 -1
  189. package/dist/handlers/init/index.d.ts.map +0 -1
  190. package/dist/handlers/init/translations.d.ts +0 -28
  191. package/dist/handlers/init/translations.d.ts.map +0 -1
  192. package/dist/handlers/status/index.d.ts +0 -7
  193. package/dist/handlers/status/index.d.ts.map +0 -1
  194. package/dist/handlers/status/status.handler.d.ts.map +0 -1
  195. package/dist/handlers/subject/get.handler.d.ts.map +0 -1
  196. package/dist/handlers/subject/index.d.ts +0 -10
  197. package/dist/handlers/subject/index.d.ts.map +0 -1
  198. package/dist/handlers/subject/list.handler.d.ts.map +0 -1
  199. package/dist/handlers/subject/patch.handler.d.ts.map +0 -1
  200. package/dist/handlers/subject/post.handler.d.ts.map +0 -1
  201. package/dist/handlers/utils/consent-enrichment.d.ts.map +0 -1
  202. package/dist/init.d.ts.map +0 -1
  203. package/dist/middleware/auth/index.d.ts.map +0 -1
  204. package/dist/middleware/auth/validate-api-key.d.ts.map +0 -1
  205. package/dist/middleware/cors/cors.d.ts.map +0 -1
  206. package/dist/middleware/cors/index.d.ts +0 -30
  207. package/dist/middleware/cors/index.d.ts.map +0 -1
  208. package/dist/middleware/cors/is-origin-trusted.d.ts.map +0 -1
  209. package/dist/middleware/cors/process-cors.d.ts.map +0 -1
  210. package/dist/middleware/openapi/config.d.ts.map +0 -1
  211. package/dist/middleware/openapi/handlers.d.ts.map +0 -1
  212. package/dist/middleware/openapi/index.d.ts +0 -12
  213. package/dist/middleware/openapi/index.d.ts.map +0 -1
  214. package/dist/middleware/process-ip/index.d.ts.map +0 -1
  215. package/dist/router.d.ts.map +0 -1
  216. package/dist/routes/consent.d.ts.map +0 -1
  217. package/dist/routes/index.d.ts.map +0 -1
  218. package/dist/routes/init.d.ts.map +0 -1
  219. package/dist/routes/status.d.ts.map +0 -1
  220. package/dist/routes/subject.d.ts.map +0 -1
  221. package/dist/types/api.d.ts.map +0 -1
  222. package/dist/types/index.d.ts +0 -255
  223. package/dist/types/index.d.ts.map +0 -1
  224. package/dist/utils/create-telemetry-options.d.ts.map +0 -1
  225. package/dist/utils/env.d.ts.map +0 -1
  226. package/dist/utils/extract-error-message.d.ts.map +0 -1
  227. package/dist/utils/index.d.ts +0 -4
  228. package/dist/utils/index.d.ts.map +0 -1
  229. package/dist/utils/instrumentation.d.ts.map +0 -1
  230. package/dist/utils/logger.d.ts.map +0 -1
  231. package/dist/utils/metrics.d.ts.map +0 -1
  232. package/dist/version.d.ts +0 -2
  233. package/dist/version.d.ts.map +0 -1
  234. package/knip.json +0 -31
  235. package/rslib.config.ts +0 -93
  236. package/src/cache/adapters/cloudflare-kv.ts +0 -71
  237. package/src/cache/adapters/index.ts +0 -22
  238. package/src/cache/adapters/memory.ts +0 -111
  239. package/src/cache/adapters/upstash-redis.ts +0 -113
  240. package/src/cache/gvl-resolver.ts +0 -289
  241. package/src/cache/index.ts +0 -34
  242. package/src/cache/keys.ts +0 -68
  243. package/src/cache/types.ts +0 -66
  244. package/src/core.ts +0 -368
  245. package/src/db/migrator/index.ts +0 -80
  246. package/src/db/registry/consent-policy.test.ts +0 -451
  247. package/src/db/registry/consent-policy.ts +0 -82
  248. package/src/db/registry/consent-purpose.test.ts +0 -428
  249. package/src/db/registry/consent-purpose.ts +0 -61
  250. package/src/db/registry/domain.test.ts +0 -445
  251. package/src/db/registry/domain.ts +0 -91
  252. package/src/db/registry/index.ts +0 -14
  253. package/src/db/registry/subject.test.ts +0 -388
  254. package/src/db/registry/subject.ts +0 -129
  255. package/src/db/registry/types.ts +0 -10
  256. package/src/db/registry/utils/generate-id.test.ts +0 -216
  257. package/src/db/registry/utils/generate-id.ts +0 -133
  258. package/src/db/registry/utils.ts +0 -133
  259. package/src/db/schema/1.0.0/audit-log.ts +0 -15
  260. package/src/db/schema/1.0.0/consent-policy.ts +0 -14
  261. package/src/db/schema/1.0.0/consent-purpose.ts +0 -14
  262. package/src/db/schema/1.0.0/consent-record.ts +0 -10
  263. package/src/db/schema/1.0.0/consent.ts +0 -20
  264. package/src/db/schema/1.0.0/domain.ts +0 -12
  265. package/src/db/schema/1.0.0/index.ts +0 -48
  266. package/src/db/schema/1.0.0/subject.ts +0 -12
  267. package/src/db/schema/2.0.0/audit-log.ts +0 -18
  268. package/src/db/schema/2.0.0/consent-policy.ts +0 -28
  269. package/src/db/schema/2.0.0/consent-purpose.ts +0 -12
  270. package/src/db/schema/2.0.0/consent.ts +0 -26
  271. package/src/db/schema/2.0.0/domain.ts +0 -12
  272. package/src/db/schema/2.0.0/index.ts +0 -47
  273. package/src/db/schema/2.0.0/subject.ts +0 -14
  274. package/src/db/schema/index.ts +0 -15
  275. package/src/db/tenant-scope.test.ts +0 -750
  276. package/src/db/tenant-scope.ts +0 -103
  277. package/src/define-config.ts +0 -5
  278. package/src/handlers/consent/check.handler.ts +0 -126
  279. package/src/handlers/init/geo.test.ts +0 -317
  280. package/src/handlers/init/geo.ts +0 -195
  281. package/src/handlers/init/index.test.ts +0 -205
  282. package/src/handlers/init/index.ts +0 -114
  283. package/src/handlers/init/translations.test.ts +0 -121
  284. package/src/handlers/init/translations.ts +0 -72
  285. package/src/handlers/status/status.handler.test.ts +0 -155
  286. package/src/handlers/status/status.handler.ts +0 -51
  287. package/src/handlers/subject/get.handler.ts +0 -93
  288. package/src/handlers/subject/list.handler.ts +0 -93
  289. package/src/handlers/subject/patch.handler.ts +0 -122
  290. package/src/handlers/subject/post.handler.test.ts +0 -294
  291. package/src/handlers/subject/post.handler.ts +0 -254
  292. package/src/handlers/utils/consent-enrichment.test.ts +0 -380
  293. package/src/handlers/utils/consent-enrichment.ts +0 -218
  294. package/src/init.test.ts +0 -126
  295. package/src/init.ts +0 -87
  296. package/src/middleware/auth/index.ts +0 -11
  297. package/src/middleware/auth/validate-api-key.test.ts +0 -86
  298. package/src/middleware/auth/validate-api-key.ts +0 -107
  299. package/src/middleware/cors/cors.test.ts +0 -135
  300. package/src/middleware/cors/cors.ts +0 -186
  301. package/src/middleware/cors/is-origin-trusted.test.ts +0 -164
  302. package/src/middleware/cors/is-origin-trusted.ts +0 -130
  303. package/src/middleware/cors/process-cors.ts +0 -91
  304. package/src/middleware/openapi/config.ts +0 -29
  305. package/src/middleware/openapi/handlers.ts +0 -34
  306. package/src/middleware/process-ip/index.test.ts +0 -195
  307. package/src/middleware/process-ip/index.ts +0 -199
  308. package/src/router.ts +0 -15
  309. package/src/routes/consent.ts +0 -52
  310. package/src/routes/index.ts +0 -10
  311. package/src/routes/init.ts +0 -102
  312. package/src/routes/status.ts +0 -46
  313. package/src/routes/subject.ts +0 -152
  314. package/src/types/api.ts +0 -48
  315. package/src/types/index.ts +0 -288
  316. package/src/utils/create-telemetry-options.test.ts +0 -302
  317. package/src/utils/create-telemetry-options.ts +0 -229
  318. package/src/utils/env.ts +0 -84
  319. package/src/utils/extract-error-message.ts +0 -21
  320. package/src/utils/instrumentation.test.ts +0 -185
  321. package/src/utils/instrumentation.ts +0 -196
  322. package/src/utils/logger.ts +0 -41
  323. package/src/utils/metrics.test.ts +0 -323
  324. package/src/utils/metrics.ts +0 -402
  325. package/src/utils/telemetry-pii.test.ts +0 -325
  326. package/src/version.ts +0 -2
  327. package/tsconfig.json +0 -11
  328. package/vitest.config.ts +0 -28
  329. /package/dist/{types.js → types/index.js} +0 -0
  330. /package/{src/db/adapters/drizzle.ts → dist-types/db/adapters/drizzle.d.ts} +0 -0
  331. /package/{src/db/adapters/index.ts → dist-types/db/adapters/index.d.ts} +0 -0
  332. /package/{src/db/adapters/kysely.ts → dist-types/db/adapters/kysely.d.ts} +0 -0
  333. /package/{src/db/adapters/mongo.ts → dist-types/db/adapters/mongo.d.ts} +0 -0
  334. /package/{src/db/adapters/prisma.ts → dist-types/db/adapters/prisma.d.ts} +0 -0
  335. /package/{src/db/adapters/typeorm.ts → dist-types/db/adapters/typeorm.d.ts} +0 -0
  336. /package/{src/utils/index.ts → dist-types/utils/index.d.ts} +0 -0
@@ -1,41 +0,0 @@
1
- import { createLogger, type LoggerOptions } from '@c15t/logger';
2
- import { getTraceContext } from './create-telemetry-options';
3
-
4
- let globalLogger: ReturnType<typeof createLogger>;
5
-
6
- /**
7
- * Gets or creates a global logger instance
8
- *
9
- * @param options - Optional logger configuration options
10
- * @returns The global logger instance
11
- */
12
- export function getLogger(
13
- options?: LoggerOptions
14
- ): ReturnType<typeof createLogger> {
15
- if (!globalLogger) {
16
- globalLogger = createLogger({
17
- level: 'info',
18
- appName: 'c15t',
19
- getTraceContext,
20
- ...options,
21
- });
22
- }
23
- return globalLogger;
24
- }
25
-
26
- /**
27
- * Initializes the global logger with specific options
28
- *
29
- * @param options - Logger configuration options
30
- * @returns The initialized global logger instance
31
- */
32
- export function initLogger(
33
- options: LoggerOptions
34
- ): ReturnType<typeof createLogger> {
35
- globalLogger = createLogger({
36
- ...options,
37
- // Always include trace context for log correlation
38
- getTraceContext,
39
- });
40
- return globalLogger;
41
- }
@@ -1,323 +0,0 @@
1
- import { afterEach, describe, expect, it, vi } from 'vitest';
2
- import type { C15TOptions } from '../types';
3
- import { type C15TMetrics, getMetrics, resetMetrics } from './metrics';
4
-
5
- // Mock the telemetry options
6
- vi.mock('./create-telemetry-options', () => ({
7
- isTelemetryEnabled: vi.fn(
8
- (options) => options?.advanced?.telemetry?.enabled === true
9
- ),
10
- getMeter: vi.fn(() => ({
11
- createCounter: vi.fn(() => ({
12
- add: vi.fn(),
13
- })),
14
- createHistogram: vi.fn(() => ({
15
- record: vi.fn(),
16
- })),
17
- })),
18
- }));
19
-
20
- afterEach(() => {
21
- resetMetrics();
22
- vi.clearAllMocks();
23
- });
24
-
25
- describe('getMetrics', () => {
26
- it('returns null when telemetry is disabled', () => {
27
- const options: C15TOptions = {
28
- trustedOrigins: [],
29
- adapter: {} as C15TOptions['adapter'],
30
- };
31
-
32
- const metrics = getMetrics(options);
33
-
34
- expect(metrics).toBeNull();
35
- });
36
-
37
- it('returns C15TMetrics instance when telemetry is enabled', () => {
38
- const options: C15TOptions = {
39
- trustedOrigins: [],
40
- adapter: {} as C15TOptions['adapter'],
41
- advanced: {
42
- telemetry: {
43
- enabled: true,
44
- },
45
- },
46
- };
47
-
48
- const metrics = getMetrics(options);
49
-
50
- expect(metrics).toHaveProperty('recordHttpRequest');
51
- });
52
-
53
- it('returns same instance on subsequent calls', () => {
54
- const options: C15TOptions = {
55
- trustedOrigins: [],
56
- adapter: {} as C15TOptions['adapter'],
57
- advanced: {
58
- telemetry: {
59
- enabled: true,
60
- },
61
- },
62
- };
63
-
64
- const metrics1 = getMetrics(options);
65
- const metrics2 = getMetrics(options);
66
-
67
- expect(metrics1).toBe(metrics2);
68
- });
69
- });
70
-
71
- describe('C15TMetrics', () => {
72
- function createMetrics(): C15TMetrics {
73
- const options: C15TOptions = {
74
- trustedOrigins: [],
75
- adapter: {} as C15TOptions['adapter'],
76
- advanced: {
77
- telemetry: {
78
- enabled: true,
79
- },
80
- },
81
- };
82
- return getMetrics(options) as C15TMetrics;
83
- }
84
-
85
- describe('business metrics', () => {
86
- it('has consentCreated counter', () => {
87
- const metrics = createMetrics();
88
- expect(metrics.consentCreated).toBeDefined();
89
- });
90
-
91
- it('has consentAccepted counter', () => {
92
- const metrics = createMetrics();
93
- expect(metrics.consentAccepted).toBeDefined();
94
- });
95
-
96
- it('has consentRejected counter', () => {
97
- const metrics = createMetrics();
98
- expect(metrics.consentRejected).toBeDefined();
99
- });
100
-
101
- it('has subjectCreated counter', () => {
102
- const metrics = createMetrics();
103
- expect(metrics.subjectCreated).toBeDefined();
104
- });
105
-
106
- it('has subjectLinked counter', () => {
107
- const metrics = createMetrics();
108
- expect(metrics.subjectLinked).toBeDefined();
109
- });
110
-
111
- it('has consentCheckCount counter', () => {
112
- const metrics = createMetrics();
113
- expect(metrics.consentCheckCount).toBeDefined();
114
- });
115
-
116
- it('has initCount counter', () => {
117
- const metrics = createMetrics();
118
- expect(metrics.initCount).toBeDefined();
119
- });
120
- });
121
-
122
- describe('HTTP metrics', () => {
123
- it('has httpRequestDuration histogram', () => {
124
- const metrics = createMetrics();
125
- expect(metrics.httpRequestDuration).toBeDefined();
126
- });
127
-
128
- it('has httpRequestCount counter', () => {
129
- const metrics = createMetrics();
130
- expect(metrics.httpRequestCount).toBeDefined();
131
- });
132
-
133
- it('has httpErrorCount counter', () => {
134
- const metrics = createMetrics();
135
- expect(metrics.httpErrorCount).toBeDefined();
136
- });
137
- });
138
-
139
- describe('database metrics', () => {
140
- it('has dbQueryDuration histogram', () => {
141
- const metrics = createMetrics();
142
- expect(metrics.dbQueryDuration).toBeDefined();
143
- });
144
-
145
- it('has dbQueryCount counter', () => {
146
- const metrics = createMetrics();
147
- expect(metrics.dbQueryCount).toBeDefined();
148
- });
149
-
150
- it('has dbErrorCount counter', () => {
151
- const metrics = createMetrics();
152
- expect(metrics.dbErrorCount).toBeDefined();
153
- });
154
- });
155
-
156
- describe('cache metrics', () => {
157
- it('has cacheHit counter', () => {
158
- const metrics = createMetrics();
159
- expect(metrics.cacheHit).toBeDefined();
160
- });
161
-
162
- it('has cacheMiss counter', () => {
163
- const metrics = createMetrics();
164
- expect(metrics.cacheMiss).toBeDefined();
165
- });
166
-
167
- it('has cacheLatency histogram', () => {
168
- const metrics = createMetrics();
169
- expect(metrics.cacheLatency).toBeDefined();
170
- });
171
- });
172
-
173
- describe('GVL metrics', () => {
174
- it('has gvlFetchDuration histogram', () => {
175
- const metrics = createMetrics();
176
- expect(metrics.gvlFetchDuration).toBeDefined();
177
- });
178
-
179
- it('has gvlFetchCount counter', () => {
180
- const metrics = createMetrics();
181
- expect(metrics.gvlFetchCount).toBeDefined();
182
- });
183
-
184
- it('has gvlFetchError counter', () => {
185
- const metrics = createMetrics();
186
- expect(metrics.gvlFetchError).toBeDefined();
187
- });
188
- });
189
-
190
- describe('helper methods', () => {
191
- it('recordConsentCreated adds to counter with attributes', () => {
192
- const metrics = createMetrics();
193
- const addSpy = vi.spyOn(metrics.consentCreated, 'add');
194
-
195
- metrics.recordConsentCreated({
196
- type: 'cookie_banner',
197
- status: 'accepted',
198
- jurisdiction: 'GDPR',
199
- country: 'DE',
200
- region: 'BY',
201
- });
202
-
203
- expect(addSpy).toHaveBeenCalledWith(1, {
204
- type: 'cookie_banner',
205
- status: 'accepted',
206
- jurisdiction: 'GDPR',
207
- country: 'DE',
208
- region: 'BY',
209
- });
210
- });
211
-
212
- it('recordHttpRequest records both count and duration', () => {
213
- const metrics = createMetrics();
214
- const countSpy = vi.spyOn(metrics.httpRequestCount, 'add');
215
- const durationSpy = vi.spyOn(metrics.httpRequestDuration, 'record');
216
-
217
- metrics.recordHttpRequest(
218
- { method: 'GET', route: '/subjects', status: 200 },
219
- 42
220
- );
221
-
222
- expect(countSpy).toHaveBeenCalledWith(1, {
223
- method: 'GET',
224
- route: '/subjects',
225
- status: 200,
226
- });
227
- expect(durationSpy).toHaveBeenCalledWith(42, {
228
- method: 'GET',
229
- route: '/subjects',
230
- status: 200,
231
- });
232
- });
233
-
234
- it('recordHttpRequest records error when status >= 400', () => {
235
- const metrics = createMetrics();
236
- const errorSpy = vi.spyOn(metrics.httpErrorCount, 'add');
237
-
238
- metrics.recordHttpRequest(
239
- { method: 'POST', route: '/subjects', status: 500 },
240
- 100
241
- );
242
-
243
- expect(errorSpy).toHaveBeenCalledTimes(1);
244
- });
245
-
246
- it('recordCacheHit increments cache hit counter', () => {
247
- const metrics = createMetrics();
248
- const hitSpy = vi.spyOn(metrics.cacheHit, 'add');
249
-
250
- metrics.recordCacheHit('memory');
251
-
252
- expect(hitSpy).toHaveBeenCalledWith(1, { layer: 'memory' });
253
- });
254
-
255
- it('recordCacheMiss increments cache miss counter', () => {
256
- const metrics = createMetrics();
257
- const missSpy = vi.spyOn(metrics.cacheMiss, 'add');
258
-
259
- metrics.recordCacheMiss('external');
260
-
261
- expect(missSpy).toHaveBeenCalledWith(1, { layer: 'external' });
262
- });
263
-
264
- it('recordInit increments init counter with geo attributes', () => {
265
- const metrics = createMetrics();
266
- const initSpy = vi.spyOn(metrics.initCount, 'add');
267
-
268
- metrics.recordInit({
269
- jurisdiction: 'CCPA',
270
- country: 'US',
271
- region: 'CA',
272
- });
273
-
274
- expect(initSpy).toHaveBeenCalledWith(1, {
275
- jurisdiction: 'CCPA',
276
- country: 'US',
277
- region: 'CA',
278
- });
279
- });
280
- });
281
- });
282
-
283
- describe('getMetrics cached singleton', () => {
284
- it('returns cached instance without options after initialization', () => {
285
- const options: C15TOptions = {
286
- trustedOrigins: [],
287
- adapter: {} as C15TOptions['adapter'],
288
- advanced: {
289
- telemetry: {
290
- enabled: true,
291
- },
292
- },
293
- };
294
-
295
- // Initialize with options
296
- const metrics1 = getMetrics(options);
297
- expect(metrics1).not.toBeNull();
298
-
299
- // Call without options — should return cached instance
300
- const metrics2 = getMetrics();
301
- expect(metrics2).toBe(metrics1);
302
- });
303
- });
304
-
305
- describe('resetMetrics', () => {
306
- it('clears the metrics instance', () => {
307
- const options: C15TOptions = {
308
- trustedOrigins: [],
309
- adapter: {} as C15TOptions['adapter'],
310
- advanced: {
311
- telemetry: {
312
- enabled: true,
313
- },
314
- },
315
- };
316
-
317
- const metrics1 = getMetrics(options);
318
- resetMetrics();
319
- const metrics2 = getMetrics(options);
320
-
321
- expect(metrics1).not.toBe(metrics2);
322
- });
323
- });