@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,328 @@
1
+ import { z } from 'zod';
2
+ import type { Adapter } from '~/db/adapters/types';
3
+ import type { Consent, ConsentRecord } from '~/db/schema';
4
+ import { BASE_ERROR_CODES, C15TError } from '~/error';
5
+ import type { C15TContext } from '../../types';
6
+ import { createAuthEndpoint } from '../call';
7
+
8
+ const ConsentType = z.enum([
9
+ 'cookie_banner',
10
+ 'privacy_policy',
11
+ 'dpa',
12
+ 'terms_of_service',
13
+ 'marketing_communications',
14
+ 'age_verification',
15
+ 'other',
16
+ ]);
17
+
18
+ export type ConsentType = z.infer<typeof ConsentType>;
19
+
20
+ // Base schema for all consent types
21
+ const baseConsentSchema = z.object({
22
+ subjectId: z.string().optional(),
23
+ externalSubjectId: z.string().optional(),
24
+ domain: z.string(),
25
+ type: ConsentType,
26
+ metadata: z.record(z.unknown()).optional(),
27
+ });
28
+
29
+ // Cookie banner needs preferences
30
+ const cookieBannerSchema = baseConsentSchema.extend({
31
+ type: z.literal('cookie_banner'),
32
+ preferences: z.record(z.boolean()),
33
+ });
34
+
35
+ // Policy based consent just needs the policy ID
36
+ const policyBasedSchema = baseConsentSchema.extend({
37
+ type: z.enum(['privacy_policy', 'dpa', 'terms_of_service']),
38
+ policyId: z.string().optional(),
39
+ preferences: z.record(z.boolean()).optional(),
40
+ });
41
+
42
+ // Other consent types just need the base fields
43
+ const otherConsentSchema = baseConsentSchema.extend({
44
+ type: z.enum(['marketing_communications', 'age_verification', 'other']),
45
+ preferences: z.record(z.boolean()).optional(),
46
+ });
47
+
48
+ const setConsentSchema = z.discriminatedUnion('type', [
49
+ cookieBannerSchema,
50
+ policyBasedSchema,
51
+ otherConsentSchema,
52
+ ]);
53
+
54
+ export interface SetConsentResponse {
55
+ success: boolean;
56
+ consentId: string;
57
+ timestamp: string;
58
+ }
59
+
60
+ /**
61
+ * Endpoint for creating a new consent record.
62
+ *
63
+ * This endpoint allows clients to create a new consent record for a subject. It supports
64
+ * different types of consent:
65
+ * - cookie_banner: For cookie preferences
66
+ * - privacy_policy: For privacy policy acceptance
67
+ * - dpa: For data processing agreement acceptance
68
+ * - terms_of_service: For terms of service acceptance
69
+ * - marketing_communications: For marketing preferences
70
+ * - age_verification: For age verification
71
+ * - other: For other types of consent
72
+ *
73
+ * @endpoint POST /consents
74
+ * @requestExample
75
+ * ```json
76
+ * // Cookie Banner
77
+ * {
78
+ * "type": "cookie_banner",
79
+ * "domain": "example.com",
80
+ * "preferences": {
81
+ * "experience": true,
82
+ * "functionality": true,
83
+ * "marketing": true,
84
+ * "measurement": false,
85
+ * "necessary": true
86
+ * },
87
+ * "metadata": {
88
+ * "source": "banner",
89
+ * "displayedTo": "subject",
90
+ * "language": "en-US"
91
+ * }
92
+ * }
93
+ *
94
+ * // Privacy Policy
95
+ * {
96
+ * "type": "privacy_policy",
97
+ * "subjectId": "sub_x1pftyoufsm7xgo1kv",
98
+ * "domain": "example.com",
99
+ * "policyId": "pol_xyz789",
100
+ * "metadata": {
101
+ * "source": "account_creation",
102
+ * "acceptanceMethod": "checkbox"
103
+ * }
104
+ * }
105
+ * ```
106
+ */
107
+ export const setConsent = createAuthEndpoint(
108
+ '/consent/set',
109
+ {
110
+ method: 'POST',
111
+ body: setConsentSchema,
112
+ },
113
+ async (ctx) => {
114
+ try {
115
+ const body = setConsentSchema.parse(ctx.body);
116
+ const { type, subjectId, externalSubjectId, domain, metadata } = body;
117
+ const { registry, adapter } = ctx.context as C15TContext;
118
+
119
+ // Find or create subject
120
+ const subject = await registry.findOrCreateSubject({
121
+ subjectId,
122
+ externalSubjectId,
123
+ ipAddress: ctx.context.ipAddress || 'unknown',
124
+ });
125
+
126
+ if (!subject) {
127
+ throw new C15TError(
128
+ 'A valid Subject ID is required to proceed with the consent operation. Please provide a Subject ID.',
129
+ {
130
+ code: BASE_ERROR_CODES.MISSING_REQUIRED_PARAMETER,
131
+ status: 400,
132
+ }
133
+ );
134
+ }
135
+
136
+ // Find or create domain
137
+ const domainRecord = await registry.findOrCreateDomain(domain);
138
+
139
+ const now = new Date();
140
+ let policyId: string | undefined;
141
+ let purposeIds: string[] = [];
142
+
143
+ // Handle policy creation/finding
144
+ if ('policyId' in body) {
145
+ const { policyId: pid } = body;
146
+ policyId = pid;
147
+
148
+ if (!policyId) {
149
+ throw new C15TError(
150
+ 'A valid Policy ID is required to proceed with the consent operation. Please provide a Policy ID.',
151
+ {
152
+ code: BASE_ERROR_CODES.MISSING_REQUIRED_PARAMETER,
153
+ status: 400,
154
+ }
155
+ );
156
+ }
157
+
158
+ // Verify the policy exists and is active
159
+ const policy = await registry.findConsentPolicyById(policyId);
160
+ if (!policy) {
161
+ throw new C15TError(
162
+ 'The specified consent policy could not be found. Please verify the policy ID and try again.',
163
+ {
164
+ code: BASE_ERROR_CODES.NOT_FOUND,
165
+ status: 404,
166
+ }
167
+ );
168
+ }
169
+ if (!policy.isActive) {
170
+ throw new C15TError(
171
+ 'The consent policy is no longer active and cannot be used. Please use an active policy version.',
172
+ {
173
+ code: BASE_ERROR_CODES.CONFLICT,
174
+ status: 409,
175
+ }
176
+ );
177
+ }
178
+ } else {
179
+ const policy = await registry.findOrCreatePolicy(
180
+ type.replace('_', ' ')
181
+ );
182
+ if (!policy) {
183
+ throw new C15TError(
184
+ 'Failed to create or find the required policy. Please try again later or contact support if the issue persists.',
185
+ {
186
+ code: BASE_ERROR_CODES.FAILED_TO_CREATE_PURPOSE,
187
+ status: 500,
188
+ }
189
+ );
190
+ }
191
+ policyId = policy.id;
192
+ }
193
+
194
+ // Handle purposes if they exist
195
+ if ('preferences' in body && body.preferences) {
196
+ purposeIds = await Promise.all(
197
+ Object.entries(body.preferences)
198
+ .filter(([_, isConsented]) => isConsented)
199
+ .map(async ([purposeCode]) => {
200
+ let existingPurpose =
201
+ await registry.findConsentPurposeByCode(purposeCode);
202
+ if (!existingPurpose) {
203
+ existingPurpose = await registry.createConsentPurpose({
204
+ code: purposeCode,
205
+ name: purposeCode,
206
+ description: `Auto-created consentPurpose for ${purposeCode}`,
207
+ isActive: true,
208
+ isEssential: false,
209
+ dataCategory: 'functional',
210
+ legalBasis: 'consent',
211
+ createdAt: now,
212
+ updatedAt: now,
213
+ });
214
+ }
215
+ return existingPurpose.id;
216
+ })
217
+ );
218
+ }
219
+
220
+ // Execute all consent-related operations in a transaction
221
+ const result = await adapter.transaction({
222
+ callback: async (tx: Adapter) => {
223
+ // Create consent record
224
+ const consentRecord = (await tx.create({
225
+ model: 'consent',
226
+ data: {
227
+ subjectId: subject.id,
228
+ domainId: domainRecord.id,
229
+ policyId,
230
+ purposeIds,
231
+ status: 'active',
232
+ isActive: true,
233
+ givenAt: now,
234
+ history: [],
235
+ },
236
+ })) as unknown as Consent;
237
+
238
+ // Create record entry
239
+ const record = (await tx.create({
240
+ model: 'consentRecord',
241
+ data: {
242
+ subjectId: subject.id,
243
+ consentId: consentRecord.id,
244
+ actionType: 'consent_given',
245
+ details: metadata,
246
+ createdAt: now,
247
+ },
248
+ })) as unknown as ConsentRecord;
249
+
250
+ // Create audit log entry
251
+ await tx.create({
252
+ model: 'auditLog',
253
+ data: {
254
+ subjectId: subject.id,
255
+ entityType: 'consent',
256
+ entityId: consentRecord.id,
257
+ actionType: 'consent_given',
258
+ details: {
259
+ consentId: consentRecord.id,
260
+ type,
261
+ },
262
+ timestamp: now,
263
+ },
264
+ });
265
+
266
+ return {
267
+ consent: consentRecord,
268
+ record,
269
+ };
270
+ },
271
+ });
272
+
273
+ if (!result || !result.consent || !result.record) {
274
+ throw new C15TError(
275
+ 'Failed to create the consent record. Please try again later or contact support if the issue persists.',
276
+ {
277
+ code: BASE_ERROR_CODES.FAILED_TO_CREATE_CONSENT,
278
+ status: 500,
279
+ }
280
+ );
281
+ }
282
+
283
+ // Return response
284
+ return {
285
+ id: result.consent.id,
286
+ subjectId: subject.id,
287
+ externalSubjectId: subject.externalId ?? undefined,
288
+ domainId: domainRecord.id,
289
+ domain: domainRecord.name,
290
+ type,
291
+ status: result.consent.status,
292
+ recordId: result.record.id,
293
+ metadata,
294
+ givenAt: result.consent.givenAt.toISOString(),
295
+ };
296
+ } catch (error) {
297
+ const context = ctx.context as C15TContext;
298
+ context.logger?.error?.('Error setting consent:', error);
299
+
300
+ if (error instanceof C15TError) {
301
+ throw error;
302
+ }
303
+ if (error instanceof z.ZodError) {
304
+ throw new C15TError(
305
+ 'The consent data provided is invalid. Please ensure all required fields are correctly filled and formatted.',
306
+ {
307
+ code: BASE_ERROR_CODES.BAD_REQUEST,
308
+ status: 400,
309
+ data: {
310
+ details: error.errors,
311
+ },
312
+ }
313
+ );
314
+ }
315
+
316
+ throw new C15TError(
317
+ 'Failed to set consent. Please try again later or contact support if the issue persists.',
318
+ {
319
+ code: BASE_ERROR_CODES.FAILED_TO_CREATE_CONSENT,
320
+ status: 500,
321
+ data: {
322
+ error: error instanceof Error ? error.message : String(error),
323
+ },
324
+ }
325
+ );
326
+ }
327
+ }
328
+ );
@@ -0,0 +1,149 @@
1
+ import { createAuthEndpoint } from '../call';
2
+
3
+ export const showConsentBanner = createAuthEndpoint(
4
+ '/show-consent-banner',
5
+ {
6
+ method: 'GET',
7
+ metadata: {
8
+ openapi: {
9
+ responses: {
10
+ '200': {
11
+ description: 'Cookie Banner Requirement',
12
+ content: {
13
+ 'application/json': {
14
+ schema: {
15
+ type: 'object',
16
+ properties: {
17
+ showConsentBanner: { type: 'boolean' },
18
+ jurisdiction: {
19
+ type: 'object',
20
+ properties: {
21
+ code: { type: 'string' },
22
+ message: { type: 'string' },
23
+ },
24
+ },
25
+ location: {
26
+ type: 'object',
27
+ properties: {
28
+ countryCode: { type: 'string' },
29
+ regionCode: { type: 'string' },
30
+ },
31
+ },
32
+ },
33
+ },
34
+ },
35
+ },
36
+ },
37
+ },
38
+ },
39
+ },
40
+ },
41
+ async (c) => {
42
+ const countryCode =
43
+ c.headers?.get('cf-ipcountry') ||
44
+ c.headers?.get('x-vercel-ip-country') ||
45
+ c.headers?.get('x-amz-cf-ipcountry') ||
46
+ c.headers?.get('x-country-code');
47
+
48
+ const regionCode =
49
+ c.headers?.get('x-vercel-ip-country-region') ||
50
+ c.headers?.get('x-region-code');
51
+ const { showConsentBanner, jurisdictionCode, message } = checkJurisdiction(
52
+ countryCode ?? null
53
+ );
54
+
55
+ return {
56
+ showConsentBanner,
57
+ jurisdiction: {
58
+ code: jurisdictionCode,
59
+ message,
60
+ },
61
+ location: { countryCode, regionCode },
62
+ };
63
+ }
64
+ );
65
+
66
+ function checkJurisdiction(countryCode: string | null) {
67
+ const jurisdictions = {
68
+ EU: new Set([
69
+ 'AT',
70
+ 'BE',
71
+ 'BG',
72
+ 'HR',
73
+ 'CY',
74
+ 'CZ',
75
+ 'DK',
76
+ 'EE',
77
+ 'FI',
78
+ 'FR',
79
+ 'DE',
80
+ 'GR',
81
+ 'HU',
82
+ 'IE',
83
+ 'IT',
84
+ 'LV',
85
+ 'LT',
86
+ 'LU',
87
+ 'MT',
88
+ 'NL',
89
+ 'PL',
90
+ 'PT',
91
+ 'RO',
92
+ 'SK',
93
+ 'SI',
94
+ 'ES',
95
+ 'SE',
96
+ ]),
97
+ EEA: new Set(['IS', 'NO', 'LI']),
98
+ UK: new Set(['GB']),
99
+ CH: new Set(['CH']),
100
+ BR: new Set(['BR']),
101
+ CA: new Set(['CA']),
102
+ AU: new Set(['AU']),
103
+ JP: new Set(['JP']),
104
+ KR: new Set(['KR']),
105
+ };
106
+
107
+ let showConsentBanner = false;
108
+ let jurisdictionCode = 'NONE';
109
+ let message = 'No specific requirements';
110
+
111
+ if (countryCode) {
112
+ if (
113
+ jurisdictions.EU.has(countryCode) ||
114
+ jurisdictions.EEA.has(countryCode) ||
115
+ jurisdictions.UK.has(countryCode)
116
+ ) {
117
+ showConsentBanner = true;
118
+ jurisdictionCode = 'GDPR';
119
+ message = 'GDPR or equivalent regulations require a cookie banner.';
120
+ } else if (jurisdictions.CH.has(countryCode)) {
121
+ showConsentBanner = true;
122
+ jurisdictionCode = 'CH';
123
+ message = 'Switzerland requires similar data protection measures.';
124
+ } else if (jurisdictions.BR.has(countryCode)) {
125
+ showConsentBanner = true;
126
+ jurisdictionCode = 'BR';
127
+ message = "Brazil's LGPD requires consent for cookies.";
128
+ } else if (jurisdictions.CA.has(countryCode)) {
129
+ showConsentBanner = true;
130
+ jurisdictionCode = 'PIPEDA';
131
+ message = 'PIPEDA requires consent for data collection.';
132
+ } else if (jurisdictions.AU.has(countryCode)) {
133
+ showConsentBanner = true;
134
+ jurisdictionCode = 'AU';
135
+ message =
136
+ "Australia's Privacy Act mandates transparency about data collection.";
137
+ } else if (jurisdictions.JP.has(countryCode)) {
138
+ showConsentBanner = true;
139
+ jurisdictionCode = 'APPI';
140
+ message = "Japan's APPI requires consent for data collection.";
141
+ } else if (jurisdictions.KR.has(countryCode)) {
142
+ showConsentBanner = true;
143
+ jurisdictionCode = 'PIPA';
144
+ message = "South Korea's PIPA requires consent for data collection.";
145
+ }
146
+ }
147
+
148
+ return { showConsentBanner, jurisdictionCode, message };
149
+ }
@@ -0,0 +1,62 @@
1
+ import { createAuthEndpoint } from '../call';
2
+
3
+ /**
4
+ * Response type for the status endpoint
5
+ * @public
6
+ */
7
+ export interface StatusResponse {
8
+ status: 'ok' | 'error';
9
+ version: string;
10
+ timestamp: string;
11
+ storage: {
12
+ type: string;
13
+ available: boolean;
14
+ };
15
+ }
16
+
17
+ /**
18
+ * Status endpoint that returns information about the c15t instance.
19
+ *
20
+ * This endpoint provides basic operational information about the c15t instance,
21
+ * including its version, current timestamp, and storage adapter configuration.
22
+ * It can be used for:
23
+ * - Health checks to verify the API is operational
24
+ * - Version verification
25
+ * - Storage adapter verification
26
+ * - Retrieving configuration information about the consent system
27
+ *
28
+ * The endpoint does not require authentication and is accessible via a GET request.
29
+ *
30
+ * @endpoint GET /status
31
+ * @responseExample
32
+ * ```json
33
+ * {
34
+ * "status": "ok",
35
+ * "version": "1.0.0",
36
+ * "timestamp": "2023-04-01T12:34:56.789Z",
37
+ * "storage": {
38
+ * "type": "MemoryAdapter",
39
+ * "available": true
40
+ * }
41
+ * }
42
+ * ```
43
+ */
44
+ export const status = createAuthEndpoint(
45
+ '/status',
46
+ {
47
+ method: 'GET',
48
+ },
49
+ async (ctx) => {
50
+ const response: StatusResponse = {
51
+ status: 'ok',
52
+ version: '1.0.0',
53
+ timestamp: new Date().toISOString(),
54
+ storage: {
55
+ type: ctx.context?.adapter?.id ?? 'Unavailable',
56
+ available: !!ctx.context?.adapter,
57
+ },
58
+ };
59
+
60
+ return response;
61
+ }
62
+ );