@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,219 @@
1
+ import type { Where } from '~/db/adapters/types';
2
+ import { getWithHooks } from '~/db/hooks';
3
+ import type { RegistryContext } from '~/types';
4
+ import type { GenericEndpointContext } from '~/types';
5
+ import { validateEntityOutput } from '../definition';
6
+ import type { Withdrawal } from './schema';
7
+
8
+ /**
9
+ * Creates and returns a set of consent withdrawal adapter methods to interact with the database.
10
+ * These methods provide a consistent interface for creating and querying consentWithdrawal records
11
+ * while applying hooks and enforcing data validation rules.
12
+ *
13
+ * @param adapter - The database adapter used for direct database operations
14
+ * @param ctx - The context object containing the database adapter, hooks, and options
15
+ * @returns An object containing type-safe consent withdrawal operations
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const withdrawalAdapter = createConsentWithdrawalAdapter(
20
+ * databaseAdapter,
21
+ * createWithHooks,
22
+ * c15tOptions
23
+ * );
24
+ *
25
+ * // Create a new consentWithdrawal record
26
+ * const consentWithdrawal = await withdrawalAdapter.createConsentWithdrawal({
27
+ * consentId: 'cns_hadt8w7nngm7xmx2bn',
28
+ * subjectId: 'sub_x1pftyoufsm7xgo1kv',
29
+ * withdrawalReason: 'No longer wish to receive marketing emails',
30
+ * withdrawalMethod: 'subject-initiated'
31
+ * });
32
+ * ```
33
+ */
34
+ export function consentWithdrawalRegistry({
35
+ adapter,
36
+ ...ctx
37
+ }: RegistryContext) {
38
+ const { createWithHooks } = getWithHooks(adapter, ctx);
39
+ return {
40
+ /**
41
+ * Creates a new consent withdrawal record in the database.
42
+ * Automatically sets creation timestamp and applies any
43
+ * configured hooks during the creation process.
44
+ *
45
+ * @param consentWithdrawal - Withdrawal data to create (without id and timestamp)
46
+ * @param context - Optional endpoint context for hooks
47
+ * @returns The created consentWithdrawal record with all fields populated
48
+ * @throws May throw an error if hooks prevent creation or if database operations fail
49
+ */
50
+ createConsentWithdrawal: async (
51
+ consentWithdrawal: Omit<Withdrawal, 'id' | 'createdAt'> &
52
+ Partial<Withdrawal>,
53
+ context?: GenericEndpointContext
54
+ ) => {
55
+ const createdWithdrawal = await createWithHooks({
56
+ data: {
57
+ createdAt: new Date(),
58
+ ...consentWithdrawal,
59
+ },
60
+ model: 'consentWithdrawal',
61
+ customFn: undefined,
62
+ context,
63
+ });
64
+
65
+ if (!createdWithdrawal) {
66
+ throw new Error(
67
+ 'Failed to create consent withdrawal - operation returned null'
68
+ );
69
+ }
70
+
71
+ return validateEntityOutput(
72
+ 'consentWithdrawal',
73
+ createdWithdrawal,
74
+ ctx.options
75
+ );
76
+ },
77
+
78
+ /**
79
+ * Finds all consentWithdrawal records matching specified filters.
80
+ * Returns consentWithdrawals with processed output fields according to the schema configuration.
81
+ *
82
+ * @param subjectId - Optional subject ID to filter consentWithdrawals
83
+ * @param consentId - Optional consent ID to filter consentWithdrawals
84
+ * @param limit - Optional maximum number of records to return
85
+ * @returns Array of consentWithdrawal records matching the criteria
86
+ */
87
+ findConsentWithdrawals: async (
88
+ subjectId?: string,
89
+ consentId?: string,
90
+ limit?: number
91
+ ) => {
92
+ const whereConditions: Where<'consentWithdrawal'> = [];
93
+
94
+ if (subjectId) {
95
+ whereConditions.push({
96
+ field: 'subjectId',
97
+ value: subjectId,
98
+ });
99
+ }
100
+
101
+ if (consentId) {
102
+ whereConditions.push({
103
+ field: 'consentId',
104
+ value: consentId,
105
+ });
106
+ }
107
+
108
+ const consentWithdrawals = await adapter.findMany({
109
+ model: 'consentWithdrawal',
110
+ where: whereConditions,
111
+ sortBy: {
112
+ field: 'createdAt',
113
+ direction: 'desc',
114
+ },
115
+ limit,
116
+ });
117
+
118
+ return consentWithdrawals.map((consentWithdrawal) =>
119
+ validateEntityOutput(
120
+ 'consentWithdrawal',
121
+ consentWithdrawal,
122
+ ctx.options
123
+ )
124
+ );
125
+ },
126
+
127
+ /**
128
+ * Finds a consentWithdrawal record by its unique ID.
129
+ * Returns the consentWithdrawal with processed output fields according to the schema configuration.
130
+ *
131
+ * @param withdrawalId - The unique identifier of the consentWithdrawal record
132
+ * @returns The consentWithdrawal object if found, null otherwise
133
+ */
134
+ findConsentWithdrawalById: async (withdrawalId: string) => {
135
+ const consentWithdrawal = await adapter.findOne({
136
+ model: 'consentWithdrawal',
137
+ where: [
138
+ {
139
+ field: 'id',
140
+ value: withdrawalId,
141
+ },
142
+ ],
143
+ });
144
+ return consentWithdrawal
145
+ ? validateEntityOutput(
146
+ 'consentWithdrawal',
147
+ consentWithdrawal,
148
+ ctx.options
149
+ )
150
+ : null;
151
+ },
152
+
153
+ /**
154
+ * Finds all consentWithdrawal records for a specific subject.
155
+ * Returns consentWithdrawals with processed output fields according to the schema configuration.
156
+ *
157
+ * @param subjectId - The subject ID to find consentWithdrawals for
158
+ * @param limit - Optional maximum number of records to return
159
+ * @returns Array of consentWithdrawal records associated with the subject
160
+ */
161
+ findConsentWithdrawalsBySubjectId: async (
162
+ subjectId: string,
163
+ limit?: number
164
+ ) => {
165
+ const consentWithdrawals = await adapter.findMany({
166
+ model: 'consentWithdrawal',
167
+ where: [
168
+ {
169
+ field: 'subjectId',
170
+ value: subjectId,
171
+ },
172
+ ],
173
+ sortBy: {
174
+ field: 'createdAt',
175
+ direction: 'desc',
176
+ },
177
+ limit,
178
+ });
179
+ return consentWithdrawals.map((consentWithdrawal) =>
180
+ validateEntityOutput(
181
+ 'consentWithdrawal',
182
+ consentWithdrawal,
183
+ ctx.options
184
+ )
185
+ );
186
+ },
187
+
188
+ /**
189
+ * Finds a consentWithdrawal record for a specific consent.
190
+ * Returns the consentWithdrawal with processed output fields according to the schema configuration.
191
+ * This is useful when you need to know if and why a specific consent was withdrawn.
192
+ *
193
+ * @param consentId - The consent ID to find consentWithdrawal for
194
+ * @returns The consentWithdrawal record if found, null otherwise
195
+ */
196
+ findConsentWithdrawalByConsentId: async (consentId: string) => {
197
+ const consentWithdrawal = await adapter.findOne({
198
+ model: 'consentWithdrawal',
199
+ where: [
200
+ {
201
+ field: 'consentId',
202
+ value: consentId,
203
+ },
204
+ ],
205
+ sortBy: {
206
+ field: 'createdAt',
207
+ direction: 'desc',
208
+ },
209
+ });
210
+ return consentWithdrawal
211
+ ? validateEntityOutput(
212
+ 'consentWithdrawal',
213
+ consentWithdrawal,
214
+ ctx.options
215
+ )
216
+ : null;
217
+ },
218
+ };
219
+ }
@@ -0,0 +1,48 @@
1
+ import { z } from 'zod';
2
+
3
+ /**
4
+ * Zod schema for validating consent withdrawal entities.
5
+ *
6
+ * This defines the structure and validation rules for consentWithdrawal records:
7
+ * - Required fields: consentId, subjectId
8
+ * - Optional fields: withdrawalReason, withdrawalMethod, ipAddress, metadata
9
+ * - Default current date/time for creation and update timestamps
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const withdrawalData = {
14
+ * id: 'wdr_w5qufx2a66m7xkn3ty',
15
+ * consentId: 'cns_hadt8w7nngm7xmx2bn',
16
+ * subjectId: 'sub_x1pftyoufsm7xgo1kv',
17
+ * withdrawalReason: 'No longer wish to receive marketing emails',
18
+ * withdrawalMethod: 'subject-initiated',
19
+ * ipAddress: '192.168.1.1'
20
+ * };
21
+ *
22
+ * // Validate and parse the consentWithdrawal data
23
+ * const validWithdrawal = consentWithdrawalSchema.parse(withdrawalData);
24
+ * ```
25
+ */
26
+ export const consentWithdrawalSchema = z.object({
27
+ id: z.string(),
28
+ consentId: z.string(),
29
+ subjectId: z.string(),
30
+ withdrawalReason: z.string().optional(),
31
+ withdrawalMethod: z
32
+ .enum(['subject-initiated', 'automatic-expiry', 'admin', 'api', 'other'])
33
+ .default('subject-initiated'),
34
+ ipAddress: z.string().optional(),
35
+ userAgent: z.string().optional(),
36
+ metadata: z.record(z.unknown()).optional(),
37
+ createdAt: z.date().default(() => new Date()),
38
+ updatedAt: z.date().default(() => new Date()),
39
+ });
40
+
41
+ /**
42
+ * Type definition for Withdrawal
43
+ *
44
+ * This type represents the structure of a consent withdrawal record
45
+ * as defined by the consentWithdrawalSchema. It includes all fields
46
+ * that are part of the consentWithdrawal entity.
47
+ */
48
+ export type Withdrawal = z.infer<typeof consentWithdrawalSchema>;
@@ -0,0 +1,181 @@
1
+ import type { Field } from '~/db/core/fields';
2
+ import type { C15TOptions } from '~/types';
3
+ import { consentWithdrawalSchema } from './schema';
4
+
5
+ /**
6
+ * Generates the database table configuration for the consent withdrawal entity.
7
+ *
8
+ * This function creates a schema definition that includes all standard consentWithdrawal fields
9
+ * and any additional fields from plugins or configuration. The resulting schema is used
10
+ * for database migrations, schema validation, and query building.
11
+ *
12
+ * @param options - C15T configuration options that may contain consentWithdrawal table customizations
13
+ * @param withdrawalFields - Additional fields from plugins to include in the consentWithdrawal table
14
+ * @returns A complete table schema definition with fields, model name, and metadata
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const withdrawalTableSchema = getConsentWithdrawalTable(c15tOptions);
19
+ * // Use the schema for migrations or data access
20
+ * const migrationPlans = generateMigrations(withdrawalTableSchema);
21
+ * ```
22
+ */
23
+ export function getConsentWithdrawalTable(
24
+ options: C15TOptions,
25
+ withdrawalFields?: Record<string, Field>
26
+ ) {
27
+ const consentWithdrawalConfig = options.tables?.consentWithdrawal;
28
+ const consentConfig = options.tables?.consent;
29
+ const subjectConfig = options.tables?.subject;
30
+
31
+ return {
32
+ /**
33
+ * The name of the consentWithdrawal table in the database, configurable through options
34
+ */
35
+ entityName: consentWithdrawalConfig?.entityName || 'consentWithdrawal',
36
+
37
+ /**
38
+ * The ID prefix for the consentWithdrawal table
39
+ * Used to generate unique prefixed IDs for consentWithdrawals
40
+ */
41
+ entityPrefix: consentWithdrawalConfig?.entityPrefix || 'wdr',
42
+
43
+ /**
44
+ * The schema for the consent withdrawal table
45
+ */
46
+ schema: consentWithdrawalSchema,
47
+
48
+ /**
49
+ * Field definitions for the consent withdrawal table
50
+ */
51
+ fields: {
52
+ /**
53
+ * Reference to the consent that was withdrawn
54
+ */
55
+ consentId: {
56
+ type: 'string',
57
+ required: true,
58
+ fieldName: consentWithdrawalConfig?.fields?.consentId || 'consentId',
59
+ references: {
60
+ model: consentConfig?.entityName || 'consent',
61
+ field: 'id',
62
+ },
63
+ },
64
+
65
+ /**
66
+ * Reference to the subject who withdrew consent
67
+ */
68
+ subjectId: {
69
+ type: 'string',
70
+ required: true,
71
+ fieldName: consentWithdrawalConfig?.fields?.subjectId || 'subjectId',
72
+ references: {
73
+ model: subjectConfig?.entityName || 'subject',
74
+ field: 'id',
75
+ },
76
+ },
77
+
78
+ /**
79
+ * Reason provided for withdrawing consent
80
+ */
81
+ withdrawalReason: {
82
+ type: 'string',
83
+ required: false,
84
+ fieldName:
85
+ consentWithdrawalConfig?.fields?.withdrawalReason ||
86
+ 'withdrawalReason',
87
+ },
88
+
89
+ /**
90
+ * Method by which consent was withdrawn
91
+ * Common values: 'subject-initiated', 'automatic-expiry', 'admin'
92
+ */
93
+ withdrawalMethod: {
94
+ type: 'string',
95
+ defaultValue: () => 'subject-initiated',
96
+ required: true,
97
+ fieldName:
98
+ consentWithdrawalConfig?.fields?.withdrawalMethod ||
99
+ 'withdrawalMethod',
100
+ },
101
+
102
+ /**
103
+ * IP address from which the consentWithdrawal was initiated
104
+ */
105
+ ipAddress: {
106
+ type: 'string',
107
+ required: false,
108
+ fieldName: consentWithdrawalConfig?.fields?.ipAddress || 'ipAddress',
109
+ },
110
+
111
+ /**
112
+ * Subject agent (browser/device) from which the consentWithdrawal was initiated
113
+ */
114
+ userAgent: {
115
+ type: 'string',
116
+ required: false,
117
+ fieldName: consentWithdrawalConfig?.fields?.userAgent || 'userAgent',
118
+ },
119
+
120
+ /**
121
+ * Additional metadata about the consentWithdrawal
122
+ */
123
+ metadata: {
124
+ type: 'json',
125
+ required: false,
126
+ fieldName: consentWithdrawalConfig?.fields?.metadata || 'metadata',
127
+ },
128
+
129
+ /**
130
+ * When the consentWithdrawal record was created
131
+ * Automatically set to current time by default
132
+ */
133
+ createdAt: {
134
+ type: 'date',
135
+ defaultValue: () => new Date(),
136
+ required: true,
137
+ fieldName: consentWithdrawalConfig?.fields?.createdAt || 'createdAt',
138
+ },
139
+
140
+ // Include additional fields from plugins
141
+ ...(withdrawalFields || {}),
142
+
143
+ // Include additional fields from configuration
144
+ ...(consentWithdrawalConfig?.additionalFields || {}),
145
+ },
146
+
147
+ /**
148
+ * Add unique constraint to ensure a consent can only be withdrawn once
149
+ * (If this constraint is not desired, it can be disabled in options)
150
+ */
151
+ uniqueConstraints:
152
+ consentWithdrawalConfig?.preventMultipleWithdrawals !== false
153
+ ? [
154
+ {
155
+ name: 'unique_consent_withdrawal',
156
+ fields: ['consentId'],
157
+ },
158
+ ]
159
+ : [],
160
+
161
+ /**
162
+ * Add indexes for better query performance
163
+ */
164
+ indexes: [
165
+ {
166
+ name: 'subject_id_index',
167
+ fields: ['subjectId'],
168
+ },
169
+ {
170
+ name: 'created_at_index',
171
+ fields: ['createdAt'],
172
+ },
173
+ ],
174
+
175
+ /**
176
+ * Execution order during migrations (lower numbers run first)
177
+ * Withdrawal table needs to be created after the consent and subject tables it references
178
+ */
179
+ order: 4,
180
+ };
181
+ }
@@ -0,0 +1,29 @@
1
+ import type { BaseEntityConfig } from '../types';
2
+
3
+ /**
4
+ * Withdrawal entity configuration
5
+ * @default entityName: "consentWithdrawal", entityPrefix: "wdr"
6
+ */
7
+ export interface ConsentWithdrawalEntityConfig extends BaseEntityConfig {
8
+ fields?: Record<string, string> & {
9
+ id?: string;
10
+ consentId?: string;
11
+ revokedAt?: string;
12
+ revocationReason?: string;
13
+ method?: string;
14
+ actor?: string;
15
+ metadata?: string;
16
+ createdAt?: string;
17
+ };
18
+
19
+ /**
20
+ * Prevent multiple consentWithdrawals for the same consent
21
+ *
22
+ * If true, a subject can only have one consentWithdrawal record per consent,
23
+ * preventing multiple revocation records for the same consent.
24
+ * This helps maintain data integrity and clearer consent history.
25
+ *
26
+ * @default false
27
+ */
28
+ preventMultipleWithdrawals?: boolean;
29
+ }
@@ -0,0 +1,196 @@
1
+ import type { C15TOptions } from '~/types';
2
+ import type { PluginSchema } from '../core/types';
3
+ import {
4
+ getAuditLogTable,
5
+ getConsentGeoLocationTable,
6
+ getConsentPolicyTable,
7
+ // getGeoLocationTable,
8
+ getConsentRecordTable,
9
+ getConsentTable,
10
+ getConsentWithdrawalTable,
11
+ getDomainTable,
12
+ getGeoLocationTable,
13
+ getPurposeJunctionTable,
14
+ getPurposeTable,
15
+ getSubjectTable,
16
+ } from './index';
17
+ import type { InferTableShape } from './schemas';
18
+
19
+ /**
20
+ * Retrieves all consent-related database table definitions
21
+ *
22
+ * This function combines the core tables with any additional tables
23
+ * defined by plugins. It handles merging plugin-defined fields with
24
+ * the standard tables and ensures all table definitions are properly
25
+ * structured for use by database adapters.
26
+ *
27
+ * @param options - The c15t configuration options
28
+ * @returns A complete schema mapping containing all table definitions
29
+ *
30
+ * @remarks
31
+ * Each table definition includes both field definitions and the physical
32
+ * entity name used in the database. Plugins can extend core tables by
33
+ * defining additional fields, which will be merged with the standard fields.
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * // Get all tables with default configuration
38
+ * const tables = getConsentTables(options);
39
+ *
40
+ * // Access fields for the consent table
41
+ * const consentFields = tables.consent.fields;
42
+ * ```
43
+ */
44
+ export const getConsentTables = (options: C15TOptions) => {
45
+ const pluginSchema = options.plugins?.reduce((acc, plugin) => {
46
+ const schema = plugin.schema;
47
+ if (!schema) {
48
+ return acc;
49
+ }
50
+ for (const [key, value] of Object.entries(schema)) {
51
+ acc[key] = {
52
+ fields: {
53
+ ...acc[key]?.fields,
54
+ ...value.fields,
55
+ },
56
+ entityName: value.entityName || key,
57
+ };
58
+ }
59
+ return acc;
60
+ }, {} as PluginSchema);
61
+
62
+ const {
63
+ subject,
64
+ consentPurpose,
65
+ consentPolicy,
66
+ domain,
67
+ geoLocation,
68
+ consent,
69
+ consentPurposeJunction,
70
+ record,
71
+ consentGeoLocation,
72
+ consentWithdrawal,
73
+ auditLog,
74
+ ...pluginTables
75
+ } = pluginSchema || {};
76
+
77
+ return {
78
+ subject: getSubjectTable(options, subject?.fields),
79
+ consentPurpose: getPurposeTable(options, consentPurpose?.fields),
80
+ consentPolicy: getConsentPolicyTable(options, consentPolicy?.fields),
81
+ domain: getDomainTable(options, domain?.fields),
82
+ consent: getConsentTable(options, consent?.fields),
83
+ consentPurposeJunction: getPurposeJunctionTable(
84
+ options,
85
+ consentPurposeJunction?.fields
86
+ ),
87
+ consentRecord: getConsentRecordTable(options, record?.fields),
88
+ consentGeoLocation: getConsentGeoLocationTable(
89
+ options,
90
+ consentGeoLocation?.fields
91
+ ),
92
+ consentWithdrawal: getConsentWithdrawalTable(
93
+ options,
94
+ consentWithdrawal?.fields
95
+ ),
96
+ auditLog: getAuditLogTable(options, auditLog?.fields),
97
+ geoLocation: getGeoLocationTable(options, geoLocation?.fields),
98
+ ...pluginTables,
99
+ };
100
+ };
101
+
102
+ /**
103
+ * Type representing the complete database schema for c15t
104
+ *
105
+ * This type captures the full structure of all tables in the database,
106
+ * including core tables and any plugin-defined tables. It's derived from
107
+ * the return type of `getConsentTables()`.
108
+ *
109
+ * @remarks
110
+ * This is a key type for type-safety throughout the codebase, as it
111
+ * ensures that table names and field references are validated at compile time.
112
+ * It's used as a basis for many other type definitions in the database layer.
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * // Type-safe reference to a specific table
117
+ * function processTable<TableName extends keyof C15TDBSchema>(
118
+ * tableName: TableName,
119
+ * data: Record<string, unknown>
120
+ * ) {
121
+ * const tableFields = getConsentTables(options)[tableName].fields;
122
+ * // Process with type safety...
123
+ * }
124
+ * ```
125
+ */
126
+ export type C15TDBSchema = ReturnType<typeof getConsentTables>;
127
+
128
+ /**
129
+ * Type to get all output fields of a table by its name
130
+ * This type extracts only the fields that are included in output operations,
131
+ * automatically excluding fields marked with { returned: false }.
132
+ * It also resolves relationships between tables.
133
+ */
134
+ export type EntityOutputFields<TableName extends keyof C15TDBSchema> =
135
+ InferTableShape<TableName>;
136
+
137
+ /**
138
+ * Type to get all input fields of a table by its name
139
+ * This type extracts only the fields that are allowed for input operations,
140
+ * automatically excluding fields marked with { input: false }.
141
+ */
142
+ export type EntityInputFields<TableName extends keyof C15TDBSchema> = Omit<
143
+ InferTableShape<TableName>,
144
+ 'id' | 'createdAt' | 'updatedAt'
145
+ >;
146
+
147
+ /**
148
+ * Validates output data against table schema using Zod
149
+ *
150
+ * This function validates and transforms output data according to the
151
+ * schema definition for a specific table. It ensures that all values match
152
+ * their expected types and excludes fields marked as not to be returned.
153
+ *
154
+ * @typeParam TableName - The table name from C15TDBSchema
155
+ * @param tableName - The name of the table to validate against
156
+ * @param data - The data to validate
157
+ * @param options - The C15TOptions instance
158
+ * @returns Validated and typed data
159
+ * @throws {Error} If the table is not found or validation fails
160
+ *
161
+ * @remarks
162
+ * This function is particularly useful for validating data received from
163
+ * external sources or database adapters before processing it in application logic.
164
+ *
165
+ * @example
166
+ * ```typescript
167
+ * // Validate data retrieved from an external API
168
+ * try {
169
+ * const validSubjectOutput = validateEntityOutput(
170
+ * 'subject',
171
+ * fetchedSubjectData,
172
+ * options
173
+ * );
174
+ *
175
+ * // validSubjectOutput is now typed as EntityOutputFields<'subject'>
176
+ * displaySubjectProfile(validSubjectOutput);
177
+ * } catch (error) {
178
+ * console.error('Output validation failed:', error.message);
179
+ * }
180
+ * ```
181
+ */
182
+ export function validateEntityOutput<TableName extends keyof C15TDBSchema>(
183
+ tableName: TableName,
184
+ data: Record<string, unknown>,
185
+ options: C15TOptions
186
+ ): EntityOutputFields<TableName> {
187
+ const tables = getConsentTables(options);
188
+ const table = tables[tableName];
189
+
190
+ if (!table) {
191
+ throw new Error(`Table ${tableName} not found`);
192
+ }
193
+
194
+ // Validate and return data using Zod schema
195
+ return table.schema.parse(data) as EntityOutputFields<TableName>;
196
+ }
@@ -0,0 +1,3 @@
1
+ export * from './registry';
2
+ export * from './schema';
3
+ export * from './table';