@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,567 @@
1
+ /**
2
+ * React integration for c15t consent management system
3
+ *
4
+ * This module provides React hooks and state management for the c15t consent system.
5
+ * It implements a lightweight store and hooks for integrating consent management
6
+ * into React applications without requiring specific React dependencies.
7
+ *
8
+ * The implementation is designed to work in various React environments and can
9
+ * also function in non-React environments by providing a fallback pattern.
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * // Initialize in your app
14
+ * import { createConsentClient } from '@c15t/integrations/react';
15
+ *
16
+ * const consentClient = createConsentClient({
17
+ * baseUrl: '/api/c15t',
18
+ * refreshInterval: 60000, // Check every minute
19
+ * });
20
+ *
21
+ * // Use in components
22
+ * function ConsentBanner() {
23
+ * const { isLoading, hasConsented, acceptAll, declineAll } = consentClient.useConsent();
24
+ *
25
+ * if (isLoading) return <div>Loading...</div>;
26
+ * if (hasConsented) return null;
27
+ *
28
+ * return (
29
+ * <div className="consent-banner">
30
+ * <h2>We use cookies</h2>
31
+ * <button onClick={acceptAll}>Accept All</button>
32
+ * <button onClick={declineAll}>Decline All</button>
33
+ * </div>
34
+ * );
35
+ * }
36
+ * ```
37
+ */
38
+
39
+ /**
40
+ * Type definition for a React-like hook function
41
+ *
42
+ * This type facilitates compatibility with React's hooks pattern
43
+ * without requiring a direct dependency on React.
44
+ *
45
+ * @template T The return type of the hook
46
+ */
47
+ type ReactHook<T> = () => T;
48
+
49
+ /**
50
+ * State for the consent management store
51
+ *
52
+ * Contains the current consent status, preferences, and loading state.
53
+ */
54
+ interface ConsentState {
55
+ /**
56
+ * Whether consent data is currently being loaded
57
+ */
58
+ isLoading: boolean;
59
+
60
+ /**
61
+ * Whether the subject has provided consent
62
+ * - `true`: Subject has provided at least one consent
63
+ * - `false`: Subject has explicitly declined all consent
64
+ * - `null`: Consent status hasn't been determined yet
65
+ */
66
+ hasConsented: boolean | null;
67
+
68
+ /**
69
+ * Map of consent purposes to their consent status
70
+ * Key is the consentPurpose ID, value is a boolean indicating consent
71
+ */
72
+ preferences: Record<string, boolean> | null;
73
+
74
+ /**
75
+ * Error that occurred during consent operations
76
+ */
77
+ error: Error | null;
78
+
79
+ /**
80
+ * Timestamp of when consent was last updated
81
+ */
82
+ lastUpdated: number | null;
83
+ }
84
+
85
+ /**
86
+ * Actions that can be performed on the consent store
87
+ *
88
+ * These actions allow modifying the consent state and interacting
89
+ * with the consent management backend.
90
+ */
91
+ interface ConsentActions {
92
+ /**
93
+ * Set specific consent preferences
94
+ *
95
+ * @param preferences - Map of consentPurpose IDs to consent values
96
+ * @returns Promise that resolves when consent is updated
97
+ */
98
+ setConsent: (preferences: Record<string, boolean>) => Promise<void>;
99
+
100
+ /**
101
+ * Accept all consent purposes
102
+ * Uses the default preferences defined in configuration
103
+ *
104
+ * @returns Promise that resolves when consent is updated
105
+ */
106
+ acceptAll: () => Promise<void>;
107
+
108
+ /**
109
+ * Decline all consent purposes
110
+ * Sets all purposes to `false`
111
+ *
112
+ * @returns Promise that resolves when consent is updated
113
+ */
114
+ declineAll: () => Promise<void>;
115
+
116
+ /**
117
+ * Refresh the consent status from the server
118
+ *
119
+ * @returns Promise that resolves when consent status is refreshed
120
+ */
121
+ refreshStatus: () => Promise<void>;
122
+
123
+ /**
124
+ * Clear any error state in the store
125
+ */
126
+ clearError: () => void;
127
+ }
128
+
129
+ /**
130
+ * Combined type for the consent store containing both state and actions
131
+ */
132
+ type ConsentStore = ConsentState & ConsentActions;
133
+
134
+ /**
135
+ * Configuration options for the c15t React client
136
+ */
137
+ interface c15tClientConfig {
138
+ /**
139
+ * Base URL for API endpoints
140
+ * @default '/api/c15t'
141
+ */
142
+ baseUrl?: string;
143
+
144
+ /**
145
+ * Auto-refresh interval in milliseconds
146
+ * Set to 0 to disable auto-refresh
147
+ * @default 0 (disabled)
148
+ */
149
+ refreshInterval?: number;
150
+
151
+ /**
152
+ * Default preferences to use for acceptAll action
153
+ * These values determine what gets set when a subject accepts all consent
154
+ *
155
+ * @example
156
+ * ```ts
157
+ * {
158
+ * analytics: true,
159
+ * marketing: true,
160
+ * preferences: true
161
+ * }
162
+ * ```
163
+ */
164
+ defaultPreferences?: {
165
+ analytics?: boolean;
166
+ marketing?: boolean;
167
+ preferences?: boolean;
168
+ [key: string]: boolean | undefined;
169
+ };
170
+ }
171
+
172
+ /**
173
+ * Interface for basic store operations
174
+ *
175
+ * Provides a minimal store API similar to common state management libraries
176
+ *
177
+ * @template T The type of state stored in the store
178
+ */
179
+ interface StoreAPI<T> {
180
+ /**
181
+ * Get the current state
182
+ * @returns The current state
183
+ */
184
+ getState: () => T;
185
+
186
+ /**
187
+ * Update the state
188
+ * @param partial - Partial state or function that returns partial state
189
+ */
190
+ setState: (partial: Partial<T> | ((state: T) => Partial<T>)) => void;
191
+
192
+ /**
193
+ * Subscribe to state changes
194
+ * @param listener - Function to call when state changes
195
+ * @returns Unsubscribe function
196
+ */
197
+ subscribe: (listener: (state: T) => void) => () => void;
198
+ }
199
+
200
+ /**
201
+ * Result of the useConditionalContent hook
202
+ */
203
+ interface ConditionalContentResult {
204
+ /**
205
+ * Whether consent data is currently loading
206
+ */
207
+ isLoading: boolean;
208
+
209
+ /**
210
+ * Whether the subject has given any consent
211
+ */
212
+ hasConsented: boolean | null;
213
+
214
+ /**
215
+ * Whether content can be shown based on required consent
216
+ */
217
+ canShow: boolean;
218
+
219
+ /**
220
+ * Current consent preferences
221
+ */
222
+ preferences: Record<string, boolean> | null;
223
+ }
224
+
225
+ /**
226
+ * Result of the createConsentClient function
227
+ */
228
+ interface ConsentClient {
229
+ /**
230
+ * Store for managing consent state
231
+ */
232
+ store: StoreAPI<ConsentStore>;
233
+
234
+ /**
235
+ * Hook for accessing consent state and actions
236
+ */
237
+ useConsent: ReactHook<ConsentStore>;
238
+
239
+ /**
240
+ * Hook for conditionally showing content based on consent
241
+ */
242
+ useConditionalContent: (
243
+ requiredConsent: string | string[]
244
+ ) => ConditionalContentResult;
245
+ }
246
+
247
+ /**
248
+ * Creates a c15t client for React applications
249
+ *
250
+ * This function creates a store and hooks for managing consent in React applications.
251
+ * It provides a lightweight implementation that works in various React environments
252
+ * and degrades gracefully in non-React environments.
253
+ *
254
+ * @example
255
+ * ```tsx
256
+ * // Create a client
257
+ * const client = createConsentClient({
258
+ * baseUrl: '/api/c15t',
259
+ * refreshInterval: 60000,
260
+ * defaultPreferences: {
261
+ * analytics: true,
262
+ * marketing: false
263
+ * }
264
+ * });
265
+ *
266
+ * // Use in a component
267
+ * function ConsentStatus() {
268
+ * const { preferences, refreshStatus } = client.useConsent();
269
+ *
270
+ * return (
271
+ * <div>
272
+ * <h2>Your consent preferences:</h2>
273
+ * <pre>{JSON.stringify(preferences, null, 2)}</pre>
274
+ * <button onClick={refreshStatus}>Refresh</button>
275
+ * </div>
276
+ * );
277
+ * }
278
+ * ```
279
+ *
280
+ * @param config - Client configuration options
281
+ * @returns A client object with store and hooks
282
+ */
283
+ export function createConsentClient(
284
+ config: c15tClientConfig = {}
285
+ ): ConsentClient {
286
+ const {
287
+ baseUrl = '/api/c15t',
288
+ refreshInterval = 0,
289
+ defaultPreferences = {
290
+ analytics: true,
291
+ marketing: true,
292
+ preferences: true,
293
+ },
294
+ } = config;
295
+
296
+ /**
297
+ * Create a basic store implementation
298
+ *
299
+ * This is a lightweight implementation of a store pattern similar to
300
+ * what libraries like Zustand provide, but without dependencies.
301
+ *
302
+ * @template T The type of state to store
303
+ * @param createState - Function that defines the initial state and actions
304
+ * @returns A store API with getState, setState, and subscribe methods
305
+ */
306
+ function createStore<TState extends object>(
307
+ createState: (
308
+ set: (
309
+ partial: Partial<TState> | ((state: TState) => Partial<TState>)
310
+ ) => void,
311
+ get: () => TState
312
+ ) => TState
313
+ ): StoreAPI<TState> {
314
+ let state: TState;
315
+ const listeners = new Set<(state: TState) => void>();
316
+
317
+ const setState = (
318
+ partial: Partial<TState> | ((state: TState) => Partial<TState>)
319
+ ) => {
320
+ const nextState =
321
+ typeof partial === 'function'
322
+ ? { ...state, ...partial(state) }
323
+ : { ...state, ...partial };
324
+
325
+ state = nextState;
326
+ // Replace forEach with for...of to fix linter error
327
+ for (const listener of listeners) {
328
+ listener(state);
329
+ }
330
+ };
331
+
332
+ const getState = () => state;
333
+
334
+ const subscribe = (listener: (state: TState) => void) => {
335
+ listeners.add(listener);
336
+ return () => listeners.delete(listener);
337
+ };
338
+
339
+ state = createState(setState, getState);
340
+
341
+ return { getState, setState, subscribe };
342
+ }
343
+
344
+ // Create a store for consent state
345
+ const consentStore = createStore<ConsentStore>((set, get) => ({
346
+ // Initial state
347
+ isLoading: true,
348
+ hasConsented: null,
349
+ preferences: null,
350
+ error: null,
351
+ lastUpdated: null,
352
+
353
+ // Actions
354
+ /**
355
+ * Update consent preferences for specific purposes
356
+ *
357
+ * @param preferences - Map of consentPurpose IDs to consent values
358
+ * @returns Promise that resolves when consent is updated
359
+ */
360
+ setConsent: async (preferences: Record<string, boolean>) => {
361
+ try {
362
+ set({ isLoading: true, error: null });
363
+
364
+ const response = await fetch(`${baseUrl}/set`, {
365
+ method: 'POST',
366
+ headers: {
367
+ 'Content-Type': 'application/json',
368
+ },
369
+ body: JSON.stringify({ preferences }),
370
+ credentials: 'same-origin',
371
+ });
372
+
373
+ if (!response.ok) {
374
+ throw new Error(`Failed to set consent: ${response.statusText}`);
375
+ }
376
+
377
+ const result = await response.json();
378
+
379
+ set({
380
+ isLoading: false,
381
+ hasConsented: true,
382
+ preferences: result.preferences || preferences,
383
+ lastUpdated: Date.now(),
384
+ });
385
+
386
+ return result;
387
+ } catch (error) {
388
+ set({
389
+ isLoading: false,
390
+ error: error instanceof Error ? error : new Error(String(error)),
391
+ });
392
+ throw error;
393
+ }
394
+ },
395
+
396
+ /**
397
+ * Accept all consent purposes using the default preferences
398
+ *
399
+ * @returns Promise that resolves when consent is updated
400
+ */
401
+ acceptAll: async () => {
402
+ // Filter out any undefined values from defaultPreferences
403
+ const cleanPreferences = Object.entries(defaultPreferences)
404
+ .filter(([_, value]) => value !== undefined)
405
+ .reduce(
406
+ (acc, [key, value]) => {
407
+ acc[key] = value as boolean;
408
+ return acc;
409
+ },
410
+ {} as Record<string, boolean>
411
+ );
412
+
413
+ return await get().setConsent(cleanPreferences);
414
+ },
415
+
416
+ /**
417
+ * Decline all consent purposes
418
+ *
419
+ * @returns Promise that resolves when consent is updated
420
+ */
421
+ declineAll: async () => {
422
+ const minimalConsent = Object.keys(defaultPreferences).reduce(
423
+ (acc, key) => {
424
+ acc[key] = false;
425
+ return acc;
426
+ },
427
+ {} as Record<string, boolean>
428
+ );
429
+
430
+ return await get().setConsent(minimalConsent);
431
+ },
432
+
433
+ /**
434
+ * Refresh consent status from the server
435
+ *
436
+ * @returns Promise that resolves when consent status is refreshed
437
+ */
438
+ refreshStatus: async () => {
439
+ try {
440
+ set({ isLoading: true, error: null });
441
+
442
+ const response = await fetch(`${baseUrl}/status`, {
443
+ credentials: 'same-origin',
444
+ });
445
+
446
+ if (!response.ok) {
447
+ throw new Error(
448
+ `Failed to get consent status: ${response.statusText}`
449
+ );
450
+ }
451
+
452
+ const { consented, preferences } = await response.json();
453
+
454
+ set({
455
+ isLoading: false,
456
+ hasConsented: consented,
457
+ preferences: preferences,
458
+ lastUpdated: Date.now(),
459
+ });
460
+ } catch (error) {
461
+ set({
462
+ isLoading: false,
463
+ error: error instanceof Error ? error : new Error(String(error)),
464
+ });
465
+ }
466
+ },
467
+
468
+ /**
469
+ * Clear any error state
470
+ */
471
+ clearError: () => {
472
+ set({ error: null });
473
+ },
474
+ }));
475
+
476
+ /**
477
+ * Hook for accessing consent state and actions
478
+ *
479
+ * This hook provides access to the current consent state and
480
+ * actions to update consent preferences. It initiates loading
481
+ * of consent status and sets up auto-refresh if configured.
482
+ *
483
+ * @returns Current consent state and actions
484
+ */
485
+ const useConsent: ReactHook<ConsentStore> = () => {
486
+ const storeState = consentStore.getState();
487
+
488
+ // If in a non-React environment or SSR, just return the current state
489
+ if (typeof window === 'undefined') {
490
+ return storeState;
491
+ }
492
+
493
+ // For browser environments without full React
494
+ // We return a simple object with the current state
495
+ setTimeout(() => {
496
+ // Initialize by refreshing status after initial render
497
+ if (storeState.hasConsented === null && !storeState.isLoading) {
498
+ storeState.refreshStatus();
499
+ }
500
+
501
+ // Set up refresh interval if configured
502
+ if (refreshInterval > 0) {
503
+ const intervalId = setInterval(() => {
504
+ storeState.refreshStatus();
505
+ }, refreshInterval);
506
+
507
+ // Cleanup on window unload
508
+ window.addEventListener('unload', () => clearInterval(intervalId));
509
+ }
510
+ }, 0);
511
+
512
+ return storeState;
513
+ };
514
+
515
+ /**
516
+ * Hook to conditionally render content based on consent
517
+ *
518
+ * This hook checks if the subject has consented to specific purposes
519
+ * and returns a boolean indicating whether the content can be shown.
520
+ *
521
+ * @example
522
+ * ```tsx
523
+ * function AnalyticsComponent() {
524
+ * const { canShow, isLoading } = client.useConditionalContent('analytics');
525
+ *
526
+ * if (isLoading) return <div>Loading...</div>;
527
+ * if (!canShow) return null;
528
+ *
529
+ * return <div>Analytics content is shown because you consented!</div>;
530
+ * }
531
+ * ```
532
+ *
533
+ * @param requiredConsent - Required consent consentPurpose(s) to show content
534
+ * @returns Object with loading state, consent status, and whether content can be shown
535
+ */
536
+ const useConditionalContent = (
537
+ requiredConsent: string | string[]
538
+ ): ConditionalContentResult => {
539
+ const store = useConsent();
540
+
541
+ const canShow = () => {
542
+ if (store.isLoading || !store.hasConsented || !store.preferences) {
543
+ return false;
544
+ }
545
+
546
+ if (Array.isArray(requiredConsent)) {
547
+ return requiredConsent.every((key) => store.preferences?.[key]);
548
+ }
549
+
550
+ return !!store.preferences[requiredConsent];
551
+ };
552
+
553
+ return {
554
+ isLoading: store.isLoading,
555
+ hasConsented: store.hasConsented,
556
+ canShow: canShow(),
557
+ preferences: store.preferences,
558
+ };
559
+ };
560
+
561
+ // Return the client with store and hooks
562
+ return {
563
+ store: consentStore,
564
+ useConsent,
565
+ useConditionalContent,
566
+ };
567
+ }