@c15t/backend 0.0.1-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 (521) hide show
  1. package/.turbo/turbo-build.log +11 -0
  2. package/.turbo/turbo-check-types.log +5 -0
  3. package/.turbo/turbo-fmt.log +7 -0
  4. package/.turbo/turbo-lint.log +6 -0
  5. package/.turbo/turbo-test.log +26 -0
  6. package/README-next.md +223 -0
  7. package/README.md +164 -0
  8. package/dist/api/call.d.ts +176 -0
  9. package/dist/api/call.d.ts.map +1 -0
  10. package/dist/api/index.d.ts +935 -0
  11. package/dist/api/index.d.ts.map +1 -0
  12. package/dist/api/middlewares/index.d.ts +39 -0
  13. package/dist/api/middlewares/index.d.ts.map +1 -0
  14. package/dist/api/middlewares/origin-check.d.ts +82 -0
  15. package/dist/api/middlewares/origin-check.d.ts.map +1 -0
  16. package/dist/api/middlewares/validate-context.d.ts +38 -0
  17. package/dist/api/middlewares/validate-context.d.ts.map +1 -0
  18. package/dist/api/routes/__tests__/consent.test.d.ts +2 -0
  19. package/dist/api/routes/__tests__/consent.test.d.ts.map +1 -0
  20. package/dist/api/routes/__tests__/status.test.d.ts +2 -0
  21. package/dist/api/routes/__tests__/status.test.d.ts.map +1 -0
  22. package/dist/api/routes/error.d.ts +57 -0
  23. package/dist/api/routes/error.d.ts.map +1 -0
  24. package/dist/api/routes/generate-consent-receipt.d.ts +130 -0
  25. package/dist/api/routes/generate-consent-receipt.d.ts.map +1 -0
  26. package/dist/api/routes/get-consent-history.d.ts +133 -0
  27. package/dist/api/routes/get-consent-history.d.ts.map +1 -0
  28. package/dist/api/routes/get-consent-policy.d.ts +164 -0
  29. package/dist/api/routes/get-consent-policy.d.ts.map +1 -0
  30. package/dist/api/routes/get-consent.d.ts +148 -0
  31. package/dist/api/routes/get-consent.d.ts.map +1 -0
  32. package/dist/api/routes/index.d.ts +339 -0
  33. package/dist/api/routes/index.d.ts.map +1 -0
  34. package/dist/api/routes/ok.d.ts +87 -0
  35. package/dist/api/routes/ok.d.ts.map +1 -0
  36. package/dist/api/routes/set-consent.d.ts +245 -0
  37. package/dist/api/routes/set-consent.d.ts.map +1 -0
  38. package/dist/api/routes/show-consent-banner.d.ts +127 -0
  39. package/dist/api/routes/show-consent-banner.d.ts.map +1 -0
  40. package/dist/api/routes/status.d.ts +61 -0
  41. package/dist/api/routes/status.d.ts.map +1 -0
  42. package/dist/api/routes/verify-consent.d.ts +179 -0
  43. package/dist/api/routes/verify-consent.d.ts.map +1 -0
  44. package/dist/api/routes/withdraw-consent.d.ts +194 -0
  45. package/dist/api/routes/withdraw-consent.d.ts.map +1 -0
  46. package/dist/api/to-endpoints.d.ts +35 -0
  47. package/dist/api/to-endpoints.d.ts.map +1 -0
  48. package/dist/client/index.cjs +139 -0
  49. package/dist/client/index.d.ts +203 -0
  50. package/dist/client/index.d.ts.map +1 -0
  51. package/dist/client/index.js +106 -0
  52. package/dist/client/types.d.ts +431 -0
  53. package/dist/client/types.d.ts.map +1 -0
  54. package/dist/core.d.ts +124 -0
  55. package/dist/core.d.ts.map +1 -0
  56. package/dist/core.test.d.ts +2 -0
  57. package/dist/core.test.d.ts.map +1 -0
  58. package/dist/db/adapters/drizzle-adapter/drizzle-adapter.d.ts +122 -0
  59. package/dist/db/adapters/drizzle-adapter/drizzle-adapter.d.ts.map +1 -0
  60. package/dist/db/adapters/drizzle-adapter/index.d.ts +2 -0
  61. package/dist/db/adapters/drizzle-adapter/index.d.ts.map +1 -0
  62. package/dist/db/adapters/drizzle.cjs +1531 -0
  63. package/dist/db/adapters/drizzle.js +1489 -0
  64. package/dist/db/adapters/kysely-adapter/dialect.d.ts +72 -0
  65. package/dist/db/adapters/kysely-adapter/dialect.d.ts.map +1 -0
  66. package/dist/db/adapters/kysely-adapter/index.d.ts +4 -0
  67. package/dist/db/adapters/kysely-adapter/index.d.ts.map +1 -0
  68. package/dist/db/adapters/kysely-adapter/kysely-adapter.d.ts +98 -0
  69. package/dist/db/adapters/kysely-adapter/kysely-adapter.d.ts.map +1 -0
  70. package/dist/db/adapters/kysely-adapter/types.d.ts +281 -0
  71. package/dist/db/adapters/kysely-adapter/types.d.ts.map +1 -0
  72. package/dist/db/adapters/kysely.cjs +1551 -0
  73. package/dist/db/adapters/kysely.js +1508 -0
  74. package/dist/db/adapters/memory-adapter/index.d.ts +2 -0
  75. package/dist/db/adapters/memory-adapter/index.d.ts.map +1 -0
  76. package/dist/db/adapters/memory-adapter/memory-adapter.d.ts +56 -0
  77. package/dist/db/adapters/memory-adapter/memory-adapter.d.ts.map +1 -0
  78. package/dist/db/adapters/memory.cjs +1391 -0
  79. package/dist/db/adapters/memory.js +1349 -0
  80. package/dist/db/adapters/prisma-adapter/index.d.ts +2 -0
  81. package/dist/db/adapters/prisma-adapter/index.d.ts.map +1 -0
  82. package/dist/db/adapters/prisma-adapter/prisma-adapter.d.ts +143 -0
  83. package/dist/db/adapters/prisma-adapter/prisma-adapter.d.ts.map +1 -0
  84. package/dist/db/adapters/prisma.cjs +1503 -0
  85. package/dist/db/adapters/prisma.js +1461 -0
  86. package/dist/db/adapters/types.d.ts +154 -0
  87. package/dist/db/adapters/types.d.ts.map +1 -0
  88. package/dist/db/adapters/utils.d.ts +36 -0
  89. package/dist/db/adapters/utils.d.ts.map +1 -0
  90. package/dist/db/core/fields/field-factory.d.ts +383 -0
  91. package/dist/db/core/fields/field-factory.d.ts.map +1 -0
  92. package/dist/db/core/fields/field-inference.d.ts +218 -0
  93. package/dist/db/core/fields/field-inference.d.ts.map +1 -0
  94. package/dist/db/core/fields/field-options-integration.d.ts +90 -0
  95. package/dist/db/core/fields/field-options-integration.d.ts.map +1 -0
  96. package/dist/db/core/fields/field-types.d.ts +182 -0
  97. package/dist/db/core/fields/field-types.d.ts.map +1 -0
  98. package/dist/db/core/fields/id-generator.d.ts +19 -0
  99. package/dist/db/core/fields/id-generator.d.ts.map +1 -0
  100. package/dist/db/core/fields/index.d.ts +8 -0
  101. package/dist/db/core/fields/index.d.ts.map +1 -0
  102. package/dist/db/core/fields/superjson-utils.d.ts +34 -0
  103. package/dist/db/core/fields/superjson-utils.d.ts.map +1 -0
  104. package/dist/db/core/fields/zod-fields.d.ts +1011 -0
  105. package/dist/db/core/fields/zod-fields.d.ts.map +1 -0
  106. package/dist/db/core/get-schema.d.ts +36 -0
  107. package/dist/db/core/get-schema.d.ts.map +1 -0
  108. package/dist/db/core/types.d.ts +41 -0
  109. package/dist/db/core/types.d.ts.map +1 -0
  110. package/dist/db/create-registry.d.ts +760 -0
  111. package/dist/db/create-registry.d.ts.map +1 -0
  112. package/dist/db/hooks/create-hooks.d.ts +32 -0
  113. package/dist/db/hooks/create-hooks.d.ts.map +1 -0
  114. package/dist/db/hooks/index.d.ts +40 -0
  115. package/dist/db/hooks/index.d.ts.map +1 -0
  116. package/dist/db/hooks/types.d.ts +133 -0
  117. package/dist/db/hooks/types.d.ts.map +1 -0
  118. package/dist/db/hooks/update-hooks.d.ts +33 -0
  119. package/dist/db/hooks/update-hooks.d.ts.map +1 -0
  120. package/dist/db/hooks/update-many-hooks.d.ts +55 -0
  121. package/dist/db/hooks/update-many-hooks.d.ts.map +1 -0
  122. package/dist/db/hooks/utils.d.ts +62 -0
  123. package/dist/db/hooks/utils.d.ts.map +1 -0
  124. package/dist/db/hooks/with-hooks-factory.d.ts +33 -0
  125. package/dist/db/hooks/with-hooks-factory.d.ts.map +1 -0
  126. package/dist/db/index.cjs +2458 -0
  127. package/dist/db/index.d.ts +11 -0
  128. package/dist/db/index.d.ts.map +1 -0
  129. package/dist/db/index.js +2404 -0
  130. package/dist/db/migration/get-migration.d.ts +32 -0
  131. package/dist/db/migration/get-migration.d.ts.map +1 -0
  132. package/dist/db/migration/get-schema/get-schema.d.ts +27 -0
  133. package/dist/db/migration/get-schema/get-schema.d.ts.map +1 -0
  134. package/dist/db/migration/get-schema/index.d.ts +21 -0
  135. package/dist/db/migration/get-schema/index.d.ts.map +1 -0
  136. package/dist/db/migration/get-schema/process-fields.d.ts +16 -0
  137. package/dist/db/migration/get-schema/process-fields.d.ts.map +1 -0
  138. package/dist/db/migration/get-schema/process-tables.d.ts +13 -0
  139. package/dist/db/migration/get-schema/process-tables.d.ts.map +1 -0
  140. package/dist/db/migration/get-schema/types.d.ts +17 -0
  141. package/dist/db/migration/get-schema/types.d.ts.map +1 -0
  142. package/dist/db/migration/index.cjs +1613 -0
  143. package/dist/db/migration/index.d.ts +14 -0
  144. package/dist/db/migration/index.d.ts.map +1 -0
  145. package/dist/db/migration/index.js +1571 -0
  146. package/dist/db/migration/migration-builders.d.ts +28 -0
  147. package/dist/db/migration/migration-builders.d.ts.map +1 -0
  148. package/dist/db/migration/migration-execution.d.ts +12 -0
  149. package/dist/db/migration/migration-execution.d.ts.map +1 -0
  150. package/dist/db/migration/schema-comparison.d.ts +54 -0
  151. package/dist/db/migration/schema-comparison.d.ts.map +1 -0
  152. package/dist/db/migration/type-mapping.d.ts +86 -0
  153. package/dist/db/migration/type-mapping.d.ts.map +1 -0
  154. package/dist/db/migration/types.d.ts +37 -0
  155. package/dist/db/migration/types.d.ts.map +1 -0
  156. package/dist/db/schema/audit-log/index.d.ts +4 -0
  157. package/dist/db/schema/audit-log/index.d.ts.map +1 -0
  158. package/dist/db/schema/audit-log/registry.d.ts +128 -0
  159. package/dist/db/schema/audit-log/registry.d.ts.map +1 -0
  160. package/dist/db/schema/audit-log/schema.d.ts +67 -0
  161. package/dist/db/schema/audit-log/schema.d.ts.map +1 -0
  162. package/dist/db/schema/audit-log/table.d.ts +175 -0
  163. package/dist/db/schema/audit-log/table.d.ts.map +1 -0
  164. package/dist/db/schema/audit-log/types.d.ts +29 -0
  165. package/dist/db/schema/audit-log/types.d.ts.map +1 -0
  166. package/dist/db/schema/consent/index.d.ts +4 -0
  167. package/dist/db/schema/consent/index.d.ts.map +1 -0
  168. package/dist/db/schema/consent/registry.d.ts +318 -0
  169. package/dist/db/schema/consent/registry.d.ts.map +1 -0
  170. package/dist/db/schema/consent/schema.d.ts +135 -0
  171. package/dist/db/schema/consent/schema.d.ts.map +1 -0
  172. package/dist/db/schema/consent/table.d.ts +245 -0
  173. package/dist/db/schema/consent/table.d.ts.map +1 -0
  174. package/dist/db/schema/consent/types.d.ts +37 -0
  175. package/dist/db/schema/consent/types.d.ts.map +1 -0
  176. package/dist/db/schema/consent-geo-location/index.d.ts +4 -0
  177. package/dist/db/schema/consent-geo-location/index.d.ts.map +1 -0
  178. package/dist/db/schema/consent-geo-location/registry.d.ts +96 -0
  179. package/dist/db/schema/consent-geo-location/registry.d.ts.map +1 -0
  180. package/dist/db/schema/consent-geo-location/schema.d.ts +71 -0
  181. package/dist/db/schema/consent-geo-location/schema.d.ts.map +1 -0
  182. package/dist/db/schema/consent-geo-location/table.d.ts +167 -0
  183. package/dist/db/schema/consent-geo-location/table.d.ts.map +1 -0
  184. package/dist/db/schema/consent-geo-location/types.d.ts +21 -0
  185. package/dist/db/schema/consent-geo-location/types.d.ts.map +1 -0
  186. package/dist/db/schema/consent-policy/index.d.ts +4 -0
  187. package/dist/db/schema/consent-policy/index.d.ts.map +1 -0
  188. package/dist/db/schema/consent-policy/registry.d.ts +186 -0
  189. package/dist/db/schema/consent-policy/registry.d.ts.map +1 -0
  190. package/dist/db/schema/consent-policy/schema.d.ts +68 -0
  191. package/dist/db/schema/consent-policy/schema.d.ts.map +1 -0
  192. package/dist/db/schema/consent-policy/table.d.ts +147 -0
  193. package/dist/db/schema/consent-policy/table.d.ts.map +1 -0
  194. package/dist/db/schema/consent-policy/types.d.ts +28 -0
  195. package/dist/db/schema/consent-policy/types.d.ts.map +1 -0
  196. package/dist/db/schema/consent-purpose/index.d.ts +4 -0
  197. package/dist/db/schema/consent-purpose/index.d.ts.map +1 -0
  198. package/dist/db/schema/consent-purpose/registry.d.ts +136 -0
  199. package/dist/db/schema/consent-purpose/registry.d.ts.map +1 -0
  200. package/dist/db/schema/consent-purpose/schema.d.ts +79 -0
  201. package/dist/db/schema/consent-purpose/schema.d.ts.map +1 -0
  202. package/dist/db/schema/consent-purpose/table.d.ts +161 -0
  203. package/dist/db/schema/consent-purpose/table.d.ts.map +1 -0
  204. package/dist/db/schema/consent-purpose/types.d.ts +16 -0
  205. package/dist/db/schema/consent-purpose/types.d.ts.map +1 -0
  206. package/dist/db/schema/consent-purpose-junction/index.d.ts +4 -0
  207. package/dist/db/schema/consent-purpose-junction/index.d.ts.map +1 -0
  208. package/dist/db/schema/consent-purpose-junction/registry.d.ts +109 -0
  209. package/dist/db/schema/consent-purpose-junction/registry.d.ts.map +1 -0
  210. package/dist/db/schema/consent-purpose-junction/schema.d.ts +57 -0
  211. package/dist/db/schema/consent-purpose-junction/schema.d.ts.map +1 -0
  212. package/dist/db/schema/consent-purpose-junction/table.d.ts +138 -0
  213. package/dist/db/schema/consent-purpose-junction/table.d.ts.map +1 -0
  214. package/dist/db/schema/consent-purpose-junction/types.d.ts +14 -0
  215. package/dist/db/schema/consent-purpose-junction/types.d.ts.map +1 -0
  216. package/dist/db/schema/consent-record/index.d.ts +4 -0
  217. package/dist/db/schema/consent-record/index.d.ts.map +1 -0
  218. package/dist/db/schema/consent-record/registry.d.ts +119 -0
  219. package/dist/db/schema/consent-record/registry.d.ts.map +1 -0
  220. package/dist/db/schema/consent-record/schema.d.ts +57 -0
  221. package/dist/db/schema/consent-record/schema.d.ts.map +1 -0
  222. package/dist/db/schema/consent-record/table.d.ts +123 -0
  223. package/dist/db/schema/consent-record/table.d.ts.map +1 -0
  224. package/dist/db/schema/consent-record/types.d.ts +21 -0
  225. package/dist/db/schema/consent-record/types.d.ts.map +1 -0
  226. package/dist/db/schema/consent-withdrawal/index.d.ts +4 -0
  227. package/dist/db/schema/consent-withdrawal/index.d.ts.map +1 -0
  228. package/dist/db/schema/consent-withdrawal/registry.d.ts +134 -0
  229. package/dist/db/schema/consent-withdrawal/registry.d.ts.map +1 -0
  230. package/dist/db/schema/consent-withdrawal/schema.d.ts +67 -0
  231. package/dist/db/schema/consent-withdrawal/schema.d.ts.map +1 -0
  232. package/dist/db/schema/consent-withdrawal/table.d.ts +170 -0
  233. package/dist/db/schema/consent-withdrawal/table.d.ts.map +1 -0
  234. package/dist/db/schema/consent-withdrawal/types.d.ts +28 -0
  235. package/dist/db/schema/consent-withdrawal/types.d.ts.map +1 -0
  236. package/dist/db/schema/definition.d.ts +1100 -0
  237. package/dist/db/schema/definition.d.ts.map +1 -0
  238. package/dist/db/schema/domain/index.d.ts +4 -0
  239. package/dist/db/schema/domain/index.d.ts.map +1 -0
  240. package/dist/db/schema/domain/registry.d.ts +169 -0
  241. package/dist/db/schema/domain/registry.d.ts.map +1 -0
  242. package/dist/db/schema/domain/schema.d.ts +60 -0
  243. package/dist/db/schema/domain/schema.d.ts.map +1 -0
  244. package/dist/db/schema/domain/table.d.ts +140 -0
  245. package/dist/db/schema/domain/table.d.ts.map +1 -0
  246. package/dist/db/schema/domain/types.d.ts +27 -0
  247. package/dist/db/schema/domain/types.d.ts.map +1 -0
  248. package/dist/db/schema/geo-location/index.d.ts +4 -0
  249. package/dist/db/schema/geo-location/index.d.ts.map +1 -0
  250. package/dist/db/schema/geo-location/registry.d.ts +114 -0
  251. package/dist/db/schema/geo-location/registry.d.ts.map +1 -0
  252. package/dist/db/schema/geo-location/schema.d.ts +58 -0
  253. package/dist/db/schema/geo-location/schema.d.ts.map +1 -0
  254. package/dist/db/schema/geo-location/table.d.ts +132 -0
  255. package/dist/db/schema/geo-location/table.d.ts.map +1 -0
  256. package/dist/db/schema/geo-location/types.d.ts +17 -0
  257. package/dist/db/schema/geo-location/types.d.ts.map +1 -0
  258. package/dist/db/schema/index.d.ts +85 -0
  259. package/dist/db/schema/index.d.ts.map +1 -0
  260. package/dist/db/schema/parser.d.ts +183 -0
  261. package/dist/db/schema/parser.d.ts.map +1 -0
  262. package/dist/db/schema/schemas.d.ts +383 -0
  263. package/dist/db/schema/schemas.d.ts.map +1 -0
  264. package/dist/db/schema/subject/index.d.ts +4 -0
  265. package/dist/db/schema/subject/index.d.ts.map +1 -0
  266. package/dist/db/schema/subject/registry.d.ts +141 -0
  267. package/dist/db/schema/subject/registry.d.ts.map +1 -0
  268. package/dist/db/schema/subject/schema.d.ts +56 -0
  269. package/dist/db/schema/subject/schema.d.ts.map +1 -0
  270. package/dist/db/schema/subject/table.d.ts +136 -0
  271. package/dist/db/schema/subject/table.d.ts.map +1 -0
  272. package/dist/db/schema/subject/types.d.ts +22 -0
  273. package/dist/db/schema/subject/types.d.ts.map +1 -0
  274. package/dist/db/schema/types.d.ts +136 -0
  275. package/dist/db/schema/types.d.ts.map +1 -0
  276. package/dist/db/utils/adapter-factory.d.ts +21 -0
  277. package/dist/db/utils/adapter-factory.d.ts.map +1 -0
  278. package/dist/db/utils/index.d.ts +10 -0
  279. package/dist/db/utils/index.d.ts.map +1 -0
  280. package/dist/db/utils.d.ts +4 -0
  281. package/dist/db/utils.d.ts.map +1 -0
  282. package/dist/error/codes.cjs +68 -0
  283. package/dist/error/codes.d.ts +175 -0
  284. package/dist/error/codes.d.ts.map +1 -0
  285. package/dist/error/codes.js +35 -0
  286. package/dist/error/error.d.ts +79 -0
  287. package/dist/error/error.d.ts.map +1 -0
  288. package/dist/error/index.cjs +172 -0
  289. package/dist/error/index.d.ts +9 -0
  290. package/dist/error/index.d.ts.map +1 -0
  291. package/dist/error/index.js +129 -0
  292. package/dist/error/logging.d.ts +25 -0
  293. package/dist/error/logging.d.ts.map +1 -0
  294. package/dist/error/pipeline.d.ts +19 -0
  295. package/dist/error/pipeline.d.ts.map +1 -0
  296. package/dist/error/recovery.d.ts +22 -0
  297. package/dist/error/recovery.d.ts.map +1 -0
  298. package/dist/error/results.d.ts +56 -0
  299. package/dist/error/results.d.ts.map +1 -0
  300. package/dist/index.cjs +4777 -0
  301. package/dist/index.d.ts +46 -0
  302. package/dist/index.d.ts.map +1 -0
  303. package/dist/index.js +4708 -0
  304. package/dist/init.d.ts +52 -0
  305. package/dist/init.d.ts.map +1 -0
  306. package/dist/init.test.d.ts +2 -0
  307. package/dist/init.test.d.ts.map +1 -0
  308. package/dist/integrations/index.cjs +281 -0
  309. package/dist/integrations/index.d.ts +7 -0
  310. package/dist/integrations/index.d.ts.map +1 -0
  311. package/dist/integrations/index.js +248 -0
  312. package/dist/integrations/next.cjs +131 -0
  313. package/dist/integrations/next.d.ts +29 -0
  314. package/dist/integrations/next.d.ts.map +1 -0
  315. package/dist/integrations/next.js +99 -0
  316. package/dist/integrations/react.cjs +182 -0
  317. package/dist/integrations/react.d.ts +257 -0
  318. package/dist/integrations/react.d.ts.map +1 -0
  319. package/dist/integrations/react.js +150 -0
  320. package/dist/plugins/geo/index.d.ts +2 -0
  321. package/dist/plugins/geo/index.d.ts.map +1 -0
  322. package/dist/test/utils.d.ts +65 -0
  323. package/dist/test/utils.d.ts.map +1 -0
  324. package/dist/types/api.d.ts +89 -0
  325. package/dist/types/api.d.ts.map +1 -0
  326. package/dist/types/context.d.ts +205 -0
  327. package/dist/types/context.d.ts.map +1 -0
  328. package/dist/types/helper.d.ts +78 -0
  329. package/dist/types/helper.d.ts.map +1 -0
  330. package/dist/types/index.cjs +19 -0
  331. package/dist/types/index.d.ts +6 -0
  332. package/dist/types/index.d.ts.map +1 -0
  333. package/dist/types/index.js +0 -0
  334. package/dist/types/options.d.ts +172 -0
  335. package/dist/types/options.d.ts.map +1 -0
  336. package/dist/types/plugins.d.ts +442 -0
  337. package/dist/types/plugins.d.ts.map +1 -0
  338. package/dist/utils/env.d.ts +77 -0
  339. package/dist/utils/env.d.ts.map +1 -0
  340. package/dist/utils/hide-metadata.d.ts +22 -0
  341. package/dist/utils/hide-metadata.d.ts.map +1 -0
  342. package/dist/utils/index.cjs +268 -0
  343. package/dist/utils/index.d.ts +18 -0
  344. package/dist/utils/index.d.ts.map +1 -0
  345. package/dist/utils/index.js +210 -0
  346. package/dist/utils/ip.d.ts +10 -0
  347. package/dist/utils/ip.d.ts.map +1 -0
  348. package/dist/utils/json.d.ts +14 -0
  349. package/dist/utils/json.d.ts.map +1 -0
  350. package/dist/utils/logger.d.ts +108 -0
  351. package/dist/utils/logger.d.ts.map +1 -0
  352. package/dist/utils/url.d.ts +87 -0
  353. package/dist/utils/url.d.ts.map +1 -0
  354. package/dist/utils/wildcard.d.ts +46 -0
  355. package/dist/utils/wildcard.d.ts.map +1 -0
  356. package/knip.json +37 -0
  357. package/package.json +146 -0
  358. package/rslib.config.ts +104 -0
  359. package/src/api/call.ts +177 -0
  360. package/src/api/index.ts +303 -0
  361. package/src/api/middlewares/index.ts +38 -0
  362. package/src/api/middlewares/origin-check.ts +260 -0
  363. package/src/api/middlewares/validate-context.ts +175 -0
  364. package/src/api/routes/__tests__/consent.test.ts +270 -0
  365. package/src/api/routes/__tests__/status.test.ts +36 -0
  366. package/src/api/routes/error.ts +130 -0
  367. package/src/api/routes/generate-consent-receipt.ts +244 -0
  368. package/src/api/routes/get-consent-history.ts +128 -0
  369. package/src/api/routes/get-consent-policy.ts +327 -0
  370. package/src/api/routes/get-consent.ts +230 -0
  371. package/src/api/routes/index.ts +12 -0
  372. package/src/api/routes/ok.ts +45 -0
  373. package/src/api/routes/set-consent.ts +328 -0
  374. package/src/api/routes/show-consent-banner.ts +149 -0
  375. package/src/api/routes/status.ts +62 -0
  376. package/src/api/routes/verify-consent.ts +272 -0
  377. package/src/api/routes/withdraw-consent.ts +293 -0
  378. package/src/api/to-endpoints.ts +371 -0
  379. package/src/client/index.ts +471 -0
  380. package/src/client/types.ts +458 -0
  381. package/src/core.test.ts +303 -0
  382. package/src/core.ts +267 -0
  383. package/src/db/adapters/drizzle-adapter/drizzle-adapter.ts +711 -0
  384. package/src/db/adapters/drizzle-adapter/index.ts +1 -0
  385. package/src/db/adapters/kysely-adapter/dialect.ts +192 -0
  386. package/src/db/adapters/kysely-adapter/index.ts +3 -0
  387. package/src/db/adapters/kysely-adapter/kysely-adapter.ts +1168 -0
  388. package/src/db/adapters/kysely-adapter/types.ts +307 -0
  389. package/src/db/adapters/memory-adapter/index.ts +1 -0
  390. package/src/db/adapters/memory-adapter/memory-adapter.ts +648 -0
  391. package/src/db/adapters/prisma-adapter/index.ts +1 -0
  392. package/src/db/adapters/prisma-adapter/prisma-adapter.ts +586 -0
  393. package/src/db/adapters/types.ts +203 -0
  394. package/src/db/adapters/utils.ts +51 -0
  395. package/src/db/core/fields/field-factory.ts +804 -0
  396. package/src/db/core/fields/field-inference.ts +298 -0
  397. package/src/db/core/fields/field-options-integration.ts +135 -0
  398. package/src/db/core/fields/field-types.ts +233 -0
  399. package/src/db/core/fields/id-generator.ts +57 -0
  400. package/src/db/core/fields/index.ts +56 -0
  401. package/src/db/core/fields/superjson-utils.ts +155 -0
  402. package/src/db/core/fields/zod-fields.ts +269 -0
  403. package/src/db/core/get-schema.ts +102 -0
  404. package/src/db/core/types.ts +52 -0
  405. package/src/db/create-registry.ts +31 -0
  406. package/src/db/hooks/create-hooks.ts +88 -0
  407. package/src/db/hooks/index.ts +39 -0
  408. package/src/db/hooks/types.ts +164 -0
  409. package/src/db/hooks/update-hooks.ts +91 -0
  410. package/src/db/hooks/update-many-hooks.ts +176 -0
  411. package/src/db/hooks/utils.ts +151 -0
  412. package/src/db/hooks/with-hooks-factory.ts +68 -0
  413. package/src/db/index.ts +32 -0
  414. package/src/db/migration/get-migration.ts +89 -0
  415. package/src/db/migration/get-schema/get-schema.ts +44 -0
  416. package/src/db/migration/get-schema/index.ts +20 -0
  417. package/src/db/migration/get-schema/process-fields.ts +66 -0
  418. package/src/db/migration/get-schema/process-tables.ts +68 -0
  419. package/src/db/migration/get-schema/types.ts +18 -0
  420. package/src/db/migration/index.ts +18 -0
  421. package/src/db/migration/migration-builders.ts +170 -0
  422. package/src/db/migration/migration-execution.ts +79 -0
  423. package/src/db/migration/schema-comparison.ts +216 -0
  424. package/src/db/migration/type-mapping.ts +255 -0
  425. package/src/db/migration/types.ts +46 -0
  426. package/src/db/schema/audit-log/index.ts +3 -0
  427. package/src/db/schema/audit-log/registry.ts +228 -0
  428. package/src/db/schema/audit-log/schema.ts +46 -0
  429. package/src/db/schema/audit-log/table.ts +185 -0
  430. package/src/db/schema/audit-log/types.ts +29 -0
  431. package/src/db/schema/consent/index.ts +3 -0
  432. package/src/db/schema/consent/registry.ts +381 -0
  433. package/src/db/schema/consent/schema.ts +65 -0
  434. package/src/db/schema/consent/table.ts +220 -0
  435. package/src/db/schema/consent/types.ts +39 -0
  436. package/src/db/schema/consent-geo-location/index.ts +3 -0
  437. package/src/db/schema/consent-geo-location/registry.ts +124 -0
  438. package/src/db/schema/consent-geo-location/schema.ts +51 -0
  439. package/src/db/schema/consent-geo-location/table.ts +169 -0
  440. package/src/db/schema/consent-geo-location/types.ts +21 -0
  441. package/src/db/schema/consent-policy/index.ts +3 -0
  442. package/src/db/schema/consent-policy/registry.ts +313 -0
  443. package/src/db/schema/consent-policy/schema.ts +47 -0
  444. package/src/db/schema/consent-policy/table.ts +141 -0
  445. package/src/db/schema/consent-policy/types.ts +28 -0
  446. package/src/db/schema/consent-purpose/index.ts +3 -0
  447. package/src/db/schema/consent-purpose/registry.ts +188 -0
  448. package/src/db/schema/consent-purpose/schema.ts +58 -0
  449. package/src/db/schema/consent-purpose/table.ts +154 -0
  450. package/src/db/schema/consent-purpose/types.ts +16 -0
  451. package/src/db/schema/consent-purpose-junction/index.ts +3 -0
  452. package/src/db/schema/consent-purpose-junction/registry.ts +189 -0
  453. package/src/db/schema/consent-purpose-junction/schema.ts +49 -0
  454. package/src/db/schema/consent-purpose-junction/table.ts +142 -0
  455. package/src/db/schema/consent-purpose-junction/types.ts +14 -0
  456. package/src/db/schema/consent-record/index.ts +3 -0
  457. package/src/db/schema/consent-record/registry.ts +209 -0
  458. package/src/db/schema/consent-record/schema.ts +42 -0
  459. package/src/db/schema/consent-record/table.ts +124 -0
  460. package/src/db/schema/consent-record/types.ts +21 -0
  461. package/src/db/schema/consent-withdrawal/index.ts +3 -0
  462. package/src/db/schema/consent-withdrawal/registry.ts +219 -0
  463. package/src/db/schema/consent-withdrawal/schema.ts +48 -0
  464. package/src/db/schema/consent-withdrawal/table.ts +181 -0
  465. package/src/db/schema/consent-withdrawal/types.ts +29 -0
  466. package/src/db/schema/definition.ts +196 -0
  467. package/src/db/schema/domain/index.ts +3 -0
  468. package/src/db/schema/domain/registry.ts +272 -0
  469. package/src/db/schema/domain/schema.ts +43 -0
  470. package/src/db/schema/domain/table.ts +137 -0
  471. package/src/db/schema/domain/types.ts +27 -0
  472. package/src/db/schema/geo-location/index.ts +3 -0
  473. package/src/db/schema/geo-location/registry.ts +159 -0
  474. package/src/db/schema/geo-location/schema.ts +45 -0
  475. package/src/db/schema/geo-location/table.ts +148 -0
  476. package/src/db/schema/geo-location/types.ts +18 -0
  477. package/src/db/schema/index.ts +96 -0
  478. package/src/db/schema/parser.ts +417 -0
  479. package/src/db/schema/schemas.ts +35 -0
  480. package/src/db/schema/subject/index.ts +3 -0
  481. package/src/db/schema/subject/registry.ts +371 -0
  482. package/src/db/schema/subject/schema.ts +41 -0
  483. package/src/db/schema/subject/table.ts +139 -0
  484. package/src/db/schema/subject/types.ts +22 -0
  485. package/src/db/schema/types.ts +154 -0
  486. package/src/db/utils/adapter-factory.ts +64 -0
  487. package/src/db/utils/index.ts +10 -0
  488. package/src/db/utils.ts +42 -0
  489. package/src/docs/ADVANCED_JSON_HANDLING.md +99 -0
  490. package/src/docs/neverthrow.md +171 -0
  491. package/src/error/codes.ts +201 -0
  492. package/src/error/error.ts +145 -0
  493. package/src/error/index.ts +23 -0
  494. package/src/error/logging.ts +52 -0
  495. package/src/error/pipeline.ts +57 -0
  496. package/src/error/recovery.ts +45 -0
  497. package/src/error/results.ts +100 -0
  498. package/src/index.ts +79 -0
  499. package/src/init.test.ts +235 -0
  500. package/src/init.ts +261 -0
  501. package/src/integrations/index.ts +10 -0
  502. package/src/integrations/next.ts +136 -0
  503. package/src/integrations/react.ts +567 -0
  504. package/src/plugins/geo/index.ts +563 -0
  505. package/src/test/utils.ts +244 -0
  506. package/src/types/api.ts +101 -0
  507. package/src/types/context.ts +235 -0
  508. package/src/types/helper.ts +87 -0
  509. package/src/types/index.ts +5 -0
  510. package/src/types/options.ts +189 -0
  511. package/src/types/plugins.ts +538 -0
  512. package/src/utils/env.ts +103 -0
  513. package/src/utils/hide-metadata.ts +21 -0
  514. package/src/utils/index.ts +17 -0
  515. package/src/utils/ip.ts +45 -0
  516. package/src/utils/json.ts +19 -0
  517. package/src/utils/logger.ts +252 -0
  518. package/src/utils/url.ts +194 -0
  519. package/src/utils/wildcard.ts +253 -0
  520. package/tsconfig.json +12 -0
  521. package/vitest.config.ts +14 -0
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Environment variables object
3
+ *
4
+ * Provides access to environment variables in a way that works in both
5
+ * browser and Node.js environments. In Node.js, this will be process.env,
6
+ * and in browsers, it will be an empty object.
7
+ *
8
+ * @returns An object containing environment variables accessible in the current runtime
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * // Access an environment variable
13
+ * const apiKey = env.API_KEY;
14
+ * ```
15
+ */
16
+ export const env = typeof process !== 'undefined' ? process.env : {};
17
+
18
+ /**
19
+ * Determines if the application is running in production mode
20
+ *
21
+ * Checks if NODE_ENV is set to 'production'. This is useful for
22
+ * conditionally enabling or disabling features based on the environment.
23
+ *
24
+ * @returns Boolean indicating whether the application is running in production mode
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * // Conditionally execute code based on environment
29
+ * if (isProduction) {
30
+ * // Production-only code
31
+ * }
32
+ * ```
33
+ */
34
+ export const isProduction =
35
+ typeof process !== 'undefined' && process.env.NODE_ENV === 'production';
36
+
37
+ /**
38
+ * Determines if the application is running in development mode
39
+ *
40
+ * Checks if NODE_ENV is set to 'development'. This is useful for
41
+ * conditionally enabling debugging features in development environments.
42
+ *
43
+ * @returns Boolean indicating whether the application is running in development mode
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * // Enable development-only features
48
+ * if (isDevelopment) {
49
+ * enableDebugTools();
50
+ * }
51
+ * ```
52
+ */
53
+ export const isDevelopment =
54
+ typeof process !== 'undefined' && process.env.NODE_ENV === 'development';
55
+
56
+ /**
57
+ * Converts a string or boolean value to a boolean
58
+ *
59
+ * @param val - The value to convert to boolean
60
+ * @returns `false` if the value is falsy or the string 'false', otherwise `true`
61
+ *
62
+ * @example
63
+ * ```ts
64
+ * toBoolean('true'); // true
65
+ * toBoolean('false'); // false
66
+ * toBoolean(undefined); // false
67
+ * toBoolean(true); // true
68
+ * ```
69
+ *
70
+ * @internal Used for environment variable parsing
71
+ */
72
+ function toBoolean(val: boolean | string | undefined) {
73
+ return val ? val !== 'false' : false;
74
+ }
75
+
76
+ /**
77
+ * The current Node.js environment value
78
+ *
79
+ * Retrieves the NODE_ENV environment variable value if available,
80
+ * otherwise returns an empty string.
81
+ *
82
+ * @returns The current NODE_ENV value or empty string if not set
83
+ */
84
+ export const nodeENV =
85
+ (typeof process !== 'undefined' && process.env && process.env.NODE_ENV) || '';
86
+
87
+ /**
88
+ * Determines if the application is running in test mode
89
+ *
90
+ * Checks if NODE_ENV is set to 'test' or if the TEST environment
91
+ * variable is truthy and not 'false'.
92
+ *
93
+ * @returns Boolean indicating whether the application is running in test mode
94
+ *
95
+ * @example
96
+ * ```ts
97
+ * // Skip expensive operations in tests
98
+ * if (!isTest) {
99
+ * runExpensiveOperation();
100
+ * }
101
+ * ```
102
+ */
103
+ export const isTest = nodeENV === 'test' || toBoolean(env.TEST);
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Constant metadata flag to identify non-action objects
3
+ *
4
+ * This constant provides metadata that can be attached to objects to indicate
5
+ * they should not be treated as actions by the system. The value is explicitly
6
+ * typed as a const assertion to ensure type safety.
7
+ *
8
+ * @see Used to differentiate between actionable and non-actionable objects in the system
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * // Mark an object as not being an action
13
+ * const nonActionObject = {
14
+ * ...HIDE_METADATA,
15
+ * // other properties
16
+ * };
17
+ * ```
18
+ */
19
+ export const HIDE_METADATA = {
20
+ isAction: false as const,
21
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * c15t Utility Functions
3
+ *
4
+ * This module serves as the main entry point for all utility functions used in the c15t
5
+ * consent management system. It re-exports utilities from specialized modules for easier access.
6
+ *
7
+ * Import utilities from this module for a cleaner import structure:
8
+ * @example
9
+ * ```typescript
10
+ * import { generateId, encrypt, formatDate } from '../utils';
11
+ * ```
12
+ */
13
+ export * from './env';
14
+ export * from './hide-metadata';
15
+ export * from './logger';
16
+ export * from './url';
17
+ export * from './json';
@@ -0,0 +1,45 @@
1
+ import type { C15TOptions } from '~/types';
2
+ import { isTest } from './env';
3
+
4
+ /**
5
+ * Gets the client IP address from request headers
6
+ *
7
+ * @param req - The request object or headers
8
+ * @param options - C15T options containing IP address configuration
9
+ * @returns The client IP address or null if tracking is disabled
10
+ */
11
+ export function getIp(
12
+ req: Request | Headers,
13
+ options: C15TOptions
14
+ ): string | null {
15
+ if (options.advanced?.ipAddress?.disableIpTracking) {
16
+ return null;
17
+ }
18
+ const testIP = '127.0.0.1';
19
+ if (isTest) {
20
+ return testIP;
21
+ }
22
+ const ipHeaders = options.advanced?.ipAddress?.ipAddressHeaders;
23
+ const keys = ipHeaders || [
24
+ 'x-client-ip',
25
+ 'x-forwarded-for',
26
+ 'cf-connecting-ip',
27
+ 'fastly-client-ip',
28
+ 'x-real-ip',
29
+ 'x-cluster-client-ip',
30
+ 'x-forwarded',
31
+ 'forwarded-for',
32
+ 'forwarded',
33
+ ];
34
+ const headers = req instanceof Request ? req.headers : req;
35
+ for (const key of keys) {
36
+ const value = headers.get(key);
37
+ if (value) {
38
+ const ip = value.split(',')[0]?.trim();
39
+ if (ip) {
40
+ return ip;
41
+ }
42
+ }
43
+ }
44
+ return null;
45
+ }
@@ -0,0 +1,19 @@
1
+ import type { SuperJSONValue } from 'node_modules/superjson/dist/types';
2
+ import superjson from 'superjson';
3
+ /**
4
+ * Parse a JSON string using SuperJSON
5
+ * @param json - The JSON string to parse
6
+ * @returns The parsed JSON value
7
+ */
8
+ export function parseJson(json: SuperJSONValue) {
9
+ return superjson.parse(json);
10
+ }
11
+
12
+ /**
13
+ * Stringify a value using SuperJSON
14
+ * @param value - The value to stringify
15
+ * @returns The stringified value
16
+ */
17
+ export function stringifyJson(value: SuperJSONValue) {
18
+ return superjson.stringify(value);
19
+ }
@@ -0,0 +1,252 @@
1
+ /**
2
+ * Represents the available log severity levels
3
+ *
4
+ * These levels determine the priority and visibility of log messages.
5
+ * The order from highest to lowest severity is typically:
6
+ * error > warn > info > success > debug
7
+ */
8
+ export type LogLevel = 'info' | 'success' | 'warn' | 'error' | 'debug';
9
+
10
+ /**
11
+ * Array of all available log levels in order of importance
12
+ *
13
+ * This const array ensures type safety when working with log levels
14
+ * and provides a reference for level comparisons.
15
+ */
16
+ export const levels = ['info', 'success', 'warn', 'error', 'debug'] as const;
17
+
18
+ /**
19
+ * Determines if a log message should be published based on configured log level
20
+ *
21
+ * @param currentLogLevel - The configured log level threshold for the logger
22
+ * @param logLevel - The level of the message being evaluated
23
+ * @returns Boolean indicating whether the message should be published
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * // Only publish if error level is at or above the current log level
28
+ * if (shouldPublishLog('warn', 'error')) {
29
+ * // This will return true as error is more severe than warn
30
+ * }
31
+ * ```
32
+ */
33
+ export function shouldPublishLog(
34
+ currentLogLevel: LogLevel,
35
+ logLevel: LogLevel
36
+ ): boolean {
37
+ return levels.indexOf(logLevel) <= levels.indexOf(currentLogLevel);
38
+ }
39
+
40
+ /**
41
+ * Configuration interface for logger instances
42
+ *
43
+ * Provides options to customize logger behavior including
44
+ * disabling logs, setting log levels, and custom log handlers.
45
+ */
46
+ export interface Logger {
47
+ /**
48
+ * Whether logging is disabled
49
+ *
50
+ * When true, no logs will be published regardless of log level
51
+ */
52
+ disabled?: boolean;
53
+
54
+ /**
55
+ * The minimum log level to publish
56
+ *
57
+ * Only logs with this level or higher severity will be published
58
+ * Note that 'success' is excluded as it's typically handled as 'info'
59
+ */
60
+ level?: Exclude<LogLevel, 'success'>;
61
+
62
+ /**
63
+ * Custom log handler function
64
+ *
65
+ * When provided, this function will be called instead of console methods
66
+ *
67
+ * @param level - The severity level of the log message
68
+ * @param message - The message to log
69
+ * @param args - Additional data to include in the log
70
+ */
71
+ log?: (
72
+ level: Exclude<LogLevel, 'success'>,
73
+ message: string,
74
+ ...args: unknown[]
75
+ ) => void;
76
+ }
77
+
78
+ /**
79
+ * Type representing the parameters for log handlers
80
+ *
81
+ * This utility type extracts parameter types from the Logger.log function,
82
+ * excluding the first parameter (log level).
83
+ */
84
+ export type LogHandlerParams = Parameters<NonNullable<Logger['log']>> extends [
85
+ LogLevel,
86
+ ...infer Rest,
87
+ ]
88
+ ? Rest
89
+ : never;
90
+
91
+ /**
92
+ * ANSI color codes for terminal output formatting
93
+ *
94
+ * Used to add color and styling to log messages in terminal environments
95
+ *
96
+ * @internal
97
+ */
98
+ const colors = {
99
+ reset: '\x1b[0m',
100
+ bright: '\x1b[1m',
101
+ dim: '\x1b[2m',
102
+ underscore: '\x1b[4m',
103
+ blink: '\x1b[5m',
104
+ reverse: '\x1b[7m',
105
+ hidden: '\x1b[8m',
106
+ fg: {
107
+ black: '\x1b[30m',
108
+ red: '\x1b[31m',
109
+ green: '\x1b[32m',
110
+ yellow: '\x1b[33m',
111
+ blue: '\x1b[34m',
112
+ magenta: '\x1b[35m',
113
+ cyan: '\x1b[36m',
114
+ white: '\x1b[37m',
115
+ },
116
+ bg: {
117
+ black: '\x1b[40m',
118
+ red: '\x1b[41m',
119
+ green: '\x1b[42m',
120
+ yellow: '\x1b[43m',
121
+ blue: '\x1b[44m',
122
+ magenta: '\x1b[45m',
123
+ cyan: '\x1b[46m',
124
+ white: '\x1b[47m',
125
+ },
126
+ };
127
+
128
+ /**
129
+ * Mapping of log levels to their corresponding colors
130
+ *
131
+ * @internal
132
+ */
133
+ const levelColors: Record<LogLevel, string> = {
134
+ info: colors.fg.blue,
135
+ success: colors.fg.green,
136
+ warn: colors.fg.yellow,
137
+ error: colors.fg.red,
138
+ debug: colors.fg.magenta,
139
+ };
140
+
141
+ /**
142
+ * Formats a log message with timestamp, level indicator, and styling
143
+ *
144
+ * @param level - The severity level of the message
145
+ * @param message - The message content to format
146
+ * @returns The formatted message string with ANSI color codes
147
+ *
148
+ * @internal
149
+ */
150
+ const formatMessage = (level: LogLevel, message: string): string => {
151
+ const timestamp = new Date().toISOString();
152
+ return `${colors.dim}${timestamp}${colors.reset} ${
153
+ levelColors[level]
154
+ }${level.toUpperCase()}${colors.reset} ${colors.bright}[c15t]:${
155
+ colors.reset
156
+ } ${message}`;
157
+ };
158
+
159
+ /**
160
+ * Creates a configured logger instance with methods for each log level
161
+ *
162
+ * @param options - Configuration options for the logger
163
+ * @returns An object with methods for each log level
164
+ *
165
+ * @example
166
+ * ```ts
167
+ * // Create a logger that only shows warnings and errors
168
+ * const logger = createLogger({ level: 'warn' });
169
+ *
170
+ * // These will be output
171
+ * logger.error('This is an error');
172
+ * logger.warn('This is a warning');
173
+ *
174
+ * // These will be suppressed
175
+ * logger.info('This info won\'t be shown');
176
+ * logger.debug('This debug message won\'t be shown');
177
+ * ```
178
+ */
179
+ export const createLogger = (
180
+ options?: Logger
181
+ ): Record<LogLevel, (...params: LogHandlerParams) => void> => {
182
+ const enabled = options?.disabled !== true;
183
+ const logLevel = options?.level ?? 'error';
184
+
185
+ /**
186
+ * Internal function that handles the actual logging logic
187
+ *
188
+ * @param level - The severity level of the log
189
+ * @param message - The message to log
190
+ * @param args - Additional data to include in the log
191
+ *
192
+ * @internal
193
+ */
194
+ const LogFunc = (
195
+ level: LogLevel,
196
+ message: string,
197
+ args: unknown[] = []
198
+ ): void => {
199
+ if (!enabled || !shouldPublishLog(logLevel, level)) {
200
+ return;
201
+ }
202
+
203
+ const formattedMessage = formatMessage(level, message);
204
+
205
+ if (!options || typeof options.log !== 'function') {
206
+ if (level === 'error') {
207
+ // biome-ignore lint/suspicious/noConsole: Logger implementation
208
+ console.error(formattedMessage, ...args);
209
+ } else if (level === 'warn') {
210
+ // biome-ignore lint/suspicious/noConsole: Logger implementation
211
+ console.warn(formattedMessage, ...args);
212
+ } else if (level === 'info') {
213
+ // biome-ignore lint/suspicious/noConsole: Logger implementation
214
+ // biome-ignore lint/suspicious/noConsoleLog: Logger implementation
215
+ console.log(formattedMessage, ...args);
216
+ } else if (level === 'debug') {
217
+ // biome-ignore lint/suspicious/noConsole: Logger implementation
218
+ console.debug(formattedMessage, ...args);
219
+ } else if (level === 'success') {
220
+ // biome-ignore lint/suspicious/noConsole: Logger implementation
221
+ // biome-ignore lint/suspicious/noConsoleLog: Logger implementation
222
+ console.log(formattedMessage, ...args);
223
+ }
224
+ return;
225
+ }
226
+
227
+ options.log(level === 'success' ? 'info' : level, message, ...args);
228
+ };
229
+
230
+ return Object.fromEntries(
231
+ levels.map((level) => [
232
+ level,
233
+ (...[message, ...args]: LogHandlerParams) =>
234
+ LogFunc(level, message, args),
235
+ ])
236
+ ) as Record<LogLevel, (...params: LogHandlerParams) => void>;
237
+ };
238
+
239
+ /**
240
+ * Default logger instance with standard configuration
241
+ *
242
+ * Ready-to-use logger with default settings (logs errors only)
243
+ *
244
+ * @example
245
+ * ```ts
246
+ * import { logger } from './logger';
247
+ *
248
+ * logger.error('Something went wrong');
249
+ * logger.info('This won\'t be shown with default settings');
250
+ * ```
251
+ */
252
+ export const logger = createLogger();
@@ -0,0 +1,194 @@
1
+ import { BASE_ERROR_CODES, C15TError } from '~/error';
2
+ import { env } from '../utils/env';
3
+
4
+ /**
5
+ * Regular expression to match trailing slashes in URLs
6
+ *
7
+ * @internal
8
+ */
9
+ const TRAILING_SLASHES_REGEX = /\/+$/;
10
+
11
+ /**
12
+ * Checks if a URL contains a path component other than root
13
+ *
14
+ * @param url - The URL to check for path components
15
+ * @returns Boolean indicating whether the URL has a non-root path
16
+ *
17
+ * @throws {C15TError} When the provided URL is invalid
18
+ *
19
+ * @internal
20
+ */
21
+ function checkHasPath(url: string): boolean {
22
+ try {
23
+ const parsedUrl = new URL(url);
24
+ return parsedUrl.pathname !== '/';
25
+ } catch {
26
+ throw new C15TError(
27
+ `Invalid base URL: ${url}. Please provide a valid base URL.`,
28
+ {
29
+ code: BASE_ERROR_CODES.BAD_REQUEST,
30
+ status: 400,
31
+ data: {
32
+ url,
33
+ },
34
+ }
35
+ );
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Appends a path to a URL if it doesn't already have one
41
+ *
42
+ * This function ensures a URL has a path component by adding the
43
+ * specified path if the URL only has a root path.
44
+ *
45
+ * @param url - The base URL to potentially add a path to
46
+ * @param path - The path to append if needed (defaults to '/api/auth')
47
+ * @returns The URL with the path component
48
+ *
49
+ * @throws {C15TError} When the provided URL is invalid
50
+ *
51
+ * @internal
52
+ */
53
+ function withPath(url: string, path = '/api/auth') {
54
+ const hasPath = checkHasPath(url);
55
+ if (hasPath) {
56
+ return url;
57
+ }
58
+ const pathWithSlash = path.startsWith('/') ? path : `/${path}`;
59
+ return `${url.replace(TRAILING_SLASHES_REGEX, '')}${pathWithSlash}`;
60
+ }
61
+
62
+ /**
63
+ * Determines the base URL for API requests
64
+ *
65
+ * Attempts to derive a base URL from multiple sources in the following order:
66
+ * 1. The provided URL parameter
67
+ * 2. Various environment variables
68
+ * 3. Current window location (if in browser)
69
+ *
70
+ * @param url - Optional explicit URL to use
71
+ * @param path - Optional path to append to the URL if it doesn't have one
72
+ * @returns The determined base URL or undefined if unable to determine
73
+ *
74
+ * @throws {C15TError} When the provided URL is invalid
75
+ *
76
+ * @example
77
+ * ```ts
78
+ * // Get the base URL with default path ('/api/auth')
79
+ * const baseUrl = getBaseURL();
80
+ *
81
+ * // Get the base URL with custom path
82
+ * const apiUrl = getBaseURL(undefined, '/api/v2');
83
+ *
84
+ * // Use an explicit URL
85
+ * const customUrl = getBaseURL('https://example.com');
86
+ * ```
87
+ */
88
+ export function getBaseURL(url?: string, path?: string) {
89
+ if (url) {
90
+ return withPath(url, path);
91
+ }
92
+ const fromEnv =
93
+ env.C15T_URL ||
94
+ env.NEXT_PUBLIC_C15T_URL ||
95
+ env.PUBLIC_C15T_URL ||
96
+ env.NUXT_PUBLIC_C15T_URL ||
97
+ env.NUXT_PUBLIC_AUTH_URL ||
98
+ (env.BASE_URL !== '/' ? env.BASE_URL : undefined);
99
+
100
+ if (fromEnv) {
101
+ return withPath(fromEnv, path);
102
+ }
103
+
104
+ if (typeof window !== 'undefined' && window.location) {
105
+ return withPath(window.location.origin, path);
106
+ }
107
+ return undefined;
108
+ }
109
+
110
+ /**
111
+ * Extracts the origin component from a URL
112
+ *
113
+ * @param url - The URL to extract the origin from
114
+ * @returns The origin of the URL or null if invalid
115
+ *
116
+ * @example
117
+ * ```ts
118
+ * getOrigin('https://example.com/path'); // 'https://example.com'
119
+ * getOrigin('invalid-url'); // null
120
+ * ```
121
+ */
122
+ export function getOrigin(url: string) {
123
+ try {
124
+ const parsedUrl = new URL(url);
125
+ return parsedUrl.origin;
126
+ } catch {
127
+ return null;
128
+ }
129
+ }
130
+
131
+ /**
132
+ * Extracts the protocol component from a URL
133
+ *
134
+ * @param url - The URL to extract the protocol from
135
+ * @returns The protocol of the URL (including colon) or null if invalid
136
+ *
137
+ * @example
138
+ * ```ts
139
+ * getProtocol('https://example.com'); // 'https:'
140
+ * getProtocol('http://example.com'); // 'http:'
141
+ * getProtocol('invalid-url'); // null
142
+ * ```
143
+ */
144
+ export function getProtocol(url: string) {
145
+ try {
146
+ const parsedUrl = new URL(url);
147
+ return parsedUrl.protocol;
148
+ } catch {
149
+ return null;
150
+ }
151
+ }
152
+
153
+ /**
154
+ * Checks if a string is a valid URL with a protocol
155
+ *
156
+ * Determines if the URL includes a protocol component (e.g., 'http://', 'https://'),
157
+ * which indicates it's a fully qualified URL rather than a relative path.
158
+ *
159
+ * @param url - The URL string to check
160
+ * @returns Boolean indicating whether the URL includes a protocol
161
+ *
162
+ * @example
163
+ * ```ts
164
+ * checkURLValidity('https://example.com'); // true
165
+ * checkURLValidity('example.com'); // false (no protocol)
166
+ * ```
167
+ */
168
+ export const checkURLValidity = (url: string) => {
169
+ const urlPattern = url.includes('://');
170
+ return urlPattern;
171
+ };
172
+
173
+ /**
174
+ * Extracts the host component from a URL
175
+ *
176
+ * If the URL is a fully qualified URL with a protocol, it parses the host correctly.
177
+ * If not, it assumes the entire string is the host.
178
+ *
179
+ * @param url - The URL to extract the host from
180
+ * @returns The host component of the URL
181
+ *
182
+ * @example
183
+ * ```ts
184
+ * getHost('https://example.com/path'); // 'example.com'
185
+ * getHost('example.com'); // 'example.com'
186
+ * ```
187
+ */
188
+ export function getHost(url: string) {
189
+ if (url.includes('://')) {
190
+ const parsedUrl = new URL(url);
191
+ return parsedUrl.host;
192
+ }
193
+ return url;
194
+ }